4 ms·
There are a few big reasons schools still teach Java primarily - adoption, scalability, and maturity. According to almost every Tiobe language survey, Java has
by USNetizen 13y ago
There are a few big reasons schools still teach Java primarily - adoption, scalability, and maturity. According to almost every Tiobe language survey, Java has been and is still either #1 or #2. It is pervasive in just about every enterprise IT environment throughout the entire world (whether you realize it or not), running on a ~billion devices and, now, Android phones as well.
Furthermore, it has very mature support for everything from GUIs (Swing) to web development (Servlet) to high-powered concurrency to advanced data structures. There are literally thousands of libraries and frameworks for every need and a wealth of talent and knowledge out there. Its performance is also orders of magnitude better than interpreted languages like PHP, Python or Ruby. It simply scales better in just about every way and is universally supported almost everywhere.
So, to summarize, for all the reasons listed above Java is the bread and butter of enterprise software. Personally, I prefer Python and C#, but Java is unavoidable if you want a good paying job or are serious about building a high-performance, platform-independent, scalable application.
- andrewflnr 13y agoYes, but teaching java before graduation is different than teaching it first. You can get all the benefits you mentioned of learning Java even if it's the second or third language while using something nicer for the first one (python? Scheme? SML?).
- USNetizen 13y agoNot so. Learning on an interpreted language is akin to learning how to fly a plane by simply riding in one. There is a lot to learn in a CS program, and it really requires a single language from start to finish. Python doesn't have some of the advanced capabilities and adoption of an enterprise-class language like Java. Believe me, I love Python - I've created a ton of apps with it, but I also have a CS degree and have seen the practicality of using a single language from start to finish. How are you going to reinforce the notion of how a compiler works with an interpreted language? How would you teach and force the use of static types on a dynamically typed language? How would you teach true concurrency and thread safety with a language that is limited by a global interpreter lock (GIL)? These are introductory things a CS student would take in their first year.
- abraininavat 13y agoVery few first year CS students do any concurrency your first year. Your first year you're just learning Java.
- deleted 13y ago[deleted]
- eru 13y ago> Learning on an interpreted language [...] Interpretation or not is a property of the implementation, not of the language. And it's a sliding scale as well, as you can see with Java.
- kyllo 13y agoHow are you going to teach pointers or recursion in Java, though? More on that from Joel Spolsky here: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html http://www.joelonsoftware.com/articles/ThePerilsofJavaSchool... There is a lot to learn in a CS program, and it really requires a single language from start to finish. There is really no single language that you can use to teach everything that a CS student needs to learn. A computer science education should teach concepts that transcend languages, and use whichever language is best suited to demonstrate the concept at hand.
- dragonwriter 13y ago> How are you going to teach pointers or recursion in Java, though? Pointers, okay sure, but what's the problem with teaching recursion in Java? See, e.g., http://danzig.jct.ac.il/java_class/recursion.html http://danzig.jct.ac.il/java_class/recursion.html
- kyllo 13y agoSure, recursion is possible in Java, but it's rarely used because of the inevitability of hitting a StackOverflowError given a sufficiently large value of n. Teaching recursion doesn't make a whole lot of sense unless you're using a functional language where loop iteration is not the paradigm.
- frozenport 13y agoClass is short, you get one shot. Scheme or Java, not both.
- socillion 13y agoPlenty of schools still use C++ instead of Java.
- jlgreco 13y agoDo any college students come out of BS CS programs mono-lingual? That is inconceivable to me.
- eru 13y agoSome come out without having properly learned any language at all.
- mratzloff 13y agoIn college I was expected to know Scheme and Java, and C and some Assembly besides. I also picked up two other languages on my own time. I can't imagine even the least capable CS student graduating knowing only Java or only Scheme.
- dsfasfasf 13y agoIs seems quite practical to each one of the most used languages in the world. You can then go and pick almost any other language.
- jlgreco 13y ago> You can then go and pick almost any other language. Any CS student should be able to do that at least by their second year, regardless of what language they started off with. If colleges were not starting with Java there would be zero risk of students not knowing it if they needed it by the time they were ready to enter the workforce.
- xxpor 13y agoUniversities in the US don't teach languages in general. At my school, you get 1 semester of Java and that's it. The next class people take that uses something else is compilers, and that uses C. You're just expected to know it. The usual justification is "we're not a vocational college" which I think is kind of bullshit.
- jlgreco 13y agoWait, is your take on this that their attitude is not good? We got one quarter of C++, then everything else was "you are all grownups, use whatever the hell you want so long as it works on [cs cluster]". Most people continued to use C++ of course. It was not until an intro to languages course (preceding a few compilers courses, if you elected to take them) that course material again included learning a new language (scheme). This, aside from the initial obnoxious first quarter, seems like the absolute proper way to run a CS department. A bunch of courses teaching different languages, as I would expect from some sort of "vocational college", is absolutely not what I was paying for.
- xxpor 13y agoIt's not so much courses teaching languages, it's the lack of software engineering in general. There's one course here which is a joke and not taught until your second to last semester. And then people turn in absolute barf code in their homework. Then people graduate and start a job, and they can't code their way out of paper bag, but they sure can write the tuple relational calculus for some given query. Another example is my OS class. We just spent half a semester going over concurrency problems. Now we're rushing through everything else that goes on in an OS. We spent one day on filesystems and I/O. Not once have we said anything like "well this is how Linux or FreeBSD does it".
- jlgreco 13y agoHmm, my experiance may have been a bit different since mine was a 5 year program with a solid year and a half of courses before graduation without break. Most of what you are describing got at least two or three quarters of treatment at my school, depending on what tracks you took. We also had a Software Engineering major which a lot of people in CS took courses from. The only required (non-track) CS courses in our suggested 4th/5th year were software engineering classes though. I think the coverage there was more than adaquate. Honestly it got a bit too "vocational" for my tastes. On the other hand, most of my peers (70-80%?) took the AI/Games track; they probably got closer to the sort of coverage on the other topics that you're mentioning. IIRC only two arch classes (MIPS), no OS to speak of, and a single 3-month quarter of concurrent programming. I don't think that is satisfactory, but the last I have heard most of them have been doing fine in the real world. That stuff is neat and good fun, but I don't think it will really effect your ability to perform in the industry.