Java killed the computer scientist?

Started by Ryudo Lee, January 22, 2008, 02:14:24 PM

Previous topic - Next topic

Ryudo Lee

http://itmanagement.earthweb.com/career/article.php/3722876

Well, not exactly killed, but according to a couple of NYU professors emeritus, using Java in the Computer Science curriculum is certainly hurting budding software engineers.  I mean, let's face it, Java is made for the internet.  Java doesn't teach you about the intricate inner workings of a computer and the interactions between hardware and OS's.  And I agree with them on those parts.  All you need to do is include some graphic libraries, type in some cookie-cutter-formed code, maybe even link to a MySQL database, and you've got software.  Pretty easy.

But, where I disagree with these guys is that Java does teach some of the fundamentals.  Specifically form, design, and it's a decent introduction into object oriented programming.  Granted, you're not dealing with code on the level of C, but it is a foundation in the form and style of modern programming.

Myself, I went to Nicholls State University.  They're not known for their Computer Science program.  They're known for the John Folse Cooking School.  But I took their CS classes because at the time, that's what interested me.  Every last one of the CS classes I took taught Java, except for the lower level class which was PASCAL, but I didn't have to take that class.  I think that my experience with Java was a good one, in that I learned form, design, etc.  And I feel that it's a good jumping off point to dive into other languages, such as C or ASP or Python or whatnot.  Because really, once you learn one language, the rest is just syntax.  Right?

And who in their right mind would only learn ONE programming language in this day and age?  I mean, look at some of the job listings for software developers.  They want people who have experience in multiple languages.  Yes, college only teaches you ONE language.  But if you wanna make it in the world of software engineering, you gotta read some programming books and get some experience under your belt.  You can't expect college to do it all for you.  Right?  Whatever happened to independant study?  There is still such a thing as "self-taught" you know, especially when you can back it up with useful programs.

What do you guys think?

Thanks to Taski & Silverfoxr for the artwork!



Tapewolf

Embedded systems, OS design and application debugging still require an understanding at the assembler level.  Granted I learned assembler myself, but that's because it was necessary to write a decent game.  Now that you have DirectX, that is unnecessary, which IMHO bodes ill for the future.

J.P. Morris, Chief Engineer DMFA Radio Project * IT-HE * D-T-E


Ryudo Lee

Quote from: Tapewolf on January 22, 2008, 02:26:31 PM
Embedded systems, OS design and application debugging still require an understanding at the assembler level.

Indeed, and that's basically what they're saying that students aren't learning.  Even so, if you do enough searching around on the internet you can find FAQs on assembly, heck you could even look at some source at the same time.  There's certainly enough of that out there.

What I have a problem with regarding these guys is that they're shouting doom because colleges are dumbing down the CS curriculum to cookie-cutter Java apps.  Perhaps they think that students don't have enough sense to read up on other languages?

Thanks to Taski & Silverfoxr for the artwork!



rabid_fox


Whereas I got forced to take ICT at A-Level, passed it well and never, ever, ever took any interest in the workings of a computer again. Viciously dull stuff. I'll pay some other chipmonkey to fix things if they should break on me.

Oh dear.

Cvstos

I'm currently taking CS at Purdue.  We're using a mix of Java, C, and C++.  There is some very, VERY basic RISC assembler in the architecture course but that's it.  THe program is math heavy.  I'm taking 3 math courses this semester.  Provided I pass all three, I'll be done with all my math requirements.  (All three are 300-level courses.  I've already had Calc III, DiffEq, and Linear Algebra.  I'm presently taking Abstract Math, Discrete Math, and Probabilities.)

I had an OS course last year.  That was in C and focused on Windows. 

Algorithms, Computer Graphics, and Database systems are next semester.  I don't know about Database systems but the other two are always in some form of C.

Death of the CS major?  The complaints stated in this thread isn't what's killing me.  It's my schedule that's killing me :P *resumes studying*
"The problems that exist in the world today cannot be solved by the level of thinking that created them." - Albert Einstein

