I've been programming for 20 years, and I've been coding in Java for two years. Writing both Applets and Servlets, as a professional programmer. I understand Java.
I know that Java is versatile, and can be used in many environments. My point is that C/C++ is a better language to use, when teaching computer programming and Computer Science.
Java has strict typing That everyone overrides. If you override it, every time, it doesn't exist. String a = (String)myVector.elementAt(0); Code like that appears all over the place in Java. That's not strict typing.
You can learn the fundamentals of programming in any language, even COBOL, Fortran, BASIC, and Pascal. Oh, and C/C++. Your argument doesn't mean that Java is BETTER, only that it is functional.
it can introduce many different aspects of programming to a student... without having to learn another language/environment or some 3rd party libraries. This actually isn't a bad point. I'd argue that doing GUI or event programming puts you into Java Application or Java Applets, and those are not real-world problems, you know what I mean? If you're going to encounter GUI or event programming - as a professional programmer, it'll be in C/C++. So, teach it in C/C++... Right?
Java is a good language. I'm programming in it right now, and it's useful. Another language would not be as useful, for the task I'm working on. I acknowledge that Java has its strong points. However, C and then C++ should be the language(s) that are used to teach people how to program, in a Computer Science curriculum. Mainly for the reasons I listed, which you ignored.
The arguments I brought up against Java were just to illustrate my point... When someone says "Java is BETTER than C/C++ for TEACHING computer programming," I can say, "No, it's not." I agree with you that it has uses, is useful, and is not a bad language. I disagree with anyone that says that we should use it to teach Computer Science!
Again, it's EASIER for someone to learn in C and then C++ to switch to programming in Java - than it is for someone to learn in Java, and then switch to C and C++. And since MOST people will end up having to code in C or C++, eventually - teach it to them, in the first place!
This is fantastic, someone brings up the question "Is Java a better language to use, when teaching people Computer Science." I say "No," and try to explain my reasoning. So, obviously, I'm a troll. *sigh*
From your post, it is quite clear you either Haven't used java in a while, you don't understand where java is used, or you are just parroting things you've heard before.
I've been a computer programmer for 20 years, and I write both Java Applets and Java Servlets every day. I've been working with Java for two years. I would argue that I'm qualified to make my own statements, and I'm not parroting things I've heard before.
There are currently 5 Million java developers worldwide. Java is the main language used for eCommerce. Do you want your web site to leak memory?
Are there more people who write in C/C++? Yes. Is it possible to write C/C++ code that doesn't leak memory? Yes. Is it possible to write Java Applets that unintentionally leak memory? YES. Java is not the main language used for eCommerce. You are incorrect. What language was Apache written in? What language was Windows written in? What language was Linux, BSD or any other UNIX written in? What language was your browser written in? What language was your TCP/IP stack written in? WHAT LANGUAGE WAS JAVA WRITTEN IN? I believe a more intelligent argument would be that eCommerce applications for making intranets, or serving non-static web pages are most commonly written in Java, and that the only language for doing client-side execution without a plug-in or otherwise installing software is Java or JavaScript. Regardless, that doesn't make it a good language to teach programming in. It also doesn't make it the most widely used language.
And this is Java's fault? You're hilarious. I was countering the argument that Java is cross-platform. Instead of establishing through example that it IS cross-platform, you seek to attribute blame to someone else. You have not defeated my argument : Java is not cross-platform, in the way that everyone harps it to be. Who's parroting?
Applets are hardly used anymore. Java was clearly a failure in this area Thank you for making my point for me. I can guarantee to you that if a University intends to teach Java as a programming language, they will at some point develop applets. This doesn't help anyone. They won't use that skill in the real world, and even if they wanted to, by your arguments, it wouldn't work. And in learning Java, they never learned pointers and memory management. Guess what? It'll be harder for them to learn C/C++, because of it. And you're ignoring my main point : it's EASIER TO LEARN JAVA, IF YOU'VE ONLY LEARNED C/C++ THAN IT IS TO LEARN C/C++, IF YOU'VE ONLY LEARNED JAVA!
Maybe, but when dealing with eCommerce or enterprise apps... You know what? Fine. Have your stinking eCommerce or enterprise apps. You know what? Most programmers are NOT writing eCommerce or enterprise apps. Let's prepare MOST programmers for the real world! And by the way, back to my early argument, making your web page look pretty is a small portion of your business. And no, enterprise applications are not clearly in the realm of Java, either. If you want to work for a consulting firm, be prepared to not write in Java. Because C/C++ is still king, in that market, too.
You obviously have no idea how java works. Thank you for being inflamatory. You're also incorrect.
Changing values passed into a method is not OO practice, and should be discouraged. What planet do you live on? So, it's okay for my method to return a value... But it's bad for it to return multiple values? I have to design a class, or use a Vector, in order to have my method return multiple values to you? I'm shocked that you think it's bad OO practice. I should have to write two functions? Or make a special purpose class? Or use a Vector? I can't even see through your argument to a spark of logic that might have created it!
Oh no... Please don't code anywhere near my app. I hope all your C code isn't in one file You know what? This whole discussion is about teaching programming. And when you TEACH programming, you're likely to start with small programs. The kind that are likely to be solved with one class. Like, if I want to teach about a FOR LOOP, you're proposing that I put that into multiple class files? Let's stay topical, okay? And my TOPICAL argument is that, while teaching someone programming, they're likely to do most of their coding in simple, one-class programs. And there will be the temptation to use global variables, just like there is in C/C++. But, in Java, you have the comforting blanket of it being a class variable! It's not a global variable! Having a class variable is perfectly OO! But guess what? They're using it like a global variable, and if they start coding in C/C++, they'll do the same thing. AGAIN, you're IGNORING my fundamental point - that it's EASIER TO LEARN JAVA, IF YOU UNDERSTAND C/C++ FIRST, THAN IT IS TO LEARN C/C++ IF YOU UNDERSTAND JAVA FIRST.
Java is not pure Object Oriented. and C++ is?
I never said that. Again, you get mad at me for saying that Java has faults. Well, if they both have faults, that eradicates your argument that Java is BETTER. I'm not saying that C++ is pure OO. But I'm demonstrating that NEITHER IS JAVA.
I've had no problems developing in Linux and moving my executables to solaris or NT. Try moving them to C-64. Or Lego bricks. Guess what? You can with C. And yes, these are silly arguments, but they prove that C is more Cross-Platform than Java is. So, if your argument is that Java is more platform independent, so let's use it to TEACH - well, you're wrong. Does it take work to port code? Yes. Is it possible? Yes. I'm not saying Java isn't useful... I'm merely saying that it isn't a better language to use, when teaching computer programming. And my specific argument here is that, when you say Java is cross-platform, let me retort that C/C++ is MORE cross-platform.
Java is a very nice, high-level language; while it may not be suitable for beginners, it provides a lot of things that make it useful to people who want to get things done in business. This is going to surprise you : I agree with this statement 100%. And the whole point of this Ask Slashdot was if Java was a BETTER language to teach beginners. And the whole point of my post was to say that it's not. But you seemed to ignore that, and got mad that I pointed out that there are flaws in Java, there are flaws in the argument that Java is cross-platform, and there are flaws in the argument that Java is the perfect OO language. My point remains : Java should not be used to teach computer programming, or Computer Science.
I speak as someone who learned to program in BASIC, then in Pascal, then in C, then in Object-Oriented Pascal (like, the exact day that it became available from Borland), and then C++. From that foundation I have learned about every language that you can name. And in my opinion, the best language to use when teaching people Computer Science, is C and then C++ - when it's time to discuss OO.
It is cleaner than C++. No it's not. Java crashes more often than C++, with provably correct code. The Java environment is inherently more unstable, and prone to crashes. Assuming of course that you're talking about Applets. Also, in Java, there's no way to pass variables by reference. So, in order to have a method change a value that you pass to it, you have to encapsulate it in a class. Either a custom one, or something like Vector - which is not cleaner. Also, teaching someone to rely on Garbage Collection is insane, it teaches someone to write sloppy code. Java is not a cleaner environment, and it doesn't teach people to write cleaner code.
It is widely and freely available. Not as much as C or C++. Almost every machine on the planet is capable of running C code. That's not true of Java. And you're never going to write device drivers in Java.
It is being used widely in the industry - again, not as widely as C / C++. Not even close.
I think educational institutions have a responsibility to release students with marketable skills. I agree with this statement, whole-heartedly. Unfortunately, you seem to think that Java programming is a marketable skill. Or at least, you seem to think it's MORE marketable than C/C++. Which is insane. Any reasonably competent C/C++ coder can pick up Java in a heartbeat. The converse is not true. I've seen Java coders who STILL can't figure out how to dispose of memory, basically don't understand the difference between stack and heap, and don't understand pointers well enough to dispose of an element of a linked list.
And Java offers all the needed constructs and is good to teach the OOAD methodology. No, it doesn't. By virtue of using Garbage Collection, it is taking memory management out of the hands of the developer, teaching people to be lazy when it comes to object instantiation and use. Not having pass-by-reference gives people the idea that having class-level variables is a viable option. But the problem is that most simple projects are written in one class, which essentially teaches them to use global variables - which is not good. Lacking pointers is the critical flaw...
It's possible to learn C/C++, with an understanding of Java. But it's far easier to learn Java with an understanding of C/C++.
Most people will end up coding C/C++ for most of their work. Teach them to use the language that they'll end up using. Specifically because it's easy for them to then learn Java. Whereas if you taught them Java, it's not as easy for them to then learn C/C++.
Java is not a good language to use, when teaching someone to be a professional programmer. This is completely different from Computer Science, however. Computer Science is the study of algorithms and data structures. In the real world, almost no one actually does Computer Science as their job. Almost everyone who starts off in Computer Science, ends up writing programs, professionally. I argue that it's better to be a professional programmer, who understands Computer Science, than to be a Computer Scientist who understands programming.
Java may be just fine for the purposes of teaching Computer Science, but it's one of the worst programming languages around - as far as teaching people to be a professional programmer.
There are NOT that many people who will use Java, in their professional lives. Applets are a pain in the ass, because every browser / version on the planet behaves differently. Something new has got to come along and kill Java in this market, possibly even Java 2.0, just centrally controlled and with forced updates. And writing servlets is going to be the responsibility of a comparatively small number of programmers. So, it's really not that important that every college grad with a BS in Computer Science knows how to do it. Well, those are the two situations where Java has dominance. Other than that, it's a not-very-good language to use. Specifically, it's a bad language to use to teach someone to be a professional programmer. Here's why:
Memory management. Real, professional programmers need to know how to manage memory, both in RAM, and on a physical medium. Java not only doesn't help, it hinders understanding in this area. Garbage Collection is a clever trick, but if you get used to that net being under you, and you've never used another language, programming in C will be a rude shock. Like I said, Java might be fine for teaching Computer Science, but my whole point is that Java, in this specific case, is horrible for teaching people to be a professional programmer.
Passing by reference. In order to pass values by reference in Java, you have to make another class to do it? That's nuts! It's a horrible thing to teach someone to do. And since your entire Java code is likely to be in one class, it'll teach people to use global variables to store all of their important data. Not a good way to go!
Why are there integer and Integer? double and Double? Java is not pure Object Oriented, because if it were, there wouldn't be two classes for an integer value, okay? And the fact that you HAVE TO use them both just shows that it's a horrible class library. I'm not saying that C or C++ really crush Java in this department, but my point is that Java has its failings, when it comes to teaching OOP.
Now, here's an important point : Java is fine. If you learned it as your first language, you can go on to learn any language you want. My point is that it takes more effort to go from Java to C++, than it takes to go from C++ to Java. Why on Earth would you WANT to cripple students? Let's give them false perceptions about what programming is really about, and what's important to keep track of. Let's pretend pointers don't exist, and argue that being cross-platform is the Holy Grail, while using a language that is NOT cross-platform. (Try wrighting an applet that actually does anything useful, and then try to run it under Netscape on a Macintosh. Then you can preach to me about how cross-platform Java is. Some versions of Java crash when you ASK THEM WHAT VERSION THEY ARE!!!) Or that OOP is the Holy Grail, while using a language that itself doesn't do a very good job of being Object-Oriented.
Teach C++. Most students will end up spending most of their time using it, anyway. Don't make their lives more difficult by teaching them first in a language that hinders their learning!
As was mentioned in one of the articles about Richard Garriot (aka Lord British) a while back, Destination Games, his new company, is partnering with NCSoft to bring Lineage : The Blood Pledge to the US. Again. Another company tried once, but they didn't do a good job of supporting it, I gather.
Check out the review of Lineage : The Blood Pledge at The Adrenaline Vault.
From that article about the Garriot brothers:
The brothers also announced a partnership with NCsoft, the South Korean company that runs the world's largest subscriber-based online game, Lineage: The Blood Pledge.
The company has 2 million subscribers in South Korea alone; under the partnership, Lineage will be repackaged and relaunched in the United States this fall. Meanwhile, Lineage creator Jake Song will move to Austin to help develop games, which NCsoft will help launch in Asia.
Guys, calm down! That's what version control is for! If you maintain a project on SourceForge, just look at the diffs to make sure nothing malicious was done in that time frame! (Assuming of course that the SourceForge guys did a decent job of keeping backups.)
BMRT - Blue Moon Rendering Tools, is a free, downloadable RenderMan-compliant radiosity renderer, which was written by Larry Gritz, a former employee of Pixar's. It's not exactly Pixar's Renderman (PhotoRealistic Renderman), but it's not bad - and it actually gets used by many of the same people who use Pixar's RenderMan.
Oh, wow! Check out this review at The Adrenaline Vault of Lineage. It looks and sounds sweet! Hopefully they'll be able to clear out the bugs, and localize it for English - making it well worth the time to check out. This sounds just fantastically cool.
From the article: The brothers also announced a partnership with NCsoft, the South Korean company that runs the world's largest subscriber-based online game, Lineage: The Blood Pledge.
The company has 2 million subscribers in South Korea alone; under the partnership, Lineage will be repackaged and relaunched in the United States this fall. Meanwhile, Lineage creator Jake Song will move to Austin to help develop games, which NCsoft will help launch in Asia. (Emphasis added.)
How the hell is there a game with 2 million subscribers - almost 6 times the subscribers of EverQuest - that I've never heard of before?!
This game looks sweet - like what I've wanted to play for a long time : an MMPORPG (with 2 million players) that looks like Diablo II! Cool, cool, cool. Again, I hope their support of it, and their localization doesn't suck!
Okay, so you think that the "Linux myths" article is good for a laugh. Well, where's the response? I want to see an articulate response to the points that Microsoft brings up. I'm willing to bet that they funded the "independant" tests. I know that they're lying about the cost of tech support - Microsoft charges more for tech support than anyone. I'm amazed that they can claim that IIS is a better web server than Apache. So, if Linux is so great, where's the response to this? I mean, everyone keeps bitching about FUD, about how Microsoft is using words like "virus," and wow, that's really going to change public perception! But, hey - here's a list of things that Microsoft claims is FACTUAL EVIDENCE that Linux sucks. Let's refute these claims in an organized manner, okay? I want to see a response to all of Microsoft's points. Let's admit defeat, if it's true that Microsoft knows how to PRINT faster than Linux. But when they say that Linux can't support x amount of memory, doesn't do Journaling File Systems, Apache is slower and less efficient than IIS - let's refute those claims if we can! Okay? I don't have the time, resources, or energy to do this - but I think it's an important thing to do!
By their argument, DNA is viral, in that all derived works are "infected" with it.
Capitalism is viral - it's how the USSR lost the cold war - they couldn't compete with our markets and efficiency.
Democracy is viral - almost every form of government that has tried to resist it has fallen. (With a few exceptions, and I'd argue that it's only a matter of time.)
Brilliant ideas transform society in a way that cannot be opposed, cannot be ignored, and they have a way of making life better. The GNU GPL is a brilliant idea - and it's only a matter of time, Microsoft.
We can do it better, cheaper, faster. What leg do you plan to stand on? Oh, right - legislation and name-calling. Sorry, I forgot.
Wait a minute, you say "Fat-slob comedy is dead..." and you've got a quote from Curtis Armstrong in the role of Charles De Mar (who is a fat-slob) from the movie Better Off Dead...? Is it dead, not-funny, and not-worth-quoting, or not-dead, funny, and worth-quoting? Which is it, Teahouse?*grins*
By the way, I think that The Family Guy is only derivative of The Simpsons in that it's a cartoon with a fat guy. I mean, let's call The Simpsons derivative of FAT ALBERT. *chuckles*
The Family Guy is hilarious. It's truly inventive, and it's got Adam West - freaking Batman - as the voice of the Mayor. What more do you need? Oh, crap - I almost forgot - Norm Macdonald as Death was incredible. And Seth Green - Scott Evil - as Chris Griffin! This show is awesome - don't listen to Teahouse - check it out if you haven't seen it already. Just be prepared to be offended. *grins*
If I were King For A Day, this would be FOX's Sunday lineup:
6:00 - Futurama
6:30 - The Family Guy
7:00 - The Simpsons
7:30 - The Tick
8:00 - Malcolm In The Middle
8:30 - King Of The Hill
9:00 - The X-Files
With this lineup, FOX would own my eyes from 6:00 until 8:00 every time, and sometimes until 9:00.
In my opinion, The Family Guy is the funniest show on television. Futurama is hilarious, and The Simpsons is almost always good for a few laughs - especially the Halloween shows. I'm looking forward to The Tick, and I hope I can just grin and bear it through the name and persona changes for American Maid and Die Fledermause. Patrick Warburton (?) (soon to be The Tick) was the voice of a guard in The Emperor's New Clothes, as a large goofy guy (much like The Tick), and he was great in that role. I think The Tick has a real chance of being good. I can't wait for the return of The Family Guy, and the premier of The Tick!
I don't know about the OpenSource part of it, but you should check out GroupLens at the University of Minnesota. They've published some papers that are available online.
Maybe we should curb population growth. How's that for a wild idea. Everyone gets to have two kids, and the population goes down. End result, no more food shortage. And we don't even have to make the Six Million Dollar Sea Bass.
An important distinction between school before and school now:
Before, a bully would have to beat the crap out of you by himself, otherwise he'd be a coward. Today, no such distinction exists. The mentality has switched from "I'm so tough I can beat the crap out of you" to "We're so tough, we can beat the crap out of you."
It's a hell of a lot easier to stand up and take a beating from one person than from a crowd. There's no honorable way for an outcast to resolve a situation, stand up for what they believe in, or get any help.
In 1991, I was ftp'ing songs like "Stairway To Heaven" (as an AU or WAV, I can't remember) off of a remote server (not at my University), and piping it (unbuffered) to/dev/audio on a Sparc in a computer lab. Yes, it was kind of choppy most of the time, but sometimes there wouldn't be a single hitch. It worked - 10 years ago. So, if you had told me in 1997 that by 2001 the "average" user would be doing the same thing, I wouldn't have been surprised at all.
So much programming has to do with a fundamental understanding of Algebra. And as most mathematicians would agree, the best way to learn a concept is to take a class that builds on that knowledge. (Or teach it to someone else, if you get the chance!) Nothing builds on algebra in a practical way as much as calculus does. If you do well in calculus, you know enough algebra to survive. If, on the other hand, you can't survive calculus - you're going to have a hard time mastering algebra. You're right, you likely won't end up using Calculus, but you're sure as hell going to need a firm understanding of Algebra - and Trig never hurt, either. Calculus is the best way to make sure you know Algebra and Trig.
Many people dismiss Computer Science and other fields as being merely applied mathematics. They would extend the argument to Physics, too. Rather than move many fields to being under the auspices of Math (and by my extension, move the whole damned mess under Philosophy), I'd rather leave them as their own disciplines. But thanks, you're right - math had its root in physics, not the other way around.
I'm reminded of the joke of the mathematician who awoke in a burning hotel room. He excitedly got out of bed, ran to the sink, lit a match, and poured running water over it. Observing that the match went out, he relaxed, asserting, "A solution exists!"
First two years all assembly is a little extreme. I almost like the idea of Programming Assignment 1, write a program in C to find the first 100 prime numbers. Assignment 2, translate your code to assembly. Always give them carrots to push the envelope of their understanding of design, and then beat them with the stick of understanding how the computer actually executes that design. *grins*
Teamwork is good, but some people end up lost. For instance, I knew someone who was in their senior year of a Computer Science degree who coded the following jem:
switch (a)
{
case 0:
printf("a = 0\n");
break;
case 1:
printf("a = 1\n");
break;
case 2:
printf("a = 2\n");
break;
case 3:
printf("a = 3\n");
break;
case 4:
printf("a = 4\n");
break;
}
When I asked them why they didn't code
printf("a = %d\n", a);
They said that their way was "easier." *shudders* That's one of the reasons why I fear teamwork-oriented teaching. Some people can just get lost and never find their way back.
You shouldn't have to be a mathematics major to learn physics. I agree they have a common root, but I'm trying to point out that just about every science has its roots in Philosophy, and it's insane to suggest we should all have degrees in Philosophy. Things have diverged enough that Physics deserves its own degree, curriculum, publications, organizations, societies, Nobel prizes, etc. So has Computer Science.
Traditionally, the science of computing is all about math. Theoretical computer science is almost all about math. Practical computer science (ie programming) is almost all about design, interfaces (PROGRAMMING interfaces, not visual), and encapsulation. Those things don't have nearly so much math in them as your argument implies.
CS is about programming. Your assertion that it is not is weak. If you want to talk about the theoretical branch or aspect of Computer Science, that's fine - and I'll agree - programming is essentially an exercise left up to the reader. But you know what? Most people who use math have to apply it to a real-world problem. Unless you're in education or some wacky research, to earn a paycheck, math is applied to a real-world problem. Same thing with Computer Science.
I've been programming for 20 years, and I've been coding in Java for two years. Writing both Applets and Servlets, as a professional programmer. I understand Java.
I know that Java is versatile, and can be used in many environments. My point is that C/C++ is a better language to use, when teaching computer programming and Computer Science.
Java has strict typing That everyone overrides. If you override it, every time, it doesn't exist. String a = (String)myVector.elementAt(0); Code like that appears all over the place in Java. That's not strict typing.
You can learn the fundamentals of programming in any language, even COBOL, Fortran, BASIC, and Pascal. Oh, and C/C++. Your argument doesn't mean that Java is BETTER, only that it is functional.
it can introduce many different aspects of programming to a student... without having to learn another language/environment or some 3rd party libraries. This actually isn't a bad point. I'd argue that doing GUI or event programming puts you into Java Application or Java Applets, and those are not real-world problems, you know what I mean? If you're going to encounter GUI or event programming - as a professional programmer, it'll be in C/C++. So, teach it in C/C++... Right?
Java is a good language. I'm programming in it right now, and it's useful. Another language would not be as useful, for the task I'm working on. I acknowledge that Java has its strong points. However, C and then C++ should be the language(s) that are used to teach people how to program, in a Computer Science curriculum. Mainly for the reasons I listed, which you ignored.
The arguments I brought up against Java were just to illustrate my point... When someone says "Java is BETTER than C/C++ for TEACHING computer programming," I can say, "No, it's not." I agree with you that it has uses, is useful, and is not a bad language. I disagree with anyone that says that we should use it to teach Computer Science!
Again, it's EASIER for someone to learn in C and then C++ to switch to programming in Java - than it is for someone to learn in Java, and then switch to C and C++. And since MOST people will end up having to code in C or C++, eventually - teach it to them, in the first place!
This is fantastic, someone brings up the question "Is Java a better language to use, when teaching people Computer Science." I say "No," and try to explain my reasoning. So, obviously, I'm a troll. *sigh*
I've been a computer programmer for 20 years, and I write both Java Applets and Java Servlets every day. I've been working with Java for two years. I would argue that I'm qualified to make my own statements, and I'm not parroting things I've heard before.
There are currently 5 Million java developers worldwide. Java is the main language used for eCommerce. Do you want your web site to leak memory?
Are there more people who write in C/C++? Yes. Is it possible to write C/C++ code that doesn't leak memory? Yes. Is it possible to write Java Applets that unintentionally leak memory? YES. Java is not the main language used for eCommerce. You are incorrect. What language was Apache written in? What language was Windows written in? What language was Linux, BSD or any other UNIX written in? What language was your browser written in? What language was your TCP/IP stack written in? WHAT LANGUAGE WAS JAVA WRITTEN IN? I believe a more intelligent argument would be that eCommerce applications for making intranets, or serving non-static web pages are most commonly written in Java, and that the only language for doing client-side execution without a plug-in or otherwise installing software is Java or JavaScript. Regardless, that doesn't make it a good language to teach programming in. It also doesn't make it the most widely used language.
And this is Java's fault? You're hilarious. I was countering the argument that Java is cross-platform. Instead of establishing through example that it IS cross-platform, you seek to attribute blame to someone else. You have not defeated my argument : Java is not cross-platform, in the way that everyone harps it to be. Who's parroting?
Applets are hardly used anymore. Java was clearly a failure in this area Thank you for making my point for me. I can guarantee to you that if a University intends to teach Java as a programming language, they will at some point develop applets. This doesn't help anyone. They won't use that skill in the real world, and even if they wanted to, by your arguments, it wouldn't work. And in learning Java, they never learned pointers and memory management. Guess what? It'll be harder for them to learn C/C++, because of it. And you're ignoring my main point : it's EASIER TO LEARN JAVA, IF YOU'VE ONLY LEARNED C/C++ THAN IT IS TO LEARN C/C++, IF YOU'VE ONLY LEARNED JAVA!
Maybe, but when dealing with eCommerce or enterprise apps... You know what? Fine. Have your stinking eCommerce or enterprise apps. You know what? Most programmers are NOT writing eCommerce or enterprise apps. Let's prepare MOST programmers for the real world! And by the way, back to my early argument, making your web page look pretty is a small portion of your business. And no, enterprise applications are not clearly in the realm of Java, either. If you want to work for a consulting firm, be prepared to not write in Java. Because C/C++ is still king, in that market, too.
You obviously have no idea how java works. Thank you for being inflamatory. You're also incorrect.
Changing values passed into a method is not OO practice, and should be discouraged. What planet do you live on? So, it's okay for my method to return a value... But it's bad for it to return multiple values? I have to design a class, or use a Vector, in order to have my method return multiple values to you? I'm shocked that you think it's bad OO practice. I should have to write two functions? Or make a special purpose class? Or use a Vector? I can't even see through your argument to a spark of logic that might have created it!
Oh no... Please don't code anywhere near my app. I hope all your C code isn't in one file You know what? This whole discussion is about teaching programming. And when you TEACH programming, you're likely to start with small programs. The kind that are likely to be solved with one class. Like, if I want to teach about a FOR LOOP, you're proposing that I put that into multiple class files? Let's stay topical, okay? And my TOPICAL argument is that, while teaching someone programming, they're likely to do most of their coding in simple, one-class programs. And there will be the temptation to use global variables, just like there is in C/C++. But, in Java, you have the comforting blanket of it being a class variable! It's not a global variable! Having a class variable is perfectly OO! But guess what? They're using it like a global variable, and if they start coding in C/C++, they'll do the same thing. AGAIN, you're IGNORING my fundamental point - that it's EASIER TO LEARN JAVA, IF YOU UNDERSTAND C/C++ FIRST, THAN IT IS TO LEARN C/C++ IF YOU UNDERSTAND JAVA FIRST.
Java is not pure Object Oriented.
and C++ is?
I never said that. Again, you get mad at me for saying that Java has faults. Well, if they both have faults, that eradicates your argument that Java is BETTER. I'm not saying that C++ is pure OO. But I'm demonstrating that NEITHER IS JAVA.
I've had no problems developing in Linux and moving my executables to solaris or NT. Try moving them to C-64. Or Lego bricks. Guess what? You can with C. And yes, these are silly arguments, but they prove that C is more Cross-Platform than Java is. So, if your argument is that Java is more platform independent, so let's use it to TEACH - well, you're wrong. Does it take work to port code? Yes. Is it possible? Yes. I'm not saying Java isn't useful... I'm merely saying that it isn't a better language to use, when teaching computer programming. And my specific argument here is that, when you say Java is cross-platform, let me retort that C/C++ is MORE cross-platform.
Java is a very nice, high-level language; while it may not be suitable for beginners, it provides a lot of things that make it useful to people who want to get things done in business. This is going to surprise you : I agree with this statement 100%. And the whole point of this Ask Slashdot was if Java was a BETTER language to teach beginners. And the whole point of my post was to say that it's not. But you seemed to ignore that, and got mad that I pointed out that there are flaws in Java, there are flaws in the argument that Java is cross-platform, and there are flaws in the argument that Java is the perfect OO language. My point remains : Java should not be used to teach computer programming, or Computer Science.
I speak as someone who learned to program in BASIC, then in Pascal, then in C, then in Object-Oriented Pascal (like, the exact day that it became available from Borland), and then C++. From that foundation I have learned about every language that you can name. And in my opinion, the best language to use when teaching people Computer Science, is C and then C++ - when it's time to discuss OO.
It is widely and freely available. Not as much as C or C++. Almost every machine on the planet is capable of running C code. That's not true of Java. And you're never going to write device drivers in Java.
It is being used widely in the industry - again, not as widely as C / C++. Not even close.
I think educational institutions have a responsibility to release students with marketable skills. I agree with this statement, whole-heartedly. Unfortunately, you seem to think that Java programming is a marketable skill. Or at least, you seem to think it's MORE marketable than C/C++. Which is insane. Any reasonably competent C/C++ coder can pick up Java in a heartbeat. The converse is not true. I've seen Java coders who STILL can't figure out how to dispose of memory, basically don't understand the difference between stack and heap, and don't understand pointers well enough to dispose of an element of a linked list.
And Java offers all the needed constructs and is good to teach the OOAD methodology. No, it doesn't. By virtue of using Garbage Collection, it is taking memory management out of the hands of the developer, teaching people to be lazy when it comes to object instantiation and use. Not having pass-by-reference gives people the idea that having class-level variables is a viable option. But the problem is that most simple projects are written in one class, which essentially teaches them to use global variables - which is not good. Lacking pointers is the critical flaw...
It's possible to learn C/C++, with an understanding of Java. But it's far easier to learn Java with an understanding of C/C++.
Most people will end up coding C/C++ for most of their work. Teach them to use the language that they'll end up using. Specifically because it's easy for them to then learn Java. Whereas if you taught them Java, it's not as easy for them to then learn C/C++.
Java may be just fine for the purposes of teaching Computer Science, but it's one of the worst programming languages around - as far as teaching people to be a professional programmer.
There are NOT that many people who will use Java, in their professional lives. Applets are a pain in the ass, because every browser / version on the planet behaves differently. Something new has got to come along and kill Java in this market, possibly even Java 2.0, just centrally controlled and with forced updates. And writing servlets is going to be the responsibility of a comparatively small number of programmers. So, it's really not that important that every college grad with a BS in Computer Science knows how to do it. Well, those are the two situations where Java has dominance. Other than that, it's a not-very-good language to use. Specifically, it's a bad language to use to teach someone to be a professional programmer. Here's why :
Memory management. Real, professional programmers need to know how to manage memory, both in RAM, and on a physical medium. Java not only doesn't help, it hinders understanding in this area. Garbage Collection is a clever trick, but if you get used to that net being under you, and you've never used another language, programming in C will be a rude shock. Like I said, Java might be fine for teaching Computer Science, but my whole point is that Java, in this specific case, is horrible for teaching people to be a professional programmer.
Passing by reference. In order to pass values by reference in Java, you have to make another class to do it? That's nuts! It's a horrible thing to teach someone to do. And since your entire Java code is likely to be in one class, it'll teach people to use global variables to store all of their important data. Not a good way to go!
Why are there integer and Integer? double and Double? Java is not pure Object Oriented, because if it were, there wouldn't be two classes for an integer value, okay? And the fact that you HAVE TO use them both just shows that it's a horrible class library. I'm not saying that C or C++ really crush Java in this department, but my point is that Java has its failings, when it comes to teaching OOP.
Now, here's an important point : Java is fine. If you learned it as your first language, you can go on to learn any language you want. My point is that it takes more effort to go from Java to C++, than it takes to go from C++ to Java. Why on Earth would you WANT to cripple students? Let's give them false perceptions about what programming is really about, and what's important to keep track of. Let's pretend pointers don't exist, and argue that being cross-platform is the Holy Grail, while using a language that is NOT cross-platform. (Try wrighting an applet that actually does anything useful, and then try to run it under Netscape on a Macintosh. Then you can preach to me about how cross-platform Java is. Some versions of Java crash when you ASK THEM WHAT VERSION THEY ARE!!!) Or that OOP is the Holy Grail, while using a language that itself doesn't do a very good job of being Object-Oriented.
Teach C++. Most students will end up spending most of their time using it, anyway. Don't make their lives more difficult by teaching them first in a language that hinders their learning!
Now that we've got electronic PAPER, are we going to have electronic SILLY PUDDY?!
Check out the review of Lineage : The Blood Pledge at The Adrenaline Vault.
From that article about the Garriot brothers:
The brothers also announced a partnership with NCsoft, the South Korean company that runs the world's largest subscriber-based online game, Lineage: The Blood Pledge.
The company has 2 million subscribers in South Korea alone; under the partnership, Lineage will be repackaged and relaunched in the United States this fall. Meanwhile, Lineage creator Jake Song will move to Austin to help develop games, which NCsoft will help launch in Asia.
Guys, calm down! That's what version control is for! If you maintain a project on SourceForge, just look at the diffs to make sure nothing malicious was done in that time frame! (Assuming of course that the SourceForge guys did a decent job of keeping backups.)
BMRT - Blue Moon Rendering Tools, is a free, downloadable RenderMan-compliant radiosity renderer, which was written by Larry Gritz, a former employee of Pixar's. It's not exactly Pixar's Renderman (PhotoRealistic Renderman), but it's not bad - and it actually gets used by many of the same people who use Pixar's RenderMan.
From the article :
The brothers also announced a partnership with NCsoft, the South Korean company that runs the world's largest subscriber-based online game, Lineage: The Blood Pledge.
The company has 2 million subscribers in South Korea alone; under the partnership, Lineage will be repackaged and relaunched in the United States this fall. Meanwhile, Lineage creator Jake Song will move to Austin to help develop games, which NCsoft will help launch in Asia. (Emphasis added.)
How the hell is there a game with 2 million subscribers - almost 6 times the subscribers of EverQuest - that I've never heard of before?!
This game looks sweet - like what I've wanted to play for a long time : an MMPORPG (with 2 million players) that looks like Diablo II! Cool, cool, cool. Again, I hope their support of it, and their localization doesn't suck!
Okay, so you think that the "Linux myths" article is good for a laugh. Well, where's the response? I want to see an articulate response to the points that Microsoft brings up. I'm willing to bet that they funded the "independant" tests. I know that they're lying about the cost of tech support - Microsoft charges more for tech support than anyone. I'm amazed that they can claim that IIS is a better web server than Apache. So, if Linux is so great, where's the response to this? I mean, everyone keeps bitching about FUD, about how Microsoft is using words like "virus," and wow, that's really going to change public perception! But, hey - here's a list of things that Microsoft claims is FACTUAL EVIDENCE that Linux sucks. Let's refute these claims in an organized manner, okay? I want to see a response to all of Microsoft's points. Let's admit defeat, if it's true that Microsoft knows how to PRINT faster than Linux. But when they say that Linux can't support x amount of memory, doesn't do Journaling File Systems, Apache is slower and less efficient than IIS - let's refute those claims if we can! Okay? I don't have the time, resources, or energy to do this - but I think it's an important thing to do!
Capitalism is viral - it's how the USSR lost the cold war - they couldn't compete with our markets and efficiency.
Democracy is viral - almost every form of government that has tried to resist it has fallen. (With a few exceptions, and I'd argue that it's only a matter of time.)
Brilliant ideas transform society in a way that cannot be opposed, cannot be ignored, and they have a way of making life better. The GNU GPL is a brilliant idea - and it's only a matter of time, Microsoft.
We can do it better, cheaper, faster. What leg do you plan to stand on? Oh, right - legislation and name-calling. Sorry, I forgot.
By the way, I think that The Family Guy is only derivative of The Simpsons in that it's a cartoon with a fat guy. I mean, let's call The Simpsons derivative of FAT ALBERT. *chuckles*
The Family Guy is hilarious. It's truly inventive, and it's got Adam West - freaking Batman - as the voice of the Mayor. What more do you need? Oh, crap - I almost forgot - Norm Macdonald as Death was incredible. And Seth Green - Scott Evil - as Chris Griffin! This show is awesome - don't listen to Teahouse - check it out if you haven't seen it already. Just be prepared to be offended. *grins*
"Holy crip, he's a crapple!" -Peter Griffin
6:00 - Futurama
6:30 - The Family Guy
7:00 - The Simpsons
7:30 - The Tick
8:00 - Malcolm In The Middle
8:30 - King Of The Hill
9:00 - The X-Files
With this lineup, FOX would own my eyes from 6:00 until 8:00 every time, and sometimes until 9:00.
In my opinion, The Family Guy is the funniest show on television. Futurama is hilarious, and The Simpsons is almost always good for a few laughs - especially the Halloween shows. I'm looking forward to The Tick, and I hope I can just grin and bear it through the name and persona changes for American Maid and Die Fledermause. Patrick Warburton (?) (soon to be The Tick) was the voice of a guard in The Emperor's New Clothes, as a large goofy guy (much like The Tick), and he was great in that role. I think The Tick has a real chance of being good. I can't wait for the return of The Family Guy, and the premier of The Tick!
I don't know about the OpenSource part of it, but you should check out GroupLens at the University of Minnesota. They've published some papers that are available online.
Maybe we should curb population growth. How's that for a wild idea. Everyone gets to have two kids, and the population goes down. End result, no more food shortage. And we don't even have to make the Six Million Dollar Sea Bass.
Before, a bully would have to beat the crap out of you by himself, otherwise he'd be a coward. Today, no such distinction exists. The mentality has switched from "I'm so tough I can beat the crap out of you" to "We're so tough, we can beat the crap out of you."
It's a hell of a lot easier to stand up and take a beating from one person than from a crowd. There's no honorable way for an outcast to resolve a situation, stand up for what they believe in, or get any help.
Let's blame the kids that're abused.
I was upset that they didn't upload the software that would allow Keanu to act. "I know acting." "Show me."
In 1991, I was ftp'ing songs like "Stairway To Heaven" (as an AU or WAV, I can't remember) off of a remote server (not at my University), and piping it (unbuffered) to /dev/audio on a Sparc in a computer lab. Yes, it was kind of choppy most of the time, but sometimes there wouldn't be a single hitch. It worked - 10 years ago. So, if you had told me in 1997 that by 2001 the "average" user would be doing the same thing, I wouldn't have been surprised at all.
So much programming has to do with a fundamental understanding of Algebra. And as most mathematicians would agree, the best way to learn a concept is to take a class that builds on that knowledge. (Or teach it to someone else, if you get the chance!) Nothing builds on algebra in a practical way as much as calculus does. If you do well in calculus, you know enough algebra to survive. If, on the other hand, you can't survive calculus - you're going to have a hard time mastering algebra. You're right, you likely won't end up using Calculus, but you're sure as hell going to need a firm understanding of Algebra - and Trig never hurt, either. Calculus is the best way to make sure you know Algebra and Trig.
I'm reminded of the joke of the mathematician who awoke in a burning hotel room. He excitedly got out of bed, ran to the sink, lit a match, and poured running water over it. Observing that the match went out, he relaxed, asserting, "A solution exists!"
First two years all assembly is a little extreme. I almost like the idea of Programming Assignment 1, write a program in C to find the first 100 prime numbers. Assignment 2, translate your code to assembly. Always give them carrots to push the envelope of their understanding of design, and then beat them with the stick of understanding how the computer actually executes that design. *grins*
Couldn't have said it better myself. You don't teach people how to fly in a helicopter. *grins*
switch (a)
{
case 0:
printf("a = 0\n");
break;
case 1:
printf("a = 1\n");
break;
case 2:
printf("a = 2\n");
break;
case 3:
printf("a = 3\n");
break;
case 4:
printf("a = 4\n");
break;
}
When I asked them why they didn't code
printf("a = %d\n", a);
They said that their way was "easier." *shudders* That's one of the reasons why I fear teamwork-oriented teaching. Some people can just get lost and never find their way back.
Traditionally, the science of computing is all about math. Theoretical computer science is almost all about math. Practical computer science (ie programming) is almost all about design, interfaces (PROGRAMMING interfaces, not visual), and encapsulation. Those things don't have nearly so much math in them as your argument implies.
CS is about programming. Your assertion that it is not is weak. If you want to talk about the theoretical branch or aspect of Computer Science, that's fine - and I'll agree - programming is essentially an exercise left up to the reader. But you know what? Most people who use math have to apply it to a real-world problem. Unless you're in education or some wacky research, to earn a paycheck, math is applied to a real-world problem. Same thing with Computer Science.