Re: what should be in a computer science degree?



Mark Tarver <dr.mtarver@xxxxxxxxxxxxxx> writes:

On 21 Jun, 09:09, Tim X <t...@xxxxxxxxxxxxxxx> wrote:
Mark Tarver <dr.mtar...@xxxxxxxxxxxxxx> writes:
On 21 Jun, 03:40, Jon Harrop <j...@xxxxxxxxxxxxxxxxx> wrote:
Mark Tarver wrote:
Numerical Methods
Artificial Intelligence
Machine Learning
Cryptography
Parallel Processing
Expert Systems
Multi Agent Systems
Bioinformatics
Robotics
Vision
Graphics

Hardware
GPUs
Static type checking, verification and theorem proving
GUI programming
Games programming
Data structures
Algorithms
Concurrency
Ergonomics
Business

What's your opinion?

Should non-CS degrees contain more CS? For example, should computational
scientists be taught something about data structures and algorithms?

--
Dr Jon D Harrop, Flying Frog Consultancy
The OCaml Journalhttp://www.ffconsultancy.com/products/ocaml_journal/?usenet

I think that anybody doing a science should probably have some
foundation in programming because computeracy is becoming as important
as numeracy.

I thought about the Data Structures and Algorithms idea. Something
like it has been a traditional staple of many CS degrees.

I think the problem is that algorithms are in a sense what CS is
largely about and there are literally zillions of them. So a course
devoted specifically to algorithms
really doesn't fly unless you focus on 'algorithms for' - in which
case the course is about a specific area of CS.

I think I'd have to disagree on your point regarding algorithms. Writing good
algorithms and using appropriate data abstraction are possibly the two key
concepts in programming and fundamental to much of what is done under the label
of computing science. More importantly, many of the finer aspects of algorithms
are not necessarily intuitive. Take a look at some of the algorithms in books
by Knuth, sedgwick, Wirth et. al. - there is lots of meat in these books that
require considerable effort to digest and really appreciate. Many programmers
would not 'discover' these techniques if left to their own devices - they need
to be exposed/taught. Even after 20 years, I will still go back to some of my
texts from these courses for inspiration when working on a difficult problem or
when I need to find a more optimum solution. There is certainly enough content
in this area to fill a semester with content that will provide an important
base for later study or real-world work.

Data abstraction is another area which could easily fill a single semester.
Look at books like SICP - a large part of the central theme of that book
concerns the importance of deriving the appropriate level of abstraction in
order to obtain an elegant, efficient and maintainable solution. Again, there
is a fair amount of content which is somewhat subtle, but takes considerable
work to fully grasp and be able to apply.

An important aspect of a comp. sci. degree is to expose the student to the more
subtle aspects of the discipline that wouldn't be easily discovered without
guidance. The study of algorithms is less about specific algorithms to solve
specific problems, but instead about the issues to consider when designing an
algorithm and various techniques which have been extensively analysed and are
well understood that make up valuable techniques/tools that the programmer can
apply.

Tim

--
tcross (at) rapttech dot com dot au- Hide quoted text -

- Show quoted text -

Well, there is a theory of algorithms that belongs to discrete maths
which deals with theories of computability and complexity.
Then there are the algorithms themselves which are scattered over a
vast corpus of areas of human endeavour. Lastly there is the
question of coding the algorithms into hard code.

The first belongs to discrete maths, the last belongs to teaching
programming languages and the middle one belongs to whatever subject
the algorithm is designed to advance. What is left?

What criterion can be used to distinguish an algorithm as fundamental
in a way that would justify data structures and algorithms as a
meaningful stand-alone course. What would be in it in concrete terms?


I obviously don't get where your coming from as I don't see things as being so
clearly delineated as you seem to. I also find it a little hard to quantify
precisely why I think a course on algorithms and data abstraction is important,
partially because I've never considered it as not being important and partially
because I can still remember how much I learnt from such a course and that much
of what I learned was not self evident initially (i.e. I doubt I would have
made the same discoveries or obtained the same level of understanding if I
hadn't done a course) and feel that I'm not that different from others who
would enrol in such a degree. . At the same time, I feel you could also make
similar claims concerning courses you would include, such as computability and
Cobb's relational algebra - these could (and sometimes are) covered in discrete
math courses. On some levels, many of these divisions are arbitrary and you
will often find overlap because things just don't fit into neat little boxes.

I guess at some levels, a specific course on algorithms and data abstraction
provides the bridge between the highly theoretical (normally covered in
discrete maths) and the actual coding (possibly covered in courses on
programming [1]. In many respects, a course on algorithms is about how to
design efficient, elegant and robust algorithms. Specific examples in general
areas or of solutions that are particularly elegant or efficient are used, but
as examples rather than just rote learning. such a course is the bit that falls
between the theoretical and concrete coding.

As to specific content - well, I think thats pretty easy because its been done
time and time again. There are hundreds of books out there that deal only with
algorithms and there not purely mathematical analysis or specific to a
particular area or even specific to coding in aparticular language. The index
of any such text would likely give a good outline of what would be covered in
such a course.

to my way of thinking, the fact there are conferences, special interest groups
and journals that deal specifically with algorithms indicates that it is a
fairly well defined specialty area within comp. sci, even if I don't have the
eloquence or intelligence to clearly articulate the reasons. I wish I had my
course notes so that I could go back and look at exactly what the content was
as the one thing I do remember is that it was a course I found intresting,
enlightening and far more beneficial than other courses, such as Databases and
relational algebra, which I always found simple, self evident and uninteresting
(despite the fact it has been a large part of what I have done in my career).

Tim

[1] It is possible some of the difference here is more about differences in
definition. for example, when I did my Comp. Sci. degree, we didn't have any
courses in programming per se. There was a 1 semester course in Pascal
programming at the beginning of the degree, which also covered other basic
concepts, such as what was a computer, the history of computing, networks,
compilers etc - all quite broad and shallow). After that time, nearly all of us
stopped using pascal and started using whatever language we liked - for me it
was C. Programming was not considered particularly interesting - it was just
the tool used to do the more interesting stuff and it was the responsability of
the student to learn how to use their preferred tool adequately.



--
tcross (at) rapttech dot com dot au
.



Relevant Pages

  • Re: Proposition for Nick (open): Why so little parallelism?
    ... You will see the 10 perceived "REQUIRED" readings in parallel computing ... programming models, language and operating system issues and a wide ... as well as case studies of distributed memory architectures. ... G.1.0 General- parallel algorithms, ...
    (comp.arch)
  • Re: Algorithm book recommendation?
    ... For certain algorithms, having to do with parsing, see my book Build ... But I also suggest you mosey on over to the math and logic/philosophy ... which will help you with the more advanced books. ... This style of education is completely inadequate for programming, ...
    (comp.programming)
  • Re: [9fans] current state of thread programming
    ... fascicle 0 (new addition to The Art of Computer Programming, ... implementation of basic algorithms. ... computing science, what would be the next achievement in our field ... candidate for computing science's Nobel prize! ...
    (comp.os.plan9)
  • Re: How to solve for smallest and largest int?
    ... generate a simple algorithm has no business trying to learn Ada. ... then recommended Basic or C as a first language. ... lot of bad programming practices using Basic. ... Algorithms interact with data structures to produce programs. ...
    (comp.programming)
  • Re: Sin & Cos speed worries
    ... execution time of the algorithms. ... Unfortunetly some of the algorithms that my group has developed are ... in "Programming Pearls" (or in "More Programming ... dividing by a constant inside a loop, ...
    (sci.math.num-analysis)