Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I'm thinking of buying Martin Fowler's "Patterns of Enterprise Application Architecture".
From what I can see it seems like a great book, an architectural book with bias towards enterprise Java -- just what I need.
However, in computer years, it is quite old. 2003 was a long time ago, and things have moved on quite a bit since that time.
So I'm wondering if anyone can tell me: is this book still relevant, and worth the read?
Yes, it is still very relevant and an excellent resource.
This book, and Eric Evans book about Domain-Driven Design, are my books of the year - every year ;) ...
It's very relevant. I frequently refer other developers to particular patterns from that book, as links to his site (http://www.martinfowler.com/eaaCatalog/), such as Data Transfer Object and Service Layer.
The latter is one I thought I had "invented" until I saw that Fowler had already written about it.
Given that the answers to this question are now three years old, I felt it important to restate the relevance of Martin Fowler's patterns.
The GOF design patterns book was first published in 1994, and many of its patterns are still considered relevant. We may have come to a deeper understanding of them and produced subtle variants, but they are there as the foundation of any good OO design.
Modern languages increasingly implement some of the patterns behind the scenes so that the developer in theory doesn't have to know about them (an example is the Iterator pattern through the yield statement in C#). But, the developer is a better one for knowing them.
Moving on the Martin's book - this absolutely is still relevant. Its true that many libraries now support these patterns in the background, once again abstracting them away from the developer, but again they are at the core of enterprise application software development.
They solve problems that occurr again and again, regardless of language, system, or platform.
It's currently the textbook used at my university's Principles of Information Systems Design course.
I disagree with the "bias towards Java" statement. Patterns, by their nature, are language-agnostic. They're defined as solutions to common problems. The copy of Fowler's book has examples in both Java and C#, so I can't see where the "bias" comes in. They're the most common object-oriented languages, and he's talking about object-oriented solutions to enterprise problems.
The GoF book has examples in Smalltalk and C++. Why are they so "biased" against Java and C#? Hint: the languages didn't exist when that book was written, but the patterns are as relevant as ever.
Very relevant, and certainly not chained to one language. Witness the upcoming Rails move to Merb, in a very real sense a move from one pattern in POEAA (ActiveRecord) to another (DataMapper).
Many other concepts, from ORM strategies to session management, are both relevant and language-agnostic. I'm still floored when I read this how vast Fowler's influence is. He didn't invent all of the concepts here, but he certainly codified and put names to these ideas in such an concise and accessible way as to make them common parlance across the industry. Still essential.
Absolutely!
The book is a classic. I've just been re-reading it to help with some work on event-driven accounting systems.
Fowler has been revisiting some of the patterns since and you can see his works in progress.
Yes the book is still relevant. You can pickup used copies on Amazon if you are worried about its value and sell it through the same channel.
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
We are thinking of using functional languages in our projects. I'm trying to collect points on which functional language we can start with(we are mainly java developers). We are thinking of using Ocaml.
I tried learning from their website ocaml.org. I've following questions for those who use Ocaml at their workplace.
Does Ocaml reduce lines of code compared to say Java?
What editors do you use ?
I have see that there are many Ocaml library implementations-
Batteries,Core etc.In the beginning can only Batteries suffice?
Do you use Ocaml Core(by Jane Street)? How different is it compared
to standard one?
In the beginning, we are planing to use Ocaml in very small amount,possibly in house project.
At Vector Fabrics, we are using OCaml extensively.
Having recognised the advantages that functional programming could bring to our engineering activities (we are mainly constructing software tools for analysing C and C++ programs), we considered both Haskell and OCaml as languages to use. In the end, we decided to go for OCaml, mostly because its execution model is simpler (eager evaluation vs. Haskell's lazy evaluation) and therefore reasoning about the behaviour of programs is somewhat simpler for programmers who do not necessarily have a background in functional programming (we were especially concerned with reasoning about the space behaviour of programs, with is, sometimes even for experts, quite challenging in Haskell).
OCaml allowing you to selectively "escape" to imperative and even object-oriented programming is something that sometimes comes in handy but not something we recommend to our programmers as a good practice in everyday programming. Our rationale: once you adopt a functional programming language, you better use it to do functional programming in, otherwise you can easily end up writing imperative and object-oriented programs in (for that purposes) clumsy syntax. After all, if you're problem domain is better served with object-oriented programming, then you're better off selecting a language like Java that is far better suited for that.
Answering your questions:
Does Ocaml reduce lines of code compared to say Java? Yes, but only if indeed adopt a "functional style" of programming. Also, be careful: functional programs can be beautifully concise, but sometimes notation can obscure the inherent complexity of algorithms.
What editors do you use? We mainly use general-purpose editors like emacs and vim.
I have see that there are many Ocaml library implementations- Batteries,Core etc.In the beginning can only Batteries suffice? Batteries makes for a nice and arguably powerful-enough standard library (but so does Core). Depending on your problem domain, you may need to extend the standard libraries with your own utility libraries.
Do you use Ocaml Core(by Jane Street)? How different is it compared to standard one? We don't use it, but see, e.g., What are the pros and cons of Batteries and Core?.
Note that these questions have many possible answers and that I have answered them to a large extent exclusively from the Vector Fabrics perspective. In fact, your question may be a bit too broad for Stack Overflow.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
Is Java Concurrency in Practice still valid? I am wondering whether the ideas, concepts and implementation described in the book are still compliant with the latest Java versions.
I ask because the latest edition was done in 2006.
While my perspective may be biased, my current intention for updating the book would be almost strictly additive, covering fork-join, parallel decomposition, and the new parallel bulk data operations coming in Java SE 8.
EDIT 2020: ... and Project Loom.
EDIT 2021: ... and Project Loom :)
EDIT 2022: ... and Project Loom !
Yes, it's still valid in my mind. There isn't big change in this area from 6 to 7. Fork-join is a new feature, which is very suitable for divide-and-conquer type of problems. But all the existing stuff inside the book, such as synchronization, volatile, servlet, are still very valid.
I bought this book in 2013. I had very serious doubts that it would be current and useful given that this edition was published so long ago. The technology world moves quickly, and software technology even faster. Even so, this book is foundational. The concepts and practices that are discussed are more underpinnings for good software design and engineering than updates on the latest and greatest API's. This book has been indispensable, and I am glad that I got it before I had decided to write even a single line of concurrent code. It's probably saved me countless hours.
Yes definitely it's still valid, but I will recommend in addition or as an introduction The Well-Grounded Java Developer a well written book with a chapter on modern Java concurrency techniques and nicely done examples.
I would say so. JDK7 adds the fork-join framework but that is an enhancement rather than a replacement for earlier concurrency tools.
Yes. Very much.
You can always keep track on new things being introduced in Java, however, the book does a fine job of explaining the fundamentals.
If it helps, this comes from a full time researcher in concurrency and parallelism using OOP.
Yes. Still it is valid and i have got good feedback from my friends. It is one of the best book for learning the concurrency in java. You can read the review for Java Concurrency In Practice
If you are going to start your project using Java 8 you might want to consider fresh books and tutorials as well because of new stuff appeared in Java 8 like streams,lambdas and new atomics - that changes development methods a little bit.
Well, the book looks promising when I read certain preview chapters online. It gives enough insight on Java and general concurrency aspects. One can keep this book as a handy outfit when designing and implementing both naive and sophisticated concurrency applications.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
I have been coding in java for a while now .... i want to continue in java and improve my coding abilities. I want some suggestions on -
any websites, blogs, to keep track of latest happenings in java like new coding techniques, standards, new java features, new APIs, basically anything new about java ..... (just for example sake Androidpolice keeps track all that is happening in android)
I have used a couple of classes from google guava libraries. are there any other such libraries which are helpful ?
Any suggestions are appreciated. Just wanna improve my java knowledge
Thanks
I will suggest you to participate actively in Stack Overflow. I improved a lot after joining SO. Better do lot of practice rather than reading. Create problems on your own and try to solve them. Practice makes man perfect.
I cannot recommend enough the Effective Java book by Joshua Bloch. The second (and most recent) edition assumes JSE6 hence recent (JSE7) features are not covered. But the content is impressive and certainly the kind of book I recommend developers who have moved beyond the basics.
As sans481 told, you have to practices.
Try to create different application in Java.
& If error occurs StackOverflow is here to solve your problem.
First clear funda of Java if you are not aware with it then try it.
Good Luck....
Try out some of the TopCoder challenges. They may not improve your knowledge of the API but they will make you a better programmer and thinker, and you can use Java as an implementation language.
Java Magazine is published on a bi-monthly basis in digital and mobile formats. It includes:
Profiles of innovative Java applications
Java technical how-to’s: Enterprise Java, New to Java, Rich Client, Polyglot Programming, and more
Java community news: Java User Groups, JCP standards, and more
Information about new Java books and conferences and events
Similar to TopCoder, there is also CodeChef, Project Euler and SPOJ which will help you with algorithms and make you a better programmer; not to mention helping you learn to write working Java code quickly. It won't help you write large programs, or learn object oriented stuff, but I still think it helps.
Warning, CodeChef may make you want to learn C++ because it's much more popular for online coding competitions (due to speed and memory differences).
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
The title captures my question fairly well. I'm wondering if there is a good resource or leaping-off point for questions about how a JVM (not just HotSpot, but that's obviously the place to start) implements or handles a specific functionality? I'm not looking for the stuff that's in the JLS or JVM Spec -- I know to go there first.
For example: When trying to understand performance issues, we often get into conversations not about what the spec says, but what contemporary best-practices look like in practical implementations. For example, there is some urban mythology that says "final classes perform better in Java because the JVM can inline or otherwise optimize such things." Is there a general resource we can turn to in order to evaluate these claims that float around?
I offer an answer to my own question, with HotSpot-specific references. What about other vendors' offerings? Specifics to small JVMs? Multi-core specifics? Platforms specifics, if they make a difference? Specifics to other JVM languages?
Just to head off a couple of potential complaints: 1) This isn't about looking for premature optimizations (and in fact, better understanding of the platform should dissuade a better educated developer!); and 2) I know Java programmers are supposed to focus on nice, portable, run-anywhere code, but for many of us the platform specifics end up mattering!
This was inspired by some helpful comments on a specific question by Thorbjørn Ravn Andersen. I'm happy to collect some other more helpful examples beyond the one I cite above, to motivate why folks might want these kinds of resources.
Some interesting related questions on SO: Tail-call optimization in JVM, Killer JVM features, optimizations that are going to be useless tomorrow, Differences between JVM implementations.
Edited to Add: I'll award the answer either to the best individual reference mentioned, or to someone who provides a pointer to a website (perhaps built in response to this question) that best concentrates/catalogs JVM implementation wisdom and the practical consequences on client languages and developers.
The OpenJDK "JVM Internals" wiki is a place to start for HotSpot
Oracle's Java SE 6 Performance White Paper and its predecessors give a lot of insight, though isn't organized for my question per se
On synchronization for HotSpot, see my answer here.
Some time ago I put together a short summary about what advanced programmer should know about jvm internals and help him to understand concurrency, gc, jit etc. better. It is a concentrated summary based on specification and OpenJDK.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
For the past few years, I've been working on a team that does .NET and SQL Server. I'll soon be joining a team that is Java and Oracle. What can I read/do to get up-to-speed.
Start here: http://java.sun.com/javase/6/docs/
Sun's documentation is pretty good.
See also:
Hidden Features of Java
Best Java Book you have Read So Far
Overriding Equals and Hashcode in Java
What is the Most Freequent Concurrency Problem You've Encountered in Java
Javapassion is a site that offers free courses on Java. If you are on a hurry, there are 1 to 5 days courses available. You should have no problem following it, if you have experience in Java.
There are many good books for Java, but Thinking in Java is free and is good both for getting started and using as a reference.
If you need conversion of things from one language to the other here is a great website:
http://www.25hoursaday.com/CsharpVsJava.html
This, similar, SO Thread might be helpful.
Josh Bloch's Effective Java is a fantastic book. If you want to learn modern Java idioms there are few better places to look at.
Be prepared to do a lot of reading. C# (assuming this was the language you have been using)is generally regarded as an improved Java, so the Java basics will not be hard to grasp. Java development tools are generally not as tightly integrated as the Microsoft stack, thus allowing for choices to be made. Lots of discussions in Javaland revolve around choosing tools.
Get to know something about the way Java packages things (jar, war, ear).
Learn about the classpath (an endless source of joy and grief).
Build a mental picture of how things work at compile time and run time (generics and type erasure, for instance).
Visit the JavaRanch (http://www.javaranch.com/) and test your Java knowledge with the Rules Roundup! Think of it as a certification mock exam, but with cows. ("No cows were harmed in the making of Rules Roundup.")