"Great spirits have always found violent opposition from mediocrities. The latter cannot understand it when a man does not thoughtlessly submit to hereditary prejudices but honestly and courageously uses his intelligence." -Albert Einstein

Tapewolf

How on earth can you study OSes using Windows, when there's no source code to look at?

J.P. Morris, Chief Engineer DMFA Radio Project * IT-HE * D-T-E


Ryudo Lee

#6
Quote from: Cvstos on January 22, 2008, 04:32:55 PM
I'm currently taking CS at Purdue.  We're using a mix of Java, C, and C++.  There is some very, VERY basic RISC assembler in the architecture course but that's it.  THe program is math heavy. 

... shoulda gone to Purdue...

Quote from: Cvstos on January 22, 2008, 04:32:55 PM
I'm taking 3 math courses this semester.  Provided I pass all three, I'll be done with all my math requirements.  (All three are 300-level courses.  I've already had Calc III, DiffEq, and Linear Algebra.  I'm presently taking Abstract Math, Discrete Math, and Probabilities.)

My god, my brain hurts just thinking about that kind of load! That would make my head go asplode!
:explosion

Quote from: Tapewolf on January 22, 2008, 04:33:57 PM
How on earth can you study OSes using Windows, when there's no source code to look at?

Actually... ReactOS is open source, and is attempting to make an OS that can run all Windows-based code out of the box.  Or maybe they (legally?) got their hands on that leaked source of WinNT4 (or was it 2000?) from back in the day. 

Anyway, it's good to hear that not all CS programs are based solely on Java.

Thanks to Taski & Silverfoxr for the artwork!



Alondro

*Charles attempts to learn computer language... and accidently creates Skynet and Terminators and destroys mankind*  The sad part is, I'm not sure if this is a good or a bad thing.   :P

I used DOS.. once... I made a square on the screen with words in it.

And that is the extent of my programming abilities.   :B
Three's a crowd:  One lordly leonine of the Leyjon, one cruel and cunning cubi goddess, and one utterly doomed human stuck between them.

http://www.furfire.org/art/yapcharli2.gif

Reese Tora

Hmm, I couldn't say if what they say is true or not to me, but I know that a lot of structure can be learned from Java.

