🔒 Locked
Java sucks !... Only Java Sucks.
Advertisement
Original Post
The only reason Java ever got so much attention in post-secondary education was because almost everyone guessed wrong back in the 90s about the future of software development. Of course, as we all know, Java applets didn't become our primary applications, especially since we didn't make the move from the desktop to the internet the way all the trade rags screamed we would from 1996 to 1999. Rather, it's still same old, same old. (Thank goodness for that, too.)
Unfortunately, those ivory tower idjits never bothered to fix their mistake of switching everything over to Java, and to this day many potential great programmers have been ruined by having to learn that joke of a language, only good for spinning cubes and cell phone apps.
Unfortunately, those ivory tower idjits never bothered to fix their mistake of switching everything over to Java, and to this day many potential great programmers have been ruined by having to learn that joke of a language, only good for spinning cubes and cell phone apps.
So he's proposing having lower-level languages as first languages instead of higher-level ones.
I don't get it. Are we looking for the "software engineers of tomorrow" or "the C hackers of tomorrow"? I think learning to program, solving problems, is priority number one, not learning how "software programs map to hardware" or the semantics of pointer(die already!).
I think the problem is the way programming is tought. With low-level languages like C, we spend half the semester until everyone semi-understands pointers. With higher-level like Java, we learn to use some fancy compoments to implement retarded toy applications involving back accounts,libraries and similar. When do we learn to device algorithms, to solve more involving problems, to design better? That's what we want, regardless the language. My opinion is, the higher, the better. Scew Java, I'm all it for Python.
I don't get it. Are we looking for the "software engineers of tomorrow" or "the C hackers of tomorrow"? I think learning to program, solving problems, is priority number one, not learning how "software programs map to hardware" or the semantics of pointer(die already!).
I think the problem is the way programming is tought. With low-level languages like C, we spend half the semester until everyone semi-understands pointers. With higher-level like Java, we learn to use some fancy compoments to implement retarded toy applications involving back accounts,libraries and similar. When do we learn to device algorithms, to solve more involving problems, to design better? That's what we want, regardless the language. My opinion is, the higher, the better. Scew Java, I'm all it for Python.
With the lower level languages you need to think more about what you're doing, and build up those baseline creative skills. Higher level languages, especially ones with these click'n'play methods of building software, are like building a Lego set; lower level ones where you need to build something from scratch, is like baking a cake.
You can't make cake with Lego.
You can't make cake with Lego.
Reinterpreting "Java is not the best choice for a first language" as "Java sucks" is just being dumb. Thanks for dumbifying our world.
Also I disagree with the article's claim that CS education was any better before Java. I took CS at a fairly decent institution and they barely taught me a damn thing about programming. Any programming skills I gained were either from me coding in my spare time, or were a side effect of the course material. Almost none of my professors (who were all very smart people) were any good at writing code.
So yeah, I agree that a typical CS degree doesn't prepare someone to be a software engineer. But I don't see any reason to blame Java for that.
Also I disagree with the article's claim that CS education was any better before Java. I took CS at a fairly decent institution and they barely taught me a damn thing about programming. Any programming skills I gained were either from me coding in my spare time, or were a side effect of the course material. Almost none of my professors (who were all very smart people) were any good at writing code.
So yeah, I agree that a typical CS degree doesn't prepare someone to be a software engineer. But I don't see any reason to blame Java for that.
I doubt that a CS degree has ever prepared someone for being a software engineer. Of course, now that there are dedicated SEng programs popping up, is that really a concern?
The problem with Java in CS is that it does dumb things down. Whereas with a lower level language, a student would have to be more creative and thoughtful about how to do a task (if only because there were five ways to do any given thing right and a million to do it wrong), Java generally has one or two ways to do something, period, and even a zombie could figure out which one. It destroys critical, creative thinking.
Never mind that it's a toy language, and somewhat BDSM (although, not as bad as Pascal -- then again, what language could be?).
The problem with Java in CS is that it does dumb things down. Whereas with a lower level language, a student would have to be more creative and thoughtful about how to do a task (if only because there were five ways to do any given thing right and a million to do it wrong), Java generally has one or two ways to do something, period, and even a zombie could figure out which one. It destroys critical, creative thinking.
Never mind that it's a toy language, and somewhat BDSM (although, not as bad as Pascal -- then again, what language could be?).
There is no best language.
Start with a high level language, and the skill set required to work in a low level one may not develop (whaddaya mean variables can be unintialised?). Start too low, and the programmer will often continue programming in a low level manner even in high level languages where better methods are available (the infamous "C with classes" as one example).
The less said about the middle ground, languages like C++, the better.
You just have to hope that the programmer will move beyond their initial language. I started with BASIC and I would like to believe that I certainly have. Some of my classmates I would guess haven't moved too far beyond Java, despite the best efforts of our course, which included C, LISP, Prolog and Smalltalk in various amounts.
Start with a high level language, and the skill set required to work in a low level one may not develop (whaddaya mean variables can be unintialised?). Start too low, and the programmer will often continue programming in a low level manner even in high level languages where better methods are available (the infamous "C with classes" as one example).
The less said about the middle ground, languages like C++, the better.
You just have to hope that the programmer will move beyond their initial language. I started with BASIC and I would like to believe that I certainly have. Some of my classmates I would guess haven't moved too far beyond Java, despite the best efforts of our course, which included C, LISP, Prolog and Smalltalk in various amounts.
Quote:
Original post by coldacid
The problem with Java in CS is that it does dumb things down.
I don't see why that's any reason that Java is a bad first language. If anything I think that's why it makes Java a great first language. Programming is frustrating and discouraging for beginners. People who are just starting out really do need something dumbed down.
If you're saying that it would be bad for Java to be the only language a school ever uses, then yeah I am in total agreement. But I'd say the same thing for any single language.
The author is right on some points, and surprisingly, I was discussing the same topic with a co-student yesterday. We see the same thing at our college.
Most of the people in these classes can't program. They're like dumbass code monkeys banging on their keyboards in the hope it compiles and works. Most of these guys aren't considering what languages would be best for the solution. On one hand, we have the Linux hippies. They believe every software should be written in C(Because Linus Thorvalds hates C++. And yes, that's actually a reason I've heard. I've also heard that git was better because Linus wrote it) and run on Linux.
On the other hand, we have the clueless morons who use whatever they have at hand and just learned. For instance, my co-student pointed out that a few of his classmates wrote a simple roster program for their work. They wrote it in .NET(Not a bad choice there, it suits the job: Windows PC with GUI app), but instead of storing the rosters in a database, they used XML. They never considered using MS JetDB or SQlite, because they didn't know how to use it.
In the middle are a handful of skilled people, who analyze the problem before implementing it. They consider the options on technologies, think further than a bag of cash and carefully construct a system that's fast, simple to maintain and does what the client want. I consider myself part of these people. I've written a lot of (bad) projects before I started college, I learned design principles, analyze my projects before hand and I got a 2 days a week job as C++ programmer.
What needs to be changed is more focus on programming(Scale down projects and instead of grading by percentage of implemented features, grade on used coding practices, source layout and structure, etc.), more design principles(I see nothing of that in my degree, I have to learn them myself), more math, no more Java and more focus on effectively solving problems, instead of hacking together the labs in the shortest amount of time.
Toolmaker
Most of the people in these classes can't program. They're like dumbass code monkeys banging on their keyboards in the hope it compiles and works. Most of these guys aren't considering what languages would be best for the solution. On one hand, we have the Linux hippies. They believe every software should be written in C(Because Linus Thorvalds hates C++. And yes, that's actually a reason I've heard. I've also heard that git was better because Linus wrote it) and run on Linux.
On the other hand, we have the clueless morons who use whatever they have at hand and just learned. For instance, my co-student pointed out that a few of his classmates wrote a simple roster program for their work. They wrote it in .NET(Not a bad choice there, it suits the job: Windows PC with GUI app), but instead of storing the rosters in a database, they used XML. They never considered using MS JetDB or SQlite, because they didn't know how to use it.
In the middle are a handful of skilled people, who analyze the problem before implementing it. They consider the options on technologies, think further than a bag of cash and carefully construct a system that's fast, simple to maintain and does what the client want. I consider myself part of these people. I've written a lot of (bad) projects before I started college, I learned design principles, analyze my projects before hand and I got a 2 days a week job as C++ programmer.
What needs to be changed is more focus on programming(Scale down projects and instead of grading by percentage of implemented features, grade on used coding practices, source layout and structure, etc.), more design principles(I see nothing of that in my degree, I have to learn them myself), more math, no more Java and more focus on effectively solving problems, instead of hacking together the labs in the shortest amount of time.
Toolmaker
Toolmaker's got it.
Personally, I think that CS/SEng education should begin in high school or earlier, and begin by blasting the students with a metric assload of languages and technologies. Those that can cope have a career ahead of them; the rest can go be artsies ('coz someone's got to make the pretty graphics for our games or Apple's GUIs).
I started with BASIC 2.0 on a C64 when I was just a little kid, and I taught myself 6502 assembly a year later. Today I know a bunch of languages, trying to pick up more, and never starts without thinking about what is the right tool for each job.
It's a shame that all those people who went through and learnt Java at university are no good, but when all you have is a hammer... (Actually, Java's probably more like a star-head screwdriver. Great for taking apart and assembling toys, but never used anywhere else.)
Personally, I think that CS/SEng education should begin in high school or earlier, and begin by blasting the students with a metric assload of languages and technologies. Those that can cope have a career ahead of them; the rest can go be artsies ('coz someone's got to make the pretty graphics for our games or Apple's GUIs).
I started with BASIC 2.0 on a C64 when I was just a little kid, and I taught myself 6502 assembly a year later. Today I know a bunch of languages, trying to pick up more, and never starts without thinking about what is the right tool for each job.
It's a shame that all those people who went through and learnt Java at university are no good, but when all you have is a hammer... (Actually, Java's probably more like a star-head screwdriver. Great for taking apart and assembling toys, but never used anywhere else.)
Quote:
Original post by coldacid
The only reason Java ever got so much attention in post-secondary education was because almost everyone guessed wrong back in the 90s about the future of software development. Of course, as we all know, Java applets didn't become our primary applications, especially since we didn't make the move from the desktop to the internet the way all the trade rags screamed we would from 1996 to 1999. Rather, it's still same old, same old. (Thank goodness for that, too.)
Unfortunately, those ivory tower idjits never bothered to fix their mistake of switching everything over to Java, and to this day many potential great programmers have been ruined by having to learn that joke of a language, only good for spinning cubes and cell phone apps.
As harsh as this may be, I tend to agree with it.
There are many languages that can be used to do a specific task. There is no "best language" - there is "right language for the job". However, there are many high-level languages to choose from today. Java is "just another language", and *it works*, although IMHO, it's not very good/useful.
There is nothing wrong teaching Java as first language. What's wrong is being closed-minded on the language choice of particular student. For instance, if you require your students to program a particular application for the class, you should be able to accept some students using a different language than you choose.
Several years back before I did my masters, we had teachers who would religiously believe in Java and ask you to program everything in it. This is wrong.
Quote:
Original post by coldacid
I doubt that a CS degree has ever prepared someone for being a software engineer.
Wrong. Not all institutions are the same. There *are* institutions where they *teach* you to be a software engineer. But again, it depends on each individual teacher. I know a professor, who's software engineering classes are boring to the point, where even coffee can't save you. On the other hand, I know another professor teaching the same stuff, but in a such way, that after each class you feel like your developer's life will never be the same. [smile]
Sound like they are just reiterating what has already been said before in different ways:
“It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.”
Edsger Dijkstra quote
The Perils of JavaSchools
Does Visual Studio Rot the Mind?
And the best one by far:
Why have a machine language?
Moreover, if I did use a high-level language, what language should it be? In the 1960s I would probably have chosen Algol W; in the 1970s, I would then have had to rewrite my books using Pascal; in the 1980s, I would surely have changed everything to C; in the 1990s, I would have had to switch to C++ and then probably to Java. In the 2000s, yet another language will no doubt be de rigueur. I cannot afford the time to rewrite my books as languages go in and out of fashion; languages aren't the point of my books, the point is rather what you can do in your favorite language. My books focus on timeless truths.
Some readers are put off by the use of assembly language, but Knuth considers this necessary because algorithms need a context to judge speed and memory usage. It does, however, limit the accessibility of the book to many readers, and limits its usefulness as a "cookbook" for practicing programmers, many of whom are not familiar with assembly, and even if they are, have no particular desire to translate assembly code into a high-level language. A number of more accessible algorithms textbooks using high-level language examples exist and are popular for precisely these reasons.
So as you can see this seems to have been around as long as the brace/indentation wars-LOL!
In my personal experience I have seen how Java or similar languges like C#/VB can make your mind lazy.
I mean I'm currently taking a C++ class and there was an assignment where we had to figure out how to sort an array of numbers using insertion sort,bubble sort,etc. and lemme tell you it was a PITA. Especially since having programmed on my own I already knew you could just use a vector instead and sort it in like one line of code instead of using arrays! Same thing with Java and C#. And sure enough like 1 chapter later that's exactly what we did after learning about the STL. Okay I get seeing and maybe even being forced to see how it's done but it didn't make implementing bubblesort any more pleasant and besides I thought programmers were known for their laziness. I mean why reinvent the wheel? Especially when someone else had to go through all the sweat and tears to figure it all out. I guess I"m just destined to be nothing more than a code monkey then if I feel that less typing is making more and being more productive.
p.s. And yeah the title for this topic sucks since it could just as well be C# or any language that doesn't use pointers shucks! makes programming too easy and rots the brain!
Assembly rules and see ya in 20 years when you get try to write the next killer railroad tycoon-LOL!
And I find it ironic that Petzold says he's rather see the dentist than be forced to write code anymore C code. His fingers and wrist probably got tired of all the typing like myself or doesn't want to endup like richard stallman having to dictate to someone since he pretty much killed his wrist typing all that code for the gnu compiler,etc in C.
[Edited by - daviangel on January 9, 2008 5:50:59 PM]
“It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.”
Edsger Dijkstra quote
The Perils of JavaSchools
Does Visual Studio Rot the Mind?
And the best one by far:
Why have a machine language?
Moreover, if I did use a high-level language, what language should it be? In the 1960s I would probably have chosen Algol W; in the 1970s, I would then have had to rewrite my books using Pascal; in the 1980s, I would surely have changed everything to C; in the 1990s, I would have had to switch to C++ and then probably to Java. In the 2000s, yet another language will no doubt be de rigueur. I cannot afford the time to rewrite my books as languages go in and out of fashion; languages aren't the point of my books, the point is rather what you can do in your favorite language. My books focus on timeless truths.
Some readers are put off by the use of assembly language, but Knuth considers this necessary because algorithms need a context to judge speed and memory usage. It does, however, limit the accessibility of the book to many readers, and limits its usefulness as a "cookbook" for practicing programmers, many of whom are not familiar with assembly, and even if they are, have no particular desire to translate assembly code into a high-level language. A number of more accessible algorithms textbooks using high-level language examples exist and are popular for precisely these reasons.
So as you can see this seems to have been around as long as the brace/indentation wars-LOL!
In my personal experience I have seen how Java or similar languges like C#/VB can make your mind lazy.
I mean I'm currently taking a C++ class and there was an assignment where we had to figure out how to sort an array of numbers using insertion sort,bubble sort,etc. and lemme tell you it was a PITA. Especially since having programmed on my own I already knew you could just use a vector instead and sort it in like one line of code instead of using arrays! Same thing with Java and C#. And sure enough like 1 chapter later that's exactly what we did after learning about the STL. Okay I get seeing and maybe even being forced to see how it's done but it didn't make implementing bubblesort any more pleasant and besides I thought programmers were known for their laziness. I mean why reinvent the wheel? Especially when someone else had to go through all the sweat and tears to figure it all out. I guess I"m just destined to be nothing more than a code monkey then if I feel that less typing is making more and being more productive.
p.s. And yeah the title for this topic sucks since it could just as well be C# or any language that doesn't use pointers shucks! makes programming too easy and rots the brain!
Assembly rules and see ya in 20 years when you get try to write the next killer railroad tycoon-LOL!
And I find it ironic that Petzold says he's rather see the dentist than be forced to write code anymore C code. His fingers and wrist probably got tired of all the typing like myself or doesn't want to endup like richard stallman having to dictate to someone since he pretty much killed his wrist typing all that code for the gnu compiler,etc in C.
[Edited by - daviangel on January 9, 2008 5:50:59 PM]
Okay, just so you know, most of you are completely wrong... but you're also lucky because I'm too freaking tired to berate you any more.
"Computer Sciences is NOT programing and NOT the science of Computers, it is the Science of Computing. AKA A specialized Math Degree"
Why do people expect CS to produce people who are expert coders from the work they did in their courses? This should never be the goal of a CS degree, as there is far more important things to spend your lecture time on, such as theory behind things, not how *Insert Random Language here* does *Insert Random topic here*.
These details are things that you should be learning on your own!
Java is a great intro language because it tends to be easier to get students into solving Problems, not debugging errors.
"Why is my program crashing with a Seg Fault" is a shitty question that a student shouldn't have to ask. We have better things to be spending our prof's time on.
"Why is this algorithm failing when the input number is divisible by 394?" or better still "How can I do the same thing this Algorithm does, but using less processor time, and be able to implement it on any system" are the kinds of questions we should be aiming to have students ask about in the worst cases.
Why do people expect CS to produce people who are expert coders from the work they did in their courses? This should never be the goal of a CS degree, as there is far more important things to spend your lecture time on, such as theory behind things, not how *Insert Random Language here* does *Insert Random topic here*.
These details are things that you should be learning on your own!
Java is a great intro language because it tends to be easier to get students into solving Problems, not debugging errors.
"Why is my program crashing with a Seg Fault" is a shitty question that a student shouldn't have to ask. We have better things to be spending our prof's time on.
"Why is this algorithm failing when the input number is divisible by 394?" or better still "How can I do the same thing this Algorithm does, but using less processor time, and be able to implement it on any system" are the kinds of questions we should be aiming to have students ask about in the worst cases.
Quote:
Original post by Talroth
Why do people expect CS to produce people who are expert coders from the work they did in their courses? This should never be the goal of a CS degree, as there is far more important things to spend your lecture time on, such as theory behind things, not how *Insert Random Language here* does *Insert Random topic here*.
I agree, this is not a trade school. It's also not limited to CS graduates, almost anyone with a higher education will need the practice in 'the real world' in order to become a valuable professional. You don't need universities to teach you how to program, they exists to teach the fundamental knowledge that you won't pick up by just practice and experience.
The choice of language should depends on the subject. For some courses C might be the best language to use, for some it might be Scheme, and for others it could be Java.
Quote:
http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html
C is the low-level language that everyone must know. It can be seen as a portable assembly language, and as such it exposes the underlying machine and forces the student to understand clearly the relationship between software and hardware. Performance analysis is more straightforward, because the cost of every software statement is clear.
I agree that the level that C operates on is lower compared than that of Java, stating that the language maps almost directly to the hardware is an exaggeration in my opinion.
Quote:
Original post by coldacid
You can't make cake with Lego.
says who?

