#4 in Computer programming books
Use arrows to jump to the previous/next product
Reddit mentions of Effective Java (2nd Edition)
Sentiment score: 60
Reddit mentions: 99
We found 99 Reddit mentions of Effective Java (2nd Edition). Here are the top ones.
Buying options
View on Amazon.comor
- Prentice Hall PTR
Features:
Specs:
Height | 11 Inches |
Length | 8.5 Inches |
Number of items | 1 |
Weight | 1.42639083514 Pounds |
Width | 0.83 Inches |
Surprised Effective Java didn't show up
Edit: Did a little digging and I see a Third Edition seems to be under way for Java 7/8
Get Effective Java by Josh Bloch.
Effective Java by Joshua Bloch is a really good book and definitely worth reading if you're using an object-oriented language, not just Java. It helped me immensely when I was starting out with how to think about my code and my designs.
wow. I'm surprised these two aren't listed yet:
Pragmatic Programmer - this one's at the top of my list. I think that every single programmer should read this book.
Effective Java - although it's written for Java there's some great fundamentals in there.
a lot of people also mentioned Clean Code - while some things in there are important, I personally don't agree with everything that Bob writes about
By Essential Java, I take it you mean Effective Java, right?
Does not include Java 8 but https://www.amazon.co.uk/Effective-Java-Second-Joshua-Bloch/dp/0321356683 fits the bill of the Java k&R
Read through this entire book before your program anything big.
The biggest hurdles I had motivating myself to work on a project was never coding itself. It was always setting up the compiler, IDE, environment, finding something to work on, etc. The biggest one for me is blank page syndrome.
You don't need to convert to linux if you don't want to but it is good to get some experience in it if you can. I spent sometime setting up a headless Ubuntu server to manage my torrents and be network storage. It took a lot of time starting from scratch but the experience has helped me out.
http://www.ubuntu.com
http://www.reddit.com/r/linuxquestions
http://ubuntuforums.org/
If you want to continue with Java (which is a good choice). I believe the most popular IDE is Eclipse. It has great plugin support and has been used everywhere I've been. You can use it for development on android phones as well if you want to play around with mobile development.
http://www.eclipse.org
http://developer.android.com/tools/sdk/eclipse-adt.html
If your college is like mine, most of the later courses in computer science will not involve much coding at all but will involve a lot of math and knowing popular solutions to common problems (sorting, searching, graph theory, combinatorics). If you feel like you need to brush up on a language, there are a lot of web resources and books to help you.
http://www.codecademy.com
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
http://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208/ref=sr_1_2?s=books&ie=UTF8&qid=1382580434&sr=1-2&keywords=head+on+java
Computer science and software development is a broad field which makes scaling it daunting at times. The only way to make it less daunting is to just dive in and do it. Pick a project and work on it. You will encounter problems you have no idea how to solve and that's great because now you've found something you can learn (usually through Google).
Solve problems in manageable bits. If you try to implement your whole program at once it will seem impossible. Implement small portions of your project at a time. Trying to create a Java chat client? Just work on getting some basic sockets to work and build a library you'll be able to use going forward. This will make the goals seem manageable and help you modularize your code. It helped me with not feeling overwhelmed about my project's scope.
I hope I didn't sound condescending. I just wanted to share some things that have helped me. I don't think you are in a bad spot, you just need to stay motivated and find some things to work on to help you learn. If you have any specific questions I can try to help out, but there are other people on this sub that are far more knowledgeable than me.
Strictly in order.
Head First Programming
Head First Java
Effective Java
Head First Design Patterns
Head First Software Development
<http://developer.android.com/training/index.html&gt;
You are welcome!
Intermediate-Pro
Effective Java, 2nd Edition
Ok, let's see. A few quick points:
Rooted in in standard, everyday mathematical notation? public static final volatile interface abstract class transient inner class inner anonymous class objects values boxed values..... etc...
Java Generics has drawn heavily from the functional programming camp which is based on lambda calculus. See google tech talk: Faith, Evolution, and Programming Languages
Extremely easy to read and understand? Go read Java Puzzlers and Effective Java to see how many easy mistakes you can make.
Static types enables blablabla...? Not possible without static typing...? Does he realize that tools like Eclipse grew out of a smalltalk project and that smalltalk pioneered automatic refactoring ages ago? Smalltalk is one of the most dynamic language around, and it's more than 30 years old.
Most bugs are found at development time with java? That's not my experience :-)
Simple puzzle: for which values for someInt does this code fail?
int myPositiveInt = Math.abs(someInt);
assert myPositiveInt >= 0;
I think the book people normally recommend for this is Effective Java by Joshua Bloch
Since you're already a programmer: Effective Java, 2nd Edition. That's pretty much your definitive Java language and Java best practices reference.
I would not recommend the Head First series - those are more geared to novice programmers. I don't think you'll have much trouble picking up basic object oriented concepts, which is probably the only thing that book might help you with.
For general programming reading, I recommend The Pragmatic Programmer - great read, lots of excellent advice in there.
Uhm, I would first start with a complete introduction to OOP. This book:
http://www.amazon.co.uk/Thinking-Java-Bruce-Eckel/dp/0131872486/ref=sr_1_1?ie=UTF8&amp;qid=1451750882&amp;sr=8-1&amp;keywords=thinking+in+java
helped me a lot. Once you go through with it, you should have a pretty solid understanding of OOP and Java.
Also I cannot stress enough how important this thing is, many people seem to neglect it nowadays:
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
I recommend following books once you understand Java more :):
Effective Java by Joshua Bloch:
http://www.amazon.co.uk/Effective-Java-Second-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&amp;qid=1451750978&amp;sr=8-1&amp;keywords=effective+java
Head First - Design Patterns by Eric Freeman:
http://www.amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124/ref=pd_sim_14_2?ie=UTF8&amp;dpID=61APhXCksuL&amp;dpSrc=sims&amp;preST=_AC_UL160_SR138%2C160_&amp;refRID=1J4FWDFZDD8XERKQEY2Q
Clean Code by Robert C. Martin:
http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_sim_14_3?ie=UTF8&amp;dpID=51oXyW8WQwL&amp;dpSrc=sims&amp;preST=_AC_UL160_SR124%2C160_&amp;refRID=1J4FWDFZDD8XERKQEY2Q
If you want to gain a bit of confidence in writing good Java code i'd start by reading Josh Bloch's Effective Java. It's a fantastic reference manual to have on your desk...
Check it out here
I don't know what is that book's style but these free programming books/courses will strengthen your knowledge of the basics and introduce you to more complex stuff :
Best commercial book in my humble opinion is Effective Java by J. Bloch. He wrote parts of the standard library. This book just makes you a better programmer.
Also the most upvoted Java discussions on Stack Overflow will teach you a lot.
Effective Java
Head First Design Patterns
http://www.theserverside.com/
http://stackoverflow.com/questions/tagged/java
The most important thing when looking for a Java developer job is to actually understand Java. I don't mean knowing how to write code in Java. I mean knowing how the language works. What is the purpose of equals/hashCode, how to make object Immutable, what is the String pool, etc...
You would be surprised how many developers think they understand the language and have no clue how it works.
You do not need all these things to get a job. There are plenty of large IT organizations that will just hire lots of people to fill seats and then drop them if they don't work out. However, if you want to get a job at a company that is serious about producing quality code, you need to show that you are serious about being the best developer you can be. Getting a job at an organization like this will not only pay better but you will also have the opportunity to learn from all the highly skilled developers that work there.
This is from my own personal experiences. Please, learn Java first, I cannot stress this enough. Knowing Java helps so much with design, I struggled with basic Java knowledge and hated programming for Android; I recommend Effective Java 8th Edition .
Be warned though, it's not very friendly to novice programmers, so I'd make sure you have experience in any 'C' based language beforehand - C++ would be a great help.
I'm really not trying to be a dick here, but you really do need to learn Java to a sufficient level. Do you know: Java Inheritance, Static Functions, Abstract Classes, 'For Each' operator? Mutaor Methods? Trust me, this will all come up in Android and more over, Android uses most of Java's library.
Please, I don't want to sound like a huge Dick, but this is crucial. Let me put this is into a metaphor. Learning the Android API without Java is pretty much suicide (I can't think of any good metaphor(s)).
I hope this helps, Oh and Inbox me on Reddit - I might have a few books for you.
I don't think there is anything you need to cover before the class, if it's a good class. However, I would suggest the following -- not before class, but probably before, during, and after class:
Since you're experienced, the best way to learn Java is to start coding in it. Create a simple blog in Java using basic servlet + JSP hosted in Tomcat + JDBC connection to some free database (Postgresql / H2). You will find issues along the way which you can Google around. The best thing about Java is that most questions already answered in StackOverflow. After you've done with it, go and read Effective Java then refactor your project to follow the best practice mentioned in the book. After that you can try to learn more libraries / framework eg. create a new reporting system and communicate the blog with the reporting system through JMS. Adding dependency injection using Spring and many more.
Effective Java by Joshua Bloch.
Effective Java
I would highly recommend reading Effective Java if you want some more advanced java topics.
http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
http://www.androiddesignpatterns.com/2013/04/activitys-threads-memory-leaks.html
Less specific resources:
I vehemently disagree with the internal/getter/setter rules mentioned in android developer tips page. I personally use proguard and don't think twice about virtual setters etc. since they most definitely help with clarity
Read lots of code and read books to get multiple viewpoints. This is a deep topic which will require more than superficial online reading.
Check this out.
Books I have found useful:
this book is often mentioned among the best programming books ever written; together with Larry Wall's (Camel) Perl book, and Dennis Richie's C book.
Effective Java
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&amp;qid=1314549239&amp;sr=8-1
If you're into java, I can't help but recommend Effective Java
This book is what took me from Java beginner to closer to Expert. It's full of best practices, tips, tricks, and guidelines. I try to re-read it once a year. Sorry if my praise sounds hyperbolic but it's the truth.
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
Effective Java
Pick up Effective Java on Amazon. It's the next step beyond the basics that teaches some really solid, fundamentals.
Once you have that under your belt, just have an idea and execute it to the best of your ability.
Then execute the next idea.
Then the next.
Then the next.
....
There's no shortcuts, just code your ass off. Learn by doing. If you want to make an app that you can use on your phone, pick up a book to do android (I assume) development (or just go through the public Android docs).
If you want to be able to use your app anywhere, grab a book for web development -- Everything is moving to Native Web, so I think that's the move towards longevity..
I just resently started a carreer as a Java Developer myself (m/22), so I can remember the things I had a hard time with like it was yesterday.
What I had the most trouble with, carreer wise, is the configuration of a lot of frameworks. Java in itself is relatively easy (especially since you already are an experienced developer), it's the frameworks that require the most time to learn. A lot of them require a certain amount of configuration, mostly in XML. Learning how to set them up was mostly trial and error in my case. Like someone else said in the comments, pet projects are the best way to learn this. So, to answer your question about what I hate about Java: this configuring is it. Stuff like that is easier in, say, C#. However, if you join an already existing project, the configuration is already done most of the time (although not always very good).
Now for the resources. I really did a bad job with Java in my first year of college, but this guy really helped me with his tutorials (I got 100% percent when I took the exam again): [The New Boston] (https://www.youtube.com/playlist?list=PLFE2CE09D83EE3E28). I linked you the beginner tutorials, but he also has intermediate. [Effective Java] (http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683) is also a good resource, like mentioned in the comments. Another one I like is [The Well-Grounded Java Developer] (http://www.manning.com/evans/). It is a really balanced book, talking about important things like Threading, the JVM, Dependency Injection, Continuous integration etc.
I would suggest you first do some little projects to get a feeling with Java as a language, and then stepping over to frameworks like Spring and hibernate. Check the differences between Spring and Java EE, read about dependency injection (Martin Fowler has a great article about this), etc.
This turned out longer than I expected, so I'll leave it at this. If you still have questions, feel free to PM me or leave a comment.
Yes I agree. I'll have to take a look at that animation again. Its quite difficult as I'm using a list view. Book wise, for Java, I cannot recommend this highly enough,Effective Java: Second Edition, http://www.amazon.co.uk/gp/product/0321356683?psc=1&amp;redirect=true&amp;ref_=oh_aui_detailpage_o00_s00. For Android its an ever evolving environment so books tend to go out of date very fast. I'd recommend doing a udemy or udacity course
From Data Classes and Sealed Types for Java:
>Digression -- enums
>
>If the problem is that we're modeling something simple with something overly general, simplification is going to come from constraint; by letting go of some degrees of freedom, we hope to be freed of the obligation to specify everything explicitly.
>
>The enum facility, added in Java 5, is an excellent example of such a tradeoff. The type-safe enum pattern was well understood, and easy to express (albeit verbosely), prior to Java 5 (see Effective Java, 1st Edition, item 21.) The initial motivation to add enums to the language might have been irritation at the boilerplate required for this idiom, but the real benefit is semantic.
>
>The key simplification of enums was to constrain the lifecycle of their instances -- enum constants are singletons, and instantiation is managed by the runtime. By baking singleton-awareness into the language model, the compiler can safely and correctly generate the boilerplate needed for the type-safe enum pattern. And because enums started with a semantic goal, rather than a syntactic one, it was possible for enums to interact positively with other features, such as the ability to switch on enums, or to get comparison and safe serialization for free.
>
>Perhaps surprisingly, enums delivered their syntactic and semantic benefits without requiring us to give up most other degrees of freedom that classes enjoy; Java's enums are not mere enumerations of integers, as they are in many other languages, but instead are full-fledged classes (with some restrictions.)
>
>If we are looking to replicate the success of this approach with data classes, our first question should be: what constraints will give us the semantic and syntactic benefits we want, and, are we willing to accept these constraints?
If you're already past all the "learning java" type books, read this:
Effective Java: http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
It depends, honestly. There is some discussion about this in Effective Java if you haven't read it.
I'll summarize some of what Josh Bloch says on the topic here:
> If a class is accessible outside its package, provide accessor methods...If a class is package-private or is a private nested class, there is nothing inherently wrong with exposing its data fields
For example --
public enum Planets
{
MERCURY(1), VENUS(2), EARTH(3), MARS(4), JUPITER(5), SATURN(6), NEPTUNE(7), URANUS(8)
private double _rateOfSpin;
public Planets( double rateOfSpin ) { _rateOfSpin = rateOfSpin; }
public rateOfSpin() { return _rateOfSpin; }
}
If you use rateOfSpin(), you have the option of making this a derived value without introducing a breaking change. For the cost of an additional "() -- you get some flexibility. If your enum is private or package-private, you can eschew the accessor with minimal risk.
Hope this was helpful.
> As such, the commission a team of 2 people to remake the tool in C++ and QT. Well that was started last January. 8 months later and they aren't even close to being done. I'd wager at this rate they have another 2 or 4 more months. The silly thing, is my program in java was 3 files with maybe 400 lines of code.
You are at a company with very junior people. Unfortunately it's juniors who fell into the expert beginner trap and feel they already know everything. It's common for people like this to shit on other programming languages. Actual experienced devs know they are just tools and pick the right tool for the job.
Regarding your questions; I for now would recommend to not focus too much on the framework (both Java EE and Spring are fine, and learning one means you're also learning pretty much 80% of the other anyway) and focus on your core Java skills first and foremost. You already have experience so you will probably blow trough something like this mooc really fast. Other than that books like effective Java and clean code are great books to have read for a professional Java dev.
When it comes to starting with either Java EE or Spring; pick the one you prefer. I'm personally quite fond of Spring Boot because it is quicker to get started with and still has all batteries included, but if you prefer Java EE it's fine too.
P.s. like others said; it's not been called J2EE for a long time. Some vacancies do write it this way but that's generally a sign the company hasn't gone with the times.
Resources to help: Effective Java 2nd Edition by Joshua Bloch http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=la_B001CDCVUG_1_1?s=books&amp;ie=UTF8&amp;qid=1449594086&amp;sr=1-1
Basically this entire book has most of the intricacies of Java boiled down. If you can commit this book to memory than most Java interviews will be killed.
Java 8 is definitely a new take on the language but most shops haven't gotten to it yet so knowing Java 7 is pretty much all you need.
Questo è un classico anche se un po' datato: https://www.amazon.it/Effective-Java-Joshua-Bloch/dp/0321356683
Ti consiglio di abbinarlo a https://www.amazon.it/Java-Action-Lambdas-functional-style-programming/dp/1617291994 per le ultime novità di java 8 (che sono fondamentali).
Sono in inglese e te ne devi fare una ragione... il 99% del materiale di qualità è in inglese.
P.S. Nè html nè css sono "linguaggi"
I learned Java in the late 1990s from the first edition of Learning Java and also some of the official online tutorials. I just fooled around with it a short bit. I relearned Java some years later from Head First Design Patterns and Effective Java. The Patterns and Effective books really help you design your classes. Ps: I know nothing about Android programming.
They did talk about some good, solid practices for Java, that really don't go out of relevance.
If you have a solid base of Java, much of what they talked about can also be found in a more cohesive format in Josh Bloch's amazing book "Effective Java" . even though this book was last published in 2008, the content is as relevant as ever, as it discusses foundational best practices.
Two Java specific books you should read cover to cover (and keep around as an effective reference) are Effective Java and Java Concurrency in Practice, and you should also seriously consider reading Design Patterns. The examples in it aren't written in Java but they hold for all OO languages.
Java
I heard that Effective Java is really good if you knew the basics (you should try to read into it a bit tough, as it isn't follow a classic tutorial format, but contains best practices and "recipes".
Then again you cold try some general programming books like:
Code Complete
Design Patterns(check the Head First edition too)
Refactoring
some books about analysis and design
Web
I've just read about a really good tutorial site of Mozilla on reddit. I will look it up in a minute
EDIT: here
You probably won't need to do anything until you actually start working, because you don't know what the tech stack of your company looks like yet.
For me, the generic Java-centric books that I think every Java developer should read are the following. They are the only Java books I did not end up burning/shredding:
java.util.concurrent
API that was introduced in Java 5, which makes writing concurrent code easier depending on your use cases.Beyond either of those, though, I really wouldn't care about any other dead tree Java book. You'll probably spend significantly more time learning internal libraries and 3rd party stuff like Spring or Guice or Apache Commons or whatever your company uses.
I've done Android for 5-6 years. It put me through college, got me a job after. It pays well, but I'm moving to another development position because I can't envision a career in android development. Keep your career goals in mind. They may be radically different from mine, and that's fine, but know them.
As for coding: Effective Java Dat gud shit. A little dated, but it's unlikely to steer you wrong. Android lags behind the latest Java versions. Android will get
Java 8Java 9 when the sun is dead.Androiddev Protip: Don't be afraid of reading the Android source code when you're trying to understand something. I'm a veteran, and I do it probably every other day. The internet is full of lies.
EDIT: fistshake @ /u/little_z for torpedoing my genius witticism
The feedback about "jargon for development" can be solved by going through some books cover to cover, making sure you understand the theory, and implementing the exercises. I understand that feedback to mean that the person who gave the feedback believes there is too high a chance you will inflict damage on the codebase by making decisions not grounded in solid theory.
Examples of titles that are classics and widely known:
Algorithms (4th Edition): https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X (there is an accompanying coursera course).
Code Complete: https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249272&amp;sr=1-1&amp;keywords=code+complete
Clean Code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249283&amp;sr=1-1&amp;keywords=clean+code
Functional Programming in Scala: https://www.amazon.com/Functional-Programming-Scala-Paul-Chiusano/dp/1617290653/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1469249345&amp;sr=1-2&amp;keywords=scala
Learning Python: https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249357&amp;sr=1-1&amp;keywords=learning+python
Effective Java: https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1469249369&amp;sr=1-5&amp;keywords=java
Haskell Programming From First Principles: http://haskellbook.com/
I included multiple languages as well as language-agnostic ones. Functional programming is the near-to-medium term future of software engineering, and most languages converging towards that as they add functional features.
I don't think bootcamp is required. Learning how to learn is the most important thing. If you get into these books, lose track of time, and feel "aha! that's how these things that I previously thought were unrelated are actually the same thing!", and are able to keep it up for weeks, then that is a good sign that you can get to where you want to be.
> Is there a true singular source to learn Java?
Unfortunately, no. There are 1000s of places to learn Java. The right choice is dependent on your skill level and what you want to build (e.g. web apps, mobile apps, desktop sevices, etc.).
If you need some recommendations, start with The Java Tutorials on Oracle, followed by Effective Java.
If you need a comprehensive overview of the language, you can use Java: The Complete Reference 9th Edition.
Joshua Bloch's essential Java is pretty widely available http://www.amazon.co.uk/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Its still considered the go to book when talking about concurrency and multithreading, i read it in University and found it a bit heavy going but it is highly insightful and Bloch is very knowledgeable on the subject.
A few suggestions for you:
Do some reading for a start. If you haven't already Effective Java and Java Puzzlers are IMO the perfect way to get into the finer complexities of the language.
Find something you don't understand and want to know more about, then find a book on it and read. If you don't find yourself getting anything from a book, practice what you already know and learn by doing instead by making something.
Also, if your employer is so inclined, see if they are willing to pay for you to go on some training. Even if they don't advertise a training budget, more companies than you think are are happy to fund their employees' learning.
In your example, the first argument is not needed:
public static int sum(int... numbers) {
int sum = 0;
for (int i : numbers) {
sum += i;
}
return sum;
}
"Tricks" like these are just part of the language, so to learn them, read a relevant book I guess. To learn more idiomatics and best practices, I'd recommend Effective Java
Effective Java is necessary if you work with Java.
Beyond just Android resources, you're going to want to pick up a copy of Effective Java, which is the bible for Java development. It's also a very easy book to read; I say this as someone who has never completed a single "read x textbook pages" assignment in school because textbooks are awful. One of the things I look for in a developer is a strong Java foundation, more so than knowing the Android-specific nuances.
I usually look for the community pages of stackoverflow on the topic.
For example, to learn more about C++ I have been searching for something like "C++ book stackoverflow" and found this page. 4K upvotes, 27 revisions, 23 contributors, last edited in December 2015. Definitely a reliable source.
There does not seem to be any post about Java books on stackoverflow except for this more generalist one, that looks reliable but not updated since 2013.
This last post suggests Head First Java by Kathy Sierra.
I have heard that Effective Java by Joshua Bloch is a very good book for intermediate Java programmers, and the author in the first pages suggests The Java Programming Language by Ken Arnold as an introduction to Java. This last one is also listed on the stackoverflow answer, I would probably go for that one.
Read, in this order:
Those three books should get you wherever you need to be, without getting more specific books (e.g. framework books).
Excellent book:
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1292872830&amp;sr=1-5
Head First Java
Thinking in Java
Effective Java
Java Concurrency in Practice
Best $150 you'll ever spend. Read in order listed.
Probably. It might take some refractoring, but you would need a SaaS like Parse to handle the cross platform sync. I never tried Parse, but I don't want to since it costs money after a certain quota. I've heard some horror stories of independent developers messing up their Parse and blowing through their quota as they failed to put a kill-switch.
Same. I started this project around November to learn Android development. I have a year off before I start college, so I thought of learning some software development. My only experience at the time was high school computer science using C#, so even if you are learning you can contribute. :) Even if it's intimidating you can contribute by submitting issues and such. I contributed to a small database library which was over my head, but I browsed the source to find out how to do something, found an typo in the SQL, and submitted an issue explaining the problem and how to fix it: he forgot a letter.
Although I started learning programming in 2014, if you need any advice on learning Android development, you can PM me. I can provide a list of books you can find online which are helpful for learning Java:
All these books are sectioned such that you only need to read parts you want to, so they are very good references. These books really helped in knowing the syntax of a language and knowing how to use the language which I found was very important for a project of this scale. My first version of it was so hacked together that it was impossible to refractor to add new features. These books really helped for the second version even though I couldn't apply what the books advised effectively.
If you're looking to get into programming, Java is a good starting language. It's relatively easy to pick up and does a lot of things for you that C++ doesn't. A good book to start learning with is Java Software Solutions by Lewis and Loftus. Another book for a little more theoretical and advanced learning is Effectiv Java by Joshua Bloch.
Edit: Book links
Java Software Solutions: http://www.amazon.com/gp/product/0132760770/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=1535523722&amp;pf_rd_s=lpo-top-stripe-1&amp;pf_rd_t=201&amp;pf_rd_i=0321465881&amp;pf_rd_m=ATVPDKIKX0DER&amp;pf_rd_r=07GGH53RVK0D4GZY11KX
Effective Java: http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
После java можно как-раз.
По java советую Thinking in Java и Effective Java и в довесок.
These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".
I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read
For learning your first language: This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++
Top Recommendations:
Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it doesn't start with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.
The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (very helpful), and an interesting war story of how it Saved The Day.
Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions straight from this book so this book can equal getting a job. Put that way, it's ROI is insane.
The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here
Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.
For Intermediates:
Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing good Java and C++.
Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.
The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)
Tips and pointers for writing good Java code
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Algorithms in Java with code examples
http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1416453105&amp;sr=1-1&amp;keywords=algorithms
For mobile development, check out the Big Nerd Ranch books. They contain guided projects that help you learn a variety of core features of mobile programming.
> Sometimes I believe that most books are wastes of paper, because everything relating to programming can be found online.
Although this is true, the problem with online resources is that they tend to be inconsistent. They assume different competency levels, assume familiarity with different concepts, approach problems in different methods, etc. This isn't much of an issue for a veteran programmer, but I think a solid book is great for beginners. Here are two good choices.
Read a lot of books. Everything is usually available as a pdf on the internet and the ones that aren't are $10 to rent on Amazon. Here's the ones that I've read that relate to this project.
Java
Android
Programming in general
First of all, singleton is not really a good pattern to use; many (including myself) consider it to be an anti-pattern because it's just a synonym for global state, which generally makes programs difficult to understand and test.
There are common patterns... the most common reference would probably be https://en.wikipedia.org/wiki/Design_Patterns .
I also really strongly recommend all Java programmers to read https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683
It's more Java specific and covers a lot of pitfalls in the Java language and libraries. It's a very interesting read that comes from a guy who designed a lot of the Java standard libraries and learned firsthand problems with the language.
Depends on your experience. If you haven't programmed before, I think Big Java would be a good book to start with (it's the book MIT's Civil Engineering Dept uses to get them up to speed with Java). If you've programmed before, you're better off doing the official java tutorials followed by Core Java 1 and Core Java 2.
Regardless of the path you take, if you intend to do ANY kind of "serious" java programming, Effective Java is a must-read.
Finally, you'll want a good reference book. Gosling's Java Book is the definitive one, although you might prefer a book by O'Reilly.
Do you not have the course textbook? Does it not explain well? If not, I suggest two other books instead of something online:
Program Development in Java
Effective Java, 2nd Ed
Both available for Kindle reader, so you can download and start reading immediately no matter what platform you use.
Books > blogs or reddit posts for explaining broad questions like this.
If static were an evil modifier, I'm pretty confident it wouldn't have been added to the language.
> no.
Static constant values allow the compiler to compute anything solely dependent on them at compile time, instead of at run time. Like say for example:
public static final double E_TOTEN = Math.pow(Math.E, 10);
> So singleton instead of static is somehow magically ok now? It's the same damn thing @@
Would you prefer if I used the word enum?
> I have no idea what your example is demonstrating.
It wasn't an example, it was a question. Which one provides better encapsulation? A method that has access to every member variable in the class, when the necessary values are provided through public accessor methods, or a static method that uses the public accessor methods.
If you're really serious about coding in Java, I recommend you check out Josh Bloch's Effective Java.
I'm looking for something similar - not so much a 'learn ruby' book as a more technical 'best practices' type of book - something more in line with Effective Java or the Effective C++ series.
Read this
http://www.amazon.com/Absolute-Java-International-Walter-Savitch-ebook/dp/B007O10JCW/ref=sr_1_1?ie=UTF8&amp;qid=1411539417&amp;sr=8-1&amp;keywords=absolute+java
then this
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&amp;qid=1411539430&amp;sr=8-1&amp;keywords=effective+java
then this
http://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0321804333/ref=sr_1_1?ie=UTF8&amp;qid=1411539470&amp;sr=8-1&amp;keywords=android+ranch+guide
and lastly this
http://www.amazon.com/Professional-Android-Application-Development-Meier/dp/1502311135/ref=sr_1_6?ie=UTF8&amp;qid=1411539494&amp;sr=8-6&amp;keywords=professional+android
Depending on how skilled you are at Java:
Then for Android specifically:
You should consider using an enum for your planets. The following enum is expandable without having to change any more code than a switch or if-else statement. Even the planet multiplier could be incorporated into the enum so that you wouldn't even have to use the extra method.
Read chapter 6 - item 30 of Effective Java. That example actually uses planets for enums too. Example usage of the following enum (replacing line 37):
Planet planet = Planet.getPlanetBySelection(keyboard.nextInt());
if (planet == null) {
System.out.println("There is no known planet for that input");
} else {
System.out.println("Okay, so your weight would be " + weight*planets(planet) + " on " + planet.toString());
}
This would also require to update your planets-method:
double planets(Planet planet) {
if (Planet.VENUS.equals(planet)) return 0.78;
// and so on. rather use a switch statement there tho
}
And finally the Planet enum:
public enum Planet {
// Expand with more planets with a unique int-value at your will
VENUS(1), MARS(2), JUPITER(3);
private final int selection;
private Planet(final int selection) {
this.selection = selection;
}
/**
*/
public static Planet getPlanetBySelection(final int selection) {
Planet planet = null;
// Iterate over all known Enum values
for (Planet p : values()) {
if (planet.selection == selection) {
planet = p;
break;
}
}
// null check to see if that planet exists
// alternatively throw an exception
return planet;
}
}
In addition to going out and actually getting your hands dirty as others have suggested, make sure that when you're doing it, you're using the best design principles you can muster.
Also, do some reading! There are lots of good books out there that can help you learn common conventions and good design principles.
I'm going through Effective C++ right now, and I've learned more about how to write C++ in the first quarter of the book than I had in the previous 2 years of my life.
Effective Java is a good source, too, but obviously it's going to depend on which framework and languages you're using. Either way, though, you'll learn a lot of essential concepts for how to write maintainable code and prevent common design mistakes.
Also, if you're planning on writing a lot of Object Oriented code, read up on Object Oriented Design Principles/Patterns. Even if you never use them, other people will. If you start working in bigger codebases, you'll see them in action, and it'll make learning the code a whole lot easier if you're familiar with the patterns they're using.
Have a look at the book Effective Java. Maybe not exactly what you are looking for, but I think you would find it very useful.
If you want to program in Java, I would also suggest IntelliJ Idea. Community edition^[1] is free. Oracle docs are fine^[2], javadocs^[3] are great and the source is free for OpenJDK and if you want to go pro I highly recommend Effective Java^[4] by Joshua Bloch. There is also Findbugs^[5] which is cool for static analysis and most of the popular IDEs have plugins for it. You should also check Concurrency In Practice^[6] for multithreaded programming. If you are into web programming, I highly suggest Head First Servlets and JSP^[7]. There are also very good libraries such as Google Guava, Apache Commons etc.
First make sure you know well plain java. Do some sipmle programs, read web tutorials or beginners book. After that, read Effective Java from Joshua Bloch.
https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683
You don't need to read every line of this book, but at least you should know roughly what is going on there.
Regarding the framewors. There are zillions of them so you have to be selective. It really depends on what you want to do.
Spring + sql is good for web applications. These are for example used as a administrative portals. It's kind of job safety since there are many of them and won't disappear soon. Go for that.
Now just a little advice for the job. The salary of the programmers goes down since it's becoming still easier to create generic things. To me it turned out to be really good deal to combine it with mathematics. Don't look to yourself only as a programmer, bring something more to the table.
Let me know if you need any help.
P.S.
I am thinking about flushing out some posts and examples related to computer vision in the next couple of months. Is this something you would be interested in to see?
Nothing too related to Android/iOS specifically, but...
The FAQ might have a link to a few recommended book lists, but I can't recall.
Programming concepts and fundamentals don't change much. Also read effective java for style/design patterns/anti-patterns etc. http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
I would mainly recommend that you read Effective Java. It contains a number of tips and best practices for writing good Java code. Read it through, and when you get a Java job, be sure to incorporate the practices from the book in your coding.
I would recommend picking up Effective Java and following along with the code examples. It's a great book that will help you when writing more 'advanced' Java programs.
Also if you are planning on making a career out being a Java engineer, I am currently in the process of writing a book that will hopefully be able to teach you many of the skills that you will need in the professional world. If you would like to know more you can sign up at www.javabeyond.com.
What language? Effective Java is a good one.
https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683
Check out Effective Java 2nd Edition.
I haven't read Head First Java, but I see it recommended often.
I personally learned from reading
The Java™ Tutorials and Effective Java.
i agree. books and tinkering are the very best way to get introduced to programming.
i read my first programming book the summer between my sophomore and junior years in high school. (i don't recall how old that made me at the time. 16? bah, i'm getting old.) anyway, that book was Herbert Schildt's The Complete Reference: C++. i found it really interesting, but knowing what i know now Python (The Quick Python Book and Learning Python are good) or Java (I learned on Thinking in Java, but Effective Java is supposed to be good, too) are probably better places to start.
hopefully your parents support your desire to learn programming. $30-$50 for a programming book and access to a computer are a small price to pay for starting a child on a hobby that could turn into a good career!
good luck, and keep us posted! :)
It's perfectly fine in an isolated assignment like this, but it's also easy to start using exceptions as a part of code flow in larger software when you are writing programs for a living. And that's when bad stuff might happen, plus it is harder for your co-workers to decipher what your methods are supposed to do.
Effective Java by Joshua Bloch is probably the best book you can read if you want to improve your code. It's not that thick, and it's divided into "items" that are easily read in any order you like. For instance, there is an item about exceptions, just like your case, but probably way better explained than I did :)
Things like this might seem nitpicking, but in my opinion the easier it is to read your code, and the more robust your methods and classes are, the better. Otherwise you produce spaghetti that people have to maintain 10-15 years from now and they will curse their miserable lives every day. I've been there, it really opened my eyes :D
Ich war schon immer ziemlich fit was Programmierung angeht.
Codecademy ist eigentlich immer eine gute Anlaufstelle. Falls du lieber mit Büchern lernen willst, gibt es Java von Kopf bis Fuß und nachdem du die Grundlagen drin hast Effective Java. Beide Bücher sind leider schon etwas älter und decken daher nicht die neuesten Features von Java 7/8 ab, aber die kann man sich auch mit Online-Artikeln aneignen.
Effective Java
If you are also new to OO programming in general, I would get these books and work on the examples. They will provide you with an excellent foundation for programming in Java.
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251928378&amp;sr=8-1
http://www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486/ref=pd_sim_b_54
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251928591&amp;sr=1-1
That's probably a good starting book. Once you are more advanced, and if you want to continue learning java, I'd check out this book. It's literally the best java book ive ever read.
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1319858709&amp;sr=1-1
I can't mention much about certs, but here is a good book for when you are a little more experienced in java to use for some more advanced subjects.
Also learn the difference between the environments. Host environments are different from how java environments work as well. some examples would be java runtime vs compile time compilation, and how there are somethings that get you into trouble more so than host would, etc.
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Well if you enjoy Josh Bloch style then go on with this , its really good and if you pay attention you can learn a bunch of stuff that work on any object oriented language.
To be honest, the vast majority of formal education classes (that I am aware of) at most CS universities are completely lacking in this area. Some of the resources available (such as that book I linked), are so much higher quality than you'll get at university, written and refined by some of the best in the field, that your best bet is probably to do a little reading. There are also good & free talks online, such as the ones by Google I/O ones.
Here are a few links I've saved on the subject of architecture and design.
If you're pursuing Java, I've also heard amazing things about this book:
After you start working, you'll likely be continuously self-educating and learning from others on the job, so IMO, why not get paid to learn, rather than paying to learn.
Also This is one of the best books to get
we worked through some items from Effective Java and Clean Code but that is more of an addition and good to know. The Principles we learned were just worked into the lessons and nothing from books. Here's the list of them so you can take a look at them, Wikipedia should give you more information (I linked them for you). However it is important to not just read them and add a checkmark, some of them really change the way you programm. You can't respect all of them cause some will exlude others. And finally not all are really principles some are more of a guideline.
Start with SOLID:
no real Principles from here on:
I just checked my notes and here is what I did not mention so far:
We of course learned the Encapsulation (public, private, protected none). We learned about Collections ((Java Collection Framework) Map, Set, List and the different implementations). Threading, concurrency, Executor, Queue and Dequeue, MVC, Event/Listener Pattern, Exceptionhandling, Comperator, Hash and Equals, Polymorphism, casting.
Please not that we are not professionals on all this we just learned the basics more or less.
Hope this helps
If you're mainly interested in Java, I would recommend Effective Java by Joshua Bloch. It's a great guide with recommendations for best practices in the language.
For C, the best book is The C Programming Language by Kernighan and Ritchie. I would recommend that you read that before ever looking at C++ because C++ is based on C. In fact, it's such a great book that I would recommend reading it before you read anything else on any language. You can skip the file system and Unix stuff though.
For C++, I have never found a good beginner book, so my suggestion would be that after you read the above C book, read the stuff in this tutorial and then read Effective C++ by Scott Meyers. It's another best practices book.
For Python, I've heard good things about Learning Python but I don't really know. I actually found it more useful to just go through the Python tutorial and then start making fun little scripts.
Hope that helps!
You can't go wrong with these two books:
http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X/
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Joshua Bloch is a good author and was involved in implementing the Java API (collections API, etc.) early on...
You can also find several talks he's done online for Java puzzlers.
Some good presentations online (including some puzzler ones):
https://www.youtube.com/results?search_query=joshua+bloch
I have found that once you get into the workforce, the need for writing the most efficient algorithms and the overall value that I have gotten from such courses rarely comes up in every day application development. What they really should be teaching you are best practices and programming patterns. Here's a great book on that. It's titled Java, but much carries over to other languages as general practice.
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683