This is my first time teaching. I just graduated in 2020 and have been working as a production support engineer.<p>These are the subjects that I am assigned to teach(each in odd and even semesters)<p>- Java(object oriented concepts+core java+advanced java)<p>This is a 2 semester course<p>Sample contents with reference books here:<p>https://csitprogram.blogspot.com/2012/08/csc-403-advanced-java-programming.html<p>- Data Structures and Algorithms(with practical labs in java)<p>This is also a 2 semester courses, this is not "java"ic, but I am going to make them do the labs in java as per the syllabus.<p>I am going through couple of books:<p>- Y. Daniel Liang<p>- Herbert Schildt<p>- Car S. Horstmann, Core Java Volume I and II – Advanced Features, 8th Edition, 2008, Prentice Hall.<p>- Y. Daniel Liang, Introduction to Java Programming, 9th Edition, Comprehensive Version, Pearson/ Prentice Hall.<p>- H. Deitel, P. Deitel. Java How to Program. 7th Edition, 2007, Prentice Hall.<p>Any guidance? This semester, I will be teaching java OOPs/basics, next semester it'll be advanced java then data structures and algorithms in another 2 semesters.<p>PS I feel I myself need to revise my java concepts, so feel free to recommend books/courses to me. I will try my best to do justice to the students who paid tons of money for these classes as this will shape their Software engineering future.
I'm a Java programmer who's been at it for 20 years. Its really difficult to find a definitive modern Java guide right now because there are multiple paradigms that are popular.<p>There is the old school - everything has an interface, with a concrete implementation and test implementation. OOM ORMs probably Hibernate. Lots of long winded naming.<p>Add some functional features in Java 8, streams, lambdas but still kind of a hybrid. Scala & Kotlin distracted much of the purely functional people but has influenced Java a lot to complicate what normal Java looks like.<p>Spring has a huge influence and probably is still the defacto framework to build in.<p>Sprinkle in some Clean code culture - (4 line functions) which got really popular but has died off.<p>Add reactive programming. You need async in single threaded languages like JS and Python, and you need async in high performance applications. Its toxic for most projects but has nonetheless been enthusiastically adopted and corrupted many a code base.<p>I like Vertx because its a complete break from Spring and much simpler with less magic, but it hasn't really gained enough popularity.<p>Java 17/21 added a bunch of new concepts like Records which some people have adopted Java into DDD style that is completely new.<p>So "Java" can mean so many different styles now its impossible to have one recommended textbook. Bloch you can't go wrong but is kinda basic construction rather than higher level guidance. I like "Vert.x in Action" but in general its not a good standard Java text. I'm kinda curious what others will suggest.
Can I commend "Effective Java" (3rd edition seems to be the latest) by Joshua Bloch ?<p>I thought it was one of the pithier books & it gives both good advice and explanations of <i>why</i> it's good advice in each case.
My $0.02: I cut my teeth on Liang's Introduction to Java Programming (9th edition). I think it's a fantastic book. The course I was taking only covered the first few chapters, but I ended up working my way through the whole book. I recall all the exercises nailing that sweet spot of being within reach with what I knew, but still challenging and rewarding.<p>There's some stuff that felt dated even for its time. For instance, GUI programming with AWT / Swing. It's super disappointing to spin up a GUI and have it look... well, like Java GUIs do. As a student, it can be a bit demoralizing to spend a bunch of time and effort only to end up with something that looks so stupid and unfinished.<p>On the whole, though. Great book.
Cay Horstmann‘s books are great. The latest edition has just been completed, and if the two?volume set is too wordy for you because you already know a programming language or two, get Core Java for the Impatient.