Head First Software Development by Dan Pilone, Russ Miles This errata page lists the errors corrected in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was updated April 21, 2008. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification Corrected errors: {47} The first two estimates for Bob and Laura (Pay with Visa/MC/PayPal and Order Flight DVDs) should be swapped, so Bob's estimates are 10 and 2, respectively, and Laura's are 15 and 20, respectively. {78} First visual calculation; The calculation showing the difference between work possible with three developers and the original timescale has been calculated incorrectly. 273 - 190 = 83 (not 84) This value is incorrectly utilised thereafter on the page causing further confusion: "...189 Days of work time, and 273 days of work." This should read: "...190 Days of work time..." etc In the "there are no Dumb Questions" section the values shown in question one are incorrect also: "But 190 days of work is less than the 190 days that our three-developer team can produce..." This should read: "But 184 days of work is less..." etc In the answer for question one, another incorrect value is shown: "...165 days is close enough to the 189-day mark..." This should read: "...184 days is close enough to the 190-day mark..." (80) Be the Customer Solution There is a word missing at the end of the paragraph. The last sentence should read, "We also laid out the user stories in order of priority." {84} Iteration 1 > Total Days; Sum of the user stories for iteration one has been calculated incorrectly: 13 + 15 + 15 + 12 = 55 (not 57) The result next to "Divide by 3 developers" should then be 19, with an annotation pointing to the number that says: "Actually, the answer here is 18.333, but the general rule is to round up your estimates to make sure you havenŐt chopped off time that you are going to need." {91} Sharpen Your Pencil, Iteration 1: The line under "Iteration 1" should read "55 days of work / 0.7" , not "57 days of work / 0.7" {92} Sharpen Your Pencil Solution The solution for Iteration 1 should be "79 days", not "82 days" Also, the total should be "234 days of work", not "237 days of work". Finally, the sentence below the total should read, "So if you Have 3 developers, each of them has to work 78 days in 3 months...but there are only 60 working days", with "78 days" replacing "79 days" {124} Date, FirstDate, SecondDate, & ThirdDate class diagrams; validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean {127} Bottom of diagam The second getName() invocation line (there are two of these on the page) should extend to the SeeMovieEvent lifeline. {129} Bottom of diagam The second getName() invocation line (there are two of these on the page) should extend to the SeeMovieEvent lifeline. (137-138) class diagrams; The class diagrams have typos. Both GoToRestaurantEvent and OrderFlowerEvent classes have set the name field to "SeeMovie": -name:String = "SeeMovie" Under GoToRestaurantEvent, the text should instead be: -name:String = "GoToRestaurant" And under OrderFlowersEvent, the text should instead be: -name:String = "OrderFlowers" {137-138} Date, FirstDate, SecondDate, & ThirdDate class diagrams validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean Also, there should be no italic formatting for this text in the FirstDate, SecondDate, and ThirdDate class diagrams, as they will be concrete implementations. {150} Date, FirstDate, SecondDate, & ThirdDate class diagrams validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean Also, there should be no italic formatting for this text in the FirstDate, SecondDate, and ThirdDate class diagrams, as they will be concrete implementations. {153} Date, FirstDate, SecondDate, & ThirdDate class diagrams validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean Also, there should be no italic formatting for this text in the FirstDate, SecondDate, and ThirdDate class diagrams, as they will be concrete implementations. {154} Date, FirstDate, SecondDate, & ThirdDate class diagrams validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean {160} FirstDate, SecondDate, & ThirdDate class diagrams validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean Also, there should be no italic formatting for this text in the FirstDate, SecondDate, and ThirdDate class diagrams, as they will be concrete implementations. {162} Crossed-out FirstDate, SecondDate, & ThirdDate class diagrams validateEvent methods show as private. They cannot be private because validateEvent is an abstract method. In all these class diagrams, the text: - validateEvent(event : Event) :boolean should be changed to: # validateEvent(event : Event) :boolean {297} Exercise, second line of code; Change "mDBAccessor" to "dbAccessor" so the code line reads: private DBAccessor dbAccessor; {298} Exercise Solution, fourth line of code; Change "mDBAccessor" to "dbAccessor" so the code line reads: dbAccessor = accessor; (418) 6th paragraph; There is a line missing at the end of this paragraph: "(...) and incorporate those approaches when they might help your project. Some people call this 'process...'". It should read "...Some people call this process skepticism" {437} Bottom of diagam The second getName() invocation line (there are two of these on the page) should extend to the SeeMovieEvent lifeline.