I don't particularly like java, but I see nothing wrong with it as a first language. In general most developers don't need to understand pointers, memory etc. Of course, there will always need to be some developers that do understand the lower level performance-related aspects, but your average code-monkey is better off focusing on program structure and design.
This is just an excuse by angry C-era interviewers to blame Java. If my school is any indication then I'd say almost all graduates in any field or going to be completely incompetent.
I'm in my 5th semester(out of 6) of a micro-controller course, mostly hardware and C programming(yes programming, not CS). Even near the end of the course you'd have trouble finding students able to explain exactly how their C code works on a hardware level. Sadly the make the tests so easy, they're all graduate and have no idea how to make a "hello world" application.
IMO the problem isn't the language, it's the actual students and I don't think it was any better 10-20 years ago. Most of them hate programming, yes they're in a programming course and hate programming. They're all in it because they see an easy job with a decent salary, they'll do the bare minimum at work.
I don't know about CS courses, but I have a feeling the percentage of students there that actual enjoy programming is also extremely low.
I'm in my 5th semester(out of 6) of a micro-controller course, mostly hardware and C programming(yes programming, not CS). Even near the end of the course you'd have trouble finding students able to explain exactly how their C code works on a hardware level. Sadly the make the tests so easy, they're all graduate and have no idea how to make a "hello world" application.
IMO the problem isn't the language, it's the actual students and I don't think it was any better 10-20 years ago. Most of them hate programming, yes they're in a programming course and hate programming. They're all in it because they see an easy job with a decent salary, they'll do the bare minimum at work.
I don't know about CS courses, but I have a feeling the percentage of students there that actual enjoy programming is also extremely low.
Topic Locked
This topic has been locked by a moderator. New replies are not allowed.
Sign in to reply to this topic.
Advertisement