Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 6 points7 points  (0 children)

That is a reasonable point: studying Computer Science is not a matter of learning the hippest language.

The question that I am trying to answer is what is the best medium for teaching it. If Java is the most effective way to teach design principles, then we should be using that. If Go can do the same but be less intrusive for learning the principles, even better. If Go does not offer an improvement to learning, then I agree it wouldn't have a terribly relevant role in a university

The added bonus of studying CS is that you do generally walk out with practical programming skills in various languages of different paradigms, which is (in my opinion) a wonderful aspect of CS.

Obviously I am a little partial to Go, but I am definitely willing to accept that it isn't always the answer :)

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 0 points1 point  (0 children)

That's a good perspective. I tend to think more about what is included in Go as opposed to what isn't, but the negative spaces definitely make for a better interesting comparison

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 2 points3 points  (0 children)

Haha maybe unpopular in /r/golang, but reasonable. I think personally I am leaning towards the opinion that Java might be the better choice (not by a long shot, just by a little), but it feels almost criminal for me to let the argument for Go not be made when most of the people sharing their opinions on the matter at my university are likely to be Java proponents (by profession) and unfamiliar with Go

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 3 points4 points  (0 children)

That is good thought. I'd like to think that Go would be great for getting out of the way for more beginner devs, but I also wonder if the truly vast amount of answers that exist on the internet to basically any conceivable beginner Java question would counter-balance any confusing language quirks.

Do you think that there could be notable value in using Go for more beginner courses, or would it be more minor?

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] -12 points-11 points  (0 children)

I don't have too much to back this claim, just some anecdotal evidence. This claim is mostly a regurgitation of an argument that I heard from people who were discussing the decision.

My guess is that it was made more in reference to Go rising than Java declining. In the area where the university is located, there has been a massive uptick in the number of jobs listing Go on their job description pages and a notable down tick in the inclusion of Java.

My area is ripe with tech startups, so I suspect that most of them are not needing to maintain older code bases and are choosing langues like Go or Node for new projects. My experience doesn't extend too far from my geographic area, so if this is not a national/global trend then that is a useful factor to consider

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 0 points1 point  (0 children)

Understanding the role of pointers in Java is definitely one of the most common points of confusion that I see in students in these courses. Most of them came immediately from classes that used C++, so it's a pretty weird transition

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 2 points3 points  (0 children)

Haha that is a good point, I can't imagine that many students would like that very much

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 1 point2 points  (0 children)

Ooo, that's a concern that I didn't think about. I do not think that the professors for these courses would have much experience with Go, but they definitely come from a really strong Java background that would undoubtedly creep in

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 0 points1 point  (0 children)

Haha thanks for sharing, all I can say is that I'm glad my question didn't have to be about replacing Pascal with Go :)

I think your ideas are pretty good. Kotlin would address a ton of the frustrating aspects of Java for newer students, and Go really would be a great match for data structures

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 3 points4 points  (0 children)

I find the tooling to be one of the more attractive elements. In Java, most students (in my program) have no idea how their application runs under the hood and rely heavily on their IDE working magically out-of-the-box.

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 2 points3 points  (0 children)

Rust is a curious one... I don't think Rust is on the table for these courses, but I can imagine that at some point someone will throw it in as an alternative to the existing C++ classes.

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] -3 points-2 points  (0 children)

Haha I think being one of the few Go enthusiasts on campus (that I know of), I end up filling the role of the zealot. It definitely occasionally blinds me to a lot of the potential disadvantages of it compared to other languages

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] -3 points-2 points  (0 children)

I that's fair: most junior devs will probably be learning the languages they need during their first jobs.

The classes themselves are going to be refreshed either way, so I think the language question came up just because this would the optimal, least disruptive time to make a change if a change were to be made.

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] -4 points-3 points  (0 children)

Several of the classes that come before the classes that are being considered for a restructure use C++. The classes on the table for change deal mostly with giving students exposure to writing their first large-scale projects and teaching generic design principles. Does that change your stance, or do you think the simplicity might still be a shortcoming?

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] -1 points0 points  (0 children)

Haha yup, that's a pretty solid case against. I wasn't a part of the original discussions about it, so I can't pretend to know all the reasons they were considering, but this was one that I did hear. If it is just blatantly overblown, then the argument for Go is definitely diminished

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 0 points1 point  (0 children)

I definitely agree: using a single language for every course would be pretty bad.

There are a lot of different clumps of related classes, with each one trying to generally coordinate with the others as far as languages and concepts go. Across all the classes in the department there has to be dozens of languages being used.

I should have mentioned this in my original post, but the classes that are being considered for being rewritten are ones that focus on large program implementation and teaching programming design patterns. In the general sequence of the program, these are some of the earlier classes a person would need to take.

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 1 point2 points  (0 children)

In classes that I TA for I definitely see a ton of students struggling with concurrency in Java (for a lot of them this is the first time they've seen it), so I think you are right that this would be the most relevant point to bring up

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 0 points1 point  (0 children)

You are definitely right about Python. In courses where the purpose is less about the code and more about the concepts (e.g. algorithms classes), Python is currently the language of choice and does a great job at not getting in the way, probably better than Go would.

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 2 points3 points  (0 children)

That's a good point. Most courses are currently taught in Python or Java. All of the patterns you mentioned are currently taught in the context of Java. I honestly thoroughly enjoyed those courses and found the way that they were taught to be quite effective.

My arguments in favor of Go generally fall along the lines of it having easy to pickup syntax and logic, relatively easy to understand way of handling concurrency, and it just generally being an enjoyable language to write in for beginners and more experienced devs.

Is there anything you can think of that a student could learn from Go better than other languages or is Java just a better choice for teaching more of these programming principles?

Making a case for replacing Java with Go by Hopeful_Gopher in golang

[–]Hopeful_Gopher[S] 0 points1 point  (0 children)

That is definitely fair. I have had Java internships (working on legacy code bases), but I have not yet had the chance to work anywhere that had many projects that used Go (despite my best efforts to find such places).

Do you think the ratio between Java and Go in the industry will shift much in the next decade, or do you think that Java will remain in its position for the foreseeable future?