Beta

Slashdot: News for Nerds

×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Professors Slam Java As "Damaging" To Students

kdawson posted more than 6 years ago | from the we-had-to-use-the-letter-o dept.

Education 1267

jfmiller call to our attention two professors emeritus of computer science at New York University who have penned an article titled Computer Science Education: Where Are the Software Engineers of Tomorrow? in which they berate their university, and others, for not teaching solid languages like C, C++, Lisp, and ADA. The submitter wonders whether any CS students or professors would care to respond. Quoting the article: "The resulting set of skills [from today's educational practices] is insufficient for today's software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals... Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging."

cancel ×

1267 comments

tasty (5, Funny)

User 956 (568564) | more than 6 years ago | (#21951006)

Professors Slam Java As "Damaging" To Students

I dunno about you, but java was nothing but helpful to me as a student. the drinkable kind, at least.

University should be about people (2, Funny)

Anonymous Coward | more than 6 years ago | (#21951018)

I'm concerned about the narrowm view of the world IT people and engineers
have these days. I think the problem starts at college -
There's a culture that somehow science is more rational and usefull
then the humanitities. Lecturers encourage students to joke about arts
students, and humilaite them whenever possible. This encourages
eliteism, and I for one am sick of it.

Let's tell it like it is. 'science' is just as much about opinion as
the humanities. Research simply follows the fad of the day. Take
dieticians for example. These men and woman believe that just because
they have degree in medical science that they are all knowing. Why,
what they recommend one day may kill you the next! (see the DDT story
for more information.) Science is 95% opinion then facts, lets face
it. What about astrology, the most rediculious of the sciences! But I
degress...

Another example is music. We know what sounds good. Everyone aggreed
that Valves for instance sound great. But knowitall engineers use
trensastors with inferious sound quality just to save a few bucks.
They argue with numbers. Hey, I don't want to do maths just to listen
to music. I know what I like. You cannot apply objective reasoning to
a subject which is intristically subjective. But try telling those
recent grads with their useless piece of paper that and they go all
mightier--then-thou.

The problem with you technical guys are that you are all so eliteist.
Whilst you want to trun collage into a trade school with yore narrow
minded views that collage should be a job training centre, humanities
are focused on making you a well rounded person who is auctually
interesting to be with, not a boring focuesed geek. Really, it makes
me so mad when people say "oh, he's doing a humanities degree, that's
easy". I have to read *3* *books* *a* *week* on average. Not picture
books either I assue you. It is a lot of work, but the upshot is
improved grammer and spelling skills that are lacking in the
technical. As for those that say "you will be working at mcdonalds" ,
I'm going on to so a PhD in socialolgy where I'll be line for tenure
where I have a much more rewarding job then beeing a science freak or
an engineer. Anyways, all I have to do to be a engineer wold be to get
my MSCE and how hard couyld that be? techincal stuff is simply
whatever fad the market thinks is hot at the moment, but all great
things were done by humanities.

You technical types are far to narrow minded and cynsical. You should
learn to enjoy life.

Peace be to god, he transcends all.

Re:University should be about people (0)

Anonymous Coward | more than 6 years ago | (#21951362)

you're the reason the humanities have fallen into disrepute. you, and people like you.

software engineering != computer science (5, Insightful)

gangien (151940) | more than 6 years ago | (#21951026)

"A Real Programmer Can Write in Any Language (C, Java, Lisp, Ada)"

that's true, but again soft engineering/programming is a subset of computer science (maybe, i suppose you could argue they aren't)

"Computer science is no more about computers than astronomy is about telescopes."
- Edsger Dijkstra

and the real reason their skills are insufficient (0)

Anonymous Coward | more than 6 years ago | (#21951066)

... is perhaps because they are spending too much time on software engineering concepts and programming in specific languages such as Java instead of doing actual computer science?

Pointers, References and Performance (0, Troll)

Anonymous Coward | more than 6 years ago | (#21951174)

Java is all about pointers actually. Everything that is not an atomic type (int/long) is actually a pointer. They even call that a reference! Hah, people go use C++ for a while.

And because it's like that, you have heap allocations for every non-atomic data type, which is really the opposite of performance. Need a simple int[2] for the pipe(2) syscall? (let's just assume it, even if Java does not have)?

try {
        int fds[2] = new int[2];
        pipe(fd); /* still check return value */
} catch (memoryAllocationErrorOrSo) { ...
}

Why does this need to be so complicated, where all C needs is:

int fds[2];
pipe(fds); /* still check return value */

And what about if you wanted to create an object on the stack? Too bad Java can't do that.

And then there is this garbage collector that professors swarm about. Does it handle circles?

public class Foo {
        Foo other;
        public void f(void) {
                other = new Foo();
                other.other = this;
        }
        public static void main(String args[]) {
                {
                        Foo bar = new Foo();
                } /* what about the memory now - was the GC smart enough? */
        }
}

Re:Pointers, References and Performance (4, Informative)

Mr2001 (90979) | more than 6 years ago | (#21951360)

And because it's like that, you have heap allocations for every non-atomic data type, which is really the opposite of performance. Need a simple int[2] for the pipe(2) syscall? (let's just assume it, even if Java does not have)?

try {
                int fds[2] = new int[2];
                pipe(fd); /* still check return value */
} catch (memoryAllocationErrorOrSo) { ...
}

Why does this need to be so complicated [...]
It doesn't. You've made it more complicated than it needs to be, by putting in an exception handler. What are you going to do in the unlikely event that there is an exception, anyway - fix it somehow? Free up another 8 bytes of memory to make room? Just remove that try statement, and let the exception be caught by your top level handler.

And then there is this garbage collector that professors swarm about. Does it handle circles?
Yes, it does. It's not a reference counter, it's a garbage collector. It collects garbage, i.e. any heap object that can't be reached by following a chain of references from a root reference (like a local variable, a static field, or an instance field of any non-garbage object). A modern GC won't be fooled by two garbage objects holding references to each other.

Re:software engineering != computer science (5, Insightful)

hedleyroos (817147) | more than 6 years ago | (#21951094)

Dijkstra did say that, and if the software world consisted of only theory then we could all get 90% for our efforts and be happy with that.

In practice systems have to work 100%, and when your graph search algorithm (by Dijkstra naturally) segfaults due to dereferencing a wrong pointer then computer science is very much about computers.

I'm just worried that too few students these days know assembly and C, which leaves us in a predicament when the current generation of kernel devs retire.

Re:software engineering != computer science (3, Insightful)

Jackmn (895532) | more than 6 years ago | (#21951178)

and if the software world consisted of only theory then we could all get 90% for our efforts and be happy with that.
University is not occupational training.

In practice systems have to work 100%, and when your graph search algorithm (by Dijkstra naturally) segfaults due to dereferencing a wrong pointer then computer science is very much about computers.
Computer science is not computer programming.

Re:software engineering != computer science (5, Insightful)

epine (68316) | more than 6 years ago | (#21951384)

Anyone with a true gift to become a kernel dev has probably engaged in flame wars with his/her professors already, regardless of what she/he teaches.

Pointers aren't rocket science. If you never perform an operation where you haven't first met the operation's preconditions, you never get a pointer error.

If you aren't rigorously checking preconditions on *every* operation you perform, you're not going to cut it as a kernel dev anyway. Pointers are the least of your problems. Race conditions can become exceptionally hard to reason about. The prudent kernel dev architects the system such that this doesn't transpire. That requires a whole different galaxy of aptitude beyond not leaking pointers.

When I first learned C in the K&R era, I thought those greybeards were pretty clever. Then I came across strcpy() and I wondered what they were smoking that I wasn't sharing. I thought to myself, their must be some higher level idiom that protects against buffer overflow, because no sane architect would implement such a dangerous function otherwise. Man, was I ever naive.

More likely, too many of them had learned to program on paper teletypes, and just couldn't bring themselves to face having to type unsafe_strcpy() when they had reason to know it would work safely and efficiently.

The C language deserves a great deal of shame in this matter of giving many beginning programmers the false impression that any function call should dispense with formal preconditions.

Interestingly, if you sit down to implement an STL template algorithm manipulating iterators, it proves pretty much impossible to avoid careful consideration of range and validity.

OTOH, C++ makes it charmingly easy for an object copy routine, such as operator=(self& dst, const self& src) to make a complete hash of managed resources if you fail to affirm dst != src.

There are plenty of amateur mathematicians who can manipulate complex formulas in amazing ways. The difference with a professional mathematician is that the necessary conditions for each transformation is clearly spelled out.

A = B ==> A/C = B/C iff C != 0
A > B ==> C*A > C*B iff C > 0

Infinite series must converge, etc.

I'm not even getting into defining A,B,C as fields, groups, rings, monoids, etc. for maximum generality.

Yet the average programmer feels sullied to exercise the same intellectual caution manipulating pointers. I've never understood that sentiment. My attitude is this: if that's how you feel, get your lazy coding ass out of my interrupt handler; go code a dialog box in some Visual Basic application that won't work right no matter what you do.

Why did the software industry play out this way? Other professions have much harsher standards. Primarily because software was in an exponential expansion phase, any work was regarded as better than no work (perhaps falsely), and industry couldn't afford to reduce the talent pool by demanding actual talent.

Now we've allowed many people to enter the profession without comprehending the rigors of preconditions. It's as if we had taught a generation of lawyers how to practice law, but omitted liability. Oops. What to do about it? Invent Java, and tell all these programmers it wasn't their fault in the first place.

So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect.

Re:software engineering != computer science (4, Insightful)

bigstrat2003 (1058574) | more than 6 years ago | (#21951230)

True. Besides, the idea that Java is damaging to students is pure bullshit anyway. If the students are learning the Java way to do things, and nothing else, then they have horrible professors. I learned CS from good profs (well... one good and one bad), and surprise, even though I got my start in Java, I am perfectly capable of doing things in other ways.

When I took data structures, and we used C++, I didn't have mental convulsions because Java had wrecked up my thinking so much (although I did have mental convulsions cause C++ is incredibly messy to read at a glance), I learned different ways of doing things. So, maybe these professors should look at whoever's teaching these kids so sloppily, not the language.

Re:software engineering != computer science (5, Insightful)

timmarhy (659436) | more than 6 years ago | (#21951260)

unfortunately he doesn't go far enough into the core of the problem, which is today's universities are mass producing what employers want, rather then the thinkers of tomorrow.

employers want nothing more then easily replacable drones who come with an easily definable skill set which they can replace when a new buzzword comes along. this is NOT what universities should be pandering to.

commercial app dev != internal business app dev (2, Insightful)

remitaylor (884490) | more than 6 years ago | (#21951238)

software engineering != computer science

[...] soft engineering/programming is a subset of computer science

true! i would take that even a step further ... it depends on the target consumer of your applications, as well.

mr. awesome computer science man, who can program in everything, might not be what a business wants for someone who's good at whipping up quick, user-friendly (potentially resource-hungry and not secure enough to face the public internet or for commercial distribution) applications to help streamline business processes.

and, obviously, mr. business programmer, who's good at getting the employees what they need, probably isn't the guy you want to program some super computer ... math ... stuff. or even a decent performing application that could be sold and distributed, commercially.

i'm sure Java's *perfect* for some people to learn. C or even Assembly are *perfect* for other people. C# / Python / Ruby might be perfect for someone else. [some other languages here].

it depends on the person and their career / interests / environment.

You have to start somewhere... (4, Interesting)

KillerCow (213458) | more than 6 years ago | (#21951028)

Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.


Yeah, I just read a press release from the FAA blasting driver training courses. Apparently, flight students who just got their drivers licenses were not able to navigate in the air, execute banks, take-off, or land properly.

Students have to start somewhere. It's easier to start with simple stuff than to try to cram their heads full of everything all at once.

Re:You have to start somewhere... (1)

TeknoDragon (17295) | more than 6 years ago | (#21951042)

Java is neither the simplest programming language nor more valuable to an education than straight C.

Also, I'm a Java professional.

Re:You have to start somewhere... (1)

noamsml (868075) | more than 6 years ago | (#21951080)

My suggestion: start off with Python/Ruby, move on to C and, when you mastered it, add some C++ in.

Re:You have to start somewhere... (-1, Troll)

Anonymous Coward | more than 6 years ago | (#21951132)

Oh come on!!!!

Development is mentioned and the Python and/or Ruby crowd jump up tp promote glorified scripting languages....

Re:You have to start somewhere... (1)

superash (1045796) | more than 6 years ago | (#21951134)

I would suggest C -> C++ -> Python -> Ruby.... in that order.

Re:You have to start somewhere... (4, Interesting)

AuMatar (183847) | more than 6 years ago | (#21951322)

C->C++->assembly (any ISA)->some functional language->some other language (Java, python, ruby, etc).

Assembly is necessary, to understand how a computer really works. Functional languages are good, just to know a completely different style. Some other language for breadth. Then the student can realise that everythin after asm was a waste of time, and return to C.

Re:You have to start somewhere... (4, Interesting)

vux984 (928602) | more than 6 years ago | (#21951122)

C is a lousy beginners language.

I started programming in Pascal, and then moved to C/C++. Structured programming, language syntax, variable typing, functions, parameters, recursion, etc I could ALL learn in Pascal.

When I came through Java was still pretty new, but I did take a java course, and found it reminded me a more of Pascal than C/C++; I'd say its a good starter language.

Also you can easily write command line apps in java, so i don't know why they blamed gui dependancy on java.

And as for 'systems programming' well DUH. Your first language is where you learn the basics of programming, before you start taking systems programming you should also have a lower level course ideally in something like assembly language (even if its just on emulated hardware) or C.

Re:You have to start somewhere... (4, Interesting)

Osty (16825) | more than 6 years ago | (#21951234)

When I came through Java was still pretty new, but I did take a java course, and found it reminded me a more of Pascal than C/C++; I'd say its a good starter language.

Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own. That was one of the main arguments against Java in the paper, and it was a problem even a decade ago when my school was transitioning beginners classes to Java (I was ahead of the change by a semester or two in each class, so I got to start from Scheme, learn data structures in C++, learn AI in Lisp, etc). Yes, in the "real world" you don't want everybody reimplimenting their own linked list or hashtable. However a beginner must learn the concepts behind those data structures in order to advance, and Java just makes it too easy to use the standard set of classes.

That's not to say that Java is all bad. With a good teacher and a good curriculum, it's absolutely possible to teach core concepts in Java (or any language, really). You have to be merciless about banning standard library usage such as collections, and teach your students the theory behind those data structures. People understand theory best when they can actually see it in practice, so you have to have your students implement their own linked lists, doubly linked lists, trees, etc. With Java it's an uphill battle getting people to ignore the standard libraries for "academic" purposes, but it's possible to do.

Personally, I'm thankful that my first real programming language (not counting BASIC in its various forms) was Scheme, and that I was exposed to a number of languages through my college career (the afore-mentioned Scheme, C/C++, and Lisp, as well as ML, Java, and MIPS assembly) even though my current day job consists of C# and SQL. Because of my background, I can easily pick up pretty much any language (and have done so several times), which gives me an advantage over those "programmers" churned out of today's Java-mill universities.

Re:You have to start somewhere... (1)

Rakshasa Taisab (244699) | more than 6 years ago | (#21951252)

Java might be a good starter language... But he's writing about languages taught at introductory Computer Science classes.

The first is something you learn when you're a kid and want the computer to do cool stuff. When you want to become a real programmer, or a computer scientist, you don't do 'good starter languages' no more than you do 'good starter math'. Learning calculus sucks.

Re:You have to start somewhere... (2, Informative)

goose-incarnated (1145029) | more than 6 years ago | (#21951320)

C is a lousy beginners language.

That depends on what you are trying to teach.

I started programming in Pascal, and then moved to C/C++. Structured programming, language syntax, variable typing, functions, parameters, recursion, etc I could ALL learn in Pascal.

Once again, depends on what you are trying to teach/learn. Pascal (which I like, btw) teaches different things than one would learn in C. In pascal you are learning a programming language; very often in C you are using it for a specific platform/architecture, and hence get to use and understand things like signals, volatile variables, memory-mapped IO, etc ...

When I came through Java was still pretty new, but I did take a java course, and found it reminded me a more of Pascal than C/C++; I'd say its a good starter language.

For what, exactly? Java (and C#, etc) bring nothing new to the party; everything they offer has already been offered (sometimes decades ago) by different programming languages. The only reason to use them is peer-pressure, in which case the only place to teach them is in vocational colleges, not universities.

Also you can easily write command line apps in java, so i don't know why they blamed gui dependancy on java. And as for 'systems programming' well DUH. Your first language is where you learn the basics of programming, before you start taking systems programming you should also have a lower level course ideally in something like assembly language (even if its just on emulated hardware) or C.
Like I said above, it all depends on what you are trying to teach; for example, it is possible to teach OO using plain old C, but it is rather painful! In much the same way, the only time you would want to use Java is when your problem maps nicely to an OO architecture (and most problems do not!).

Start with (2, Interesting)

www.sorehands.com (142825) | more than 6 years ago | (#21951334)

They should start with assembly language and circuits. One should have understanding of the low level.

Though you may not use assembly language much, it helps to better understand what is going on under the hood.

Re:You have to start somewhere... (1)

prefect42 (141309) | more than 6 years ago | (#21951392)

Helped by the fact that pascal was designed as a teaching language. The thing that annoys me with teaching Java as a first language is that you have to start with teaching classes first (yuk), or by simply saying "all this public class stuff at the top you can just ignore for now". But if you teach it properly then you can work with Java as a first language. I don't think it's the right choice, but it's not the end of the world.

It's not like teaching kids C makes them understand low level issues better...

Re:You have to start somewhere... (2, Insightful)

doktor-hladnjak (650513) | more than 6 years ago | (#21951160)

It really depends what you're trying to teach when. A few years ago I taught a data structures course [decidedlyodd.com] (second out of a three course lower division sequence) in Java and thought it worked fairly well. About a year before that, I was a teaching assistant for a data structures class taught in C++ [uni-sb.de] .

Language choice affected the content of both courses quite a bit. In the Java course, students spent more time understanding how specific data structures worked and working on more interesting programming assignments. Students got to a working knowledge of Java fairly quickly after having only a semester of Scheme under their belt. In the C++ course (which followed a semester taught in ML), the students as a whole spent a lot more time learning about memory management along with the ins and outs of C++. Instruction on data structures was much more limited. Both sets of skills are valuable for practicing engineers, but I think it's fair to say that both the staff (myself and the teaching assistants) and the students enjoyed the class taught in Java more than the class taught in C++, probably because the interesting parts of such a class have to do with efficient data structures more than fighting with pointers and copy constructors.

Following the Java course, those students normally took an introductory hardware class. That course was taught in both assembly language, C and Verilog where learning pointers fit in better with the other material. Following the C++ course, I don't think those students saw much more C or C++ programming for a while (possibly not until upper division topic-specific course work) and instead went off to complete 4 more semesters of more theoretical Computer Science.

Re:You have to start somewhere... (0)

Anonymous Coward | more than 6 years ago | (#21951262)

If your a professor teaching ML please warn your students ahead of time not to put it on their resume or QFE or any other such nonsense they will most assuredly never use in the real world.

Re:You have to start somewhere... (0)

Anonymous Coward | more than 6 years ago | (#21951072)

Provided the simple stuff carries over in a straight forward manner. Unlearning is harder than learning.

Re:You have to start somewhere... (4, Insightful)

jandersen (462034) | more than 6 years ago | (#21951144)

Don't be silly. Flying an aircraft requires a whole new set of skills, that are outside the normal experience of most people. Driving is not just flying with a number of 'security enhancements', whereas programming in Java is like programming in C, but without the need to learn about pointers or good programming discipline. So if C is like a manual car, Java is an automatic.

It is reasonable to expect that a CS student has both the ability and the interest it takes to learn all the details of programming well in C.

Re:You have to start somewhere... (1)

pegdhcp (1158827) | more than 6 years ago | (#21951236)

Being easier to start with, does not mean it is good to do so.

As a programmer, I believe that (without religious undertones) any decent programming language is as good as any other decent language, provided that you do not need something very obscure. However, there is no guarantee that, in RL(tm) you will have access to easier to live conditions. If students learn only easier tools, GUI embedded compilers -that links each and every library automatically- and 4GL look-a-like's and such, they will find themselves in deep shit when start working. I have programmers who cannot port a program's SQL portions from MSSQL to PostgreSQL, because our local schools here in Turkey are teaching only Pascal as introduction and then VB based scripting languages. Thay do not learn Assembler, C, COBOL, FORTRAN etc. If you have a, deeply buried in time, COBOL file and only a C compiler available, should this be a problem? No, but lots of programmers around me will just fill in their pants with the most recent meal they had, when facing such problems...

Students have things those are not very available in later stages of life, a fresh brain with lots of learning capacity, and some really free time. They should spent this time in preparation for the difficulties waiting them, which means learning Assembler, C, Ada, LISP and FORTRAN even if they would not need to see a single line of it after graduation. Because such languages are foundations of computer programming art.

If we can go back to the original post, Java is an important language, albeit I do not like and/or use it. However it is not one of the basic languages. On the other hand, I believe students must take some courses teaching languages like Java, but only after learning languages of historical importance.

As a final note; My school is very well known in our Country, even accepted best in certain circles, and I cannot find one acceptable candidate from there to fill my vacancies, just because they stopped teaching "difficult" languages.

Re:You have to start somewhere... (2, Interesting)

goose-incarnated (1145029) | more than 6 years ago | (#21951378)

Students have to start somewhere. It's easier to start with simple stuff than to try to cram their heads full of everything all at once.

Trouble is, Java is not "the simple stuff", Pascal is "the simple stuff". Java has inconsistent syntax, has only one model for all programs (OO), etc. It all depends on what you are trying to teach, and if you are trying to teach:
1. Computer architecture, OS designs, Hardware, etc
then use C (or a subset of C++).

2. Computer Science, theory of automata, TM's, state-machines, etc
then use Scheme.

3. Programming, data-structures, algorithms, etc
then use Pascal.

4. Java, C++, $LANGUAGE_OF_CHOICE
then use Java, C++, $LANGUAGE_OF_CHOICE

There is no place for Java in tuition unless it is taught as a vocational skill. Universities never were about teaching vocational skills.

CS Newbie here. (0)

Anonymous Coward | more than 6 years ago | (#21951038)

After passing CS101 (which was just a Java course at my school) with a decent mark, I took an embedded systems course that required FPGA programs written in C++. Great, because Java syntax is just slightly different from C++, except.. WTF is a pointer? I got "pwned."

Re:CS Newbie here. (1)

DA_MAN_DA_MYTH (182037) | more than 6 years ago | (#21951164)

If they just taught the Java language in your introductory class and not the concepts behind it, then your school / professor sucks. You can buy a book to learn a language. (Well you can buy a book to learn the concepts too, but the good ones are hard to find.)

I'm just remembering my old CS classes, and god damn I take java.lang and garbage collecting for granted these days. (char[] or char* for Strings my lord, it's like a lightsaber an elegant weapon, for a more civilized time!) .

Re:CS Newbie here. (1)

HonIsCool (720634) | more than 6 years ago | (#21951222)

I loved C++ when I first saw it; now I'm convinced that it's completely evil... Unless someone's a specification masochist (AKA guru), the odds are pretty damn low that they can actually write a valid C++ program. For example, is it immediately obvious what is wrong with the code snippet below? This is from a genuine project, although the code has been trimmed for clarity; obviously there were more side-effects inside the loop originally.

typedef std::map<int,int> MyMap_t;

MyMap_t mymap;
mymap[0] = 4;
mymap[1] = 3;
mymap[2] = 2;
mymap[3] = 1;
mymap[4] = 0;

for (MyMap_t::iterator i = mymap.begin(); i != mymap.end(); ++i) {
mymap.erase(i);
}
And let's not even get started on exception safety... ;_; Get the books "Exceptional C++", "More exceptional C++" by Herb Sutter and start quaking in your boots :/

Re:CS Newbie here. (1)

aivarsk (725586) | more than 6 years ago | (#21951352)

Of course, erase() invalidates iterator. That's one of the first things you read in documentation http://www.sgi.com/tech/stl/Map.html [sgi.com] If you don't, it's your own fault. In C++ you can write exception-safe easier than in Java, because of RAII (http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) concept.

1 language is damaging. (5, Interesting)

toolslive (953869) | more than 6 years ago | (#21951048)

If they teach you only one programming language, yes, they damage you.

In the course of my CS education (early 90s), they started with Pascal when they explained algorithmical basics.
Later courses were in C for OS and networking, while other courses used about everything from PROLOG to ADA.

You learn that some paradigms map to certain types of problems better (or worse) than others. So don't open sockets in
Prolog (I have seen'em do it man) , and don't do AI in C.

a quote: "if the only tool you have is a hammer, every problem looks like a nail".

Re:1 language is damaging. (2, Insightful)

synx (29979) | more than 6 years ago | (#21951172)

Yes, early 90s - but have you checked out universities lately? We're talking cradle to grave Java. Intro to dev in Java, mid level courses in Java, Sr courses in Java. We're graduating people who don't know what pointers are!

COME ON!

And don't tell me Java doesn't have pointers - what do you think references are? Glorified pointers with auto-null checks.

One problem I've seen is Java Developer Syndrome (JDS) - think devs who don't know the difference between Java API names and datastructures that are used to implement them.

Think of someone who when you ask them what a hashtable is, they say 'oh, that's the synchronized version of HashMap'. Tell me that is a quality developer you want to work with. Go ahead, TELL ME.

Re:1 language is damaging. (0)

Anonymous Coward | more than 6 years ago | (#21951338)

so how is that the problem of the java language? you have lousy and lazy people everywhere, and the more software there is, the more people will recycle, reuse and regurgitate, if it looks like it'll solve their problem faster than rolling their own.

the problem is lazy professors and lazy students --and whether the market pays to such laziness. after all, since you're so cool and smug -- have you rolled your own compiler recently?

Where Are the Software Engineers of Tomorrow? (1)

teaDrunk (849107) | more than 6 years ago | (#21951058)

EAST. Way to the East ! (or to the west, over the edge of the map)

just kidding. Anyway, overhyped, But Yes they need to start with C.

Re:Where Are the Software Engineers of Tomorrow? (1)

famebait (450028) | more than 6 years ago | (#21951190)

I may sound like an old fart here, but I say teach them assembler. Just a little, mind you, and teach more high-level stuff alongside it, but have them hand in a small exercise or two that requires them to understand the basics, and gives then a mental image of what their code compiles to.

As for TFA, it sounds like the course in question was simply bad, and would have been no matter what language was used. It's like blaming the car model used in drivers' training for the bad results.

I do agree that if nothing pokes deeper than java, then the course is lacking. But the fix should be is a proper appreciation of deeper technical understanding as part of the curriculum, right along with many other goals, like information modelling and good engineering practices. That can be realized in many ways, but which language is used to teach the higher-level concepts is _not_ key.

Re:Where Are the Software Engineers of Tomorrow? (1)

laejoh (648921) | more than 6 years ago | (#21951400)

over the edge of the map

But, but, but, there be anthropomorphic dragons! [xkcd.com]

FF, did you notice the special number of this cartoon?

About the Authors (5, Informative)

etymxris (121288) | more than 6 years ago | (#21951068)

Gee, wonder why they're praising Ada so much.

Robert B.K. Dewar, Ph.D., is president of AdaCore and a professor emeritus of computer science at New York University. He has been involved in the design and implementation of Ada since 1980 as a distinguished reviewer, a member of the Ada Rapporteur group, and the chief architect of Gnu Ada Translator.

Edmond Schonberg, Ph.D., is vice-president of AdaCore and a professor emeritus of computer science at New York University. He has been involved in the implementation of Ada since 1981. With Robert Dewar and other collaborators, he created the first validated implementation of Ada83, the first prototype compiler for Ada9X, and the first full implementation of Ada2005.
Maybe Ada is helpful for learning concurrent programming and safe typing, but I'll wait for the opinion of a slightly less partial party.

Re:About the Authors (3, Insightful)

superash (1045796) | more than 6 years ago | (#21951274)

TFA says:

A Real Programmer Can Write in Any Language (C, Java, Lisp, Ada)

Why C matters...
Why C++ matters...
Why lisp matters...
Why Java matters...
Why Ada matters...

So, I don't think the article is biased.

Re:About the Authors (5, Informative)

Col Bat Guano (633857) | more than 6 years ago | (#21951294)

I'm a slightly less partial party. I've taught Ada to first year students, and our school replaced Ada with Java. Some observations are...

      Students found Ada a relatively simple language to start with (if you choose an appropriate subset)
      Java can have more overhead for a beginning student
      Lecturers are often tempted to push a lot of "stuff" in intro subjects
      Java GUI motivates some students to get more involved
      Many of my students regretted that Ada would no longer be taught in first year (having quite enjoyed it)

No matter what you start with, teaching students to be better programmers takes more than just a language. Each language allows you to teach a specific set of skills, and Ada is not bad for teaching some important SE skills (IMHO).

I think pointers are overrated as a first year concept, and can wait for later years.

Damaging to students maybe, but not workers (1)

shawnmchorse (442605) | more than 6 years ago | (#21951076)

I've spent the past five years in the workplace programming primarily in Java, along with some PHP and the always ubiquitous SQL. In close to a decade now of workplace programming, I have yet to actually have a need for any systems level programming of any kind. I used to be extremely fluent in C and even dabbled with assembly language for fun, but those are skills I just don't need at work generally speaking. I'm much more likely to need to remember esoteric Linux system administration details.

Re:Damaging to students maybe, but not workers (1, Insightful)

sharp-bang (311928) | more than 6 years ago | (#21951116)

In close to a decade now of workplace programming, I have yet to actually have a need for any systems level programming of any kind.

I wonder whether the engineers supporting your production hardware would agree with you. ;-)

Not that being conversant in systems is important in every practical application, but, speaking as a systems engineer, I do prefer to work with developers that understand it.

Re:Damaging to students maybe, but not workers (1)

synx (29979) | more than 6 years ago | (#21951180)

Agreed - you cannot develop expertly without top to bottom knowledge.

Sure you can make something happen, but when we're talking about making systems _sing_.

Then again, I guess you probably make good bank writing inspiring accounting systems. Grats.

Re:Damaging to students maybe, but not workers (2, Insightful)

doktor-hladnjak (650513) | more than 6 years ago | (#21951188)

... and I've been writing almost entirely in C/C++ without any SQL since finishing undergrad over 5 years ago (grad school followed by a desktop application development job). The bottom line is that students should be learning a broad range of skills because it's hard to say where any of them are going to end up right out of school or especially within a few years of finishing school.

Re:Damaging to students maybe, but not workers (1)

someone1234 (830754) | more than 6 years ago | (#21951242)

That's why they mentioned plumbers in TFA :)
Easily replaceable plumbers.

Re:Damaging to students maybe, but not workers (1)

AuMatar (183847) | more than 6 years ago | (#21951356)

Funny- nearly 7 years here, and I've never done anything but C and C++, with a few days worth of perl a year. The industry is far wider than Java, the reason you haven't seen those jobs is because you haven't wanted to.

As for me, if you mentioned Java in the interview I'd charge 50% more. Its hazard pay.

Programming languages are tools, not religions. (4, Interesting)

delt0r (999393) | more than 6 years ago | (#21951084)

There going to plenty of flames on this topic.

As someone who programs mainly in java, I have to say they have a point. Surely a degree in CS should get someone familiar with all forms of higher order programing (both OO and functional). They should also have a reasonably solid understanding of basic hardware architecture and how that affects programs.

Unfortunately this does not seem to be the case at least in NZ. Some don't even know about basic complexity ideas and often have little to zero mathematics under there belt.

I did not do CS but physics. I was required to do Assembly,basic,C,matlab,R,Lisp,Java,C++,Haskell and a bunch of others I don't care to mention (Like PLC's and FPGA stuff).

I've noticed that... (2, Insightful)

Facegarden (967477) | more than 6 years ago | (#21951086)

I've noticed that... I'm not a CS or a CE, i'm an ME, and i build robots. I'm great at the mechanical side but i always talk to Computer Engineers or CS majors, trying to see what they can do for me, and all i've surmised is that they just aren't taught anything useful! Sure, there's probably all kinds of great theory and whatnot, and that's all very important, but at the end they should have a class that teaches them the useful stuff! I say that because the guys i've spoken to were never taught how to make ANY kind of GUI, and have no idea how to send data out a serial port (something often neglected but very useful in robotics). In fact, even the head of the Computer Engineering dept at my school (Santa Clara University, supposedly 14th in the country for engineering) didn't know how to talk to a serial port. And not teaching how to make a GUI? I mean, i know you can figure it out, but then, what is the point of school? I know not all software goes to consumers, but if it does it had better have a GUI, so why not teach at least the basics!? And hardware output - either from the serial port or programming USB peripherals - is incredibly useful, yet seems to be completely left out of today's undergrad programs, and that seems insane! What has been your experience with this stuff? -Taylor

Re:I've noticed that... (0)

Anonymous Coward | more than 6 years ago | (#21951214)

I say that because the guys i've spoken to were never taught how to make ANY kind of GUI, and have no idea how to send data out a serial port
Well... How to do either of these depends on the operating system. A competent programmer can just look at his OS's documentation (or even google it) and know what he needs pretty quickly. Although GUI can be another issue, since it does require some level of look-and-feel aesthetics that isn't realy programming per se.

If anything, Java helps the GUI aspect, because there is a standard way to do graphics right in the spec for the runtime libraries. My university had us coding little things in Swing freshman year.

But... TFA is pretty right. I personally came into college knowing C already. But a lot of my classmates... Weren't so keen on pointers. This is very important if you want to do anything meaningful in systems work, or have any idea how the machine itself is working. Just as a practical example, even coding in Java one it's nice to be aware how much indirection you're using and how that will effect performance. Or allocating arrays rather than lists so that you get better caching. As for other languages... I personally always thought Lisp was pretty cool, so I did a lot of outside research on that one.

Re:I've noticed that... (5, Insightful)

Anonymous Coward | more than 6 years ago | (#21951300)

I'll answer as a computer scientist.

I view school as bootstrapping a person to learn how to learn, and for teaching them the things that are timeless. The only reason that a popular programming language like Java is used in the first place is because something has to be used, so it may as well be that. However, many schools offer Scheme, ML, or Common Lisp as the programming language of choice when the job market is comparatively low. This is because it's seen to help the learning process. The goal isn't a marketable skill, but a vehicle to teach the timeless things like algorithms, data structures, and all those courses that have he word "theory" tacked on to the end of the titles.

If you want someone to be a lackey and build you a GUI, you'd be better off looking for someone who has an ITT certificate. If you're looking for something more on the math side of computing (again, algorithms, analysis), then you talk to a computer scientist.

Re:I've noticed that... (4, Insightful)

phugoid (1176331) | more than 6 years ago | (#21951312)

Are you suggesting that the CS curriculum should be designed around solving your little practical problems?

I'm a Mechanical Engineer as well. Are you suggesting that _we_ should have spent our degrees studying look-up charts for HVAC ducts, or how to make nice Excel graphs? (calculus, mechanics, thermodynamics, heat transfer, ring any bells?)

Re:I've noticed that... (1)

2Bits (167227) | more than 6 years ago | (#21951394)

Oh wow, I don't know where to start now ...

Blasting all CE/CS graduates for not knowing shit because of one supposedly real anecdotal example? And as if making GUI and sending data down a serial port is what computer science all about?

Give me a break. I can give you an example too. My ex-neighbor was an ME (with a master degree beside that), who knows less about his car mechanics than I do (and I'm a CS graduate), and in fact, can't even fix his house's water sink when water is leaking. I have helped fix minor problems in his car more times than he can remember. Computer science is a vast domain, not everyone knows everything. I'm pretty good in data structures and algorithms, I can come up with a good solution to most complex problems, but I'm a lousy GUI programmer too. All those listeners, decorators, etc, drive me nut. What does that speak about me? Nothing, just that GUI is not my cup of tea, I have more interest in other aspects, and most of my works are concentrated on those, that's all.

And I bet you don't know everything about mechanics in other domains either. But I won't go to say that all MEs have learned nothing useful.

Re:I've noticed that... (2, Interesting)

AuMatar (183847) | more than 6 years ago | (#21951404)

Because how to talk to a serial port is OS dependent, and can be found out by less than 5 minutes with google for your OS of choice. Same with USB. GUIs- the vast majority of programs don't have one. Even those that do, the GUI is a small part of it. Almost every college has optional classes in it, but its a specialty field that isn't that interesting to people. If it interests you take it, but it isn't really important.

As for the theory you callously disregaurd- that theory is what allows us to dream up ideas like GUIs, OSes, etc and implement them. Without the theory, all a CS major would be qualified for is to make a new webpage that does 90% the same thing as another webpage. Thats why theory is stressed, and they can learn individual tasks like IO reading on the job as needed.

Abstraction is OK (1, Flamebait)

vegardh (831486) | more than 6 years ago | (#21951088)

"had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all" Good, not bad, imho.

They don't say "Java is bad" (2, Informative)

koinu (472851) | more than 6 years ago | (#21951090)

The title is bad. Read the text and you will notice that they claim that "Teaching Java, as the only language, is damaging." and that might be true. I have the opinion for years now and I teach Java to students during this semester. There is far more than only Java and you can only get better the more languages you know.

By the way, C (yes, the one without "++") is still my favorite language.

Biased? (5, Informative)

silverhalide (584408) | more than 6 years ago | (#21951092)

This might be obvious, but take a close look at the authors of the article:

Dr. Robert B.K. Dewar, AdaCore Inc. (President)
Dr. Edmond Schonberg, AdaCore Inc. (Vice President).

The article by some weird coincidence slams Java and praises Ada.

Salt, please...

PS, Ada is mainly alive in the Military/Aerospace industries where projects can last 20+ years.

Re:Biased? (1)

Darth_Ramirez (1098767) | more than 6 years ago | (#21951306)

Indeed, they're not just some "neutral observers". However, they're making a number of points. And languages like Simula and ADA have had quite an influence in design of programming languages. One of the points they make refers to this quick-fix of your post :)

PS, Ada is mainly alive in the Military/Aerospace industries where projects must last 20+ years.

Oh noes! Java is not C! (1, Interesting)

ElMiguel (117685) | more than 6 years ago | (#21951100)

Well, of course learning Java will not help you with languages intended to be "high level assembler" like C, just like learning C will not help you with languages intended to be compiled to bytecode and executed under a VM like Java or C#. How that makes C the "solid language" and Java the usurper, I don't know. And here's a radical concept: what about learning both types of languages? You know, the purpose of education being to provide a wide-ranging vision and not just with what your teacher happens to like.

I haven't read TFA (this being Slashdot and all), but if those professors actually mention Ada as a better language for teaching than Java, I wouldn't trust anything else they say, because they obviously stopped caring about the evolution of Computer Science at some point in the 80s.

Re:Oh noes! Java is not C! (3, Insightful)

wbren (682133) | more than 6 years ago | (#21951376)

And here's a radical concept: what about learning both types of languages? You know, the purpose of education being to provide a wide-ranging vision and not just with what your teacher happens to like.
That's exactly what the article is saying, and clearly you are missing the point. They aren't really complaining about students that learning enough languages, but rather that students aren't being shown the bigger picture. A student can be taught how to use a linked list class in Java (or C++ for that matter), but that's not all you should know. You should also know the advantages of a linked list over, say, a dynamically-expanding array, as well as in which situation they should be used (or avoided). You should implement a linked list yourself at least once so you understand how it's done. That's just a really small example, but everything from speed optimizations (optimal buffer sizes with respect to processor caches, etc.) to enterprise-level application scalability relies on a deep knowledge of system architecture as well as language syntax.

Many universities are simply training highly replaceable professionals, which is a big reason why outsourcing is such a problem. When two people--one in the USA, one in India, for example--have the same skills, the cheaper will be chosen (and rightly so, sorry). The point of the article is that many universities are simply training programming rather than teaching computer scientists. It's an important distinction, which some people just don't understand.

I Agree (0)

Anonymous Coward | more than 6 years ago | (#21951102)

Java programmers know one thing: Type code in a box and press the play button.

Re:I Agree (1)

jim.hansson (1181963) | more than 6 years ago | (#21951176)

it's not only java code that should be executed in a sandbox, java ONLY programmer's should also be executed in a sandbox :-)

Different goals (3, Insightful)

Secret Rabbit (914973) | more than 6 years ago | (#21951124)

In a College for a 2-yr Programming Diploma, this would be fine because the goal of such a program is just writing some business application or some such. Nothing that requires any real competence.

On the other hand, Universities have a much different end goal. They want to teach such that completing there program means that the student can go onto a Masters program, etc. Obviously, Java won't get students there without a massive amount of pain if they go on to further study.

Well, at least that how it was, and how it should be. Currently, Universities are edging toward the College level. What this has produced is a massive gap in knowledge/skill of where the student is expected to be and where they actually are upon entering a Graduate program.

Unfortunately, this isn't just in CS. More and more I see Mathematics and Physics programs degrading as well. From what I've seen, this is due to Administration applying... pressure for high grades, etc. No grades, no funding. The cycle continues.

Though, I must point out that there are some Departments that are making an attempt at fighting back. Small in number they may be, there is still hope for a return to actual academics. Though, we'll see how that plays out. You never know, I wouldn't put it beyond a spiteful Administration to turn a Department into offering just service courses.

This liberal arts major agrees (0)

Anonymous Coward | more than 6 years ago | (#21951128)

As an English major who now works in CS (laff it up, chuckles), I completely agree. My college experience, with just a CS *minor*, started me in C, moved to C++, branched into different assembly types, went to MATLAB, on to some theoretical garbage that's not an actual, usable language (can't remember the name), and then, finally, java.

Java is useful, but.... God. If I were a Java-bred programmer when I was asked to learn Perl, Coldfusion, and ASP at my first coding job... I would have been screwed.

Java brings out the best and Worst in you (2, Interesting)

freedom_india (780002) | more than 6 years ago | (#21951150)

For the record, the same professors said the same thing when C++ was in vogue. They also said the same thing when C was popular.
To take apart their argument by logic:
1. Java is an abstraction a VM over the hardware. People who study comp sci, today are of three kinds:
a) Those who want to be a programmer and then a Project Mgr.
b) Those who want to maintain hardware and/or design new ones. iPod maybe.
c) Those want to manage systems (20% hardware: 80% software).

For the first kind, Java is a better choice because: It does not force you to dig down to machine-code which is unnecessary today. Much like car driving in 1920s and 1990s. It teaches you the best of programming by forcing you to think in terms of objects and how to act upon them in real-world. If you mess up, you don't overwrite the root disk thus causing innumerous references to the time-worn joke about shooting in one's foot.
It also teaches you GUI writing is tougher by way of its MVC programming. At this time, programmers can be split into real men or MSFT weenies: real men would go to Java in Server-world. Weenies would love GUI and goto VB.

It also teaches you the worst in programming: Forcing you to think only in OO way.

The second kinds is better off learning C or even Assembly.

The third kind is tricky: There are lots of management tools nowadays. Some of them written in Java. if they want to write their plugins easily, then Java is the way to go.

2) Java is one more step in evolution which normally the professors hate because it moves them away from the machine. But mankind has more important things to do (watching LOST and Sopranos) than twiddling with RPG.

3) Blaming Java alone for problems is like blaming the Sea for causing Katrinas.

Lastly if anyone should be blamed for warping the minds of youngsters permanently, it should MSFT with its Visual Basic system.

Re:Java brings out the best and Worst in you (1)

tolomea (1026104) | more than 6 years ago | (#21951250)

Java is one more step in evolution which normally the professors hate because it moves them away from the machine.
In the quote in the summary they mention LISP which is so far abstracted from the hardware that it makes Java look like a form of assembly.

Safety and Security (0)

sharp-bang (311928) | more than 6 years ago | (#21951154)

"he resulting set of skills [from today's educational practices] is insufficient for today's software industry (in particular for safety and security purposes)

Seconded. Speaking professionally, the number of programmers I trust to write a secure/stable application is vastly smaller than the number I would trust to whip up a typical business app, and a profound lack of appreciation for the relevant system details is usually the reason why. But it's a big leap to blame that on Java - the more general academic trend of dumbing down curricula (at least in the US) is more suspect.

Pascal was the first language in my day (1)

putaro (235078) | more than 6 years ago | (#21951158)

I went to UCSD back in the mid 80's. Our intro CS class back then was Pascal (UCSD P-System on IBM PC's baby!). As I recall, Pascal pointers are about midway between Java object references and C pointers. You can't just slam values into them but you can do pointer arithmetic and wind up accessing weird places. I remember lots of students having problems with pointers. I had a lot of experience writing BASIC code and also assembler (6502 & PDP-11). Thanks to my assembler experience pointers were not a problem for me but recursion looked like voodoo and I was not comfortable with it. The next programming class, though, was PDP-11 assembler. If you survived that you were good to go.

Those were the last classes the CS department offered that focused on learning a programming language. The Math department offered a C course that I took which helped a lot. As part of our Data Structures class we were supposed to pick up C++ and object-oriented programming. I still hate C++ thanks to Stroustrup's buggy cfront C++->C compiler.

I don't think there's anything wrong with Java as a first language. You can come up with pros and cons for just about any language as a first language. It sounds like the real problem is a lack of breadth. Java plus some assembler and then maybe some LISP or Prolog and you should be ready for just about anything.

These guys seem to think that ADA is the answer though you'll note that they also own an ADA related company. At UCSD back then we had a comparative languages class that covered a bunch of different languages including ADA. The prof was a big ADA fan and had in fact developed an ADA compiler. Unfortunately no one was allowed to use it since it had a habit of crashing the VAX (why I don't know - it was a rumor floating around). So, for us to do ADA we were supposed to write ADA and then follow a set of rules for transforming it, by hand, into Pascal. Most of us just wound up writing some Pascal that worked and then back translating it into ADA.

Variety (4, Interesting)

andy753421 (850820) | more than 6 years ago | (#21951162)

Where I go to school [rose-hulman.edu] , just this year we switched from teaching the introductory classes in Java to a combination of Python, then C, then Java. I think that this is much better than using any particular one of those languages the whole time. It gives the student experience with more different concepts and from that I think they can begin to see how everything works together. Also, starting with something simpler than Java/Eclipse seems to make it a lot easier the first few weeks of the course.

One thing I have noticed though, is a complete lack of security related training. Something about calling eval() on every input just to parse integers makes me cringe. I guess the idea is that worrying to much standard practices keeps people from thinking creatively or something. Unfortunately, it also seems like a good way to get into a lot of bad habits.

Right on! (0, Flamebait)

conares (1045290) | more than 6 years ago | (#21951168)

OK....really, anyone with a real intrest will figure this stuff out in one month collage/university right? I mean teachers, professors and the like are no diffrent than the ppl working at McDonalds, its just a job - the less work the better. I knew C, python, php and that stuff before going to "collage"..I quit after 1 year of watching half of the class strugling with even the simplest hello-world shit out there. I just couldnt belive it was going to be so beginner friendly. Fuck I dont care if I'm working in burger king when I'm 60, but I'm not going to sit there and do extra hello-world shit just cause I'm 50 assignments ahead of the rest....fuck you collage idiots!

Re:Right on! (4, Insightful)

putaro (235078) | more than 6 years ago | (#21951198)

.fuck you collage idiots
Well, the problem is that you want to a collage. That's a bunch of stuff pasted together by art majors. If you had gone to a college, or perhaps a university, you would have learned stuff beyond programming such as data structures, compiler theory, etc. Programming, especially in any particular language, is a skill, like plumbing or electrical wiring. Knowing the theory behind it is education. I was a decent programmer when I started college. All the theory and stuff that I learned in college didn't seem that useful at the time but as I've gone along in my career it's definitely the difference between being a code monkey and being someone who can design systems.

Re:Right on! (1)

conares (1045290) | more than 6 years ago | (#21951272)

lol yea sorry meant college. anyways from the class I was in, not one person from the class is working in anything IT related and quite a few never graduated. And jesus christ if I was forced to use anything those idiots made......

Re:Right on! (0)

Anonymous Coward | more than 6 years ago | (#21951340)

Can I have fries with that?

If you want to start from the top (1)

CookieOfFortune (955407) | more than 6 years ago | (#21951182)

Start with a scripting language, show the students that hello world can be as easy as print "Hello world!". From there, teach them syntax, functions, and OOP. Once these concepts are understood, moving to another high level language is just adjusting the syntax a little and working around the environment. Or their curriculum could start from the bottom as my university does. We started with transistors and logic, then moved to a simple type of assembly, then C, and finally Java in the 3rd or 4th course in the series.

Why not D? (3, Interesting)

Twinbee (767046) | more than 6 years ago | (#21951186)

I would suggest being taught a programming language such as D [digitalmars.com] , at least in addition. Although the transition from C/C++ to D can be painful, D contains many similarities with C/C++ such as speed, except it's much tidier and has many of the advantages of Java syntax whilst maintaining the power of C/C++ if necessary (optional pointers, optional manual garbage collection etc.).

Sooner or later, languages are going to evolve, and surely it's only a matter of time before something D-like is going to be used anyway. Might as well make the switch sooner rather than later.

It's not the language, but how it's taught (1)

Max Threshold (540114) | more than 6 years ago | (#21951212)

I've known two people who took 100-level "Introduction to Programming" type classes using Java. Both of them ended up terribly confused and I had to tutor them. But the problem wasn't Java; it was the fact that their professors approached "an introduction to programming using Java" as "an introduction to Java programming." I believe Java can be a great first programming language, but only in the capable hands of somebody without a doctorate.

Why is "Computer Science" Staffing S/W companies? (5, Interesting)

wrook (134116) | more than 6 years ago | (#21951228)

OK, this hit one of my hot buttons. Before I continue, though, let me preface my statement by saying that I don't disagree with the article (which is right on the button). But I disagree with the way the summary characterizes the situation.

I totally agree that universities shouldn't be teaching Java exclusively. They need to teach the basics of modular, functional, declarative and oo languages. Why? Certainly *not* to fill "software engineering" positions!!! A university's role is to do research, not to act as some technical college. OK, I can see having a programming course aimed at creating programmers for industry if it's going to pay the bills at the uni. But *don't* make that your "Computer Science" course!!

Computer Science should be science (well, math anyway). Universities should be getting the 5 or 10 graduates they need that will move on to academia (or industry research) later in their careers. Because right now, *nobody* is getting taught Computer Science! Lately I've been reading papers posted on http://lambda-the-ultimate.org/ [lambda-the-ultimate.org] Regularly I have to go back to the basics and learn extremely fundamental theory because nobody *ever* taught them to me in the first place. Half the time I think, "OMG, I never even knew this existed -- and it was done in 1969!!????"

More and more lately, I've been wanting to phone my University up and ask for my tuition back.

If you want to learn how to program in a professional setting, there's nothing better to do than just start writing code. Get your chops up. Then find some big free software projects and start fixing bugs. Learn how to use the tools (configuration management, etc). Learn how to interact with the other programmers. That's all you really need (well, that and a quick automata and grammar course so that I don't have to look at yet another context free grammar being "parsed" by regular expressions).

But right now, where do you go if you want to actually learn theory? I guess the library... And getting back to the point, this is essentially what the paper is suggesting. Students need to learn all these things because they are relevant to the field. A university supports industry by doing basic research. If you don't understand the concepts that they point out, you just can't do that. Paraphrasing from the article, having a university course that's meant to pad out a student's resume is shoddy indeed.

Re:Why is "Computer Science" Staffing S/W companie (1)

putaro (235078) | more than 6 years ago | (#21951326)

I agree and disagree with you. There's nothing wrong with CS being the path to becoming a "software engineer". Dumbing it down so that graduates didn't learn any CS is wrong though. If you take Mechanical Engineering or Electrical Engineering in college you don't expect to learn how to use AutoCAD or Verilog. You expect to learn the theory so that you can design and build safe, efficient, economical widgets.

It might make sense to have a CS and a Software Engineering major that are akin to each other the same way the Physics and Mechanical Engineering relate. Taking the theory out of Software Engineering is just wrong, though (I think we agree there). I don't see anything wrong with having a Software Engineering major offered at the university level, as universities should be educating people as well as doing research.

Java for Dummies (5, Interesting)

DCFC (933633) | more than 6 years ago | (#21951248)

I am a headhunter for high end roles at investment banks, and we are close to classifying CompSci as a "non degree", along with media studies, languages, etc.

Java is fine for teaching design patterns, and classical algorithms like Quicksort, or binary search.
But you can't do operating systems, and the success of Java in isolating you from any notion of the hardware is actually the problem.
We have already blacklisted courses like the one at Kings College, because they teach operating systems in Java.
Yes, really.
Their reason apparently is that it is "easier".
I have zero interest in kids who have studied "easy" subjects.

The world is a bigger, more competitive place, how many jobs do you think there are for people who have an easy time at college ?

Java is part of the dumbing down of CS.
A computer "expert" is not someone who knows template metaprogramming in C++, or compiler archaeology in BCPL, or the vagaries of the Windows scheduler.
It is someone who understands computers at multiple levels, allowing them to choose which one illuminates the problem at hand.
To be wise in computers you choose whether to think of something as a block of bytes, quadwords, a bitmap, a picture, or a buffer overflow pretending to be porn. If also have the option of understanding flash vs static RAM, virtual memory, or networked storage, all the better. I doubt if even 1% of CS grads could write code to turn this BMP into a JPG, or even explain the ideas behind this. In my experience, 50% could not work out how to develop a data structure for a bitmap that used palettes.
I have interviewed CS grads with apparently good grades who could not explain any data structure beyond arrays.

Any CS grad who sends us their CV with bullshit like "computers and society" or "web design" has their CV consigned to trash with no further reading.
A CS should be able to write a web server, not be an arts graduate who didn't get laid.

C++ makes you think at multiple levels, unlike Java, you simply cannot avoid thinking about your system from patterns to bytes. This may be good or bad for productivity, and I'm sure we risk a flame war here.
But I am entirely convinced you need to hack your way through a "real" system.

How can someone understand the Linux kernel without C & C++ ?
Is someone really fit to be called a computer scientist if like >50% of the Computer "Scientists" we interview for very highly paid jobs, show actual fear of working at that level.
They have the same "way above my head" attitude that a mediocre biologist might have to applying quantum theory to skin disease.

Partly, as in the Kings College debacle it is lazy mediocre lecturers, but also CompSci grads frankly are not that smart, so they need their hands held.
Although the seats get filled, they quality is in monotonic decline.

"Sure I know C!" (5, Insightful)

Durandal64 (658649) | more than 6 years ago | (#21951278)

I'm kind of a proponent of having a student's evolution mirror the industry's, to an extent. Start them with C and then gradually introduce problems that were more and more difficult to solve in C. That way, when you show them C++ or Java, they can appreciate why these languages were needed and what classes of problems they're appropriate for and more importantly, what they're not appropriate for. But to really appreciate these things, you have to have students implement their own little OO runtime in C or whatever other procedural language. You can bet that after that, by the time you show them a true OO language, they'll know plenty about OOP, and things will just come more naturally.

These students are being trained as engineers. They shouldn't be afraid of a little grease.

Java? SML/NJ! (0)

Anonymous Coward | more than 6 years ago | (#21951286)

Java? I would've killed to have Java as the first language I was taught in university; we started with SML/NJ (Standard ML of New Jersey, a functional programming language - and not even a good one. Languages like Haskell and Curry are OK, but ML is the Pascal of the functional programming language world.)

Fortunately for me, I already knew how to program; for others who didn't, it was a total waste.

2 professors, 1 cup. (2, Interesting)

forgotten_my_nick (802929) | more than 6 years ago | (#21951288)

I disagree with them. The flaw isn't with Java but with how it is most likely being taught to the students. They also undersell Java as a language. dot.com? seriously. And about using Java only for threading and reflection? Are they serious?

I've taught grinds to first year students in Ireland in Java (I'm SCJP 14/5) and their professors do not even allow the use of an IDE when coding. They also grade them over Java patterns and OO rather then knowledge of the language.

C/C++ have their place, but any good CS student normally learns a number of languages.

I can code in a number of languages, certified in quite a few as well and I've never used Ada. Considering both professors work for a company that sells ADA stuff it seems a little biased and uninformed on Java.

That's true (4, Insightful)

cgomezr (1074699) | more than 6 years ago | (#21951290)

I love Java, and I find it much more pleasant to use than C/C++, but I generally agree with TFA. I have seen many people doing things like this

//build a string with 10K a's
String as = "";
for ( int i = 0 ; i < 10000 ; i++ ) as += "a";

which creates 10K temporary objects to construct a single string*. This is because they started learning programming with a high abstraction level so they have no idea of what is going on behind the scenes. It's something similar to starting programming with one of these new "intelligent" IDE's such as Eclipse, which do lots of things for you so you don't have to figure them out for yourself. I think all these abstractions are great for people who already know how to program, not for beginners. You wouldn't give a calculator to 6 year old kids learning math, would you?

I personally would being with C and then jump to Java. C is not so complicated as a first language if you don't introduce all its features from day one. It was my first language and I think it was a good choice, it shows you enough low-level concepts to be able to make efficient optimised code in higher-level languages. Besides, when you later jump to a more high-level OO language you appreciate the difference and learn it with interest.

* I know modern compilers are able to optimise that automatically using a StringBuffer or StringBuilder. I just chose that (somewhat unrealistic) example for the sake of simplicity, but the same happens in other cases that aren't so easily handled by the compiler.

the "everything is a corporate website" approach (0)

Anonymous Coward | more than 6 years ago | (#21951292)

Java became the next big thing when corporations pushed it as a solution to sell more functionalities in less time but its inherent value as a programming platform, from a purely technical point of view, approaches zero. Every skilled programmer knows that native code is smaller, faster and stabler and easier to debug, and there are workplaces out there where one can lose the job in ten minutes if he/she suggests Java as a solution instead of a native one. Just tell some PMP or GPS manufacturers they have to double the memory or processor speed of their gadget because you can't write code in C.
Nowadays the web appears to be king because it's widespread and used in nearly every PC worldwide, and it speaks PHP, Python, Ruby, Java and ASP, but low footprint devices, device drivers, applications where speed matters, including financial applications that need lower latencies than a fps game, all of them still require more performing languages and implementations.
So, yes. The Java-for-everything culture is really dangerous both for the programmer culture and the code he/she writes.

IDE vs Editor (0)

Anonymous Coward | more than 6 years ago | (#21951296)

Well, then again it makes a huge difference writing with an IDE and writing in an editor.
With an IDE if you're a beginner you usually think.. "ok I press this button and I run the program".
Plus you usually design your gui there.
It's a whole different ball game when you write code using an editor and compile either through the command line or preferably through ant.

A simple answer to this (1)

DrXym (126579) | more than 6 years ago | (#21951298)

Don't use in Java in your curriculum if you don't like it. Duh. But please at least use a language that has practical application to students outside your classroom.

great teachers (1)

hedley (8715) | more than 6 years ago | (#21951368)

I had both those professors at NYU. PL/1 with Schonberg and Dewar for compilers. The curriculum back then for a CS major was an inrto language, at the time PL/1, an assembly class (BAL on a 370). Discrete math was a must. Data structures using PL/1, a graph class. OS design and comp arch (others that I forgot I am sure). This was a good challenging major and I am glad they are making the case that the current trend is bad. I agree, its difficult to find good programmers. Bad habits seem to get into folks very early with these hands off the hw languages. That is at least from where I need people (embedded fw). For a web gui perhaps C# and Java are all thats needed these days. To me, I need to understand the hw on up to, if used, the vtable and the objects on top, complete understanding of all the layers. If you dont know your system, how can you grasp the ramnifications of change of any of the pieces (new processor, different compiler, runtime, etc). If you understand all the pieces, your life is ultimately better and easier I feel. I dont think the new CS majors get that training any longer.

Hardly damaging (1)

Xest (935314) | more than 6 years ago | (#21951370)

The fact is C and C++ whilst to many of us self-taught programmers was our first language it's not necessarily the best first language and had I known differently I'd probably not have chosen C as my first language.

I went to uni already knowing C but then being taught Java it seemed a nice starting language and I somewhat wish I'd learn it earlier. I'd question why his students are unable to transfer from the idea of reference variables to pointers as the concepts really aren't massively different, when you get your head round the whole references thing the pointer concept isn't that far a leap. I'd argue that if his students understood Java and are unable to make the jump to C that it may be the teacher that's at fault.

As I see it the best route would be to teach the likes of Java and so forth in the 1st year and then make the jump to C/C++ in the 2nd and 3rd years, probably even assembly of some forth in the 3rd year also. I'm not convinced there is one big problem here, the lack of teaching of C/C++ isn't necessarily Java's fault and the two languages certainly aren't mutually exclusive in their ability to be learnt.

What I do think would be a bad idea however is throwing students into C/C++ straight away when they may have no knowledge of other languages, I'll be a brave man and admit I think it did me some damage that took a fair while to repair jumping straight into C as it's easy to overlook important things such as avoidance of buffer overflows when you're not even totally sure about pointers and are still initially trying to get your head round the concept of multi-dimensional arrays as well as trying to remember even the syntax of the language.

Regarding students not being able to understand how to write console programs, again I don't see this as a fault of Java and I doubt if students can write GUI apps that they're incapable of writing console apps, it's just down to a lack of teaching about different programming patterns such as FSMs and so on.

My biggest problem with uni teaching in this area is not the use of specific existing languages but the fact some Unis and courses make up their own languages which don't always quite work right having never had testing in a wider environment and that really offer nothing over certain existing languages. At least students get another language under their belt that's actually usable outside that specific course should they be taught an existing language than some home grown one for the course.

Misleading concept ... (2, Informative)

garphik (996984) | more than 6 years ago | (#21951374)

Software engineering is not just about writing a class / implementing a functionality. Its about a process and is lesser to do with what programming language you have been taught. Mostly it is to do with the Object oriented paradigm (C++, Java for example). OO has a lot of proven advantages.

C, Lisp, and ADA are all different types of languages.
I think the best way to learn programming is not just by mastering one particular language, but going by the programming principles; Just like if you learn to play a guitar, you can learn other the strumming instruments easily.

Languages like assembly and machine code don't require learning one just needs a manual while programming.

Low level languages (2, Interesting)

hubert.lepicki (1119397) | more than 6 years ago | (#21951380)

I come from Poland and at my university we started learning programming from Pascal, then C, assembly and C++/Java after that. I think Java is not damaging, you just have to know what is really going on under the hood. I think there is no plan to change this route at my university, which in fact I consider great. Even Pascal - outdated, boring and not widely used is important as it's syntax is frequently used in pseudo-codes in books or on lectures. Learning Java, not knowing low level languages or the way hardware works can lead to poor programming skills and prevents people from solving many problems related to performance etc, e.g: "why does my array behaves so slow when I swap 'i' and 'j' variables?". You have to understand how hardware and OS works, not in details but still!

Author says Java is important in learning to code! (1)

ls671 (1122017) | more than 6 years ago | (#21951382)

The title might be misleading, the authors says Java is important in learning to code!

I am myself a Java developer and I started when the language was born.

Nevertheless, I can understand where the professors are coming from when they state:

Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.


I started to write Java programs with vi (now using eclipse ;-) and I would say that it is indeed necessary to understand pointers to write complex (especially multi-threaded) Java programs. Somebody not understanding pointers will have no idea that every Java Object (even arrays) are accessed through references which is indeed a fancy name for a pointer. So all Java variables except primitive types behave just like a pointer would. I can't see how one could be an expert in Java without understanding this!

I see the point for teaching C and at minimum a few other languages (I did lisp, prolog, ml, assembly for Intel and Motorola and a few others). I am just surprised they don't suggest also at least one assembly language as mandatory.

A student would also need to learn at least a minimum on how the hardware works, (hardrive, processor, cache, bus, memory, etc.)

Why ? Because knowing all the components (hardware and software), knowing the machine and all the layers is the only way to be able to write efficient programs !

We are supposed to have nice abstractions to work more easily knowing only a few layers but in my experience this is a myth and this is how we end up with trashy programs, when the person who wrote it didn't have a clue on how the other layers worked and the nasty impact his code would have on those other layers.

Here is a 2002 article that explains the phenomenon a little more, it is called the Leaky Abstractions [joelonsoftware.com]

If we are not aware of this, we end up forming "fast-food" programmers instead of the software engineers of tomorrow. I guess that's what the professors were saying.

Then again, in a sense, nothing new here ;-) I have been knowing this for a long time and my guess is that I am not alone ! ;-)

the fun I had (0)

Anonymous Coward | more than 6 years ago | (#21951398)

I started with the c64 Basic ( beiginner algo.s for seemingly infinite confusion)
Moved on to Hex, then ML
Finally on a 286 I switched between pascal and C/C++ ( Borland you know )

As a math Professor qualified to teach programming it is disappointing that java is the [economical] choice of the university.
C is a for the sake of programming. Most others are made from C !

--
To turn your computer into a gameboy type "win."

Java easy to lean is the problem (2, Insightful)

papaver1 (846310) | more than 6 years ago | (#21951402)

I've seen this in couple of students I went to school with. During my CS degree at UT of Austin the CS department started migrating to Java as their primary language. Java is definitely a easier language to learn on, especially with its GUI environments and libraries. That is the main problem however. A couple of friends I kept up with after college had a really hard time picking up lower level languages.

It's much easier to pick up higher level languages when you know the building blocks from the bottom. I wrote all my code in C/C++ in vim. Not using a GUI gave me a good understanding of how code works. Like managing files and linking object files and libraries; using certain flags to enable compiler options. I think once one is familiar with these concepts a GUI is great to become more efficient and not have to deal with such rudimentary task sometimes. But if you never learn these concepts you are losing out.

C/C++ helped me hang myself in college. It was grueling but worth it. I've picked up most languages I've tried pretty easily. I've coded/scripted in C/C++, C#, Pascal, Haskell, Perl, PHP, ASP, HTML, SQL, VB, Bash, MEL, LUA, UnrealScript. It's better to stick the pain out in college than try to figure out pointers and such when you have a job and there are deadlines to meet and the possibility of getting fired if you keep slipping.

Right! (0)

Anonymous Coward | more than 6 years ago | (#21951408)

Yes Java and its siblings are quite dangerous. It's a bit late to realize that... it's going to be hell expensive to clean damages done by java and its siblings.
Moreover, plenty of you thinks it's really free software... my a**! Indeed, to compile the 80MB (Yes... you read well... only Sun is able to maintain such giga-bloat) of compressed C++ source code, you need closed proprietary modules AND the previous closed and proprietary SDK!

Better CS programs don't teach languages anyway (4, Insightful)

Bryan Ischo (893) | more than 6 years ago | (#21951412)

The better CS undergrad programs don't really teach languages per se. The main focus of the curriculum should be the theoretical underpinnings of computer science, combined with the practical aspects of software development. Since languages themselves are part of the practical aspect of software development, in addition to also being the focus of some computer science theory, it is unavoidable that languages should themselves be studied to some degree, and also used to a large degree to practice the theory that is being taught. Most theoretical CS only really needs 'pseudocode' to illustrate the concepts being discussed. But since students are often asked to write programs to demonstrate their understanding of the subject matter, a real language is unavoidable. But the language itself is secondary to the real meat of the subject, which should all be mathematical and theoretical in nature.

At CMU the very first CS class (that losers like me who didn't AP out of the first CS course, mostly because my high school didn't even have computer classes let alone AP computer classes!) really did focus on teaching a language - Pascal - and a significant part of the class was the learning of the language. It was the least useful CS class I took in the long run (not surprising, as an introductory course in any subject is likely to be the same). Subsequent courses would spend 1 - 2 weeks going over the fundamentals of the language to be used in coursework for the remainder of the class (which in some classes was C, in some was C++, some used ML, others Scheme, etc), to get everyone started, and after that, you had to figure it out on your own in conjunction with actually learning the theory that was being taught. It really isn't that hard to pick up a new language once you know a couple, although I did have a hard time with ML, mostly because I was completely unmotivated to learn it, feeling that it was absolutely useless to know (I was right).

No really good CS program has any classes with names like "Java 101" or "Advanced C++". To use a carpentry analogy, I would expect a really good carpentry school to teach the fundamental rules and "theory" of carpentry, so that the student upon graduation really understood what carpentry was all about and could apply their knowledge to aspects of the subject that they hadn't even encountered in school. I wouldn't expect a good carpentry school to have classes like "Advanced Hammering" and "Bandsaw 101". The courses would instead be "Introduction to House Frames" and "How to Construct Joints". You'd be expected to learn the use of the tools in the natural course of studying these subjects.

It's the same for CS. Good programs don't teach the tools, they teach the *subject*; learning the tools is intrinsic in the study of the theory.

Load More Comments
Slashdot Account

Need an Account?

Forgot your password?

Don't worry, we never post anything without your permission.

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>
Create a Slashdot Account

Loading...