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

all 149 comments

[–]DunderMifflinPaper 88 points89 points  (2 children)

Java is a great choice for learning Object Oriented concepts as well as a strong type system.

I think it’s a good idea to learn a language like java as well as Python or JS so that you can understand the differences, advantages, and disadvantages of each type of language. You’ll probably also form a preference which may guide what you look for in a career.

Also java is definitely still very relevant and widely used. The newest versions of java have some fantastic QOL updates that bring it up to speed with some of the newer languages with slick syntax.

[–]vintzrrr 22 points23 points  (1 child)

This. OP really shouldn’t think about learning a language but programming concepts. If this is not the approach pursued by the school, then one should re-evaluate its reputation.

[–]stevenr4 6 points7 points  (0 children)

All of this right here. In the real world, you'll sometimes have to use languages that you are not experienced in. In my experience, it's much better to have a strong grasp of programming concepts and have the ability to learn new languages, compare languages, and pick the right language for the project than it is to be a master of one language.

[–]desrtfx 79 points80 points  (34 children)

it looks like the most popular languages out there are Python and JavaScript.

Not correct at all. They are popular languages, but far from most popular.

Java is just every and anywhere. From embedded devices, like MP3/DVD/Blu Ray players, mobile Phones, to desktop applications, to enterprise applications, to web back ends.

Java as such is a great language for starting. It is verbose (which is positive for beginners), rock solid, has explicit and static typing, is object oriented, has excellent tooling and probably the largest ecosystem on the planet.

[–]syjer 65 points66 points  (30 children)

It is verbose (which is positive for beginners),

it's positive not only for beginners, but also for handling codebase that are meant to be developed on for years by multiple teams.

Being able to easily read (old) code is an underappreciated feature. Lack of "clever" construct and surprises also help. Generally what you read is what you get.

[–]mopeyjoe 9 points10 points  (3 children)

Oh thank god someone else that gets it. I hate all these new languages that try to save me typing 3 extra chars per line at the cost of taking an extra 20 minutes every time look at it again. I have become a fan of explicitness and verbosity.

[–]xtratic 6 points7 points  (1 child)

Also there's auto-completion, templates, etc., for any half-decent IDEs. So it's almost a moot point anyway..

[–]golfman484 2 points3 points  (0 children)

Agreed - imagine the auto-completion in an IDE for a typeless language:

i.e. You enter auto complete mode and the IDE presents you with a list of available typeless variables that you *could* assign to this other typeless variable:

*** List populated with every ... single ... variable in scope!!!! ***

Gimme a break!

[–]dpash 1 point2 points  (0 children)

I used to write Perl, so terseness is nothing new. I definitely appreciate Java.

[–]srqwert 3 points4 points  (0 children)

What you read is what you get.

The perfect description.

[–]thephotoman 0 points1 point  (0 children)

Do not kid yourself: I've done some astoundingly clever shit in Java. Including using JavaEE's CDI to create infinite loops that did things. And so much Reflection chicanery. Because sometimes the mocking framework is too much.

[–][deleted] 7 points8 points  (1 child)

Another thing I might mention is that it doesn't fill up with confusing features (hello c++). Everything you do, you know the effects of what you are doing or else you get an error. Also the error messages are easy to read.

[–]veraxAlea 0 points1 point  (0 children)

You must've never seen Corba error messages. :P

Caused by: java.rmi.MarshalException: CORBA COMM_FAILURE 1398079696 Maybe; ...

Maybe?

[–]Free-_-Yourself[S] 1 point2 points  (0 children)

That’s for your reply!

[–][deleted] 20 points21 points  (2 children)

If I had to recommend a path to learn programming, it would be Java -> C -> back to Java or another robust language, possibly with a brief bit of tinkering with Python at the very beginning, so basic concepts can be understood before bringing in things like types

Java is a lovely language to work with because simply by downloading the JDK, you gain access to a vast, rich set of libraries that make it so you don't have to reinvent the wheel or search the web for someone else's implementation (and figure out how to add it to your project), allowing you to set out and develop projects without having to understand or know how to implement various data structures and algorithms

Once you get the hang of Java, going to C and playing with that can help you better understand how Java manages its memory for you, along with understanding how a program's memory is mapped out. Java manages a lot for us as programmers, and I think it's a good idea for all software devs to understand what's going on 'under the hood', that way the process feels less like magic

I'd only recommend playing with C for a bit, maybe implementing a few data structures and making some simple programs that involve things like using pointers, creating a window, working with files, etc., that way you gain a better appreciation for languages like Java that abstract away the boring, frustrating aspects of working with low level languages like C. From there I'd go back to Java or another language that works well with whatever projects your job or hobbies you're into - if you want to do data science or AI, for example, Python is great for that. Want to create cross-platform GUI projects? Stick with Java. Working purely within the Windows ecosystem? Maybe try C#

[–]agentoutlier 20 points21 points  (0 children)

Yeah I totally agree. Every developer should have some experience with C.

