--- Harish Narayanan harish@gamebox.net wrote:
Not to stir up controversy, but I quite disagree with the popular opinion here that C++ is a horrible language for introductory computer science. "Struggling with syntax" is a trivial, non-objective issue, and
True - to a very small number of people who have the maturity, intellectual sophistication (and maybe experience) to disentangle the syntax from the wider canvas of problem solving strategies. You are lucky to fall into this minority ....
can be raised about any programming environment. I might just as well as say, for example, that "keeping track of all those parentheses is hard"
Of course not - please try using the Dr.Scheme interactive environment together with the book `How to Design Programs'. There is enough evidence to prove that the best way to introduce programming is to start off in an `assignment-free' `functional' way laying emphasis on stuff like recursion, higher order functions, closures etc and later on introducing state and `mutation' as advanced techniques.
when it comes to lambda calculus. I think the bigger problem is the clear lack of distinction between concepts or algorithms (or pseudo code) and actual implementation, even amongst teachers (at least the ones who taught me).
Very true.
Clearly define a conceptual solution to a problem (which is what the syllabus should probably really be about), and most somewhat-well-designed languages will allow for relatively painless implementation.
The language does have a role to play in how well (and how easily) you can implement things ... can you think of teaching the design of a backtracking Prolog-like engine or a `metacircular' evaluator to beginning students in C++? (the classic CS textbook, `Structure and Interpretation of Computer Programs' discusses stuff like this - as part of a common introductory course in computer programming).
I don't, philosophically or implementation-difficulty-wise, see any difference between a Python (for example) program and a modern C++ program (properly utilizing STL and what not). Really, you can get just as much done in as few lines and it's just as easy to read. You can just as easily abstract system specific details and focus on the conceptual problem solution.
But as a bonus, if you want, you also get to get your hands dirty with really low level system specific stuff, which most of the other alternatives proposed clearly dissuade.
The modern approach to teaching CS is that we begin with not any particular `algorithm' or implementation details in mind - but with the common strategies used for tackling the complexitites involved in large scale systems design. A language like Scheme, as presented in SICP, is ideal for this. We then move forward to lower levels, ultimately understanding the design of the electronics circuitry on which our code runs and the subtle interface between hardware and software as presented so beautifully by Patterson and Hennessy in their classic book on Computer Organization. At this level, we will have to throw away Python/Scheme etc and look at C/assembly.
I, and many people I know, sometimes like to tinker with things beyond these sand boxed environments.
Nothing prevents a Python/Scheme hacker from learning C/assembly - I find all of them highly enjoyable, each from it's on perspective.
Harish
Fsf-friends mailing list Fsf-friends@mm.gnu.org.in http://mm.gnu.org.in/mailman/listinfo/fsf-friends
================================== Computer Science is no more about Computers than astronomy is about telescopes. Edsger Dijkstra.
http://pramode.net ==================================
____________________________________________________ Send a rakhi to your brother, buy gifts and win attractive prizes. Log on to http://in.promos.yahoo.com/rakhi/index.html