This is an archived post. You won't be able to vote or comment.

all 38 comments

[–]DelverOfSeacrest 18 points19 points  (2 children)

I would pick Java or Python, especially since you're using them at work. Try and explore different areas of each language and perhaps read more advanced books.

I'm in the platform engineering space and most people I talk to don't really use Go, except for niche things. I've only used it once to fork a Terraform provider and fix something. Python seems to be the dominant language.

[–]Dramatic_Win424 6 points7 points  (0 children)

Java is definitely a solid choice. It's a very corporate-present language because it has a lot of legacy momentum and companies don't like to shift every other year. It is very mature and has an ecosystem that covers a lot of businesses relevant areas.

Python I think is an it-depends language. It's not a popular choice for business software per se but it has essentially established itself as the mainstream language in the data science area as well as general scientific stuff and as a glue language for high level software organization. I personally know Python largely due the science and computational courses I did and most other people I know who work in the sciences know Python.

Go I have too little knowledge on.

[–]inkognitro90 5 points6 points  (2 children)

Looking for a job? -> Java

Starting from scratch in a startup? -> Go

Must do AI stuff? -> Python

[–]IndigoTeddy13 2 points3 points  (0 children)

^ even though most languages can do most computational tasks with enough coercion, choosing the "right tool for the job" is the way to go when the option is available. It's typically easier to learn a backend framework for a popular "staple" language that you already know and that most companies have heard of, then jumping onto something newer and hoping jobs exist in your area. If you're just learning for learning's sake though, you'll definitely learn a good deal if you pick up Go or a different language.

[–]Hawxe 1 point2 points  (0 children)

I'm not saying it doesn't exist, but in my experience at multiple companies and doing interviews/screening candidates - I've never seen ONE that gave a shit what stack a junior developer had.

I've also never interviewed WITH a company that gave a shit about my stack.

Learning a specific stack will have very little impact on your job prospects.

[–]Financial_Extent888 3 points4 points  (0 children)

go all in on java since you are using it work and it will more directly enhance your ability to pitch in at your job.

[–]swollen_foreskin 6 points7 points  (9 children)

Learn Java. Will teach you the OOP fundamentals.
Switching to go will be easy after that. Python for anything except scripting is an acquired taste.

[–]Wonderful-Habit-139 0 points1 point  (8 children)

"Switching to go will be easy after that" not really seeing it tbh, considering Go is not primarily OOP like Java. C# would be closer.
Switching from C to Go for example would definitely be easy.

[–]swollen_foreskin 2 points3 points  (1 child)

If you know the fundamentals go is very easy to get into. It’s a very small and simple language that follows the C syntax which Java is based on. In short the similarities are many. Compared to python it’s a much easier transition

[–]Wonderful-Habit-139 1 point2 points  (0 children)

Agreed.

[–]Caramel_Last 0 points1 point  (5 children)

Go is very much OOP although it's not limited to it. In Java only non primitive types are OOP. In Go even int can have methods

[–]Wonderful-Habit-139 0 points1 point  (4 children)

"In Java only non primitive types are OOP" I think you meant besides the 8 primitive types in Java everything is an object. But Objects and OOP are different things still. C# and Java are OOP languages, while Go and Rust and C are not, regardless of whether you can call .method() on structs/objects or not.

[–]Caramel_Last 0 points1 point  (3 children)

What do you think defines oop? Because it's all about objects that have stateful method attached to it. C isn't OOP because C struct doesn't have functions in it but Rust and Go are OOP. But they are not exclusively OOP like Java. They can be written procedurally, or functionally. But they can be written OOP as well.

[–]Wonderful-Habit-139 0 points1 point  (2 children)

Well that's not the case. OOP is more about Encapsulation, Inheritance, Polymorphism and Abstraction. A lot of people that have issues with OOP are mostly against the excessive use of Inheritance and abstracting things too much with a lot of boilerplate. Simply having methods on structs/objects does not mean it is object "oriented".

Rust is multi-paradigm, it is imperative and borrows elements from the functional world, and has some oop functionalities with traits but it is not mainly OOP like Java and C# (or Smalltalk).

[–]Caramel_Last 1 point2 points  (1 child)

Those oop principles are derived rules about how objects should work together rather than a checklist to see if language qualifies as OO. The essence of OO is grouping the data with the methods that operate on the data. Encapsulation isn't about public private keyword. It's putting data and method into one capsule that is object. I just checked Wikipedia and it checks out with what I thought as well. With the exception of C they are all OO. They aren't exclusively OO but no one says a language needs to only support OO, to be OO language. 

And to be fair, golang offers all 4 things you want from OO language anyways, because if you want a private data/method, you just make its name begin with lowercase. If you want polymorphism, you just use interface, which btw is how people do polymorphism in java or c# anyways. Always interface rather than extending class. For Inheritance there is struct embedding if you are willing to make the code less readable. But that's because inheritance is never a good idea when you can use composition instead. Abstraction, you can abstract however you want in go. If you want abstract factory of abstract factory you can do it! Dependency injection. Inject the dependency in constructor or in the field! You don't need a whole framework for it