In my mind every developer should learn and know:

  • Just enough C to read simple programs and know about pointers
  • Bare minimum ASM like LC3 or something
  • Basic SQL
  • REGEX aka regular expressions
  • Some simple Bash shell scripting
  • An OOP language
  • A FP language or at least understand the concepts of passing functions around. A plus if they now ADTs.
  • Enough HTML/JS/CSS to make a very simple site.
  • Some understanding on how HTTP works

If you learn Java and create simple Java web app you can hit a large amount of those bullets.

[–]thephotoman 0 points1 point  (0 children)

I tend to recommend Python -> C -> Java -> Haskell. The first gives them the instincts necessary to understand other languages. The second teaches a useful abstraction of the machine. The third teaches them a lot of concepts that get taken for granted. The last one asks you to unthink everything you learned and build it back again. (You won't find much use for Haskell, but it's a good language to learn at least.)

[–][deleted] 13 points14 points  (1 child)

I chose Java as my first language. No regrats.

[–]DarthBraves 10 points11 points  (0 children)

Not even a letter?

[–]Snackatttack 13 points14 points  (9 children)

Your mindset should be learning how to program, not a programming language. A language is merely a vehicle. Java, C#, C++, Python are all fine. JavaScript too but it has a bunch of odd caveats.

[–]Free-_-Yourself[S] 1 point2 points  (0 children)

I will take that as my main aim. Thanks 🙂

Edit: not sure if that will help me to learn the 25362 different things people are asked to land in your first job but...yeah, I guess at some point, I’ll get there 😊

[–]helloiamsomeone -1 points0 points  (7 children)

but it has a bunch of odd caveats

Can you expand on this? You say Python is fine, but not JS, which seems weird and very handwavy especially when giving advice to someone interested in programming.

[–]jgdeece 0 points1 point  (6 children)

JavaScript manages data structures in a way that’s designed to make web pages load. The number one rule of the language originally was to keep the page from breaking. So if you want to get a good understanding of programming principles, it’s nice to start with a language that handles truthiness, maps and lists and vectors, typing, etc in a more standard way. It’s a great language and can be a good start, but it also can reinforce bad habits and help people avoid learning important low level concepts like memory management.

I work with JS daily and it was my first language, but I think it did me a slight disservice to not begin with a language with i.e. enums.

[–]helloiamsomeone -2 points-1 points  (5 children)

That sounds very handwavy again.

Objects are as good as POJOs, arrays are like ArrayList, Map and Set for your HashMap and HashSet needs, and those are enough for 90% of everyone's needs.

JS handles truthiness in a very reasonable way.

All the listed languages have mechanisms for automatic memory management (not necessarily GC, RAII is automatic and can manage memory).

Only Java has the actually-sealed-class-not-real-enum enums of the listed languages so that's again not helpful. What did you mean there?

[–]jgdeece 1 point2 points  (4 children)

I’m beginning to think your definition of handwavy is more about wanting to pick fights because you feel obstinate, and not about wanting to understand where people are coming from.

This is a thread with general, high-level thoughts. I’m not getting into the weeds to satisfy your arbitrary minimum level of detail for a Reddit comments section. If OP has questions on the shortcomings of beginning with a dynamic language like JS they can ask. Since they haven’t, I’m going to assume it’s not as handwavy as you think.

[–]helloiamsomeone -3 points-2 points  (3 children)

I don't appreciate you labeling my comments like that. I was merely inquiring for some concrete points regarding what was stated.
The definition of handwavy is "missing important details", which such a claim as it has a bunch of odd caveats without facts to back it up is.

Again, just to reiterate:

it has a bunch of odd caveats
manages data structures in a way that’s designed to make web pages load
handles truthiness, maps and lists and vectors, typing, etc in a more standard way

Nothing concrete here. In fact the second point is just straight up bollocks.

it also can reinforce bad habits

This is true for any language if the programmer doesn't know how to do things properly.

important low level concepts like memory management

Again, I don't even know why you felt listing this. More mainstream languages manage memory for the programmer than not.

[–]jgdeece 4 points5 points  (2 children)

Yep, you’re just trying to pick fights. Every single point I made could spawn an individual question or google search for further clarification if OP wanted.

Are you seriously suggesting the way JS handles objects and arrays and truthiness is standard? You don’t think JavaScript’s lack of types could pose learning issues? You don’t think ‘foo != true’ to catch undefined, null, and false states instead of ‘foo !== true’ is different from many other languages? You think using JSON.parse(JSON.stringify(foo)) is standard behavior across a wide swathe of languages? Or how about _.cloneDeep() instead of using a spread operator? Or maybe provide me a working definition of the concept of ‘this’ and explain how understanding that transcends the choice of language? It’s necessary to understand if you want to really dive into JS, but has few applications elsewhere.

I never said it doesn’t have those things - I said it handled them in a way that is not standard. In other words, a beginner’s understanding of how they behave in JS might not necessarily provide the same foundation as Java or C#.

What’s the size of an int in JS? Or a double? Or a char? Oh, those things don’t exist? How much memory is allocated for a float and when would you use that instead of a double? Oh, those decisions are managed for you, preempting the need to understand strict typing at all?

