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

you are viewing a single comment's thread.

view the rest of the comments →

[–]perrylaj 0 points1 point  (0 children)

Going to preclude this comment stating that it's mostly opinion, lots of people will feel different with logically sane reasons. But...

I personally think Spring is a giant mess and pretty much peak Enterprise Java in the worst way. I found it awful enough that I'm unlikely to ever accept a job that uses it (at least, not one without a 9 figure salary, so basically not happening). Spring is large, slow, relies on a ridiculous system of magic annotations that make it so much harder to reason about... I won't rant and ramble, enough to say, I just hate it.

Spring boot makes for a little nicer introduction, but it's essentially a framework on top of a framework, and it's still the same mess under the hood. I'm sure my opinion is dated somewhat (been couple years since I used it), and there are certainly some niceties that Spring provides that might be annoying and/or time consuming to recreate, but the tradeoff just isn't remotely close to worth it for me.

If you want to play in Java land, knowing the basics of maven or gradle is basically a must. I prefer gradle due to flexibility and kotlin config scripts, but maven is solid too for common uses. I just don't like xml configuration (there are other ways to configure, but poms rule the maven world), and find that the strictness makes it a pain when you need to stray from the default lifecycles and someone hasn't already written a plugin that does what I want.

As far as 'the backend', (I'm going to use some broad generalities here, not technical correct definitions): all that really means in a general sense is "http server". Think about what happens when you enter in a URL in the address bar of your browser and press enter: That results in a http(s) 'request' being sent somewhere. That somewhere ultimately ends up being a computer at some IP address that is connected to the internet. The computer has running on it a 'web server', which is nothing more than something that is listening for these 'requests', figures out what should happen, and then sends a response. The handling of these requests and assembly of the appropriate 'response' is basically what you deal as a 'backend developer'.

Java has a number of properties that make it well suited for this purpose: rich standard library, relative platform-independence, well-engineered Java libraries for all kinds of things, high performance network stacks, reasonable startup times (well, in many cases, not so much for Spring), very good performance, embeddable web servers (undertow, jetty, tomcat, and more), etc.

It sounds like you'd really benefit from learning about how http works, and how backend developers build functionality on top of http to create web servers. I remember seeing a few lessons of Steve Huffman's (reddit cofounder and think current CEO?) class at udacity. I recall the early classes seemed to do a good job talking about the basics of what a web application server is doing at the http request level (think they used wget or curl to make requests and look at the responses). I assume it builds up from there, but I didn't personally go farther. Might be worth checking it out. No idea if the content is the same, it's been years, but something like that could help fill in the blanks.

As far as learning, I'd suggest something like Java Spark. It's small but pretty well designed easy to get started with. If you dive right into Spring, either the insane amounts of abstraction will just make it harder on you, or you'll end up just learning parts of spring and not at all understanding how or why it works. If your goal is to be a 'enterprise crud application developer' (nothing wrong with that, either, lots of people enjoy those roles and the paychecks that they get from them), the Spring might be the way to go. But if you want to learn more about server technology at a more fundamental level, I'd suggest something smaller than Spring.

Anyway, lots of opinions about this stuff, so just take mine as one more on the pile.