On Mon, 2009-04-06 at 10:55 +0100, Walter Milner wrote: > I agree - not C++.
I think there is general agreement on that one. > I think it depends whether or not you take the 'objects first' route. If > you do, and you reject C++, you are only left with Java. > > However I think objects-first is not a good idea, and there is a small > amount of evidence to support that, relating to understanding main() and > the dynamics of execution. My concern is that a student cannot write a > method unless they know about primitive types, loops, conditionals and > arrays. And there is an enormous amount of evidence to show that many > students find those ideas very challenging. I have never understood this quasi-religious debate about "objects first", "objects early", "objects late", and in particular the various claims that one is better than the other. The principal driver is not really the material but the trainer/educator and the quality of the support materials. Having tried, and seen other try, traditional bottom-up, top-down, middle-out, etc., etc. all of them work if the curriculum is well structured and the examples and explanations well organized and motivating. I would agree though that writing methods requires a lot of precursor material to make it sensible. > Therefore start with C, using a debugger that allows students to step > through code and see how variable values change. Start with a concrete > understanding, about bits and bytes - abstraction can come later. Look > (briefly) at compiled C to see how it relates to machine code. Use > pointers. Without pointers the idea of references in Java seems > completely mysterious. Use structs. Then it's just a little step to > classes. I don't agree with the deduction/inference. I do not agree that not starting with full object oriented Java or C++ means you have to start with procedural C. Unless you are studying operating system writing, or hardware control / embedded systems, it is hard to find fun motivating examples of code that really work with C. It is just too low level, with too little easily accessible, sophisticated functionality. The problem is that the implementation details of creating interesting applications in standard C get in the way of design issues. One way round this is to have a support library that offers lots of interesting support, but this is then not standard C. I do not agree that abstraction must come later in a constructivist bottom up approach. Whilst students need to have a basis set of types, using bits and bytes is too low level for computer scientists, it is more the electronic engineers and computer architecture people that need this level as a start point. Programming is based on a simple type set of integer, float, character, string (or whatever the representation is in the chosen language) which can be taken as axiomatic. They are types which can represent a bounded set of values -- almost simple set theoretic approach. Then immediately into doing things with them, and building selection, iteration, and functions/procedures. Pointers and references are for a second course in programming. > There is a lot of pressure to use Java because it is 'modern' and you > can get a job with it. But I think employers want developers who > understand properly what they are doing. And this is just a first > language - they should learn others anyway, so C followed by Java seems > a good route. Certainly there is a lot of pressure to use Java, much of it based on hype, fashion and peer pressure. However the fact that it is based on a virtual machine and so works the same on all platforms is a great bonus -- OK let's not get into the details of the problems of portability and the stupidity of the WORA claim, at the level of first programming course these really don't matter. Employers are a strange breed who rarely know what they really want, and rarely get what they actually need. I think one thing we are all going to agree on is the absolutely essential need for students to learn at least three languages of different computational models during their time as students. One of the single biggest problems in the programming shops I have had association with has been "mono culture". There are two aspects to this one is the stupidity of monoculture as a corporate strategy, the more important for this list is that students who have been taught and done all their work in one language are generally very poorly educated and extremely ill prepared for what they will find in the world of work. On another list I am on there is a current debate (amongst people just interviewing looking to employ) about the dearth of quality programmers just now (Java, C++, C and C#) and how dreadful all of them who know only one language really are. -- Russel. ============================================================ Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.win...@ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: rus...@russel.org.uk London SW11 1EN, UK w: http://www.russel.org.uk/
Description: This is a digitally signed message part