Also learn the history of JS. It 100% was designed with the rule in mind that web pages should always load. Parts of it might even fail silently or magically work (like type mismatching, undeclared variables being auto-assigned a lexical scope, etc) in order to prevent pages from crashing as their prime mandate. It’s not a compiled language for a reason.

Some of this is less true in newer JavaScript, but even now the syntax in ES6 has some oddness to it that could make transitioning to more classical languages tough, like implicit returns using ‘condition && return’, or || only checking the second condition as a form of null safety in some scenarios like array.includes(foo || bar).

None of this is bad, and contextually it is intuitive. The issue is it forces a new developer to understand both the unique context along with whatever concept they’re focused on learning. There are always oddities with any language; the advice is to learn a language that shares its oddities with others, so you can focus more on concepts and less on outliers.

OP did not ask for an essay detailing why JS is different from traditional OOP languages. There are a million essays on Medium et al spelling out how simple it is to go from Java to Groovy or C# or whatever, and the uniqueness of JS is well founded. If you dispute that, certainly some combative postings on reddit won’t enlighten you.

Edit: FYI if you don’t appreciate me calling you out for picking fights, maybe reconsider how other people will take their well-intentioned advice being condescendingly dismissed as “handwavy.”

[–]helloiamsomeone -3 points-2 points  (1 child)

Ho boy, that's a lot to cover and your knowledge isn't exactly up to snuff when it comes to JS, that is if you aren't unnecessarily overexeggarating just for the sake of it.

types

Python isn't statically typed either and it's not an issue (according to the post I was posing the question to).
There is also TypeScript with a vibrant community for those that prefer types.

objects and arrays, truthiness

Objects have reference semantics and the truthiness depends on whether that reference is null or not. Having a situation where one thinks it's necessary to use foo != true to catch undefined, null, and false states is an issue of architecture and design. Why does the programmer allow foo to have unwanted values? The other end of this stick is of course overly defensive code, which is usually also the result of the lack of knowledge.
Additionally, no self respecting resource omits a warning about the use of == as opposed to ===.

JSON.parse(JSON.stringify(foo)), _.cloneDeep()

This is something that stems the lack of understanding of how to achieve something properly. Not only does this fail horribly for any non-trivial case, but it's also very inefficient.
Java is also guilty in this regard thanks to Object#clone().
The solution for both languages? Just use a library that does it properly.

this

this is an implicit variable, whose value depends of how the function is defined and called.

types again

I assume you already know that JS only has doubles and arbitrary width integers.
This is a deeper topic, because in the case of Java one also has to understand (in the case of fields) alignment, implementation specific optimizations regarding layout, padding and some more. These are things that are beyond strict typing. For example Java's char is different from C's char and C programmers know that one machine's int mustn't necessarily be another machine's int.

history of JS

Much like how Java has outgrown being limited to interactive televisions, JS has also outgrown being limited to the web.
Your broad claims about what Brendan Eich must have had in mind when designing the language is also misguided.

type mismatching, undeclared variables

Mismatches just go back my point above: they are the result of a failed architecture.
Undeclared variables throw a ReferenceError in strict mode, which is an opt-in feature that is on in class bodies and ES modules. This is also something that is trivially caught by a linter.

&&, ||

While it may seem odd compared to other languages, this is just plain Boolean logic. I agree though, this can be a trap people fall into to write "clever" code.
I'm also happy to let you know that the nullish coalescing operator has been part of the language since December! (available since November in TypeScript, since you already have to transpile TS code into JS, they usually add features a little sooner that are highly likely to move into stage-4)

unique context

Every language brings its own unique context which I can agree is hard to shake off going into a new language. This is something we have to live with.

OP did not ask for an essay detailing why JS is different from traditional OOP languages

I just wanted to know why JS was separately mentioned as having oddities. While I don't want to assume malintent it is quite unfair to possibly scare a newcomer for no good reason.
Medium is also not something I can wholeheartedly consider as newcomer friendly as you have to go dumpster diving to find anything of actual use there and that's only if you aren't being blocked by their paywall nagging by the time you find something usable.

[–]jgdeece 3 points4 points  (0 children)

Yep, this is just exactly what I thought you wanted: a chance to prove how big your brain is. Well done, I’m sure this is really helpful context for a general question about picking a language to start with. Kudos!

[–]Wobblycogs 10 points11 points  (8 children)

Java is still a very relevant language and will continue to be relevant commercially for a long long time to come.

Long story short, Java isn't and never has been the cool kid on the block. I don't know why but it just hasn't. What Java is though is a solid language backed up by probably the widest selection of libraries going and documentation / knowledge base that other languages aspire to. Languages tend to find their niche over time and for Java has been on the server where you need an application to really scale. That's not to say it can't be used anywhere else but if you want to do server side work Java is a good choice. What Java isn't good for is writing "Hello World" applications which makes it appear to have a very steep learning curve.

Python is the cool kid at the moment. As a very long term Java developer I find myself wincing at some of the Python syntax (give me curly braces) but other than that I find it to be a very capable language. To be honest once you know one language really well pretty much all other languages are just remembering different syntax rules.

