A page with useful reference for me as I don't own each one of these books. It can provides you a very short review non-commercial biased.
2003
Programming Jakarta Struts(O'Reilly - Chuck Cavaness) much better than Manning book. Explains struts very clearly with a more interesting example. Not enough on how to design your application for use with the evil ActionForm. Almost nothing on Struts 1.1 features. Nothing on common problems encountered while building web applications, or even about on how to design them using struts.
Struts In Action (Manning) not much more about struts than what's available on struts website. Their example throughout the book is the same login example. Struts 1.1 features, esp DynaForm are mentioned but not really presented. On the positive side, there is a very useful Validator reference at the end and a too short mention of different strategies for the ActionForm.
Contributing to Eclipse (Kent Beck - Erich Gamma) funny little drawings inside to make some good points.
The Design Patterns Java Companion(Adison Wesley - James W. Cooper) A must read for clean swing development. Essencial design patterns inside. Nice tip about doing deep cloning in java.
Java Threads (O'Reilly - Scott Oaks and Henry Wong) very clear presentation of multithreading programming in Java. Explain how to write your own thread scheduler.
J2EE expert one on one (Wrox) pragmatic view of J2EE. Many interesting comments like why avoiding stateful session bean if you are a little bit concerned with performance. Some strange benchmarks at the end of the book showing velocity templates being 10x faster than JSPs.
Java Distributed Computing(O'Reilly - Jim Farley) very good to learn more about RMI because it starts with a custom distributed object system.
Java Enterprise in a Nutshell (O' Reilly - David Flanagan, Jim Farley, William Crawford, and Kris Magnusson) good complementary book, provides a good basis. I liked how RMI use in EJBs was detailed, Servlet chapter is also excellent (but don't look for design tips/help in it - it is a book on the BASICS).
Enterprise Javabeans, second edition (O'Reilly - Richard Monson-Haefel) second lecture made me better appreciate that book, contains a lot of fundamental concepts to know. Very detailed on transaction management. However there is nothing I remember in it about EJB restrictions. In short incomplete but not bad.
Structure And Interpretation Of Computer Programs (MIT Press)
2002
A New Kind Of Science (S. Wolfram)
Programming C# (O'Reilly) contains good and detailed information, is a nice lookup book when we want some information on a particular C# subject, and contains a nice example about programming Windows Forms without Visual Studio.
C# Language Reference (Microsoft, june 2000) ok to lookup information but O'Reilly is usually better.
C# .NET Web Developer's Guide (Syngress) useful, good data on the CLI and on the C# compiled format. It is a nice book to learn C#.
C#, Your visual blueprint for building .NET application ( ) not good, very Visual Studio centric.Filling up pages with obvious data.
Thinking in Pattern (Bruce Eickel) essencial oo design patterns
The Zope Book ( ) good book to familiarize yourself with Zope
Fractal Geometry of Nature (B. Mandelbrot) the spirit of Fractals, maybe good for people that already know a lot about fractals, otherwise kind of difficult to read sometimes because it does not detail ideas that much focusing more on the spirit.
Complete Java 2 Certification (SYBEX) do you know that a byte is signed and a char is 16 bits?
Chaos and Fractals (German authors) makes fractals accessible to everyone including non graduates, while still being ambitious (Fractal dimension details, Julia set details...). It is based on relatively classic mathematical approachs.
2001
Java Security (O'Reilly) repetitive but very good overview of overall Java Security. In September 2001, it was the only book with a chapter on JAAS.
Learning Python (O'Reilly) ok to learn python.
Bluetooth demystified (N.J. Muller) first chapters are interesting to get an overview of bluetooth and its market potential. Then it describes the telecom technology behind bluetooth from scratch. A must read for people who have to program embedded bluetooth devices. It reminded me a little bit the GSM book. I would have liked a detailed technology comparison with its competitors (not only the spec comparison).
J2EE ( ) just another rewriting of Sun specs...
Programming Ruby, the pragmatic programmer's guide ( ) Excellent overview of Ruby but a little bit too much pro-Ruby. The first book on Ruby. In 2002, Ruby is now a bad choice of programming language because Python does everything as simply as Ruby does and has a much larger community.
Python Essencial Reference (New Riders) good because the python hypertext documentation has a really bad index and is not well organized.
Programming Python (O'Reilly) that book sucks.
Genetic Programming III, Darwinian Invention and problem solving (Koza) very good approach, nice comparison with evolutionnary theory + good introduction to LISP. First chapters must be read, then repetitive.
How to solve it: Modern Heuristics (Springer) AI techniques overview. Not very useful because it describes the obvious with a lot of details and the difficult in a few words. Furthermore some very stupid comments like p358 "some have suggested (e.g. Walter Freeman) that digital implementation of neural network may fail to emulate the biological reality because real brain are chaotic analog devices. Digital computers can only approximate the behaviour of analog devices to a given degree of precision. This precision may not be sufficient to capture the chaotic dynamics that exist in the real brain". 3 sentences to express a not-so-interesting remark, none of them add any details. Koza is much more interesting.
Professional JMS (Wrox) good overview of JMS, everything I needed to know about it.
Professional J2EE (Wrox) really good on custom JSP tags. Some interesting design issues. Explicitely mention the restrictions of J2EE (even if he does not explicitely tell you how to avoid them). Unfortunaly their examples are not always very good and sometimes just too long (especially the XML/JSP part is crap).
Applied Cryptography (B. Schneier) The basis of cryptography, very detailed. Could be used as a reference manual.
Fast Food Nation (E. Schlosser) 1000 reasons not to eat cheap food. A social part and a chemical part, but mainly social. I found interesting to read "Americans with German ancestors far outnumber those with English ancestors", (of course Schlosser is from German origin). A shame he did not specify any reference probing this fact.
The Codebook ( ) history of cryptography describing the diverse techniques to encrypt or crack.
2000
Web security ( ) some interesting parts but a lot of nothing.
Database Nation ( ) why worry about your private data? Authentification problems on social life.
CCTV( ) first chapters interesting on the history of prisons and criminals. Then a lot of repetitive data on CCTV in England. CCTV means Closed Circuit TV i.e. surveillance systems for public areas.
In Code(S. Flannery) nice introduction to cryptography and mathematics. At 16, she proposed a new authentification scheme quicker than RSA. My first slightly technical purchased book for my pleasure.
Java Server Pages, chapter 8 a must read for clean servlet/jsp programming: a nice presentation of MVC adapted to a web client through the command pattern. The rest of the book is much less interesting and much more entry-level. Professional JSP from Wrox is probably a much better book now.
1999
GSM (don't remember the title but it's red and from the ENST) everything about GSM technology, very well described and explained.
Lamps ( ) a lot of books on light/optics/lamp technology.
1998
Thinking in Java (Bruce Eickel) free and good to learn Java. Good chapters on Swing programmation. Swing was new at this time.
1997
Java in a Nutshell (O'Reilly) my first Java book. Was ok to learn java but not that great. JDK API documentation should be removed from the book and replaced by a chapter on the Javadoc system.
Yesterday I had some free time to finally find out why MacOs X would not display my little applet properly. I checked various JDKs for MacOs, no difference. I checked if it was due to antialiasing use, no luck. I actually found out there was an error in the way I displayed images. I did not call repaint() between each image change. Strangely, it worked fine on Windows with many JDKs. Anyway now my Benham Disc Applet is working on Apple computers as well.
I updated my little delicious toolbar that provides autosave feature for me. I did not bother reworking the new delicious extension as I don't use its new functionalities. However people are free to do so if they want with the code from this toolbar.
With Firefox 1.5, display of saved documents was not working properly anymore due to a change in Firefox handling of security permissions to view local files. It is fixed now. Tags: delicious, toolbar, extension, firefox
Last year, I have helped building an AJAX web application, where the web client was composed of only one web page and tons of javascript. The 1 web page for a site approach is similar to Gmail and many full AJAX sites. This approach looks quite elegant. Using JSON (and JSON templates) we were able to separated fully presentation logic and business logic and componentization seemed to occur naturally.
But I remember how often I complained on how bad Javascript was to code. I find it does not encourage good practices at all. The object orientation of Javascript is really a pain to use. If I had not a small experience with Python before, I would have thought scripting languages were really bad at building applications, even not so big ones. I find that even for good programmers, Javascript is a challenge, as it seems to always be a struggle to organize properly your code with it.
I was recently relieved to see that around me, almost nobody likes Javascript either. It is very sad that Netscape chosed such a bad language in 1995. Firefox appears like a miraculous program to me as a lot of the UI is done in Javascript.
Here is my new Mac Mini Core Solo. I am quite happy with it since it is very quiet. It makes a good jukebox/movie/server machine. Apple was very quick in shipping it (2 days)
However I was a bit disappointed by iPhoto 6, it is not as nice as Picasa to sort out pictures (no IPTC support). I did not try Java on it yet. I just found out my little Benham circle applet was not working properly on it.
Bertrand Meyer describes in his book " Object Oriented Software Construction (2nd Ed)" qualities that a good object oriented language should have. Java has almost all the features. Ruby is much farther off, which does not mean it is not a good language, I think it's very good to write some types of programs quickly (should I call them scripts?), syntax is quite nice, but it does lack the following useful features:
Assertions:
The language should make it possible to equip a class and its features with assertions (preconditions, postconditions and invariants), relying on tools to produce documentation out of these assertions and, optionally, monitor them at run time.
Information Hiding (Java is not good either on that one, the protected keyword is of dubious value):
It should be possible for the author of a class to specify that a feature is available to all clients, to no client, or to specified clients
Static Typing:
A well-defined type system should, by enforcing a number of type declaration and compatibility rules, guarantee the run-time type safety of the systems it accepts.
Genericity:
It should be possible to write classes with formal generic parameters representing arbitrary types.
More pragmatically, library choice and performance difference between Java and Ruby might be the most decisive.
Occasionally in Ant you can see messages like this: "[javac] Using modern compiler"
What does this mean?
In Ant you have the property " build.compiler" to specify if you want to use a classic or modern compiler. Now what do they mean by modern or classic. Well, they call classic compiler the compilers of JDK 1.1 and 1.2 and they call modern compiler the ones of JDK 1.3+. They made that distinction because a classic compiler does not support the same options as modern compilers: the semantics of javac tool changed in JDK 1.3.
This terminology can easily be confused with java class file compatibility. Java class file compatibility is changed using the "-target" option of javac tool. One can specify in ant to compile with modern compilers and a target 1.4, the result is likely to not run on JVM 1.3. One can specify modern and a target 1.1, the resulting classes will run on JVM 1.1, but ant build.xml file will not be usable with JDK 1.1 without changing modern to classic.
I find Ant choice of word a bit confusing as using a "modern" compiler has little to do with the resulting class files.
These days we tried to make Websphere and Jonas interoperate. Some EJBs are deployed in Jonas and we just try to call them from Websphere. The most natural way is to use RMI (with JRMP) for that. Jonas uses JDK1.4.2 (conforms to J2EE 1.4) and Websphere IBM JVM 1.3.1 (conforms to J2EE 1.3). Because of RMI serialization, an EJB from Jonas will not work on Websphere, because this EJB has references to J2EE 1.4 classes which are different from J2EE 1.3. The exact root cause is not exactly clear to me, it probably has to do with the Naming Factory and the EJB Stub, but we tried every possible thing here without success. Update: JRMP worked between JBoss 3.X on JDK 1.4 and Websphere 5.X (IBM JDK 1.3) using JBoss NamingFactory. So RMI interoperation seems quite unpredictable. One thing is that you have to pay attention to the naming factory you use. If it is a special library like in JBoss case, make sure it is compatible with your JDK.
One solution is to use RMI-IIOP, as it does not rely on serialization. It almost works. In our case we use Websphere Portal that needs to have security enabled. You might ask what security has to do with all that. Well, enabling security on websphere means that CORBA exchange will also be secured (using CSIv2). Tuning Jonas to understand what websphere asks is something we did not manage to do (and we don't know if it is possible at all). Update: We did manage to make it work by disabling Jonas CSIv2 support.
So there we are using Axis to do the communication! Update: Axis is not needed anymore as RMI-IIOP works as advertised.
There is an interesting benchmark of Axis vs JRMP vs RMI-IIOP (pdf). Axis is more than 10x slower than pure JRMP. Application servers use of JRMP seems to matter a lot, JBoss looks bad.
I wanted to reply to Diego Parilla post about scalability, but my reply ended up being too long not to post it over here. I don’t know if I am the only one here but I don’t fully understand his post and arguments.
Clustering the web server and clustering the model are just two parts of clustering, not exclusive.
In a LAMP application, clustering the model is traditionally done by clustering the DB (MySQL) which is a no brainer. Clustering the web server does not always implies sharing the “HTTP session”. For example you can limit yourself to use cookies. For many web apps this works well.
For more stateful web apps, there are strategies to avoid clustering the session, you can make one client attack one server only for his whole session duration. Another strategy is to use DB where you would use a session. This is actually reported to work quite well. If my memory is right, this is how Friendster rewrote its app (used to be Java and session based, moved to PHP+DB).
EJBs are not about clustering the model more than Spring, they are about clustering the business logic. And I don’t see how EJB3 is more scalable than Hibernate.
In my dream job, I would have freedom to play with and build software based on new ideas I have. In my dream job, I would work with creative people, luminaries. In my dream job, I would have a good enough salary. In my dream job, I would not have to worry about the company stability. In my dream job, I would have freedom in my work schedule.
Get paid for doing what you really want (i.e. your ideas) is possible. But without worrying about the next 6 months, I have not seen that.