
Good learning material – JAVA, Spring - siropa
Hi! I graduated college and am two years into Software development and would like to keep up with the latest technologies&#x2F; hone my skills. What books&#x2F;learning materials do you guys suggest for following topics: 
1. Spring
2. Springboot
3. JAVA
4. Object Oriented programming
5. Mongodb
6. Microservices
7. RESTful webservices
8. Any general books all programmers must own<p>Thanks :)
======
rpeden
Oh wow - this is actually a really big and important question.

The things you've listed sort of split into two separate categories:
Paradigms/Architectures, and specific tools.

I'd focus on the Paradigms and Architectures first - those are the skills that
will be portable across tech stacks and will be useful for a longer period of
time.

For OOP, I actually enjoyed Head First Object Oriented Analysis and Design
[1]. The Head First books aren't for everyone, but I like they way they
encourage you to do exercises to help reinforce what you've learned.

For RESTful services, I found Roy Fielding's original PhD dissertation on
REST[2] to be quite helpful for a conceptual overview. It's a long read, but I
enjoyed it.

For Spring and Spring Boot, I've found the official Spring guides[3] to be
better than any of the books I've read. So many Spring books seem to go out of
their way to try to be as long as possible. The guides, on the other hand,
tend to be short and to the point.

As for general books...the one I always circle back to is Structure and
Interpretation of Computer Programs[4]. I found that once you've worked
through it, so many aspects of programming just make more sense. Lots of
people find it a difficult book to work through, but I've found that the more
times I revisit the book over the course of my career, the more helpful it is.
Every time I read it I seem to have an 'aha!' moment I hadn't experienced
previously.

[1] [https://www.amazon.com/Head-First-Object-Oriented-
Analysis-D...](https://www.amazon.com/Head-First-Object-Oriented-Analysis-
Design/dp/0596008678)

[2]
[https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding...](https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf)

[3] [https://spring.io/guides](https://spring.io/guides)

[4] [https://mitpress.mit.edu/sicp/full-
text/book/book.html](https://mitpress.mit.edu/sicp/full-text/book/book.html)

~~~
siropa
Wow! Will definitely look into those! thankyou!

Yes the two categories were intentional, because i want to build up a strong
base, as well as get better at what i am already doing.

------
watwut
a.) On java - one hour talk but good:

* How To Design A Good API and Why it Matters [https://www.youtube.com/watch?v=aAb7hSCtvGw](https://www.youtube.com/watch?v=aAb7hSCtvGw)

b.) General code structure - dont to read it cover to cover unless you like
to, you will die of boredom, but definitely have a look in library. It will
help you to think about code structure right way.

* Refactoring: Improving the Design of Existing Code * Code Complete

c.) Object Oriented Programming

* Design Patterns: Elements of Reusable Object-Oriented

The three books I recommended are older, but not much changed in basics of
object oriented programming. They are well readable. I would also recommend to
read something on functional programming, mostly so that you see another
approach too and thus wont go too far with object design where it does not
suits.

d.) 8.) I read awesome book on estimations, I really really hope it is this
one:

* Software Estimation: Demystifying the Black Art

tldr: There is difference between negotiation and estimation, make sure you
know which you are doing. Split it into smaller tasks and then estimate
minimum, maximum and most likely. Then calculate (min+4*likely+max)/6\.
Surprisingly, it works and is faster then do one estimate. It is also more
precise then anything else I tried. I really hope I shown you right book.

e.) On Spring and rest, I would recommend to read documentation and write own
code. I don't recall a book that would blow my mind, so I guess any will do.

f.) For general "latest tech" learning, I like
[https://dzone.com/](https://dzone.com/) site. There are mostly techie tech
articles - they are not news site like hacker news or arstechnica. They have
"zones" for different interests, java zone is here: [https://dzone.com/java-
jdk-development-tutorials-tools-news](https://dzone.com/java-jdk-development-
tutorials-tools-news) . Pick up zones and make a habit of reading one article
a week or something like that.

~~~
siropa
Bookmarked :) Thankyou!

------
BjoernKW
Apart from the resources already mentioned (the official Spring guide in
particular alongside the tutorials) Mkyong.com is a terrific tutorial site for
everything Java and Spring Boot:
[https://www.mkyong.com/](https://www.mkyong.com/)

------
clintbbbb
Jhipster is a great tool for generating starter Spring Boot projects. Here is
a recent Pluralsight course that will walk you through using it
[https://www.pluralsight.com/courses/scaffolding-spring-
boot-...](https://www.pluralsight.com/courses/scaffolding-spring-boot-and-
angular-with-jhipster)

~~~
siropa
Awesome thanks!

------
yogeshp
[https://github.com/Developer-Y/all-things-
java](https://github.com/Developer-Y/all-things-java)

It doesn't has lots of stuff on Spring boot/Microservices but that can be
updated later on. For MongoDB you should check Mongo's free online course for
Java developers.

------
fian
For Java:

Effective Java by Joshua Bloch.

For Spring:

Pro Spring 3 by Harrop and Ho was useful to me in getting a basic CRUD
application running.

~~~
scalesolved
Keep in mind too that Effective Java was recently updated/rewritten a long
time after the second edition was printed. So to the OP make sure you look at
the third edition and not the more linked to/blogged about/higher visibility
in google second edition.

------
Chamuco1198
That depends, are you interested in a particular technology or skill? Please
be more specific.

~~~
siropa
Thanks! I updated my question

------
kevinherron
Lesson 0: It's "Java", not "JAVA".

------
Sherxon9
I use baeldung.com for spring tutorials a lot