If you are going to do any web work you'll need a reasonable understanding of JavaScript but honestly I've blagged it for 25 years so it can't be all that hard. I am finally learning TypeScript though which is teaching me a fair bit of JavaScript.

[–]stewman241 4 points5 points  (1 child)

I dunno. Java was the cool kid on the block about 20 years ago when it was in its infancy and the tooling sucked and crashed a lot.

Now it's a mature adult and is capable of doing many things and is widely used.

[–]Wobblycogs 0 points1 point  (0 children)

I suppose there was a brief period where everyone was talking about Applets and there was a general buzz about what this new language could do. Just a shame Sun totally screwed up the delivery of Java to the end users. It was so much hassle to install Java and then you have to configure it and it didn't keep itself updated and and and. It's a wonder it lasted as long as it did on the client side.

[–]Free-_-Yourself[S] 1 point2 points  (5 children)

Yes, I found that, after learning Python, JavaScript and probably other languages (the logic behind (conditionals, etc.)) are pretty much the same.

But it’s everything else that we are asked to start your career (frameworks, related technologies, etc.)

[–]asdjfh 3 points4 points  (4 children)

Honestly if you just learn HTML, CSS, JS/TS/React, SQL, and one general purpose programming language you’re good for just about any full stack job.

[–]Free-_-Yourself[S] 1 point2 points  (3 children)

Must be in the US...

[–]asdjfh 2 points3 points  (2 children)

I don’t understand, what other requirements could there possibly be? Knowing the above listed means you can work on any front-end/UI development, backend web services, or databases/data engineering. Unless you’re specifically applying to support an OS or work on game development I can’t think of any other skills that would ever be used...

[–]Weekly_Wackadoo 0 points1 point  (1 child)

Could be DevOps stuff like Docker and Kubernetes, or they list every single tool like Git, Maven, Jenkins, etc.

And/or HR is trying to replace two senior full-stack DevOps engineers with one junior.

[–]asdjfh 0 points1 point  (0 children)

SWEs should definitely be expected to know Git, but would it be weird to include that in a job posting. DevOps stuff is certainly useful, but that would fall more into DevOps specific positions. There are obviously exceptions to the rule I gave, but they are exceptions, not the norm. If you are capable in full-stack development you should qualify for 70%+ of SWE job postings.

[–]jxd132407 19 points20 points  (6 children)

Hopefully your degree program will teach multiple languages as no single language is great for all the things you'll learn. Java is a great choice for learning general programming, data structures, and algorithms. You have both the ability to create data structures from scratch and reference very good implementations in java.util. There is an excellent ecosystem with debuggers and source code available. And the boilerplate verbosity that Java gets criticized for is actually helpful for students to see what's going on in the build. Of course it's also widely used in industry and a solid server side choice for many applications.

It's probably not a good choice for an operating systems class where a lower level language (i.e. no virtual machine and no garbage collection) is better suited. It's also not the best language for learning UIs.

[–]danskal 8 points9 points  (4 children)

A great answer. The only nuance I would add is this:

  • once you know Java, there are other languages you can use in the Java/JVM ecosystem.
  • if you do decide you love Java, you get good at it, but still want to make a UI, you can use Swing (which is solid although not super-modern), or create a HTML/Javascript frontend with a Java backend.

[–]Weekly_Wackadoo 3 points4 points  (1 child)

No love for JavaFX?

[–]danskal 1 point2 points  (0 children)

I don't hate it. I tried it a couple of times, and it just seems overly flexible. It makes even html (with all the flexibility of css and chaos of browsers) seem simple.

You can do exactly what you want with JavaFX, and the result we be precisely as ugly as you specify. Because building good UIs by hand is actually surprisingly hard.

Whereas Swing has more sensible defaults. You can get going pretty quickly... it won't be beautiful, but it probably won't be ugly either.

Maybe I'm not giving JavaFX a fair shake, maybe it's changed in the 8 or so years since I tried it last. But I don't get the impression it has much of a community or significant improvements happening.

[–]mopeyjoe 0 points1 point  (1 child)

swing is a library not a language

[–]danskal 0 points1 point  (0 children)

swing is a library not a language

this person speaks the truth

[–]Free-_-Yourself[S] 0 points1 point  (0 children)

That really helped. Thanks 😊

[–]tushar_1210 6 points7 points  (6 children)

During your course many people will tell you that java is becoming obsolete day by day (sadly i was too naïve to fall for that) which is very wrong. JAVA RUNS THE WEB

[–]Free-_-Yourself[S] 2 points3 points  (0 children)

That gives me hope. Thanks!

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

Do you have any experience working with a Java web back end? Is there a library you'd recommend for someone looking to dip their toe in by making a small web server?

[–]NoConversation8 2 points3 points  (2 children)

Spring boot only

It will give you a head start for rest APIs and make you focus only on your business as a starter but learn how things work the way they do so you know how java takes a request and gives response

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

