

Bjarne Stroustrup discusses the education of programmers - comatose_kid
http://www.ddj.com/cpp/207000124;jsessionid=S0OJYXWMQ3FSQQSNDLOSKH0CJUNN2JVN?_requestid=185517

======
logjam
"The idea is to give the students a broad view of computer science during the
first two years ("making them ready for their first internship or project")
and then using the next two years to go into depth in some selected areas.
During the first two years, the students get a fairly classical CS program
with a slightly higher component of software development projects than is
common. They have courses in hardware and software (using C++), there is some
discrete math, algorithms and data structures, (operating and network)
systems, programming languages, and a "programming studio" exposing them to
group projects and some project management."

And bang, just like that, we'll have raised a whole 'nother generation of
Java/IT "programmers".

Java and C/C++ are horrible languages with which to teach computer _science_.
"Programmers" more and more are becoming technical fast-food-workers. Trying
to reason using horrible, imperative bloatware like C++/Java moves
"programming" more and more away from even an engineering discipline.

~~~
mixmax
I have heard the argument about particularly java being a horrible language
for teaching CS, and that it gives you terrible habits. I've heard it both
here and other places - so it's most probably right.

Not being a seasoned programmer I don't quite understand why. Would it be
possible for someone to explain the reasoning behind this?

~~~
PieSquared
At least one reason is that it hides too much from you.

I started out in Java. It really got me into programming - I could make all
these pretty little windows and graphics and do everything else quickly and
easily. But, as I later found out, at the expense of that ease came my
knowledge.

Example: The ArrayList class. It's a dynamic array. The LinkedList class. It's
a linked list. They're fundamentally different. But in Java, they look and act
pretty much the same, and they're already available in the standard library.
The learning programmer doesn't need to know how they work or anything.

Same thing with memory. In Java, you get no feel for what memory is being
used, or how it's being managed. In C, you're the master (and the slave), and
you yourself have to manage and take care of memory and pointers. It tells you
much more about how computers actually WORK when you're programming in C.

In summary, Java just gives you too much. It hides you from the raw details.
This is great for a production purpose language - but for a teaching language,
what could POSSIBLY be worse, when the intent is to reveal and NOT hide all
the small details?

~~~
mixmax
Thanks for the reply

Sound like the reason you state is basically Joel Spolsky's Law of leaky
abstractions.
[http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...](http://www.joelonsoftware.com/articles/LeakyAbstractions.html)

I started programming in PHP, and can relate to the experiences you've had
with java. It's great for actually getting stuff done right out of the box,
but I suspect a lot of stuff is being hidden from me. Since you seem to have
gone through this process, in your experience, does this give problems later
on in a production setting?