My experience has been with basic programming, though (apple basic, Commodore basic, Q basic, Pascale) and I didn't get my hands on an honest to goodness object oriented or low level language until college.  My college(a 2 year community college) offers Java and C++ as alternate paths for it's computer science degrees. (I believe that Visual Basic is a third alternate path, I havn't seen the requirements in a while)

I didn't realize that CompSci had such heavy math requirements in it, the 2 years all just had a prerequisite of some 100 level math... then again, it is a 2 year degree.
<-Reese yaps by Silverfox and Animation by Tiger_T->
correlation =/= causation

superluser

Quote from: Ryudo Lee on January 22, 2008, 02:14:24 PMBut, where I disagree with these guys is that Java does teach some of the fundamentals.  Specifically form, design, and it's a decent introduction into object oriented programming.

Yeah!  Programming languages have gone downhill ever since Fortran 90.  I say we should create a language based on Makefiles and syntactic whitespace.

Seriously now, I remember first learning programming languages with BASIC.  Does it teach good programming skills?  Heck, no.  Is it good as a starting point?  Sure.

the problem that I have is that many CS majors that I talk to seem to start with Java and they end with Java.  If they're really advanced, they move up to C# by the time they graduate.

Java is nice, but the features of the JVM encourage sloppy programming.  You don't have to worry about portability or exception handling or garbage collection, because that's all taken care of with the JVM.

Let me be frank--those are *good* things to have in a language.  But when you switch from Java to another system which deals slightly differently with those issues (or doesn't deal with them at all), you're going to have a steep learning curve.

You should have to learn at least a couple low-level languages in CS, in my opinion.  Mainly to see how concepts are not universal.

Quote from: Reese Tora on January 22, 2008, 10:19:46 PMMy college(a 2 year community college) offers Java and C++ as alternate paths for it's computer science degrees.

Ew?  It's not exactly like those are really different paths for programming.


Would you like a googolplex (gzipped 57 times)?

Reese Tora

sorry?

Just saying that Java and C(++) are both available options, it's not just Java.
<-Reese yaps by Silverfox and Animation by Tiger_T->
correlation =/= causation

superluser

Quote from: Reese Tora on January 23, 2008, 12:20:12 AMJust saying that Java and C(++) are both available options, it's not just Java.

So is it C or C++?  C++, last I used it, was not so hot.  The UNIX-Haters Handbook has a chapter on it, where it refers to it as ``The COBOL of the 90s.''

C on the other hand, is quite good.  (Yes, UNIX-haters skewer C, as well, but typically their complaints are of the form ``...but it's not LISP.'')  For all of C's deficiencies, it compiles very cleanly and is extremely portable.


Would you like a googolplex (gzipped 57 times)?

Reese Tora

Quote from: superluser on January 23, 2008, 01:19:38 AM
Quote from: Reese Tora on January 23, 2008, 12:20:12 AMJust saying that Java and C(++) are both available options, it's not just Java.

So is it C or C++?  C++, last I used it, was not so hot.  The UNIX-Haters Handbook has a chapter on it, where it refers to it as ``The COBOL of the 90s.''

C on the other hand, is quite good.  (Yes, UNIX-haters skewer C, as well, but typically their complaints are of the form ``...but it's not LISP.'')  For all of C's deficiencies, it compiles very cleanly and is extremely portable.

C++, I think, but I don't think I took any of the classes that would have covered any of the stuff that isn't in C
(unless, you know, C++ isn't C with object orinted and stuff slapped on)

I didn't go too far before I fell in love with networking through one of the CompSci electives I took.
<-Reese yaps by Silverfox and Animation by Tiger_T->
correlation =/= causation

superluser

Quote from: Reese Tora on January 23, 2008, 01:49:49 AMC++, I think, but I don't think I took any of the classes that would have covered any of the stuff that isn't in C
(unless, you know, C++ isn't C with object orinted and stuff slapped on)

It's not.  C++ is different from C.  One of the main differences is that C++ doesn't have a grammar.  It is not possible to look at a line of code and tell if it will compile.  This may have changed since ISO standardization, but I don't hold out hope.


Would you like a googolplex (gzipped 57 times)?

Cvstos

#14
Quote from: superluser on January 23, 2008, 01:19:38 AM
Quote from: Reese Tora on January 23, 2008, 12:20:12 AMJust saying that Java and C(++) are both available options, it's not just Java.

So is it C or C++?  C++, last I used it, was not so hot.  The UNIX-Haters Handbook has a chapter on it, where it refers to it as ``The COBOL of the 90s.''

C on the other hand, is quite good.  (Yes, UNIX-haters skewer C, as well, but typically their complaints are of the form ``...but it's not LISP.'')  For all of C's deficiencies, it compiles very cleanly and is extremely portable.

Yes, but C++ has a better implementation of objects, which opens up a lot of possibilities.  (Remember, it's not just "Is it possible?"  Yes, you can do objects in C, but they're extremely primitive and hard to work with.  You also have to consider ease of use.  If it's a huge pain in the ass to work with, it's probably not a good language to use for that problem.  Hence, C++ is better for object oriented design and programming.)

Quote from: Tapewolf on January 22, 2008, 04:33:57 PM
How on earth can you study OSes using Windows, when there's no source code to look at?

We looked at how OSes operate mostly in the general sense.  Windows was used for the programming examples but they weren't particularly deep.  The real meat of the course was all theoretical.  Lots of generalized explaining, picture drawing, etc.  I learned an awful lot about operating systems, really!

Quote
Quote from: Cvstos on January 22, 2008, 04:32:55 PM
I'm taking 3 math courses this semester.  Provided I pass all three, I'll be done with all my math requirements.  (All three are 300-level courses.  I've already had Calc III, DiffEq, and Linear Algebra.  I'm presently taking Abstract Math, Discrete Math, and Probabilities.)

My god, my brain hurts just thinking about that kind of load! That would make my head go asplode!
:explosion

Believe me, by the end of this semester I'm sure my brain will have either packed up and abandoned me or exploded.
"The problems that exist in the world today cannot be solved by the level of thinking that created them." - Albert Einstein

"Great spirits have always found violent opposition from mediocrities. The latter cannot understand it when a man does not thoughtlessly submit to hereditary prejudices but honestly and courageously uses his intelligence." -Albert Einstein

Tezkat


Quote from: Reese Tora on January 22, 2008, 10:19:46 PM
I didn't realize that CompSci had such heavy math requirements in it, the 2 years all just had a prerequisite of some 100 level math... then again, it is a 2 year degree.

I'd say that a major thing differentiating computer science degrees from other tracks is the math component. You can teach any monkey to code, but I'd expect a CS grad to really understand the theory behind it. Choice of algorthims don't matter a great deal when you're building toy apps or just filling a black box to very tight specs, but when you graduate to very large and/or concurrent systems, then using... say... one search algorithm over another could mean the difference between code running in realtime and taking days to complete. Algorithm design and optimization requires an understanding of the math. Inputs into the design process are sensitive to issues of implmentation under the hood of the hardware abstraction layers.

If, as the article asserts, we're no longer teaching kids to deal with that, then... well... maybe the authors have a point. We don't need to graduate plug and play code monkeys anymore. Places like India are doing it for us, and they're doing it much more cheaply.

Quote from: Tapewolf on January 22, 2008, 04:33:57 PM
How on earth can you study OSes using Windows, when there's no source code to look at?

Meh... the basic architecture of Windows is well documented. In any event, how can you teach the basics of OS programming using any production grade OS, when there's so freakin much source code to look at? :3 The practical component of my OS programming courses used small realtime kernel that the professors had written for the class. It was simple enough to understand what we were fiddling with.

The same thing we do every night, Pinky...

llearch n'n'daCorna

Quote from: superluser on January 22, 2008, 10:26:04 PM
Yeah!  Programming languages have gone downhill ever since Fortran 90.  I say we should create a language based on Makefiles and syntactic whitespace.

Ooo. I've done that!

... you evil sod, that'd be abysmal to complete -anything- in...
Thanks for all the images | Unofficial DMFA IRC server
"We found Scientology!" -- The Bad Idea Bears

Ryudo Lee

I'm not surprised about the whole math part of the curriculum.  My requirements included quite a few 300 level maths... and biology... and history.... I never understood why those last two were needed, except maybe as filler for the degree.  Anyway calculus killed my passion (and GPA) for the degree, so I got my A+ and went into networking.

In any case, all I was ever taught was Java syntax, data structures and algorithms.  We only touched on objects... because the professors were still learning how to use them.

Thanks to Taski & Silverfoxr for the artwork!



superluser

Quote from: Cvstos on January 23, 2008, 02:22:35 AMYes, but C++ has a better implementation of objects

No, C++ has implementation of objects.

C really doesn't.  Of course, if I wanted to learn objects, I'd use Common LISP.

Quote from: Tezkat on January 23, 2008, 07:03:19 AMI'd say that a major thing differentiating computer science degrees from other tracks is the math component. You can teach any monkey to code, but I'd expect a CS grad to really understand the theory behind it. Choice of algorthims don't matter a great deal when you're building toy apps or just filling a black box to very tight specs, but when you graduate to very large and/or concurrent systems, then using... say... one search algorithm over another could mean the difference between code running in realtime and taking days to complete.

Indeed.

I got owned a while back in a programming discussion.  Someone was claiming that it really didn't matter how efficiently you programmed because computers were so fast these days.

I responded that you *could* run a primes test by searching for factors starting with the number and working backward to two, and on my machine, that would take nearly 20 minutes to find all primes smaller than 1,000,000.  If you reversed the test, it would take 90 seconds.

Someone else pointed out that if you ran the test the proper way, from 2 to sqrt(n), it would take 3 seconds.

So yes, math is important.  This is a good overview for those of you who aren't terribly familiar with the subject.


Would you like a googolplex (gzipped 57 times)?

Jigsaw Forte

As a Computer Science Major at Georgia Tech:

I am about to graduate.
I know Java, C, Python, Squeak / Smalltalk, Lisp, and am currently programming a robot in BASIC. Oh, and HTML, CSS, and PHP, which mostly got picked up in my spare time for the sites I do.
I do not, however, feel comfortable programming.

I can program, but I know people who would get to it faster and everything else. My best work is in designing UIs and making with the pretty - mostly front-end, which typically means less coding is needed.

I do not understand how learning any single language makes you a programmer. I do not, on an average basis, do much if any actual programming. I would, however, call myself one long before I let any of those goofs do it.

llearch n'n'daCorna

Thanks for all the images | Unofficial DMFA IRC server
"We found Scientology!" -- The Bad Idea Bears

Reese Tora

Quote from: superluser on January 23, 2008, 02:17:47 AM
Quote from: Reese Tora on January 23, 2008, 01:49:49 AMC++, I think, but I don't think I took any of the classes that would have covered any of the stuff that isn't in C
(unless, you know, C++ isn't C with object orinted and stuff slapped on)

It's not.  C++ is different from C.  One of the main differences is that C++ doesn't have a grammar.  It is not possible to look at a line of code and tell if it will compile.  This may have changed since ISO standardization, but I don't hold out hope.

Oddly enough, someone I know posted a perfect axample of that on DA:

OMNOMNOM
<-Reese yaps by Silverfox and Animation by Tiger_T->
correlation =/= causation

superluser

Quote from: Reese Tora on January 25, 2008, 09:52:11 PM
Quote from: superluser on January 23, 2008, 02:17:47 AM
Quote from: Reese Tora on January 23, 2008, 01:49:49 AMC++, I think, but I don't think I took any of the classes that would have covered any of the stuff that isn't in C
(unless, you know, C++ isn't C with object orinted and stuff slapped on)

It's not.  C++ is different from C.  One of the main differences is that C++ doesn't have a grammar.  It is not possible to look at a line of code and tell if it will compile.  This may have changed since ISO standardization, but I don't hold out hope.

Oddly enough, someone I know posted a perfect axample of that on DA:

OMNOMNOM

Oh, no.  I'm not talking about that.  Obfuscated C is part of the fun.

For example, this award-winning program for finding the value of pi:

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}


Even syntax like

for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("|"+(*u/4) %2);

is syntax.  C++ doesn't have that.

For example, what does the following code do?

a << b << c << d << e;


Would you like a googolplex (gzipped 57 times)?

llearch n'n'daCorna

Quote from: Reese Tora on January 25, 2008, 09:52:11 PM
Oddly enough, someone I know posted a perfect axample of that on DA:

OMNOMNOM

.. what the hell does that do, anyway?
Thanks for all the images | Unofficial DMFA IRC server
"We found Scientology!" -- The Bad Idea Bears

Tapewolf

Quote from: llearch n'n'daCorna on January 26, 2008, 01:58:49 PM
.. what the hell does that do, anyway?


TiFiona:~ tapewolf$ ./omnom
test
OMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOM
jdhjgffkjdhgjhfgdjkhdkfsjgdfsg
OMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOMNOM

J.P. Morris, Chief Engineer DMFA Radio Project * IT-HE * D-T-E


Reese Tora

If you type in "OMNOMNOM" as your input, it exits.

I don't think it does anything else
<-Reese yaps by Silverfox and Animation by Tiger_T->
correlation =/= causation

llearch n'n'daCorna

Thanks for all the images | Unofficial DMFA IRC server
"We found Scientology!" -- The Bad Idea Bears