The Artima Developer Community
Sponsored Link

Weblogs Forum
Where is Thinking in Java, 4th Edition?

43 replies on 3 pages. Most recent reply: Feb 17, 2006 10:12 AM by Nishant Saini

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 43 replies on 3 pages [ 1 2 3 | » ]
Bruce Eckel

Posts: 874
Nickname: beckel
Registered: Jun, 2003

Where is Thinking in Java, 4th Edition? (View in Weblogs)
Posted: Jun 1, 2005 8:27 AM
Reply to this message Reply
Summary
To stem the tide of emails asking this question, this entry describes the current state of the book and explains why it's taking so long.
Advertisement

Here's the situation at the time of this writing: There are 23 chapters in the book, and all but 5 of them have been polished and have even gone through copy edit. Except for those 5 chapters, the book is done. Ah, but the 5 chapters are the hard ones. 3 of those chapters require various levels of work to finish, but it's the "Generics" and "Concurrency" chapters that are the big hurdles. I've already spent months on both of them (you can see the struggle over generics reflected in a number of the articles here: http://mindview.net/WebLog), and I hope that by the time I'm ready to tackle them again, the unconscious part of my brain will have magically figured out many of the difficult issues.

Another way to look at it is to say that J2SE5 has made me realize how complex Java has become. It's been sneaking along with the various releases, but J2SE5 (clearly driven by the features in C# 2.0) has leapt forward far enough that you suddenly wake up and say "hey, this isn't a 'simple' language anymore!" (Many will argue that it never was).

For example, I've come to understand that to teach Java now requires a two-week seminar, whereas before I could fit things into a single week. This change has been long in coming, but it was hard for me to break out of a one-week seminar format. It always seemed like a programming language should be acquirable in a single week. It took a customer saying "we just want the basics" for me to (A) figure out what the basics were (in this case, as in many, just enough Java to be able to write servlets and JSPs, and talk to JDBC -- that is, enough to write basic web server applications) and (B) discover that learning Java didn't have to be a painful process for all concerned. Trying to cram too much into too short a time is agonizing for everyone, but like the proverbial frog in the slowly-heating saucepan, the features that were incrementally added to the language always seemed like they could be shoehorned in. It took time and pain to discover that we had passed the point of a one-week seminar.

Concurrency

Although it is largely unheralded, the changes in concurrency for J2SE5 are quite significant. They have resulted in a new set of libraries (although we often treat libraries as secondary to language feature changes, the new concurrency libraries are fundamentally important). Under the covers, there's a new memory model that changes the way Java concurrency is implemented. The theoretical underpinnings for this model have made significant impacts on the programming community in general, and in particular are strongly influencing the concurrency features in the next version of C++.

My initial approach to the new concurrency features was to try to cover everything, and I spent numerous months working on this before discovering that I had a chapter that was over 150 pages long. For awhile I thought of trying to make this a book on its own. During a lunch discussion with Brian Goetz at a conference, I discovered that he was writing a book on the depths of J2SE5 concurrency (which is supposed to be out this fall), and I realized that I could fall back to covering the essentials, and refer to Brian's book for people who need more depth. Now it's a matter of pulling out the extra material, ensuring that I actually do cover the essentials effectively, and finally making sure that everything is correct (no mean feat where threading is concerned). But notice the evolution that was required -- If I had understood from the beginning that there were more and less important library features, and what those features were, it would have been much easier to write the chapter. But like software itself, you usually have to get in and wrestle with the details before the design becomes clear.

Generics

The challenge of generics has been at least equal to that of concurrency. Or perhaps greater, as some of the essays at http://mindview.net/WebLog will show. I've been told a number of times, occasionally quite derisively, "oh, you just expected it to work like C++ templates" (usually combined with the party-line attitude that C++ templates are clearly inferior). Indeed, I had expectations, but they were that "generics" in Java would live up to their name, and provide a way to produce code that is applicable across more types, rather than just a way to have better type checking for containers.

