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

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to