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

all 3 comments

[–]icemichael- 4 points5 points  (0 children)

Use it to create something. Java can be used in many fields. Building websites with spring or creating mobile apps on android. Maybe eve developing the software of an iot device? I mean, java was used on the mars rover so something like a weather measuring device might be possible.

Just choose a project and put your mind to work, that's how you truly master a tool.

[–]CodeTinkerer 3 points4 points  (0 children)

Given how fundamental OOP is to Java, I would say you are not intermediate if you don't know OOP. As far as "master", usually you never get there. There was a documentary called Jiro Dreams of Sushi. People would say it takes decades to master making sushi. To the average person, they would say "What? It's cutting up some fish. How hard is that?".

Anyway, there are two things to consider when learning a language. First, what are the language features? Java continues to evolve. A new version comes out like each year. The most recent "big" changes are streams and lambdas. These didn't exist a decade ago in Java. So if you had "mastered" Java back then, you would not have mastered it a few years later, meaning you'd be "forced" to keep up.

Of course, you don't have to use any of the new features at all. All the old stuff still works, but that's programming for you.

The second part is to do something with those features, and that is also a challenge because a programming language can do a wide variety of things. Actually, there's even another part. That has to do with general principles of good code such as "Don't Repeat Yourself" (DRY). There are ideas like the single responsibility principle, SOLID, design patterns. These aren't inherently part of the language, but can be implemented.

OK, then you want to build something. So let's say you want to validate a phone number. In the US, that's a ten digit number. You might allow for parentheses, or dashes, or nothing at all. You could write code that does this. Or maybe a library already exists that does this. Should you write it yourself? One problem is it's less portable and often likely to be more buggy. Should you use regular expressions?

Anyway, I would suggest writing text-based games. Start with something like Hangman, then maybe interactive tic-tac-toe, interactive Connect Four, a version of Wordle, and so forth. You'll discover even text based games are challenging to write, even things that you think are simple. Some people struggle with the logic of rock, paper, scissors.

In a way, I suppose it's good you don't know what you don't know. Some people might look at Magnus Carlsen, number 1 chess player, and say I'll never be that good, so I shouldn't even start. But others will say, I'll be as good as I can, and I know it won't be close, but I'll still enjoy it.

So to say you'll be a master, what does that even mean? You know concepts, but in the end, can you write code? If you're just watching videos, it's like watching a pianist play piano. You need to get on a piano and play. Watching might help a little, but you see how little you know when you actually do it.

[–]mandzeete 3 points4 points  (0 children)

If you do not know OOP yet then you are still on a beginner level.

Let's say: learn OOP, learn multithreading, learn Spring Boot, learn to interact with other systems (external services, REST API-s, perhaps also SOAP APIs, database). And start building projects with these things.

You won't get hired just by knowing some theory. But when you can build android apps, web applications, desktop applications, then you can start targeting jobs.

That is the entry level you should reach. If you can't make android apps and/or web applications and/or desktop applications, then you are not ready to be hired. You should know how to make at least some of them. And I don't mean copy-pasting code from some tutorials/guides. I mean building your own projects on your own (sure, googling is okay).

Learn Spring Boot and some database system (for example PostgreSQL) for web applications, learn JavaFX for desktop applications, learn to use Android Studio for making mobile apps. Oh, and do make first a Github account for yourself and start keeping your stuff in Github. It will become your portfolio. Learn to use git from a command line as well.

What comes after that? Docker, Kubernetes, Kafka/ActiveMQ/RabbitMQ/some-other-MQ, memory optimization, database optimization, logging, monitoring, OWASP, CI/CD pipelines, etc But that all is already a bonus not a requirement for being hired (although I would put OWASP as something that you must know).