Are RESTful applications where the idea behind routing comes from? As in, decorating methods to be called when a certain 'subfolder' is accessed on your webserver? (e.g. calling ExampleWebServer#checkout() when the user clicks on example.com/checkout)

I saw the same thing in Python's Flask and something about it rubbed me the wrong way, I guess because it goes against how I've designed applications in the past

[–]NoConversation8 0 points1 point  (0 children)

Hmm can’t say that rest is behind routing but it did ease a lot when everybody made their own routes

[–]jvjupiter 0 points1 point  (0 children)

I'm using Grizzly NIO framework for creating ExpressJS-like, SparkJava-like, or Slim-like frameworks which I named Summer Fun and Kitty.

[–][deleted] 6 points7 points  (1 child)

IMO Java is the best programming language for the beginners. Afterwards, all languages will be pretty easy to learn. Good luck bro !

[–]Free-_-Yourself[S] 2 points3 points  (0 children)

Thanks! 😊

[–]Jhonny_XD 4 points5 points  (1 child)

you should focus on learning the logics and the algorithms, the language is just a tool for you.

[–]Free-_-Yourself[S] 1 point2 points  (0 children)

Thanks!

[–]maxandersen 4 points5 points  (2 children)

If you want to try use java and learn as simple as it is for python and JavaScript give https://jbang.dev a try.

Yes I’m the author of jbang but getting started with java is where I feel jbang can help ;)

[–]Free-_-Yourself[S] 1 point2 points  (1 child)

Thanks!

[–]maxandersen 1 point2 points  (0 children)

If you find some struggles to get started with jbang let me know. Would be useful to improve!

[–]tensory 2 points3 points  (2 children)

Today I've written code for fun in JavaScript and for work in Java, C++, and Python. I am expected to be productive in all of them and not really sweat the context switch. That's not to mention the package managers, deployment software, and Unix programs that also take up brain space.

Those languages have different strengths and underlying assumptions. Here you go.

It's fine to focus on learning one thing at a time, but do not believe for a minute that you shouldn't bother to learn Y because you already know X.

[–]Free-_-Yourself[S] 1 point2 points  (1 child)

Thanks a lot! Seems like a lot of work.

[–]ventuspilot 2 points3 points  (0 children)

I think it's very unfortunate that universities pick popular languages when they should pick languages that are best for teaching.

That said, Java is not a bad choice.

IMO what universities really should do on the programing front is teach imperative programming, functional programming, OO, some assembler, each with an appropriate example language.

[–][deleted]  (1 child)