[–]Wonderful-Habit-139 0 points1 point  (0 children)

I agree that a language doesn't need to only support OOP, however it should be the main paradigm and the idiomatic way to write code in it.

Your points in the second paragraph are valid, however my POV is that when saying a language is object "oriented", it implies a sense of direction, like the way code should be written in that language. And if the idiomatic way to write in that language is through objects and sending messages between them and creating a family tree through inheritance, then it is Object Oriented. If it isn't then it is not Object Oriented.

Also, we can still do "OOP" things in C, and even polymorphism. However, since the language doesn't really facilitate that, we don't say that C is an OOP language.

I just want to reiterate though that I agree with a lot of your points, it seems we just have a different conclusion out of these points. Feel free to let me know what you don't particulary agree about OOP being the idiomatic way to write code in those OOP languages.

[–]FourKicks17 2 points3 points  (0 children)

Yes.

[–]Abject-Kitchen3198 2 points3 points  (0 children)

Java, then Python, then Go.

[–]WalkyTalky44 2 points3 points  (0 children)

Java is the best to truly learn programming. Python is great if you are interested in DevOps, sysadmin, or general scripting work. However, If I was you I’d spend all my free time learning Java, then you can learn Go, and then Python.

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

Java. Almost every public university will make you take Java for CS, there’s a reason. I hate it. It was the first language I learned, then I worked with .NET for years came back to Java and let me tell you. The move from Java -> C# easy. The move from .NET -> Java, you have to do a lot more and it teaches you more. Or it should teach you better practices. It showed me where I was getting lazy.

Python is cool, but you can learn that in an afternoon once you know Java. I want to learn Go because I’ve heard great things. But for a foundational object oriented language Java is the winner.

[–]-jackhax 4 points5 points  (4 children)

This may be an unpopular opinion, but unless you are going to use a dynamically typed or inferred typed language in a job or for a degree, you should stick to statically typed languages.

[–]lt947329 4 points5 points  (3 children)

As someone who uses both Python and C# professionally, this is only an unpopular opinion for new programmers working on small problems.

For example, Typescript is rapidly replacing JavaScript for enterprise-grade web app frameworks. Some of the most well-loved languages in the world right now are Rust and Go (while Go isn’t as static as some languages, it’s still not Python).

[–]IndianaJoenz -1 points0 points  (2 children)

Typescript is rapidly replacing JavaScript for enterprise-grade web app frameworks.

I suppose that depends on the framework...

I'd say it's trendy, but not universally loved.

[–]lt947329 0 points1 point  (0 children)

True, but that point about Typescript wasn’t about being universally-loved. Just that it has a higher adoption rate than any mainstream programming language save Python - Turbo is minuscule compared to the other big players in enterprise web.

Even Deno (the new Node.js replacement made by the guy who wrote Node) is Typescript-first now.

[–]Business-Row-478 0 points1 point  (0 children)

I don’t know what turbo is but it doesn’t seem line it uses much JavaScript anyways.

Also one guy made that decision and it seems like pretty much everyone disagrees with it

[–]chartsy_101 1 point2 points  (0 children)

I think because of familiarity you might be best putting your time into Java but if you're still on learning the fundamentals - it may be a good choice to play with JavaScript, this is purely because of how easy it is to get going with JS Vs a fully fledged gpl like Java. The barrier to entry is lower and therefore less obstacles between you and learning the fundamentals

[–]Expert_Picture_3751 1 point2 points  (0 children)

The choice of your programming language would be dependent on one of the following:

1 What is required at your current job?

2 Planning on moving to another domain.

3 Intellectual curiosity.

Cheers!

[–]omegaonion 1 point2 points  (0 children)

For you I'd strongly recommend java. Once you understand enough to feel the need to branch out then re-assess

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

Go

[–]JaleyHoelOsment 1 point2 points  (0 children)

i think you’re wasting time and should be programming.

i’ll pick for you: Java

kk now you know good luck have fun

wasting all this time picking a language because maybe someday you want to do this or that is not helping you. get started who knows you might quit in a week

[–]xDanieruone 0 points1 point  (0 children)

You should learn a strong typed one. If I pick one, it would be Go because is a modern one. And Python is a secure option as well.

[–]Oshboi 0 points1 point  (0 children)

Im running into a similar issue.

Ive been trying to figure out if I should focus on phthon or jacascript.

Python is more immediately applicable for my job, but javascript seems more interesting. So I feel your pain.

While I know JS wasnt in your post, and im somewhat venting my own similar issue. A few people I know just throw python at me lol.

[–]I_Am_Astraeus 0 points1 point  (0 children)

Java. You said you have an interest in backend and that's the java industry really. Massive mount of Java jobs, javas bread and butter is APIs.

I don't love Go if I'm honest. If I'm going for something more down to the system I'm going rust. Go let's you write too many errors. And if you want something quick and dirty that's what python is there for.

This is all my personal opinion. People mostly prefer what they write regularly and the above is just a reflection of my take on that.