tags:

views:

777

answers:

16

I am asking this because I read Joel's The Perils of JavaSchools.

+3  A: 

I think the opposite is true without further argumentation.

OscarRyz
+17  A: 

No, Java is a fine language that can help you learn various techniques invaluable while programming. What gets you in trouble is if you only learn Java, and never try out other languages to learn the various interesting ways that languages differ.

But this applies to nearly everything, not just languages. If I go to a restaurant and really enjoy their chicken fried steak, but never try any other restaurants, how will I know what I'm missing out on?

NilObject
On the other hand, learning Java with all its idiosyncrasies might put someone off programming—or certain programming ideas—for good. (If you go to a restaurant and try chicken fried steak and find it terrible…)
ShreevatsaR
Very good point.
NilObject
Terrible? Really? Java like every language cannot be everything for everyone (then it would be lisp) but terrible? There is no good first language, just a first language for doing X.
Paxic
http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html It's just artificial to how people think. (This is partly not specific to Java but to OO in general.)
ShreevatsaR
@Paxic: I liked your LISP pun there. I'm a Clojurer ^_^
Rayne
+1  A: 

Everyone has to start with one language or another. Java is not a bad one to start with and was the second OO strongly typed language I learned. Keep an open mind to other languages and ways of doing things and you won't go wrong. Learning one new language a year is my personal goal, to keep my knowledge current.

Here is my rough timeline of languages studied/used:

  • Q-Basic
  • Paschal
  • C++
  • Lisp
  • Java
  • Perl
  • Various Assembly languages
  • PHP
  • VB 5/6
  • VB.NET
  • C#
  • Ruby
  • F#

Important things to learn which are language-agnostic are Programming Patterns

Chris Ballance
+1  A: 

It's going to show you one way to go about things, mainly the OO way. But I don't think it will permanently ruin you or anything, unless you take that as being the only way and fail to explore other paradigms later on (especially functional, IMO)

wybiral
+1  A: 

I wouldn't worry too much about your starting language, I started with VB3. The way to look at it is a language is a language it's really the logic and concepts you have to nail then you can port your knowledge to any language.

Quintin Robinson
+2  A: 

I agree with NilObject.

Personally I started with Java and wouldn't have it any other way! Granted, I had a great teacher for it though. Since then I have had no trouble moving onto any other languages (though I still think that C++ looks ugly in comparison :D). At any rate, this is my two cents.

Mike
+5  A: 

Joel's take is, that Java won't teach you how computers work. But no, it won't take away you chance to learn how computers work.

gbarry
If you want to learn how to program use Java with an IDE. If you really want to learn how computers work, you get get out your soldering iron and build one from scratch, using and/or gates etc ;)
Peter Lawrey
That's because Joel has a very narrow worldview of what a computer is (basically, an x86 Windows PC). The JVM is heavily based on the Burroughs B5000 computer, which, despite being designed in 1961, is still decades ahead of anything you can pick up from Dell or at an Apple Store.
Jörg W Mittag
So, while Java won't teach you how x86 Windows PCs work, it *will* teach you how, say a B5000 or an IBM AS/400 (which is based on the UCSD Pascal P-Code VM, which is in turn again based on the B5000) work.
Jörg W Mittag
Then we should learn ALGOL, not Java :)This seems to be about tokens, interpeters, and VM's. Really, we have to admit that "How Computers Work" is not a simple topic, to be explained by one concept.
gbarry
+1  A: 

Your programming base is logic, reasoning and a good sense. You can transmit that through English language and it will still be a great program (except there is no compiler for it ... yet).

So, go on, learn whichever language works for you right now. Java, C#, Perl, Python, Ruby share the commonality of being object-oriented while not bugging you down to pointer arithmetic and unsafe capabilities of C, C++.

You don't have to know pointers first. Someone may even argue that you don't have to know it ever (unless you do certain kinds of programming).

Pita.O
+5  A: 

Pick any programming langauge. Get two or three books. Read the books and work through the code. Don't simply read the books - try all the code. Compile the code and see what the output is. Modify the code and see what the new output is. Break the code and figure out how to fix it.

After you have done that for a while (say 3 months) get a couple of more advanced books and a general book on program design. Books like Effective Java or Code Complete or the Design and Evolution of C++ (those 3 books you should read regardless of what language you selected to start with). Read those books and see how you can apply what they talk about to the code you have written (you will likely find that you have done a lot of things "wrong" and you will now see better ways of doing them).

After you have read those books (or similar ones) then start looking at a different langauge. If you chose Java take a look at something different (and I mean really different, so not C++ or C#). C would work well as would something like Python. Do the same thing - grab 3 books and start working through them. At the same time keep going with the first language. Try writing the same program in both languages.

Overall to really "learn" a language probably takes a couple of years (yup, I said a couple of years). Once you have done that picking up a new language is relatively easy. Programming is all about patterns and recongizing when to apply them (not talking about GoF design patterns, just common ways of doing things).

TofuBeer
Your first paragraph is great advice for someone learning a new language.
Chris Ballance
+4  A: 

Learning some too low-level language first can ruin your programming future - if it makes you feel so frustrated that you decide to switch your career to McDonald's instead. Java is fine.

Joonas Pulakka
It won't be long before Java is described as "too low-level" like C is today, or like assembler was in the 70s
finnw
A: 

Interesting article.

My only Java course was for GUI design and I think it was a great language for that. Java is too easy for the most part to be used in any "programming" course.

A: 

Java will only spoil you if you don't think about your profession!

If you learn a language (no matter how bad) then you will find it easier to learn another and another. Try reading some of the classic books about program design as well.

Heck, most guys I know and respect learned line numbered Basic as their first language and it didn't spoil them.

Java is a great language (despite the naysayers). It is the backbone of business in the US, UK and Europe.

Fortyrunner
+4  A: 

A failure to think critically on your own is far more likely to kill your career than writing Java.

Joel's claim seems no less true for C#, yet I don't see any articles claiming that writing it will ruin a programmer.

Will Lisp or Smalltalk or F# teach you how a computer works any better?

Writing in a high level language of any kind hides what's going on in the layers below from the user. That's the whole point.

If you want to know how hardware works, study hardware. If you want to understand how software and hardware interact, I'd recommend that you write a simulator for a particular architecture. I had to do it for a PDP-8 and learned a lot.

I'm not a fan of the Deitel and Deitel books, but their "C++: How To Program" book had a very nice exercise that did just that.

Joel and Jeff and people like them are smart guys, but that doesn't mean you shouldn't question them or fail to think for yourself. You should examine any argument for its biases and try to come to your own conclusions.

duffymo
A: 

I don't believe so. As an experienced Java programmer who did mathematics at university, I find that my main failings in the workplace are a lack of a better understanding of various CS subjects:

  • databases
  • networks
  • file systems
  • transmission protocols
  • algorithms/graphs etc.

I can imagine that using an array of languages would be better than using just one, even if just for the fact that you can then settle on the one in which you feel most comfortable. But the choice of a taught language per se is not that important in the grand scheme of things.

oxbow_lakes
+1  A: 

No, it won't.

unforgiven3
A: 

At university, for learning how to write algorithms we programmed console applications with java (with DOS editor, can you believe that?). Now I can't remember anything of java, but it helped me when learning C++. And C++ helped me when learning C#.

I think that any C-like language is ok for getting started. I recomend start ALWAYS programming console applications. But I strongly say that a bad choice for learning programming is Visual Basic 6 (I haven't tried VB .net).

VB6 will make you get bad practices: not variable initialization, no case sensitive, no pointers... VB6 is ok when you already know how to program, but not for learning to program.

yelinna