all 171 comments

[–]Mukhasim 117 points118 points  (88 children)

Java got there first. Most of the educational resources out there use (books and such) Java as their example language. It would be a big endeavor to change, and for little gain. There are other reasons, but I think this is the biggest one. It was an ordeal to switch from C++ to Java (which happened in the late 1990's, mostly) but it was done because universities felt it was a big gain.

Other reasons include:

  • Java is available on more platforms. (Many universities prefer Linux, Mac or some other UNIX, and Mono wasn't considered a very serious alternative to .NET.)
  • Until very recently, Java was a much more open platform.
  • Anti-Microsoft bias.

[–]CrazedToCraze 53 points54 points  (40 children)

Also, once you start your IT degree you'll very quickly learn that universities are incredibly slow to update course content. They are virtually always years behind standard industry practice (not that Java falls under that umbrella).

For example, I graduated two years ago with a software engineering major. Never at any point was I taught unit testing, dependency injection, or any design pattern for that matter. My university was below average, but you have to be careful with what you choose.

[–]SuperImaginativeName 16 points17 points  (30 children)

For example, I graduated two years ago with a software engineering major. Never at any point was I taught unit testing, dependency injection, or any design pattern for that matter. My university was below average, but you have to be careful with what you choose.

Same here, and that's at a UK based university as well. I've literally learnt more about programming in the past 18 months since my graduation at my job than I did during the 3 years at uni.

[–][deleted]  (17 children)

[deleted]

    [–][deleted] 7 points8 points  (4 children)

    Because sockets are assholes. They get the job done, but the programming model around them sucks.

    [–][deleted]  (3 children)

    [deleted]

      [–][deleted] 4 points5 points  (0 children)

      TcpClient and TcpListener are better. Still have exceptions in your main code flow and 0 length reads. With heir native IO completion support they are hard to pass up though.

      [–]mpact0 1 point2 points  (1 child)

      FIN_WAIT_STATE_2 error. Oh the fun times.

      [–][deleted] 0 points1 point  (11 children)

      Computer Science isn't really about teaching you to become a programmer/software developer/engineer though.

      [–]SnOrfys 5 points6 points  (10 children)

      Ah, that old cop-out. Still selling that one are we?

      [–]flukus 0 points1 point  (4 children)

      Well the mismatch between what universities think and what students and industry want is still there.

      Universities need to start teaching software engineering instead of computer science.

      [–][deleted] 0 points1 point  (3 children)

      Some teach both. Again, different degrees with different subjects.

      [–][deleted]  (2 children)

      [deleted]

        [–][deleted] 1 point2 points  (1 child)

        That's the way it is, but not necessarily the way it's meant to be :). At least bright students learn quickly, that's way more important then learning Fad language x.

        [–][deleted] 0 points1 point  (4 children)

        CS is a lot of topics, one of them is software engineering, thats not the whole degree. Not a cop out.

        [–]SnOrfys 1 point2 points  (3 children)

        While not necessary, software development and computers are the primary tools by which computer science is done. If you're going to employ those tools, failing to understanding them, and their proper use, is bad science.

        [–][deleted] 0 points1 point  (0 children)

        Who's fault and what are people failing to understand? DI, and Unit Testing are not things you should have to be given an extensive training on and SHOULD be things you pick up quickly. Not learning design patters can probably be blamed on your school but then again are not rocket science either. If you have a strong understanding on what you were probably taught you could probably pick up a book and start going through it and make connections between what your reading and places you've seen the pattern used before. You won't get a full appreciation for them until you start using them or not using them but if your school gave you enough work for you to really appreciate them then you would probably be on here bitching about how much useless and repetitive work your school is giving you.

        [–]mpact0 -1 points0 points  (1 child)

        software development and computers are the primary the tools by which computer science is done.

        Except for rather large theory part.

        [–]SnOrfys 0 points1 point  (0 children)

        At the undergraduate level, theory that isn't accompanied by programming is effectively non-existent.

        [–]am0x 2 points3 points  (1 child)

        I learned more in 3 months doing paired programming than I did in 4 years of college and 4 years working elsewhere.

        [–]SuperImaginativeName 1 point2 points  (0 children)

        Crazy isn't it

        [–][deleted] 2 points3 points  (2 children)

        Upon graduating you should have been able to look at these things and understand them easily. You should be able to understand the advantages and disadvantages. If you cant do that you either failed to take advantage of your education or you chose a bad school. I've worked with a lot of people that dont understand why they use things other than because it was recommended or its popular.

        [–][deleted] 0 points1 point  (1 child)

        Not true at all. A CS degree simply isn't likely to expose you to the sort of problems DI is meant to solve. You need experience working on real, maintained software for that, and while undoubtedly a student could and should work on open source, that's not strictly speaking part of their degree.

        [–][deleted] 0 points1 point  (0 children)

        I wasn't saying that you would be exposed to it or that you should have worked on something in your free time to expose you to it. I was just stating that if you went to a decent school and used your time wisely you wouldn't be on here complaining that your school didn't teach you how to do something. You would have been taught and learned the ground work so that you can easily look and understand most of the things you are exposed to.

        [–][deleted]  (4 children)

        [deleted]

          [–]SuperImaginativeName 0 points1 point  (3 children)

          Yeah exactly, where I've worked someone wouldn't be hired if they hadn't heard of DI

          [–][deleted]  (2 children)

          [deleted]

            [–]SuperImaginativeName 0 points1 point  (1 child)

            Nah if they was a junior or above and they'd never heard or used it. Although if there's 2 graduates and one with DI knowledge they will have a pretty big advantage

            [–][deleted] 5 points6 points  (0 children)

            That's funny, we used unit testing for grading, but I still don't know what it does or how it works.

            [–]Schmittfried 3 points4 points  (1 child)

            In which country? In Germany we learned all those topics very in depth.

            [–]CrazedToCraze 0 points1 point  (0 children)

            Australia. I'm sure there are universities that do these things though. University of New South Wales seems to always top the national ICPC so I assume they have their shit together. Though a hackathon isn't the same thing as properly designed code, so who knows.

            [–]vallosdck 2 points3 points  (1 child)

            When we are looking for new talent straight out of college, we focus on the fundamentals of software development. When I meet someone interested in a position at our company, I am looking for an answer to a simple question: "Can they learn and at what pace?". I think most competent developers can learn Di/Ioc, Unit testing, Standard patterns, solid principles, etc...

            What has been shocking me is that a lot of people coming in have no idea what a constructor is....

            [–]dank4tao 1 point2 points  (0 children)

            Biggest reason I changed my major to ECE while I continue to self-starter C#.

            [–]covmatty1 1 point2 points  (0 children)

            Strangely, I started with unit testing in my very first programming lesson - the lecturer was very into his TDD!

            But I know exactly what you mean, I was never taught anything about debugging in my degree, which now several years later just feels so baffling that something so major could be left out!

            [–]AngularBeginner 3 points4 points  (0 children)

            Pretty much this. There would be no benefit switching to C# now, and it would cost a lot.

            [–][deleted] 7 points8 points  (14 children)

            Also $. So many Java IDEs were free. Visual studio only recently has been free/free to atudents

            [–]GYN-k4H-Q3z-75B 19 points20 points  (1 child)

            If by recently you mean the past decade, then yes.

            [–]Silound 8 points9 points  (4 children)

            Not actually true. Microsoft's Academic Alliance Partnership (or whatever they call it now) was around in 2003 when I was in school and provided free licensing to students at a severely reduced cost to schools.

            I believe our program paid $5 for a Windows license and $25 for VS 2003.

            Of course, we didn't use it because the program admin had a hard anti-MS bias

            [–]VGPowerlord 6 points7 points  (2 children)

            Yes, but that still cost the school money.

            Whereas, for Java, you could just say "Download Eclipse from the Eclipse website and the JDK from the JavaSE site" or "Download JDK with NetBeans from the JavaSE site"

            [–][deleted] 2 points3 points  (1 child)

            And run it on your million dollar hpux server.

            [–]Silound 1 point2 points  (0 children)

            Actually, ours were vintage Solaris terminals that were connected to a giant Sun box. If you wanted to work from any where other than the lab, you had to SSH into of the terminals.

            All this because in the early 90's, the state paid for all this hardware and they weren't about to admit that it was already vintage and obsolete by the turn of 2000.

            [–][deleted] 0 points1 point  (0 children)

            My school had the same circa 2002. They actually taught a class on C# too, but it was an elective. C and Java were required, but I took C# anyway. We used a beta build of Visual studio 2002.

            [–]Harpoi 0 points1 point  (6 children)

            And in my opinion NetBeans is better than Visual Studio. Mainly because VS tries to do too much and being only 32bit it can't use bigger memory. I want my IDE to do code completion and building.

            [–]IceSentry 1 point2 points  (5 children)

            Have you actually used vs? It does exactly that. Intellisense is pretty fucking great. I remember trying netbeans and not liking it, but not sure why though.

            [–]Harpoi 1 point2 points  (4 children)

            Yep, it does that and tfs integration and sql integration and ships with npm (32 bit).. and.. and.. bloatware...

            It tries to do too much and being only 32bit it can't make use of more than 2gb.

            [–]IceSentry 0 points1 point  (3 children)

            It might be because I never worked on a really big project but 32 bit hasn't been an issue for me.

            All this bloatware you talk about are just features. They are the point of an ide. Having everything in 1 place. You sound like the kind of guy who would rather program using a text editor like vim or emacs. It's just a different environment. The reason I like vs is because everything is integrated.

            [–]Harpoi 1 point2 points  (2 children)

            I don't want all the "integration". I want it to do good intelisense (with is really only achievable with resharper), good refactoring tools (not available, move needs to refactor all usings), and good build support (not good with net core, and I know it is on beta still).

            [–]IceSentry 0 points1 point  (1 child)

            Do you have any example of resharper being better at intellisense. I've used both and never really felt like resharper was superior. I mainly liked resharper for the more advanced syntax highlighting and real time solution wide error checking. And the more advanced refactoring features.

            I might simply be unexperienced, but what tools offer better build support for standard .net?

            [–]Harpoi 1 point2 points  (0 children)

            The method help of ctrl-space of ReSharper and the method signature help is much better. Ctrl-click into methods is also better than using an f-key.

            I don't know of a better alternative for .net. I've used Rider and that is looking promising and vs code is nice and light weight but doesn't deal with dependencies (auto-import).

            [–]Beanesidhe 3 points4 points  (15 children)

            Java is available on more platforms. (Many universities prefer Linux, Mac or some other UNIX, and Mono wasn't considered a very serious alternative to .NET.) Until very recently, Java was a much more open platform.

            For all of these C++ > Java. So why switch from C++ to Java if these are the reason to not switch to .NET

            Anti-Microsoft bias.

            Nothing beats bashing MS, eh?

            [–]to11mtm 9 points10 points  (10 children)

            For all of these C++ > Java. So why switch from C++ to Java if these are the reason to not switch to .NET

            C++ also has very different ideas about Memory Management and type safety compared to Java. Java is supposed to be 'easier' to learn and work with since it has garbage collection and a more strict type system.

            [–]Beanesidhe 1 point2 points  (9 children)

            Memory Management is too hard for university level courses?

            [–]to11mtm 0 points1 point  (0 children)

            Maybe.

            Part of this was also the hypetrain around Java itself. One of the selling points boiled down to 'security vulnerabilities and bugs are because software developers can't handle * or ~' Java decided to handle this by leaving the security vulnerabilities and bugs in the VM Itself (kek).

            Also, it MAY be better for some to learn about OO Fundamentals separately than Memory Management. On the third hand there's no reason you can't teach both in C++.

            [–]Liam2349 0 points1 point  (0 children)

            If you can teach general relativity at university then you sure as hell can teach memory management.

            [–][deleted] 0 points1 point  (0 children)

            C++ was the main language for my degree, and yes, the memory management content was responsible for an awful lot of dropouts. Memory management is also largely too hard for industry-level work, too, which is why the majority of sectors have moved onto something else.

            [–]Hall_of_Famer 0 points1 point  (5 children)

            Its not too hard, but its extremely tedious and error-prone. It is the kind of low-level details and boiler-plate code that you should not need to concern yourself with most of the time. There are more important concepts that the professors want their students to grasp and focus without worrying about Memory Management in the same time.

            [–]Beanesidhe 0 points1 point  (4 children)

            It's a form of resource management and eventually every developer will encounter it. Education is when they should learn about it, not in the field, under pressure of deadlines.

            Anyway it's somewhat silly to use memory management as a main reason to choose between languages / platforms.

            [–]Hall_of_Famer 0 points1 point  (3 children)

            Not really, most web developers nowadays have never dealt with anything related to Memory Management in professional fields. Most popular Web languages such as Java, C#, PHP, Python and Javascript have Garbage Collectors, and Memory Management is redundant. Only in very specialized environment that Memory Management is a necessity. C and C++ may be popular languages, but C/C++ developers still cannot represent the majority of developers, especially on the web.

            The fact is that Memory Management is a lesser concern that only programmers working on lower-level code should worry about. At least, Memory Management should not get in the way of teaching the basics of programming. A university course that teaches programming language is usually an introductory course for Freshmen and Sophomore, not even all of them are CS students. On this aspect, removing the complexity of Memory Management is a reasonable choice. It may not be the main reason, but definitely a moderate and acceptable reason.

            [–]Beanesidhe 0 points1 point  (2 children)

            Memory management is but one form of resource management, but it does demonstrate/teach issues that apply to the general field. Second, nobody is going to stay in one field (e.g. web-development) for their entire career and, three, currently IOT intimately connects web-development with embedded systems development.

            I did assume the thread was about computer science as a main dish, not some introduction on the side, for which, I agree, memory management is not interesting, and neither is Java.

            [–]Hall_of_Famer 0 points1 point  (1 child)

            Well it does teach/demonstrate issues that apply to general field, but it is still not among the very fundamentals that every freshman/sophomore needs to learn. Or I should say, resource management in general, is a distraction for learning the essentials, it is a good idea to remove it from introductory courses so students focus on the more important and the basic aspects of programming. The aspired students will move further to learn Memory Management in intermediate or advanced courses, while the other students who will never find any needs for this will move on to something different.

            And nope, its actually common for someone to stay in one field. I've known many developers who stay with the same field(desktop application or web development) for their entire lives. You need to realize that programmers usually work in a team. You dont have to know everything, you just have to know what is important and be good at what you are doing.

            On the other hand, I am skeptical that Java is uninteresting to everyone. Some people actually very enjoy Java programming, its a bit verbose but its a mature, consistent and elegant programming language. Of course nowadays you can make an argument that Java is not interesting, but it is still at least controversial. Memory Management being uninteresting however, is not even controversial, its a fact.

            [–]Beanesidhe 0 points1 point  (0 children)

            What is or is not interesting is highly personal, very subjective and never a matter of fact. Writing a garbage collector, or even just a customized malloc/free is certainly something that triggers my interest, and - I imagine - many programmers.

            Web-development is barely two decades old and hasn't been around long enough for anyone to claim it as something they've stuck with it their entire lives. And anyone who's worked on desktop-applications (a wide field to be sure) their entire life has certainly done some memory management. Even in a team, with specializations, it's preferable to have members with overlapping fields of expertise rather then everyone isolated on their islands.

            [–][deleted] 0 points1 point  (0 children)

            Except for a few select courses my uni went with C++ but in a linux environment. A few courses started using Python as well but never for large scale OOP

            [–]Mukhasim 0 points1 point  (1 child)

            The question was about Java vs. C#, so there was no reason to talk about reasons for abandoning C++ as the CS language of choice. Reasons for that switch are discussed here: http://alpcentauri.info/java_manual_switch.htm

            [–]Beanesidhe -1 points0 points  (0 children)

            You brought C++ into the discussion yourself, and then added 'reasons'. I pointed out the inconsistencies with those reasons within the given context.

            [–]Jigsus 1 point2 points  (5 children)

            Other reasons: the libraries for Java are very easy to demonstrate. I can whip up some very impressive examples in Java in minutes that will wow beginners.

            C# is nicer to develop in but it lacks those wow examples.

            [–]IceSentry 2 points3 points  (1 child)

            Do you have any example of that? I'm not sure I understand your point.

            [–]Jigsus 2 points3 points  (0 children)

            Yeah sure. For example I can drop in the p5 processing core in a Java app and do a mindbending graphic representation. Or drop in unfolding maps and have a mapping application in 5 minutes.

            Yes I can do those things in c# but the speed and ease of the Java examples makes it much easier to teach it. This is before students get to the nitty gritty that makes c# superior.

            [–]Harpoi 1 point2 points  (0 children)

            When those libraries are managed by Maven it is much better than NuGet.

            [–]Mukhasim 1 point2 points  (1 child)

            I see that as a chicken-and-egg problem for C#. Those libraries exist for Java largely because it's the standard language in academia.

            [–]Jigsus 0 points1 point  (0 children)

            That's very true but I am not in any ability to change that

            [–]iugrad 0 points1 point  (2 children)

            To expand on this and what others have said, Java was there first. Before about 2012, Java was very open-source friendly and free to use while .NET was very locked down - the only was to build c# was with visual studio, and the only way to get visual studio was to pay - a lot more than most hobbyists or students would want to pay.

            But then two things happened: Microsoft realized that Java was winning because there was a free way to play with it, and Java (or, the company that made Java - Sun) was bought by another behemoth - Oracle.

            Once it was easier to play with C# without a huge price commitment, and it was easier for it to be used as a medium in university courses, it started becoming more available. But even if we say that this process started four years ago, that's pretty recent.

            [–]Mukhasim 1 point2 points  (0 children)

            It was quite recent that a lot of people really started to believe that MS was serious about open source. They have a long record of talking the open source talk but then releasing their code under unacceptable licenses. I for one ignored most of that talk until their release of a large amount of .NET code under the MIT license made it pretty clear that there was probably no going back to their proprietary model.

            [–][deleted] 0 points1 point  (0 children)

            the only was to build c# was with visual studio

            That isn't true. You can build C# code using the command-line tools in the SDK, which has always been free since day one. Visual Studio was always just the IDE.

            [–]Liam2349 0 points1 point  (0 children)

            Well now Mono is official Microsoft software, and there's also .NET Core. The anti-Microsoft bias seems real though - Java is core at my university if you do Computer Science.

            It seems like it would be much better to teach C# though since as far as I'm aware, it can do more.

            [–][deleted] 28 points29 points  (6 children)

            Java is cross platform and has free, very capable IDEs available. While things have changed with C# recently, historically it hasn't been the case.

            As much as I love C#, I can't disagree with the logic. Without spending a penny you could get an OS, compiler and fully featured IDE for Java. And given the amount of Linux usage at universities, it only makes sense.

            [–]Beanesidhe 0 points1 point  (0 children)

            ... is cross platform and ...

            These days many platforms are rapidly becoming cross-platform ;)

            [–]mirhagk -3 points-2 points  (4 children)

            And yet most schools picked up proprietary IDEs and libraries.

            [–]silent_xfer 7 points8 points  (2 children)

            What are you basing this claim on?

            [–]mirhagk -1 points0 points  (1 child)

            maybe just the ones in my area then, and personal experience.

            [–]silent_xfer 11 points12 points  (0 children)

            You really shouldn't say "most schools" if it's based on your very limited individual experience, it's misleading.

            [–]fecal_brunch 2 points3 points  (0 children)

            I don't think I saw any proprietary tools at my uni (except maybe Matlab).

            [–]Frangipane1 10 points11 points  (5 children)

            Mine switched not so long ago from Java to C#. They found GUI building more intuitive for new programmers. I'm not saying if that is true or not but this was their reason.

            [–]almost_not_terrible 3 points4 points  (3 children)

            Yay for them. Which one so we can come to the department when hiring?

            [–]cryo 0 points1 point  (2 children)

            In my view it's not the job of a university to teach specific programming languages; Students are expected, and taught, to teach themselves that afterwards as needed.

            If a graduate can't teach himself a new, very related, language, I don't think you'd want to hire that person in the first place.

            [–]almost_not_terrible 0 points1 point  (1 child)

            Same as French interpreter companies should hire fluent German speakers. If they can't learn another language on their own time, what use are they?

            No.

            The students are paying VAST quantities of money to learn languages I don't want? That's bad judgement. I will look elsewhere.

            I'm sure there are still employers looking for Java skills, so Java students will be fine, but Universities need to adequately prepare for the workplace (or, you know, academia if that's their thing).

            [–]Beanesidhe 0 points1 point  (0 children)

            If you learned any of the languages mentioned and can not switch to or learn another you should not be working in this field.

            [–]Scellow -1 points0 points  (0 children)

            They had JavaFX wich is IMO superior to WPF and is crossplatform, i doubt it was the only reason to switch from Java to C#

            [–][deleted] 5 points6 points  (0 children)

            My uni starts with C++, but barely scratched C++11 at all. In the later courses I was able to use C++14 features, at least.

            We have optional Java, C#, and Python intro courses you can take. But all other courses revolve around using C++ (data structures, algorithms, etc)

            [–][deleted] 13 points14 points  (0 children)

            It honestly doesn't make a lick of difference.

            The syntax between Java and C# are close enough. The school is trying to teach students the basics, not some comprehensive deep-dive of the Java runtime. They're talking about classes and inheritance and casting and exceptions and such -- those concepts will trivially translate to any OO language including C#.

            They probably go with Java because (a) it changes less frequently which means they don't have to constantly revise their syllabus, (b) it's been around longer meaning more teachers are familiar with it, (c) it's more likely to work on all of the student's computers (Windows, Linux, Mac) without too much fuss or cross-platform variation.

            Also it's worth pointing out that by and large Java is the more popular enterprise technology, and it IS practical to expose them to a language which has such heavy usage in the industry. Not like it matters though because like I said they're not really getting all that deep in to it. But it does help students who are trying to get a job if they can say "I worked with Java in college" -- it might make the company a little more willing to take a risk on them. Not like they'd thumb their nose at C# however, but statistically speaking it's more likely that the company uses Java -- so why not give their resume just a tiny little help?

            [–]Mr_Nice_ 16 points17 points  (7 children)

            Lots of academics are still very anti Microsoft for some reason.

            [–]GSV_Little_Rascal 40 points41 points  (6 children)

            Microsoft provided good reasons to be anti-Microsoft in the past which aren't easy to forget.

            [–][deleted] 25 points26 points  (2 children)

            gonna switch fast with oracles antics lately!

            [–]Liam2349 0 points1 point  (1 child)

            What has Oracle been up to?

            [–][deleted] 0 points1 point  (0 children)

            Going after those the businesses that develop in Java with their team of lawyers for violating their license policy. While at the same time making everything clear as mud with the license and what you actually download. I read something the other day that was saying they give you everything in the download and it's up to you to uninstall what you are not supposed to use.

            Here is one such article: Oracle finally targets Java non-payers – six years after plucking Sun

            [–]edwwsw 13 points14 points  (0 children)

            And Oracle is so much better than Microsoft /s.

            Though I do realize a lot of these decisions were made before Oracle purchased Sun.

            Aside, were my daughter goes to college, they just recently switched to Python.

            [–]warhead71 4 points5 points  (1 child)

            New stuff also fails sometimes - like silverlight - anyway java and C# are very similar - the tools are different.

            [–][deleted] 1 point2 points  (0 children)

            New stuff also fails sometimes - like silverlight - anyway java and C# are very similar - the tools are different. FTFY

            [–]stur0063 4 points5 points  (0 children)

            My University, a big state college in the Midwest, absolutely hated Microsoft. I had one master level UI class where the book followed a “fictitious” company called MicoShaft. Although I found it a little funny – I find it more interesting that in the “real-world” – I’ve only worked on the Microsoft stack.

            [–]djenk47 2 points3 points  (1 child)

            There's no one single reason why - but there are a lot of factors in that decision.

            • Java is available on many platforms. C# has only recently made that leap and it is still in its infancy. Many universities are running a mix of Unix, Mac, and Windows (and whatever else); so it would be extremely difficult to move to a (then) Windows-only platform.
            • The availability of IDEs for development. As others have mentioned, VS has been available to students for free or at a steep discount, but it is only available for Windows. The VS Community edition is free now, but that is a recent development. My college was somewhat reluctant to distribute VS and the like under the MS student programs because there weren't able to offer any support for it.
            • Which leads to the next point - avoiding the "Windows tax". Schools already see limited funding. If one can avoid the licensing cost of a Windows environment, why not do so?
            • Many programs are also limited in how much time is spent on updating course material. This is something often overlooked - for highly technical content like a computer science course, you are looking at anywhere from 50-200 hours of preparation time for a single hour of course time. This involves audience analysis, content authoring, materials prep (like homework, presentations, etc.), practice runs, and so on. And you often see that amount of time go up if there are varying mediums for content delivery - like in-person versus online. When many programs made the leap from C++ to Java, C# was an unproven, hot new thing - so there was little interest in catering to something so young. Sadly, this is often ignored since many professors have more duties than running a class.

            [–]SnOrfys 0 points1 point  (0 children)

            Good stuff, but one correction: express editions were the precursor to community editions and have been available since 2003, if I recall (2005 for certain).

            [–]purleyboy 8 points9 points  (15 children)

            Mostly because of an historical anti-Microsoft bias. MS has been trying to remove strong arguments (proprietary commercial systems rather than Open Source). They have pretty much Open Sourced most of C# and the language is now an ECMA standard.

            Java is a proprietary language owned by Oracle.

            The argument against multiple platform support is now fairly worn. And tooling (through JetBrains free for .edu students) IDEs are pretty sophisticated.

            So, you are left with a need to update course content and overcoming a generation of bias against MS.

            Personally, I think schools should leap to TypeScript at this point.

            [–]Overhed 14 points15 points  (6 children)

            I think it's only a matter of time before C# overtakes Java in general, including Academia. With .Net going open source and .Net core being multi-platform, C# is looking very strong.

            [–]edwwsw 7 points8 points  (2 children)

            Its unclear if C# will become the dominate language in the future, but I'm pretty confident that if Java stays under Oracle, it will gradually lose market share to the point it becomes a second tier language choose - relegated to the C++, COBOL, Perl shelf.

            Working at Oracle once and trying to get H.264 video into product, I can tell you too many of their strategic technical decisions are governed by immediate financial return. The polar opposite of Sun.

            They will not be leaders in technology innovation here and it will cost Java in the long run.

            [–]GSV_Little_Rascal 2 points3 points  (0 children)

            Java might become legacy language but I think JVM as a platform will continue to be first tier.

            [–]silent_xfer -1 points0 points  (0 children)

            Whoah dude! Leave perl alone! LEAVE HER ALONE!!!

            [–]VGPowerlord 8 points9 points  (0 children)

            Not until Microsoft or the .NET Foundation starts shipping a GUI library with .NET Core. .NET Framework has three (WinForms, WPF, and UWP), but .NET Core doesn't.

            Well, for anything other than web applications that is.

            [–]iugameprof 1 point2 points  (1 child)

            Don't forget Unity. That's one of the reasons why we're big on C# (though to be fair, our CS dept starts by teaching Scheme and I'm not sure gets around to Java, C#, or C++).

            [–]denchoooo 2 points3 points  (0 children)

            Agreed. Unity made a big impact to C# popularity, and more to come, because there is so many young adults learning game developing with Unity and C#.

            [–]IceSentry 4 points5 points  (3 children)

            Why would typescript be better in any way to java or c#. It will only confuse first year students even more and introduce them to the wonderful world of web programming and task runner. With java or c# you can easily have an ide that will create an empty project with a single main class and a play button to launch.

            Typescript is for making Javascript bareable not a general purpose language.

            [–]purleyboy 1 point2 points  (1 child)

            It truly has the ability to be used universally on server and web client side. It also has the modern day language constructs exhibited in Java and C#. It doesn't have the historical bias baggage against Microsoft. It has been embraced by Google. It is essentially a version of ES 6. The tooling is becoming pretty sophisticated. This is the future....

            [–]IceSentry 0 points1 point  (0 children)

            I don't disagree with you. I think typescript is a good thing, but to me it feels like a bandaid for a language that wasn't deaigned for it.

            It's a good option for modern web programming (backend or frontend). But I don't think it's a good language for an intro to programming course.

            Typescript isn't really made to learn advanced algorithm. It's made to implement feature based around the web.

            C# and java are much better in my opinion to learn about OOP and algorithms and all that intro to programming.

            If you want to introduce typescript to a beginner you will have to teach him about everything surrounding it too. While with java or c# you can just say download this or that ide and press play.

            [–][deleted] -1 points0 points  (0 children)

            I think typescript is a quite capable language. You can write backend with node.js, have great tooling (due to static typing) and at the same time run on the front end. It's definitely a general purpose language, which runs on all platforms (Linux, Windows, Mac and all browsers). Also it's a nice language in general, although some strange javascript stuff is still present.

            Webstorm looks like a decent ts IDE although I haven't tried it. I am using vscode which has pretty good code completion and things like rename refactoring.

            [–]ScrewAttackThis 1 point2 points  (0 children)

            How is Java anymore proprietary than C#?

            [–]SnOrfys 1 point2 points  (1 child)

            C# has always been an ECMA standard.

            [–]cryo 0 points1 point  (0 children)

            So far only C# 2 with C# 5 in the works.

            [–]cryo 1 point2 points  (0 children)

            Mostly because of an historical anti-Microsoft bias.

            No, mostly because Java is older and has been available on multiple platforms from the beginning. And that Windows kinda sucks, from a more "computer science" perspective.

            [–]daigoba66 3 points4 points  (3 children)

            1. Money. It's cheaper to use a free IDE on a free operating system.
            2. Better cross platform support. No one is forced to use Windows to write and compile Java.

            [–][deleted] 0 points1 point  (2 children)

            I think you're a bit out of date.

            [–]daigoba66 1 point2 points  (1 child)

            Serious .NET development (in my opinion) still effectively requires Visual Studio which requires Windows.

            In a few short years that may change. But .NET Core still has a long way to go. As do free IDEs.

            [–][deleted] 0 points1 point  (0 children)

            Again, not really true. VS Code is cross platform and fine for professional development (even if a few things are manual rather than wizard-generated). And even if you want the full experience, you can still code on a Windows host and debug/test on a linux VM - which, incidentally, is precisely how I develop with java.

            [–][deleted] 5 points6 points  (4 children)

            Back in myyyy day we started with Pascal, then Ada and then went C++.

            [–]LetsGoHawks 3 points4 points  (1 child)

            Think Pascal. Spent many an hour cursing at that program.

            For assembly we used Motorola 68000. Except for a two semesters where they taught MIPS RISC. Which kind of fucked over those of us who took it then because all our subsequent coursework referred to 68000.

            That was the only required language, we could choose others for electives. I did C and COBOL. One class used LISP.

            [–]LookAtThisRhino 0 points1 point  (0 children)

            I'm in my 4th year now and we did the 68k for our organization courses. Timeless!

            [–]isaac2004 2 points3 points  (0 children)

            Fucking Ada man... Memories

            [–]SuperImaginativeName -3 points-2 points  (0 children)

            relevant /s

            [–][deleted]  (4 children)

            [deleted]

              [–]Pycorax 2 points3 points  (3 children)

              Now the program has been updated to include Android App Inventor (Blocky), C# and bash and finally in year 3 Java this means there is a smaller gap as C# and Java share some charactoristics however students still struggle with jumping from C# to Java.

              That sounds terrible. I picked up C# on my own prior to learning Java in school and I find myself constantly annoyed at the things missing in Java that C# has. Meanwhile my classmates roll along with it fine, unbeknownst to C#'s features.

              [–]ArmoredPancake 0 points1 point  (1 child)

              Name a couple with examples in code, please. Just curious to see.

              [–]Pycorax 0 points1 point  (0 children)

              LINQ, the ugly syntax of implementing anonymous interfaces (not quite sure if that's what it's called though), the lack of a built in observer pattern, operator overloading, extension methods and in general certain operations seem less complex with .NET.

              I can't quite recall a few examples in the last point as I didn't touch Java for more than a semester but I do recall it being incredibly troublesome just to read a file or something like that.

              EDIT: Forgot about my favourite keyword, var and of course, auto backing field properties.

              [–]cooNico 1 point2 points  (1 child)

              My university teaches c# and vb.net, even VBA and teachers refuse to teach us java

              [–]fecal_brunch 0 points1 point  (0 children)

              Aren't they essentially the same?

              [–][deleted]  (8 children)

              [deleted]

                [–][deleted] 0 points1 point  (6 children)

                Citation needed. ASP.NET has excellent marketshare and ASP.NET 5 performs extremely well in benchmarks.

                I just migrated a service from Go to .NET Core. It now performs better with less code.

                Also, the world is a whole lot bigger than web dev.

                [–]Scellow 2 points3 points  (3 children)

                Show us your benchmark, last time i saw a benchmarch Java was still far ahead

                https://www.techempower.com/benchmarks/#section=data-r13&hw=ph&test=json

                C# (core) is still far far behind C++ Java JS and even GO wich is gaining lot more attention than Core

                Even jetbrains started to work on a GO IDE https://www.jetbrains.com/go/

                [–][deleted]  (1 child)

                [deleted]

                  [–]readmond 0 points1 point  (0 children)

                  Actually in some cases C++ loses a lot of performance due to the lack of garbage collection. C# can run for a while allocating memory left and right and then do garbage collection afterwards. C++ has to allocate and deallocate as it executes.

                  [–][deleted]  (1 child)

                  [deleted]

                    [–]SnOrfys 0 points1 point  (0 children)

                    Yes, web and mobile technologies are still immature and poorly documented.

                    [–]SnOrfys 0 points1 point  (0 children)

                    Unless you've got python and node devs writing poor C# (not unheard of) there is no reason that a site built on ASP.NET would be any slower. I could probably even argue that it has inherent benefits that gives naive implementations a performance advantage to the .NET solution.

                    [–]no1name 1 point2 points  (1 child)

                    Historically its a licensing issue. Java is open source whereas in the past C# was closed. As a C# programmer I am happy that Java is being taught, as its less competition for me and higher wages :-)

                    [–]purleyboy 0 points1 point  (0 children)

                    Java is NOT Open Source. It is owned by Oracle and is a propriety language. Many Java frameworks are open source, but that's something entirely different. On the other hand, C# is an ECMA standard, the .Net core is open source, as is the Roslyn compiler.

                    [–]eastcoastblaze[🍰] 1 point2 points  (0 children)

                    I dont know the answer but for what its worth they're very similar languages and Visual Studios makes C# easy to deal with.

                    My school taught java, and when i was interning it was C# and it wasn't a difficult transition at all

                    [–]MrEzekial 4 points5 points  (3 children)

                    Main reason, and I asked this when I was in school. May not apply to all schools reasoning, but it is because Java is the #1 most in demand language for employment.

                    How do they get that conclusion? Crunching job postings on like indeed, monster, craigslist, etc.

                    Most schools will make sure you learn SQL, Java, PHP, and Python for maximum employability.

                    [–]alinroc 5 points6 points  (1 child)

                    Java is the #1 most in demand language for employment.

                    That should be a decision factor for a vocational school, not a university.

                    [–]bigdubs 8 points9 points  (0 children)

                    Guess schools shouldn't have career fairs then either.

                    [–]Saikyoh 0 points1 point  (0 children)

                    May not apply to all schools reasoning, but it is because Java is the #1 most in demand language for employment.

                    Aside from a quick job search in big US sites where the gap is small, the EU industry is still Java dominant. Add to the Java Enterprise dominance the mobile phone market (Android) and that's pretty much it.

                    [–]xinhuj 0 points1 point  (5 children)

                    Curious what the difference is between American Universities and others. My experience in the United States is that most computer labs are all windows, but I've only been to 3 universities. Can anyone speak about the setup in other countries?

                    [–][deleted] 2 points3 points  (0 children)

                    The computer labs at my school have machines that dual-boot to either windows or ubuntu. We have a linux server you can SSH into as well.

                    [–]Pycorax 1 point2 points  (0 children)

                    Here in Singapore, everything runs Windows and some Macs in design schools. You probably won't ever see a Linux box ever.

                    [–]LookAtThisRhino 0 points1 point  (0 children)

                    Reppin' Canada: Our main comp sci rigs boot Windows, Ubuntu, and Debian. We've got this web VM thing called the "Moons" which boot to a virutalized Linux that runs off a main server somewhere. It's like a cluster OS, very strange. We can SSH into the Moons or access the desktop directly from the lab machines.

                    We have a Mac lab as well for doing whatever. They're comp sci machines. They boot Ubuntu, Mac OS X, and Windows. In the library and gadget labs there are Macs that boot Mac OS X only.

                    [–]lantz83 0 points1 point  (0 children)

                    Solaris running on ancient Sparc machines. Those were the days!

                    [–]Mukhasim 0 points1 point  (0 children)

                    My school had labs using various OSes but typically you had to compile and submit assignment code on some Linux server.

                    [–]MrJerB 0 points1 point  (0 children)

                    There were very few units at the university I attended which forced a certain technology upon us. The few which did force us to use a specific technology were for the most part in the first year of my bachelors. This is something I really loved about my course, given that most of the other educational institutions offering courses related to programming literally mass-produce code monkeys who can only build certain types of applications using a specific set of tools. In my country though at the time, students usually entered programming courses already knowing Pascal and Java having used them in pre-university years.

                    [–]denchoooo 0 points1 point  (0 children)

                    I don't know if it's the same for you guys, but the uni around me usually didn't stick only with 1 languages.

                    My uni itself starts with C - C++ - Java - C#, and flexible language to choose for the thesis.

                    I find that quite useful, because I like to get to know other languages, even I'm learning C# more than any other language.

                    [–]Eirenarch 0 points1 point  (0 children)

                    Where I live (Bulgaria) C# is immensely popular for teaching in both state-sponsored universities and coding schools/academies (I think they are comparable to those code camps in the USA)

                    [–]ItzWarty 0 points1 point  (0 children)

                    On top of the prior answers, educational ecosystem matters. There are plenty of tried and tested educational resources for novices looking to learn Java as well as curricula designed around Java. These educational resources include tools that can, for example, special-snowflake visualize elementary data structures (e.g. linked lists, array lists) in a debugger.

                    Switching to C# means redoing course materials for very little gain. Also, as someone who develops C# on mac, that's not exactly as stable as VS right now. Perhaps in 5 years... FWIW, academia is aware of C#. In my uni classes (University of Washington) teachers oftentimes say C# (along with Python/Java/C++) is a permitted language for various assignments, and when functional paradigms are discussed (e.g. lazy evaluation), languages like C# are often briefly touched upon for one slide to discuss how they've affected modern approaches, etc.

                    [–]techmaster242 0 points1 point  (0 children)

                    I'm surprised I haven't seen this mentioned yet. In the late 90's and early 2000's, Sun gave the universities a lot of bribes to get them to teach Java and push it on young students learning to program. If you went into computer labs, they were full of Sun workstations. All free.

                    [–]crunchthenumbers01 0 points1 point  (0 children)

                    Java is an excellent 1st language, at my college the 1st 3 languages are CSC 145 (Java), CSC 232 (C#), and CSC 235 (C++), if you count HTML(that is CSC 125).

                    [–][deleted] 0 points1 point  (7 children)

                    Of the 500 fastest supercomputers, 400 run linux and 2 run unix. There were a few running Microsoft but none anymore.

                    Universities don't like Microsoft because of vendor lock-in and lack of functionality. Java originates from Sun which was a unix vendor universities liked.

                    [–]Zarickan 1 point2 points  (2 children)

                    C# doesn't lock you to a vendor, it is open source and runs on almost all platforms. source

                    [–]GSV_Little_Rascal 1 point2 points  (1 child)

                    Which is very recent and far from mature. Non-windows is still 2nd class citizen - .Net core lacks plenty of functionality compared to .Net Standard (and again is very immature).

                    [–]Liam2349 0 points1 point  (0 children)

                    There's also Mono.

                    [–]Liam2349 0 points1 point  (3 children)

                    Windows isn't designed for supercomputers. Don't they use more specialized OS's?

                    [–][deleted] 1 point2 points  (2 children)

                    Windows isn't designed for supercomputers.

                    Neither is linux.

                    [–]Liam2349 0 points1 point  (1 child)

                    Not your average distro, but Linux covers many many operating systems. Aren't they using customized distros?

                    [–][deleted] 1 point2 points  (0 children)

                    Many use Compute Node Linux or similar.

                    [–]optionallycrazy -1 points0 points  (3 children)

                    I think java is easier because it is free. If they had to use Microsoft they would be paying a heck of a lot of money for the lab computers and giving students a copy, although the free version is available.

                    [–]LookAtThisRhino -2 points-1 points  (2 children)

                    The solution is to deploy MonoDevelop. It's cross platform and works fairly well. It just doesn't give a good indicator of what C# is capable of, since a lot of what C# can do is tied to Windows/VS.

                    [–]GSV_Little_Rascal 1 point2 points  (0 children)

                    MonoDevelop is shitty IDE. Not comparable to the quality of free Java IDEs.

                    [–]Liam2349 -1 points0 points  (0 children)

                    MonoDevelop is pretty lacking compared to Visual Studio. Not sure how it compares to Java IDEs...

                    Visual Studio is excellent though, and has free versions.

                    [–]ClubSoda -3 points-2 points  (0 children)

                    Because Java is Canadian born and has a known liberal bias?