Win a copy of Transfer Learning for Natural Language Processing (MEAP) this week in the Artificial Intelligence and Machine Learning forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
  • Campbell Ritchie
  • Tim Cooke
  • Paul Clapham
  • Devaka Cooray
  • Bear Bibeault
  • Junilu Lacar
  • Knute Snortum
  • Liutauras Vilda
Saloon Keepers:
  • Ron McLeod
  • Stephan van Hulst
  • Tim Moores
  • Tim Holloway
  • Piet Souris
  • salvin francis
  • Carey Brown
  • Frits Walraven

Where to go next?

Ranch Hand
Posts: 364
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I'm at a bit of an impasse now and I don't know what to learn next.

I already know core java skills, I passed the associate certification exam by Oracle, and created a few desktop applications using Swing.  

However, I can't seem to wrap my head around the Spring framework, and I don't know how much of it I'm gonna be expected to know for job interviews.

I didn't really learn much of anything related to Java web development yet, and when I do I get confused and discouraged.  

I know the core skills including classes, interfaces, objects, collections, etc and have a few projects on my GitHub.  

I was hoping I had enough to get entry level and learn the rest in the training labs, as learning them on my own is turning into an impossible task.  Also, due to the pandemic, there aren't any jobs open or internships for me to test the waters.  

I'm also majoring in a graduate degree in software engineering, but none of the content seems to be relevant to coding anymore after the 2nd programming class, and the rest is just the principles of software design and agile principles.

Are there still java desktop programmers?   The problem with trying to learn Spring is that it is a different language to me, and I'm becoming raw with my core java skills.
Saloon Keeper
Posts: 21960
Android Eclipse IDE Tomcat Server Redhat Java Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The Spring Framework is based on Inversion of Control (IoC). IoC is pretty fundamental to Java these days. It's not just the core of Spring, but it's also used in other systems such as JavaServer Faces. So you really should learn IoC. Once you do, Spring will make more sense. Be aware that Spring is not one product but many, however. There's a core IoC factory facility, but there are numerous optional modules that projects can use as well to assist in database access (Spring Data), scheduled processes (Spring Scheduler), self-container web application/server modules (Spring Boot), and many many more. You don't have to learn all of those, however, just be aware that if you have a particular problem there may be a Spring Module that can help.

I found the Manning "Spring In Action" book to be a good intro. Although I'd been doing IoC professionally for several years before I that came out. And since I'm not really up-to-date on books, I'm sure that there are other introductions available as well.

Shelter-in-place is no excuse for not improving yourself. I work on projects for people who are literally on the other side of the planet. I've never been within 5000 miles of them, but I still deliver software even though I never set foot out of the house. The key is to find projects that need doing and work on them - either something you've thought up yourself or joining an open-source product development team off someplace like Github.

While the course offerings on software development and Agile don't seem useful at the moment, they are important if you want to work professionally. While some of us do work almost entirely alone, most work in teams and a lot of work has been spent on making teams more effective. And a lot of nonsense and soul-crushing crap, but that's business for you. You didn't mention DevOps, but that, too is important these days.

Desktop applications are still around, and some of the best ones are in Java, but admittedly the preference at the moment is for web-based stuff and portable devices. You definitely should familiarize yourself with how HTTP works and how Enterprise Java supports it.

Also, alas, if you intend to do anything professionally with Java, you pretty much need to know JavaScript, which despite the name is only superficially similar to Java. Python is another good language to know, although not as essential.
Posts: 15519
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I'm going to wax a bit philosophical here so just be warned before you read on.

Shu Ha Ri defines three stages of mastery. There are other models like the Dreyfus Model but I'll talk about ShuHaRi here. You're at the Shu stage right now, the beginner. You've learned the mechanics, the basic moves, and a basic understanding of core concepts. Next is the Ha stage, where you start digging deeper, exploring the principles behind the mechanics. This is where you start asking "Why?" more than you ask "What?" and "How?"

In software development, Ha is probably where we all spend most of our time when we're learning something. It took me a few months to get out of my white belt in Aikido and start moving up the ranks to brown belt. From brown belt, it took about four years to get my black belt. By the time I was awarded my black belt, I understood why it was just the start of my journey rather than the culmination. It will take many more years of continuous practice to get promoted up to my third dan black belt rank and at this point I doubt that will ever even happen. I just don't have the time to put into the practice it takes to get to that level of expertise.

Similarly, it will take you a little bit of time to go from rank beginner to an employable entry-level programmer. Learning the basic mechanics of using the Spring framework will be useful but learning the "why?"s behind those mechanics will be even more useful. That means learning what Dependency Injection is and how that helps you decouple different components. You have to understand why decoupling is important. That will lead you concepts like separation of responsibilities and layered architectures. Basically, the broad umbrella that all these fall under is Design Principles and Practices.

Principles. That's what the core of the Ha stage of learning is about. So the short answer to your question of "What do I learn next?" is that: Principles. Learn about the different design principles that help you write good programs that are easy to read and maintain.

And I can't end a post like this without mentioning testing. Testing and using tests to drive your thinking around design is an essential tool to have in your development repertoire. Without it, you're no different from 80% of the developers out there. If you want to differentiate yourself and get ahead of your peers in the job market, learn how to do Test-Driven Development. If anything, learning how to do it properly will lead you to learning about Refactoring and Code Smells, which is an important skill, regardless of whether you practice TDD or not.
You may have just won ten million dollars! Or, maybe a tiny ad.
Two software engineers solve most of the world's problems in one K&R sized book
    Bookmark Topic Watch Topic
  • New Topic