On Tue, 2010-12-14 at 12:29 +0100, Fabrizio Giudici wrote: > On 12/13/2010 07:09 PM, Vince O'Sullivan wrote: > > On Dec 13, 1:22 pm, CKoerner<[email protected]> wrote: > >> Java is a great language, but I wonder if the the next generation of > >> programmers would be better served with formal training in Javascript > >> rather than Java. > > I would say both. Formally trained programmers should be exposed to > > several languages, maybe more.
One of the biggest problems of far too many computer science/computing courses is that they try and do all their teaching with one language. Being forcibly exposed to more than one language in the first year, or better the first term, is crucially important to the attitude of students concerning programming language. For 25+ years now I have been a strong advocate of starting with a dynamic language (Scheme, Miranda (now Haskell), Groovy, Python) followed rapidly by a compiled language (C++, D, Java) followed by another language from the dynamic group followed by another language form the static group. At the end of this one of C or C++ must have been covered. In the second half of this students must cover assembly language programming as well. > Programmers would be better trained if the first language they're taught > is a traditional that compiles into native code, such as C. You know You are joking, aren't you? Students should know C or C++ before they graduate, but it is not a good first language in general. It is important to focus first on algorithm and realization of algorithm using a programming language. Dynamic languages are best for this, hence my pushing of Python and Groovy, as a start. Once people have confidence in developing algorithm as solution to problem and mapping that to a realization in code, then it is time to introduce the infrastructure (compilers, linkers, memory models) and optimizations issues such as Big-O, Big-Theta, etc. dynamic vs. static, etc. > how, in production, I consider pre-history languages that compile into > native code, still they are the best thing to start learning about > compilers, optimizations, processor registers, etc... Simply because > they are one level of complexity less than bytecode-based languages such > as Java or C#. Then you move on. I frankly fear that the tendency on > focusing too much, in a first time, on more modern platforms will lead > to people not understanding what's happening behind the scenes. > Abstracting is good, but you need to be able to dive down in details > when you need. These are all important issues that too many teaching institutions have lost or forgotten. Sweeping generalization, but: too many tertiary education institutions are filled with people who cannot program or are interested only in functional programming. Very few of them know how to write a compiler, or even how to write assembly language code. You are right about "operational semantics" so we agree that far too many current courses are in general failing their students by given that just the surface and not given them the full model to understand how the JVM or CLR work. -- Russel. ============================================================================= Dr Russel Winder t: +44 20 7585 2200 voip: sip:[email protected] 41 Buckmaster Road m: +44 7770 465 077 xmpp: [email protected] London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
signature.asc
Description: This is a digitally signed message part