The problem is that it's not quite either of these things. If you throw up your hands and say "OK, better containers is what it's all about, now I don't have to worry about upcasting and downcasting," you soon discover situations where generics can allow you to write more effective code which falls outside that description. But as soon as you decide that it's a true generic mechanism, you run into the wall of erasure -- you don't really know what type the generic code is working with. To partially compensate for this, you must introduce bounds, which leads to covariance and contravariance. By comparison, C++ templates are vastly simpler and more powerful; indeed, the only real problem with C++ templates is the horrible error messages that compilers have traditionally produced (The next version of C++ intends to solve this problem quite effectively). So you need to understand why Java generics don't have the power and simplicity of C++ templates (answer: migration compatibility -- using old libraries in J2SE5).

One attitude that people have taken when faced with the complexity of Java generics is to assume that programmers can simply be consumers of generic libraries that other programmers have created. This was a short-lived illusion in the C++ community, as well. My experience is that, once you know about generics, they start wanting to creep into your code, no matter how mundane you think that code is, because the idea of genericity is fundamental to what we try to do in programming. For various understandable reasons, Java's implementation of generics makes it hard to achieve that idea, and so you're faced with a big struggle. And that struggle translates to my struggle in writing the chapter (also, I tried to use generics throughout the book, wherever they were appropriate. This helps improve your familiarity with generic issues).

Schedule

I had hoped to finish the book at the end of February (the last of a number of dates that I had hoped to finish it by...), at which time I began a fair amount of traveling, including speaking at conferences and a marathon 1-month, 3-company consulting tour. I have not mastered the ability to do these kinds of things and do any significant work on a book at the same time, although I know people who can. I have just returned to Crested Butte, CO, and am digging back into the book again. My current hope is to finish it by the end of the summer. That seems reasonable to me now, but I've never been terribly good at estimating these things.

Because the Hands-On Java CD follows directly from the work in the book, I will be starting work on that when the book completes (using Flash this time, to eliminate platform problems), and I do not intend to miss a cycle as I did with Thinking in Java, 3rd edition. Those of you who have purchased the 2nd edition of the CD since the publication date of Thinking in Java, 3rd edition will automatically get an upgrade to the upcoming edition of the CD, as promised.

Note also that there will be no Thinking in Java CD bound into the fourth edition. The Thinking in C introduction will be reformed into a downloadable Flash presentation, and the source code will also be downloadable -- doing it through the web is now feasible and reasonable, and there were too many problems with the bound-in CD in TIJ3.


Swaroop C H

Posts: 10
Nickname: g2swaroop
Registered: Jan, 2004

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 1, 2005 1:42 PM
Reply to this message Reply
Just reinforces the fact that you learn more when you teach.

Good luck with the 'schedule' :)

Noam Tamim

Posts: 26
Nickname: noamtm
Registered: Jun, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 5, 2005 4:08 AM
Reply to this message Reply
1. Why don't you post what you have (those 5 chapters) on your website, and allow others to comment, open-source (or even Wiki) style?

2. Re: the 150-page chapter on concurrency: please consider publishing the uncut version of it.

I haven't read your blog so far, so I'm sorry if my comments are somewhat obsolete.


