Is Java a future proof language ?

Discussion in 'Mac Programming' started by fab5freddy, Feb 10, 2007.

  1. macrumors 65816

    fab5freddy

    Joined:
    Jan 21, 2007
    Location:
    Heaven or Hell
    #1
    Hi, i have just started a computer science degree, and Java is the language we are going to be learning first. Are there any advantages or disadvantages of learning Java as your first language ? By the way, i live in Denmark, where 98 % of the country is a PC Windows world........
    I have seen many companies starting to use C# instead......so jobwise, you probably have to know C# as well.....?

    FF
     
  2. macrumors G4

    Eraserhead

    Joined:
    Nov 3, 2005
    Location:
    UK
    #2
    Once you know one computer language it's easier to pick up others like with Real Languages (English, French, German, Danish etc.).
     
  3. macrumors regular

    Joined:
    Nov 23, 2006
    #3
    C++ is the language in the industry as of now. Though many new companies are using C#, I don't think it will ever replace C++... Java, well, I don't know too much about it. My personal feeling I get from other people (if that makes sense ;)) is that Java is a good starter language, but will die outside of web development, and becomes too slow.
     
  4. Moderator emeritus

    Joined:
    Jun 25, 2002
    Location:
    Gone but not forgotten.
    #4
    Java hasn't been the big solution to everything that Sun purported it to be originally. It's a very good language to know, along with C++ and C.

    C# is a Microsoft creation that's basically Java without the security, so if you know Java, you should be able to learn C# quickly.

    Future proof? Java continues to evolve since after 10 years, it's still a young language. Recently, Sun started to work to open up the language for standardisation, which will likely mean two things: there will be more input used to make it a better language and it will take years for it to be standardised.

    It'll be around for a while. Plenty of businesses use it.
     
  5. macrumors G4

    Joined:
    Jan 5, 2006
    Location:
    Redondo Beach, California
    #5
    Future proof?? Depends how far into the future. The first programming language I learned was FORTRAN in the 1970's. It is no longer main stream except in specialized areas but it's still going strong. I can say the same about Ada too. Ada was going to be the one language used for everything and now people only use it on mission critical real time projects in aerospace, transportation and nuclear power. (In other words in places where people die if the software crashes) I worked on some Cobol projects too, long ago but Cobol is not yet dead either. My guess is that java will be like the above. It will live "forever" but it's scope of use will become more and mre specialized.

    If you are just starting out what you want to learn is "programming". Start with a widely used object oriented language. Learn it, use it and then the next language will be very easy. It's the concepts not the syntax that you need to learn. Java is not a bad first language, neither is C++. What you want is one that best illustrates the CONCEPTS that are being taught. One of my computer science proffs taught in a language that had no compiler. There was no way to run the code. Another one didn't care what language we used for a project. He said to just pick whatever best suited the task. I used PL/1 mostly and some Lisp and prolog. (Maybe you can guess my age?)

    You don't need a "future proof" language. The effort you expend to learn will be easy to transfer to some other programming language later.
     
  6. macrumors 65816

    Joined:
    Jan 6, 2004
    #6
    I think Java is one of the worst languages in the world. Do I say this because it's particularly bad? No. I say it because it's generated more bad programmers than anything else I've ever witnessed. We had a lot of students in my school's CS department from an unnamed country who only liked to work with Java, did it poorly, and whined about pointers in their C classes. These people cheated like crazy (every student I ever caught cheating in my 5 quarters grading papers was in that group) and usually a class that started with 15 of them would have 1 or two at the end.

    People try Java, make it print "hello world" and pop up a Window, and think they have what it takes to enter computer science.

    Now, if you begin with Java and learn real OOP (object oriented design) principles and are taught it correctly, you can go far both with it and real languages.

    The worst part about Java is the overhead that comes with a VM adding an extra layer to the software. The bad programmers it seems to generate only fuel the fire of slow crappy software.

    With all the hub-bub about global warming, when will someone ask how much energy has been wasted (and the pollution to generate it) for wasted CPU cycles from interpreted high overhead languages like Java?

    Oh, let me add that the JVM on OSX stinks. It runs about 10x faster on an equivalent Windows machine.
     
  7. macrumors 68020

    bobber205

    Joined:
    Nov 15, 2005
    Location:
    Oregon
    #7
    What the above poster says is true.

    What's weird, only a few people in my cs classes have used Java. I think it's incredibly intuitive to use, it's a good step up from BASIC languages. It was my step and the things it taught me about classes and stuff should carry me far in my future career.

    And yes, Java on OS X blows. (See Azereus and memory consumption!)
     
  8. macrumors regular

    rtharper

    Joined:
    Sep 6, 2006
    Location:
    Oxford, UK
    #8
    The only dis/advantages in what your first language are purely pedagogical. It will dictate how you learn certain concepts. If you are starting a BSc. in CS, esp under the education system in Denmark, you will find that language selection will be the farthest thought from your mind by your senior year when you are looking for a job. All medium-to-high-level languages that descend from C have similar syntax, and transitioning from one to the other is fairly intuitive with a little bit of documentation.

    The more important thing to learn, especially in undergraduate Computer Science, is programming techniques and theory (and don't neglect your math classes, they will provide more than you think). Program a lot, develop good habits, and know what the source code on your screen really means. Most software developers suck at this. They know a few languages, and maybe a few APIs. They very rarely understand the distinction between strongly typed and weakly typed languages, between lexical and dynamic scoping, between statically and dynamically typed languages, type safe versus non type safe, call by value versus call by reference versus call by need. When you understand these concepts, understanding the basics of any programming language only takes a few days of study (learning more takes more time, obviously).

    People here talk about what the "industry" is doing. bronxbomber 92 claims C++ is THE language. I don't know what industry he is talking about, but I can tell you that you will see a lot more than JUST C++. You will see C, you will see Java, you will see Python, and probably a lot more (I worked on a project that involved Perl, C++, and C all in one application).

    I can tell you that high paid software engineers transition gracefully across the platforms that change, and they change a lot. Java, C# and .NET, etc are all fads. They're important and relevant now, and it is worth the time to learn them to make yourself marketable. But, don't depend on your college education to give it to you. They will give you the tools to learn these things quite on your own or through internships or early jobs. And expect to see newer technologies that will exist alongside or replace these platforms and languages.

    A lot of people think that the language matters and that you must start from square one with each language, or that one language will beat all, or that even one CLASS of languages will beat all. This is not the case. Most of these people are code monkeys that write poor code (and indeed, are the reason for the majority of software awfulness out there).

    Keep in mind also that language is one aspect of the issue, and the other is platform. I have done operating system programming and GUI programming in C++. DRASTICALLY different, involving different libraries, etc. C# is a language that is made specifically for .NET, and learning the language is not the same as the platform on which it runs (I can write objects and methods in C# in my sleep, I am only right now getting comfortable with using them in the context of the .NET platform). Platforms change even more than languages. Don't worry about the "right" one, you'll see a variety of them over the course of your career. Learn the concepts behind them and you will find picking them up is much easier as you encounter them.
     
  9. macrumors regular

    Joined:
    Nov 23, 2006
    #9
    I agree with you on pretty much all your points. I think I may have been a bit vague when I said THE language. I meant, C++ is used a lot, all over the board. Most likely you'll come across it *somewhere*. I'm not saying that won't find commercial and/or independent companies using other languages (most likely independent or small companies). But, many big name companies all ready have a huge foundation of code written in a certain language, and more times then not I would bet it's in C++. They aren't likely to switch languages just becuase.

    All I'm was trying to say, is that C++ is a very widely used language and you're most likely going to have to learn it some time or another. I wasn't saying C++ is the only language though (thank god) :)
     
  10. macrumors regular

    rtharper

    Joined:
    Sep 6, 2006
    Location:
    Oxford, UK
    #10
    Agreed! I realised that even as I was trying to invalidate your point, I was using my own experiences with C++ for points...
     
  11. macrumors newbie

    Joined:
    Feb 11, 2007
    #11
    Java is not only a language, it's a platform

    Java is the best language to start because it's complete:
    - you learn OOP;
    - you have plenty of free tools;
    - you have plenty of docs and tutorials and code to copy & study;
    - you write and run it everywhere (mac, pc, or linux, at home or work or your university) and it's consistent across OSes;

    BUT best of all you can learn a lot more on multithreading, RPC, messaging (JMS),transactions etc.

    C++ is good and used a lot, but as a language is a lot more difficult and full of "powerfull dark sides" (templates , pointers to pointers ...). And if you write something more than print "Hello", you need to use external libraries bound to a specific OS or non-standard framework.

    As a student, you must learn a little of C first, and C++ if you have time, anyway in order to understand how a computer works and the tradeoffs dealt whith each choice.

    As for business: java is not interpreted language, it's translated to assembly language when first run, is it X86-32bit or X86-64bit or powerPC or Sparc or Itanium.
    C++ can't do it with one deployed binary.
    As for RAM you are right: but we have 1 to 2 Gb nowadays, who cares about 20 Mb more for the VM ?
     
  12. macrumors 6502a

    Joined:
    Sep 3, 2005
    Location:
    Cramlington, UK
    #12
    Lots of good advice posted!

    I'd just like to add that yes I think Java would be a good first language to learn. In fact there are lots of languages that would be a good first choice but that doesn't really matter. What matters is that *you* become a good programmer. Your first language will be used to learn the basic principles etc of programming. You don't have to stick with it the rest of your life! A good programmer, imho, would, by nature and curiosity, know more than one language.

    b e n
     
  13. macrumors 603

    janey

    Joined:
    Dec 20, 2002
    Location:
    sunny los angeles
    #13
    can you say legacy code?

    anyway, the people above make the same points i would have made. java was my first programming language, but I'm fairly decent with a couple others now and I'm a noob at ruby and objc but im going at it :D Don't focus on the language, but on the concepts. They will serve you well :)

    And just because your school is focusing on java (so is mine, and all the schools i want to transfer to), doesn't mean that you can't peek around at others and play around a bit.

    Ruby's a fun awesome language if you need a place to start :)


    edit: it's sorta weird that i spotted this thread right after having a particular conversation with someone...basically i'm learning ruby right now and exception handling in ruby is the same as exception handling in java except the syntax is different, AND ruby has keywords that Java also has that do something slightly different from what they do in Java (try/catch/finally or throw in java vs. begin/rescue/ensure or raise in ruby, and ruby ALSO has throw/catch but not for exception handling but java doesn't quite have anything like ruby's throw/catch) and oh my god it's so confusing. But I still understand exception handling and goto and all that fun stuff, so hey look, real life example :p
     
  14. Xyl
    macrumors regular

    Joined:
    Dec 30, 2006
    #14
    That's a very good point...but you also missed your own point. Maybe Java will be dead outside of web development, but is web development dying? Quite the contrary...

    edit: Web development is not about making web sites, and more about viewing the Internet as a platform rather than an application, and a platform that is OS independent, scalable, and multi-user driven....things that are harder to achieve in desktop applications
     
  15. macrumors regular

    rtharper

    Joined:
    Sep 6, 2006
    Location:
    Oxford, UK
    #15
    No, but it's also not what a Computer Science student should be learning in his undergraduate curriculum. Skills like that are vocational and not very useful in the long term because (as I mentioned before) the platforms change so rapidly.

    I have to disagree with garidan about Java being 'great' as a pedagogical tool. It is a pure OOP language, and OOP has its place. Concurrency, multithreaded execution, RPC, etc, is not the place for it, esp when you are first taking the concepts from the abstract into implementation. I've programmed some HEAVILY parallel stuff in Java and other languages, and the Thread model in Java sucks hardcore. Even lightly multi-threaded apps require so much bureaucratic code it's hard to formulate the abstract idea of how you want to accomplish tasks in a multi-threaded environment. And RMI (my only experience with RPC) is cool, but also very limited in use as it incurs a lot of overhead and has limits because of Java's requirement that everything rigidly conform to its OOP model.

    I hope that the original poster's program steers him away from Java when first learning any sort of concurrency. Sadly, most of the decently written parallel languages are a bit old, but I bet there's a SuperPascal compiler out there ;)

    I will agree that C++ is evil, and I hope people abandon it somewhere in the near future for the majority of issues. Non-type-safe languages, as powerful as they are, should be not be the basis for MOST applications.
     
  16. jsw
    Moderator emeritus

    jsw

    Joined:
    Mar 16, 2004
    Location:
    Andover, MA
    #16
    My first language was BASIC. Then FORTRAN, C, C++, and Java. I've dabbled in others. I agree that the single most important thing is learning how to write good, solid, robust, and efficient code. The language is secondary.

    That said, I'm a big fan of Java. I understand that some, mentioned in posts above, are terrible Java programmers, but, of course, you can be terrible in any language. Java has its limits, true, but given recent (past few years) JDKs and modern computers, most any app can be written well using Java. And it's more platform independent than C/C++, includes GUI classes, and works well with web development. If I had to pick just one language now, it'd be Java.

    But nothing you learn will be sufficient in 10 years, because languages evolve and emerge all the time. Concepts, though? Not so much. Names for concepts change all the time to promote new books. But the concepts remain.

    Learn the concepts, pick a language to start with, try to write code you're proud of, and you'll be fine.
     
  17. macrumors 68020

    Joined:
    Dec 27, 2006
    #17
    I supposedly learned some Java in my intro course. Now I am working on C++. Where are you attending? I am attending East Stroudsburg Univeristy for Computer Science and Computer Security.

    lol, are you a teacher in the real world? Thats why my C++ teacher says "make sure to hand in something your proud of' in his thick Russian accent.
     
  18. macrumors 65816

    Joined:
    Jan 6, 2004
    #18
    It is an interpreted language in many cases, and only in certain deployments does it get "compiled." I'm not actually convinced we have JIT on OSX, which might explain why it's so slow. I haven't taken the time to research it. It still runs inside a VM, which adds overhead. I love it when Java fanboys try to say it's 500 times faster than C. :rolleyes:

    Java is also not deterministic due to the fact that with JIT it's often translated when needed. It's like Rosetta, and we all know how slow that can be. OSX has this problem due to its runtime binding (rather than load time binding.) This is one of my major gripes with OSX.

    And it's only OOP if you don't turn in assignments for your OOP class with everything inside the main function. I've seen that way too many times.
     
  19. macrumors 65816

    Joined:
    Jan 6, 2004
    #19
    This is the argument most Java fanboys use. C++ is bad because it's "hard to use." Don't blame a language because you're an incompetent programmer. C++ is mostly type safe, and where it isn't it can provide much flexibility. Regardless of that, there are many compilers that are stupid (won't enforce enum types for example) but a good compiler can be set up in such a way that it will enforce typing with warnings at least.

    Janey had the best advice of all. Learn the concepts, not the language. Any good CS student can move to any language and work with it. I started an OOP with Java class 2 weeks late (added it) when I was an undergrad, and had never touched Java before. (I tried to avoid it.) By the end of the class, I was answering people's questions. I had been in the industry as a realtime systems programmer (and driver programmer) for 7+ years and was able to read a few things and get it. That's where you want to position yourself.
     
  20. jsw
    Moderator emeritus

    jsw

    Joined:
    Mar 16, 2004
    Location:
    Andover, MA
    #20
    Nah. But I don't see the point in deciding to be a software engineer if you don't feel pride in your work. :) Class assignments? That's not the same, and I see why people'd blow them off. But in general I wouldn't write code I wouldn't want others to see.
    Yes, it's slower than C in most cases.

    But it doesn't matter in most cases.

    I write network management software used by most of the Fortune 500. It's all in Java, and it works fine. I wouldn't write games in it, or RTOS stuff, but most apps run well with it. And, yeah, it's slower on OS X and that irks me.
     
  21. macrumors 68040

    plinden

    Joined:
    Apr 8, 2004
    #21
    It's pretty fast on Intels. As fast as in Linux, faster than in Windows. Do you only have a PPC Mac? Or not used Java for over a year?

    Funny, I've never heard any Java "fanboy" say that. Most of us would agree it's as fast as C at some things, slightly slower at others, and very much slower at stuff you should use C++ for (string manipulation is a lot slower because you can't do pointer arithmetic hacks to get at the data). It's never going to be as fast as a natively compiled language, but as long you avoid the pitfalls that novice programmers fall into it will be not be noticeably slower, or use up tremendous amounts of RAM.

    And I'm not talking about the String vs StringBuffer red herring here, which since JDK 1.3 is no longer an issue for 99% of cases. Rather things like using List where an array would be better and using List.indexOf and List.set(index), or picking the correct size for Lists and Maps, or over- and under-using synchronization, or premature optimization etc. Sure, there's a lot to learn to code decent Java apps (it's easy to write a Java application, but difficult to do it well) but that's the same for any decent programming language. And there are enough free profilers (like JProbe) out there, that so any programmer that fails to make use of one is being lazy or stupid or both.

    ??? I think you'll find there's more to OOP than that.
     
  22. macrumors 65816

    Joined:
    Jan 6, 2004
    #22
    I agree that it often doesn't matter if something is slower. However, you're wasting energy and CPU time that could need to go to something else someday. Imagine how frustrating it is when your java server suddenly needs to handle a thousand more users and can't because it's too darn slow. Good Java programming can be quite scalable, but this requires more hardware. And thus, more wasted energy. Let's conserve!

    I have the latest C2D MBP. Before that I had a 1.67 ghz PB. I haven't done a lot of Java on the MBP. I didn't think that Intel vs PPC would matter. The fact is, I saw a Java game my friend wrote run perfectly with 10% of the CPU used on a 800 mhz pentium 3, while it ran like crap and took 100% of the G4. This is not right. Unless the JVM code from Windows (on x86) is somehow public, I really doubt that the intel JVM will even come close to competing because it isn't worth Apple's time to put so much research into it as Sun did for Windows. They sure ddin't spend more than $5 on it for the PPC.

    Just because C++ can do something Java can't doesn't make it a hack. It simply makes it a much more flexible (and powerful) language.

    http://www.kano.net/javabench/

    This is the best link to show any Java fanboy how silly they are.

    Yes, I am just saying that Java doesn't force you to write in OOP because you can do what I described.
     
  23. macrumors 6502

    Joined:
    Sep 20, 2006
    #23
    Also, contrary to what most programmers think (and beginning CS students), there are other programming paradigms than procedural and OO. After more than 20 years churning out one type of code or another, I've gotten involved with a completely different paradigm: functional programming. Whether you work with Haskell or Erlang or.... I would recommend it go any CS student. It gives you a completely different take on software design.
     
  24. macrumors newbie

    Joined:
    Dec 8, 2006
    Location:
    Munich, Germany
    #24
    It's as simple:

    1. Computer science is not programming, so the language is actually just a tool and which one you use is not important at all. As a computer scientist you should be able to get used to new programming languages quickly. Don't expect to "learn" one language and then to stay with it for your lifetime.

    2. Starting off with Java is a very good idea, since Java very, very clearly implements all concepts a modern programming language should offer. As opposed to languages like C++, Java forces you to use the features in the way they are intended (e.g. exception handling, inheritance, interfaces, ...).

    3. C# is basically a Microsoft edition of Java. If you know Java, you almost know C#. It has some nice additions that go beyond Java, but they're nothing you can't learn by reading a few tutorials (not even a book).

    Cheers.
     
  25. macrumors 65816

    Joined:
    Jan 6, 2004
    #25
    You could get all that with D and not have a horrible runtime component. Java is a bad idea because of how it was implemented. Even Sun won't use it for anything crucial.

    http://www.archub.org/javamemo.txt
    http://www.pcworld.com/article/id,109301-page,1/article.html

    Java is a non-deterministic bloat machine, and anybody who would champion its usefulness for anything other than Fisher Price Baby's First Programming Language is no computer scientist.
     

Share This Page