DEV Community

sayantjm
sayantjm

Posted on

Start learning a new language or go deeper with Java

I have been a Java developer for more than 10 years and the last 4 years I have been focused on micro services architecture with Spring boot, hibernate and Oracle for a consultancy company where we have to deal with the full release process until we put the code in production, every month approximately.

Last month I applied to a selection process for a company who has an on-line application (not a consultancy) and they were looking for Senior developers in Java. After some interviews with the recruiter and a team lead I started the second phase, which was a code challenge. I spent the weekend implementing the solutions, trying to cover the acceptance criteria, building tests and trying to apply all my advanced knowledge about java 8 and Spring Framework.

I am not entirely satisfied with the final solution but I think I did a good job. I passed to the next phase which was a live coding with some members of the company. We reviewed the code and they were asking me questions about the followed approach and about java. Besides my nerves (blocking my mind) I realised that I am not able to answer basic questions about Java, things like: "how does the garbage collector work"; "differences between ArrayList and LinkedList"; "Why is it required to implement Equals() and HashCode()", etc. They had also proposed to use java inheritance to create a baseDTO and despite being able to surf The Internet I was too nervous that I failed, and therefore I was out of the process.

Now I have some doubts about what to do with my future. Some days I think that I should become a Java certified and review all the java stuff while I am preparing for the exam. But other days I think it is better to have some rest of Java and try something new, like Ruby/Rails or Golang, which will allow me to have different perspective about the ways of implementing a solution.

Top comments (10)

Collapse
 
sargalias profile image
Spyros Argalias

That's cool. It's great that you want to improve. First of all, don't be discouraged. Interviews are always stressful and you may get asked questions that you're not ready for. It doesn't mean that your work isn't good. In fact, it sounds like you've been doing pretty well, especially since you passed to the next stage.

As for how to improve, both options you mentioned sound good. Learning something new and different gives you a different perspective, as you mentioned. But also going deeper into Java would be good too.

Since you're asking for an opinion, I would say:

  1. Learn Java deeper. It's what you use at work and it's what started you on worrying that you need to improve. In JavaScript (the language I use), I read a book like You Don't Know JavaScript, which explains the finer details of the language at a level deeper than what you normally use at work. Having that knowledge of your language can be useful.
  2. Learn how to write clean code and learn about programming principles. I'm not sure if you feel like you need this. However, when someone asks me how to improve this is always my main answer (other than being able to use your programming language). Clean code and programming principles, in my opinion, make you a better developer far more than learning anything else does. I also consider them far more important than knowing more programming paradigms like functional programming and such.
  3. As you mentioned, learn more paradigms / something new that will give you a different perspective. This can be a higher level language (like Ruby / Rails as you mentioned) or functional programming with something like Clojure or Scala. Alternatively, you can also learn functional programming while sticking with Java. It just might be harder to learn because you're not forced to use it in Java, so you might fall back to standard OOP.

Hope that helps :)

Collapse
 
sayantjm profile image
sayantjm

Thanks a lot, it really helps! I read some books related to spring framework and I should do the same with Java, as you proposed. I will look for a book similar to your suggestion but for Java.
Regarding point two, I know some techniques related to clean code and design patterns and I always have them in mind when I review code, but it’s true that reading the concepts again will always help.
As you said, as Java is what I usually use in my day to day, it might be better to go deeper with it and maybe give a chance to functional programming in Java.

Collapse
 
raphael_jambalos profile image
Raphael Jambalos

I think the decision to go deep or learn something new depends on what direction you decide to take your career. If you want to go to a Java company for your next job, then by all means study Java deeper. But if you want to explore companies that use Ruby or Python, then you should study those languages.

If I were in your situation, I'll study other programming languages so I can widen the net on the companies that I can do interviews with.

Collapse
 
sayantjm profile image
sayantjm

That’s a good point. I can increase the number of companies to apply. I will consider it, thanks!

Collapse
 
decentralizuj profile image
decentralizuj

Continuing with Java or not, that's something I can't tell you. What I can tell you is that Ruby is great language, and it's easy to learn especially if you know Java. Ruby will make you happy when you write code, that's for sure, but I don't think you should break with Java. Take a look about Ruby for Java developers, make some research about that, you'll find interesting articles.

Collapse
 
sayantjm profile image
sayantjm

Honestly, learning Ruby is quite tentative, i have read very good things about it. But my concern is how difficult it will be to find a position for Ruby developer and if the recruiters will consider me as a Senior or Junior developer, having so little experience using it.
I will take a look about Ruby for Java developer, I'm sure it will be interesting.
Thanks for the comment.

Collapse
 
vearutop profile image
Viacheslav Poturaev

I can highly recommend going for Go for these reasons:

  • language is small and rather easy to learn and be productive,
  • it encourages less abstractions (opposite of Java),
  • grants high performance comparable with Java,
  • allows building compact, yet very portable and cloud-friendly applications,
  • trending on the market.
Collapse
 
fsartoris profile image
Federico Sartoris

Understand each line of code that you write will be a good approach to go more deep in the language. Design patterns, clean code, solid will help you to improve.

Collapse
 
sayantjm profile image
sayantjm

Yes, that's clearly something I need to do. I have this knowledge in one forgotten place inside my memory and I must recover them and put them in the line of fire.
Thanks.

Collapse
 
otumianempire profile image
Michael Otu

Change is good but you might lose some benefits that comes with the senior keyword. If nothing is affected then, I'll gladly change focus