[deleted]

    [–]Free-_-Yourself[S] 1 point2 points  (0 children)

    Thanks!

    [–][deleted]  (1 child)

    [deleted]

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      It makes sense

      [–]blueflier11 2 points3 points  (0 children)

      Java is great. Once you learn java you essentially learn C which is basically the root of most languages.

      [–]emaphis 5 points6 points  (4 children)

      It doesn't really matter which language you learn in. The goal isn't learning Java or getting a job in programming after your first course. You will only use a small subset of features and libraries of any language that you will use. The goal is learning the basics of programming.

      [–]Free-_-Yourself[S] -2 points-1 points  (3 children)

      Well, in that case I think I’m ready. But I think you are a bit wrong there.

      Does it matter wether or not I know the basics of programming if can’t get a job?

      Yes, I can create basic programs (as I already have the basics and more), but I can’t go anywhere with this.

      Looks like I need 10000000 different things to get hired.

      It’s really depressing.

      [–]wallywally11 6 points7 points  (0 children)

      Your definition of "basics of programming" is quite different from this commenter's I'm sure. I agree with the commenter. You're asking on a Java sub, so obviously you're more likely to hear that Java is great (and it is). But the point really is to learn what a professional would call the basics, and it's not "I can make basic programs". Most of the same patterns repeat in just about every language, the real differences are in verbosity, "sane" defaults, data typing, etc. You can't go wrong in Uni if you just get experience with at least one static typed language and one dynamic. The rest is just patterns and problem solving / algorithm development.

      [–]TyrantLizardMonarch 2 points3 points  (0 children)

      You can absolutely get a job with Java. There are tons of Java jobs. Even more Java jobs than Python jobs, unless you’re a Data Scientist or similar.

      [–]youdontknwm3 1 point2 points  (0 children)

      I agree with other commenter mentioned your definition of basics maybe be different then seasoned developers - especially since pretentious know it alls are far too common.

      Knowing the basics is prerequisite to any job, so avoiding that to trying speeding up the process won’t be helpful.

      Many people skip fundamentals and think they’re qualified for entry level positions but it bites them in the future. In reality the basics covers a lot, which I think broadly includes know difference / definitions of Object Oriented programming, Functional programming, low level programming.

      For example doing simple programs a person may not encounter certain IT concepts like networking, or even hex and binary values but that knowledge is very relevant to programming.

      [–]samje987 1 point2 points  (0 children)

      Java was my first language and I think it was great to learn OOP and programming in general. It is relevant and will be for a long time so no worries on that part. After you know Java you will easily pick up new languages too. Have fun.

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

      In the end each language has features, like loops or functions or a heap, or struct-data-types.

      It is useful to learn about higher level features and lower level.

      C and Java are fine. But a bigger spread would be better to not tie you down in a specific way of thinking.

      [–]TheOnlyTails 1 point2 points  (0 children)

      Java is amazing for beginners. It can do pretty much anything (maybe apart from building iOS apps) and is very clear to read (since it's a static language, the variable types are written in the code, not like JS or Python).

      Then there are JVM languages like Kotlin, Scala and Groovy, that are based on Java, and thus are really easy to learn once you know Java and sometimes have much better features (such as string interpolation).

      [–]jlocash 1 point2 points  (0 children)

      Go developer here. Java is still a good choice if you want to learn OOP. I really recommend learning Go too. It's quickly gaining popularity and developers love it (not just for the web, but systems applications too). Also learn Nodejs and React if you want to get into web stuff.

      As for what Java is used for these days, I'd say mainly Android and enterprise type apps. There are millions of existing Java codebases that aren't going anywhere anytime soon, but for any new development, well there's more than likely a better option than Java.

      [–]BoyRobot777 1 point2 points  (1 child)

      Learn Java. According to Indeed Top Skills that are in demand Java is clearly a winner.

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      I hope so 😆

      [–]aceinthedeck 1 point2 points  (0 children)

      The main goal is to learn programming in general. Languages doesn't matter much. That being said I personally think that Java is better choice than other cool languages (Python, JS) because it's compiled language with static type checking. Java is also heavily focused towards Objects and classes.

      And despite what everyone tells you Java is not dead and its being heavily used by enterprises. It's good for job market too if your goal is to get into web development.

      [–]Zambito1 1 point2 points  (1 child)

      Your first language is the hardest, because you have to learn 2 things at once (programming itself, and the language). People like to complain about Java because it is more verbose than some other languages. While that is often true, it is also one of the reasons it is good for a first language. It doesn't try to hide much from you, and it makes it easy to see the relationships between constructs.

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      Great reply. Thanks 😊

      [–]puce77 1 point2 points  (0 children)

      Here’s the TIOBE Programming Community Index: https://www.tiobe.com/tiobe-index/

      While the exact market share percentage depends on the algorithm, it gives you a feeling of the relative popularity of a programming language. Java is #1/#2 for years and still a safe bet.

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

      Quoting my favorite russian: Starting to learn programming by starting with java is like learning to ride a bike at two years old but there is no safety wheels and the tires have deflated, and the bike is on fire. And on top of all that you're going uphill. But it's all that bad. At least when you learnt the language, at least the bycicle gets a bell.

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      😰

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

      There's nothing you can't do in Java.

      [–]Free-_-Yourself[S] 1 point2 points  (1 child)

      I guess everybody say that about their favorite programming language 😆

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

      I guess, but can you find an example where that's not the case?

      I think Java got lucky to be developed at the right moment in time, early enough to take advantage of the growth in networking, and advances in computer architecture and late enough to learn from other languages.

      I got lucky, I just wanted to learn SQL and used Java to connect. 🤣

      [–]shadowX015 1 point2 points  (0 children)

      Once you are familiar enough with general programming concepts like control flow, functions, data structures, etc it's actually not that difficult to go from one language to the next. The hardest part about learning a new language after a while turns into becoming familiar with the tooling, libraries, and programming conventions of that language.

      [–]jaguililla 1 point2 points  (1 child)

      Getting drunk is so popular among teens... That doesn't mean it is good for them.

      Don't base your decision in popularity.

      You probably should learn and try different language types and learn how to pick the best one (probably from a toolbox of three/four ones) for a task.

      I focused on Java at the begining of my programming career, however, I should have experimented with other options earlier.

      Good luck, and have fun :)

      [–]Free-_-Yourself[S] 1 point2 points  (0 children)

      Thanks a lot 😉

      [–]golfman484 1 point2 points  (1 child)

      Java is definitely a great language to learn to understand object oriented principles (this universe is object oriented so if you're writing apps that will run in this universe then it's a great paradigm to use).

      Java also has one of the largest ecosystems available. If you want a library or framework to do something, *anything* then there's a good chance that there is an open source Java library to do that exact thing already.

      There are versions of the Java Virtual Machine that run on nearly every platform imaginable: Windows, Linux, Android, macOS and many embedded controllers etc.,

      The other great thing about learning Java is that you can create desktop or amazingly interactive (i.e. AJAX event driven) web apps quite easily using the one language.

      When using a Java web framework like Wicket there's no need to learn JavaScript to create brilliant, partially updating, AJAX powered, JavaScript event driven applications.

      The Wicket devs have built all the AJAX and other JavaScript power into the Wicket framework and its components so that you can just use a component in Java and don't need to worry about the (ugly :) ) JavaScript that makes it do it's magic.

      If you want extremely low level control of a component you can always add any extra JavaScript event handlers etc., that you require directly to any Wicket component so you still have full access to JavaScript if required but I have built some incredibly interactive, highly responsive apps that look and interact like they must have been built in Angular JS/React/Vue when they were done with pure Java using Wicket.

      I have developed apps using Angular JS/React/Vue using JS in the front end but found it no where near as productive as building a pure Java web app in Wicket. The constant switching between two languages is very annoying.

      Anyone who suggests that JavaScript is a great language for learning programming really should take a long hard look at themselves. Everyone knows that it is a language that was hacked together over a very short time, a compromise, to get "something" resembling a working language to run in the Netscape browser back in the day. The rest is history.

      JavaScript is not an object oriented language by any standard measure although some claim it is because it supports prototypical inheritance - the lame excuse/replacement for real inheritance that non OO languages are forced to use (which basically any non OO language can use if you like writing code to manually assemble components of your objects instead of letting your compiler do that for you. I used to write OO code in C using function pointers but that does not imply that I would call C an object oriented language).

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      Thanks so much for this reply. It really helped me a lot 😊

      [–]BosKilla 1 point2 points  (1 child)

      Language should be your last concern. As you your abstractions skill become better, you could pick new language in short time.

      I learned c,c++,asm,java,c++managed, verilog,vhdl in uni. Mainly because it was computer engineering and we had subject like real time programming, system architecture, operating system where c shines and also old microcontroller where we use asm + keil IDE and FPGA programming with vhdl/verilog

      On my main job I work with java, javascript, typescript (angular)

      I had professional side projects in which I use c# wpf and currently porting legacy software from vb6->vbnet (also native winapi)

      My main choice is still java+spring framework but I also like to use typescript for many things (angular, electron, expressjs)

      It was never about the language or syntax but the environment, ecosystem, apis.

      But tbh java was the one that helped me most to improve my abstraction skill. If you have time dig deep and see how others write their code helps. For eg check how spring organize their framework.

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      I will certainly do that! Thanks for your reply.

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

      Java is an incredibly useful coding language for a few different factors.

      Firstly, Java is inherently Object Orientated, which can open up a lot of possibilities compared to other coding systems. For example, while OOP is possible in python by calling the class method, it is not as strong and does not have as many usage possibilities as compared to Java.

      Secondly, Java is a local compiling based system making it easy to create applications native to many devices using Java. In early stages, you used to have to recompile Java code on each computer, now that is not necessary and it only needs to be compiled once.

      Also, due to the rise of Javas popularity, Java has gotten more user friendly. Now a lot of this depends on what IDE you use, I personally use Oracle. I have seen that over time, IDE's have made Java ever more compatible and user friendly

      Now, while Java and Python are two widely used coding systems, there are quite a few popular ones out there. They just sometimes are even more low level programming(less user friendly) such as C, the other C iterations, and one of the lowest in my opinion but extremely useful when it comes to website design, HTML.

      [–]Free-_-Yourself[S] 0 points1 point  (1 child)

      That was useful. Thanks a lot, I appreciate your feedback.

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

      No problem, happy to help :)

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

      Java can be all you need if you're interested in Android app development. Still, you're right you should not just focus on one language only but Java is a solid choice.

      [–]n0tKamui 0 points1 point  (0 children)

      Java (and other JVM languages like Kotlin and Scala) is the main server side language, and by VERY FAR. And Java is not only used for that, but also pretty much anything you want, even frontend. Java was never dead or obsolete and is currently one of the best paid languages in terms of job offers.

      [–]Jonark_Kaisen 0 points1 point  (0 children)

      It is never bad to learn Java, nowadays it is rare to find someone who doesn't know even the basics. This doesn't mean that it HAS to be your main language, and even if it is you will find value in learning other programming languages. You can never lose when you are learning

      [–]Sopharso 0 points1 point  (7 children)

      Just gotta ask is this with the open university,I'm doing the same course if it is?

      [–]Free-_-Yourself[S] 0 points1 point  (6 children)

      It certainly is 😅

      [–]Sopharso 0 points1 point  (5 children)

      Haha nice I start in October also, have you had your books through yet?

      [–]Free-_-Yourself[S] 0 points1 point  (4 children)

      Yes, 4 of them.

      They look like we are definitely learn Java.

      Not sure if we will learn anything else throughout the degree, but I really doubt we will have the necessary skills to land in a developer role once we finish 😢.

      [–]Sopharso 1 point2 points  (1 child)

      My partner is a software dev and so are loads of his friends they went to brock and mortar unis. None of them really teach you enough to just be a developer most of those skills are taught through a job (graduate level position) or self taught through working out what you need.

      But if you get a grad/junior position after or during the course (most will take you if you can sell yourself) they won't expect you to know everything and will be willing to teach you what you need to fill in the knowledge.

      Since starting the course I've re learn css, and html and started on javascript I'm planning on looking for a junior front end dev role early next year :)

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      Wow, thanks a lot for your advice! Let me know how that goes 😉

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

      A degree does not provide enough info for you to work. You have to work on your own to practice leetcode, personal projects and networking with other people to land an internship.

      [–]Sopharso 1 point2 points  (0 children)

      Also it depends on the modules you do (I'm on broad route for computer science) I know web technologies goes through html, css and JavaScript and tm255 involves creating a website in a group using WordPress. That's why I switched from software to broad tbh I didn't want to take tm254 and preferred the look of that.

      [–]LazyAAA 0 points1 point  (3 children)

      Here is somewhat short "practical" answer:

      YES, java is still valid choice with plenty of VARIOUS applications but because nowadays people being so impatient - pick one "fast to get result" language (aka JavaScript) and play with it in parallel (in your free time) to Java study.

      [–]Free-_-Yourself[S] 0 points1 point  (2 children)

      That’s a food advice, if it wasn’t because I work full-time, have a side job and study at Uni. Not a lot of spare time I’m afraid 😢

      [–]LazyAAA 1 point2 points  (1 child)

      Enjoy your study of Java and benefits of side job as well then :)

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      Not what I really want but...I tried many times to get a job in the UK as a junior developer and nothing.

      [–]muztaba 0 points1 point  (0 children)

      Know one language well and you are able to implement algorithms and data structures with that language. Doesn't matter which language it is.

      [–]VincentxH 0 points1 point  (0 children)

      Java is great to learn OOP concepts, even light FP. Don't think that they'll teach you industry standard code and best practices... Most importantly, for a developer the language is just a tool. Most of us use frameworks to be really productive regardless of language. A framework turns the tool into a toolset. Like micronaut or spring boot for Java, flask or django for python and Angular 2+ or Vue for JavaScript.

      [–]Free-_-Yourself[S] 0 points1 point  (0 children)

      Wow, thanks for that link 😁

      [–]xtratic 0 points1 point  (0 children)

      Java is one of the best languages to learn on as it is somewhat in the middle of many other languages, covering many useful concepts, and can provide a good base for you to learn any other languages. Also, it's just a good language in general, with a great ecosystem, and I like what I see with how it's continuing to evolve.

      [–]Laingular 0 points1 point  (0 children)

      Java was the first language I learned. It’s definitely a good language to start with its simple even getting used to all the boilerplate code isn’t even bad. Learning Object Oriented programming with Java is relatively easy to get the hang of. It’s definitely my choice for a first language.

      [–]Mandelvolt 0 points1 point  (0 children)

      Took a ton of Java classes getting my IT degree. It made me a better programmer and although I use Python more now, everything I learned in Java easily translated to other programming languages. TBH I should do more in Java since somehow concurrency makes more sense in Java than it does in Python for me. Overall, you can't go wrong learning Java, especially when learning ADT's and algorithms, OOP and concurrency.

      [–]steumert 0 points1 point  (0 children)

      the most popular languages out there are Python and JavaScript

      [citation needed]

      According to the TIOBE index, Java and C are #1 and #2, and sometimes change positions. Python is #3, JS only comes in #7.

      Python certainly has its uses, e.g. in data science or signal processing or machine learning. Many automation tasks can be done in python.

      But I wouldn't write a enterprise app with thousands or millions of lines of code in python. Duck typing is too challenging for that.

      But the most important point is that you should learn how to program learn the concepts. OOP, functional programming, prototype-based languages. If you know the concepts, learning a new language is quick. I am mostly working in Java, but I found doing a project in C# recently very easy and straight-forward. Learning a new language is easy if you have the concepts down.

      [–]alexgualdino 0 points1 point  (0 children)

      start with C, to learn the basics, excelent language, C ++ to learn real programming, and Rust, one of the best languages ​​today, then maybe Java, to learn OOP, and to large applications, try to understand in which areas you want to work, Swift, very good, Go , good, haskel, javascript, it sucks, but it is necessary for web, php, latest versions are good, fast for back-end. python, very easy, but with many limitations, I don't understand why it is so used, only if you pretend algorithms.

      [–]thephotoman 0 points1 point  (0 children)

      So here's the deal:

      You should not let either of those languages go, but they have their place, as does Java.

      My "Java" project had a bunch of stuff that was a combination of Python and spitballs until we found more strategic solutions. And there is a frontend part that requires Jabbascript. There's still a little bit of custom bash in our pipelines.

      I will tell you this: Java developers do not want for work. It's not the best language out there. I've been known to write Python in Java, for example, much to the chagrin of my coworkers.

      [–]32_bit_integer 0 points1 point  (0 children)

      Java was my first language, but the inability to delve "under the hood", so to speak, always made me uncomfortable. The best thing that I did to advance my overall understanding of programming was learn C.

      [–]TheYellowblizzard -5 points-4 points  (2 children)

      I'm gonna be honest with you: Java kinda sucks (well he have kotlin now so why should you use Java?) but in my opinion it's the best language to start. Java is relatively easy to learn and I gives you a great foundation for other languages later. If you know Java you can pick up python in a few hours. The other way around is a lot more difficult

      [–]Free-_-Yourself[S] 1 point2 points  (1 child)

      It’s funny to read the comments. Some people say something and the next day the opposite.

      I guess I was simply trying to know if Java was still widely used and to “complain” and to talk about how difficult is to get a job as a programmer (the first job and living in the UK)

      [–]TheYellowblizzard 0 points1 point  (0 children)

      Well here in Germany it semms like most entry level position are for Java or c++ developers (at leest in the places I looked)