- Noam (http://noamtm.blogspot.com)

Bruce Eckel

Posts: 874
Nickname: beckel
Registered: Jun, 2003

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 6, 2005 8:55 AM
Reply to this message Reply
I will actually be saving things that I have to chop out of the book as downloadable extras.

Balbir Singh

Posts: 3
Nickname: bsingh
Registered: Jun, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 7, 2005 12:21 AM
Reply to this message Reply
Are you accepting review comments from the third edition? I sent some to TIJ3@...., but did not receive any response. I found something about operators and wanted to communicate it.

Dominique Grimaldi

Posts: 1
Nickname: dominiqueg
Registered: Jun, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 8, 2005 10:22 AM
Reply to this message Reply
You're talking about the next version of C++ in Generics, can you tell us a bit more ? If there's no mistake, the last one is ISO 14882 in '1999.

Rafael Naufal

Posts: 3
Nickname: rnaufal
Registered: Jun, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 9, 2005 2:13 PM
Reply to this message Reply
Hi Bruce! I've been reading Thinking in Java, 3rd Edition and I found it quite important and useful. It's the best book I've ever seen to teach the principles of OOP and the depths of the Java language. I hope Thinking in Java, 4rd Edition will continue in the same way, now with the features of J2SE 1.5.

Gary Brown

Posts: 1
Nickname: gbrown
Registered: Jun, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jun 19, 2005 12:16 PM
Reply to this message Reply
Bruce, is there any chance of your providing the table of contents of Thinking in Java, 4e? I hope to use it as the primary text for a course starting in mid August and would like to structure the schedule with the order and nature of topics in mind.

Bruce Eckel

Posts: 874
Nickname: beckel
Registered: Jun, 2003

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 1, 2005 11:55 AM
Reply to this message Reply
Gary:

I hope to finish the book sometime in August, so I'm not sure if that will work for you. However, here's the current table of contents (the book will actually be cut back to 1400 pages by the time it's done):

Preface 1
Introduction 13
Introduction to Objects 23
Everything Is an Object 61
Operators 93
Controlling Execution 135
Initialization & Cleanup 155
Access Control 207
Reusing Classes 235
Polymorphism 275
Interfaces 311
Inner Classes 345
Holding Your Objects 389
Error Handling with Exceptions 429
Strings 489
Type Information 539
Generics 599
Arrays 685
Containers in Depth 733
I/O 815
Enumerated Types 923
Annotations 971
Concurrency 1021
Graphical User Interfaces 1191
Discovering Problems 1337
A: Guidelines 1427
B: Supplements 1443
C: Resources 1449
Index 1457

Vincent O'Sullivan

Posts: 724
Nickname: vincent
Registered: Nov, 2002

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 4, 2005 4:13 AM
Reply to this message Reply
> (the book will actually be
> cut back to 1400 pages by the time it's done):

Didn't someone once write a book called "Java in a Nutshell". A quick Amazon search now reveals...
   Java in a Nutshell 
J2ME in a Nutshell
Java Foundation Classes in a Nutshell: A Desktop Quick Reference
Java Enterprise in a Nutshell
Java Examples in a Nutshell
...and I'm sure there are more. It must say something about the way the language is going.

V.

Bruce Eckel

Posts: 874
Nickname: beckel
Registered: Jun, 2003

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 4, 2005 11:38 AM
Reply to this message Reply
OReilly has the "nutshell" series. The latest version of Java in a Nutshell for J2SE5 was quite thick. That book mostly focuses on libraries, however.

Bruce Eckel

Posts: 874
Nickname: beckel
Registered: Jun, 2003

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 4, 2005 11:40 AM
Reply to this message Reply
> Are you accepting review comments from the third edition?
> I sent some to TIJ3@...., but did not receive any
> response. I found something about operators and wanted to
> communicate it.

At this point the book is so changed and so far along that it probably won't do much good, but you never know, so go ahead and send them to me directly.

iwod

Posts: 1
Nickname: iwod
Registered: Jul, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 6, 2005 12:39 AM
Reply to this message Reply
You mention your book will be finished sometime in Augest. I am wondering does this implies it goes strict to publishing?
( I saw the release date on Amazon.com is 16th of December 2005, )
Or would you publish it first online to allow reviews and comment for errors and improvement?

Bruce Eckel

Posts: 874
Nickname: beckel
Registered: Jun, 2003

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 6, 2005 10:11 AM
Reply to this message Reply
That's when I'm hoping to finish it, depending on how difficult the generics and concurrency chapters continue to be. It will go directly to print at that time.

Richard Bremner

Posts: 1
Nickname: richyrich
Registered: Jul, 2005

Re: Where is Thinking in Java, 4th Edition? Posted: Jul 17, 2005 3:17 PM
Reply to this message Reply
I'm surprised I didn't see a chapter called "Collections". Is that what the "Containers" chapter is for?

p.s - I love the book

Flat View: This topic has 43 replies on 3 pages [ 1  2  3 | » ]
Topic: Unimperative Reborn as a Concatenative Language Previous Topic   Next Topic Topic: Can You Write Quality Software Quickly?


Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2014 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use - Advertise with Us