Mar 17 2008

Peopleware

I am going to cunningly place a copy of Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister on my boss’ desk. Peopleware is an insightful book on software project management and many of the advice on Peopleware resonated well with me. The undertone of the book is aligned with eXtreme Programming (XP), even though the book was written well before XP became a popular methodology. The books explores many elements that are required to manage a successful software development team. For one, the team needs to feel as part of a community, as part of an elite group doing something truly special. For me, the big watershed moment reading this book was when I realized that software development is a social endeavor. We might all romanticize with the idea of the lone hacker working late in to the night, but in practice every software product needs a large community to truly flourish. Even those Open Source developers working on the source code on their own need a community of users.

Peopleware also talks about organization learning. Within an organization, it might seem obvious to have people learn new technologies and skills. But it is equally important, and perhaps not so obvious, it is important to retain those people with new skills. The greatest investment a company has is its human capital, the greatest challenge a company has is to know how to invest it.

Here are some of my favorite quotes from the book.

People and Performance

The business we’re in is more sociological then technological, more dependent on workers’ abilities to communicate with each other than their abilities to communicate with machines.

Someone who can help a project to jell is worth two people who just do work.

Two people from the same organization tend to perform alike.

The people who write the Methodology are smart. The people who carry it out can be dumb.

People under time pressure don’t work better, they just work faster.

Count on the best people outperforming the worst by about 10:1. Count on the best performer being about 2.5 times better than the median performer.

People who had ten years of experience did not outperform those with two years of experience.

There was a very weak relationship between salary and performance.

The total cost of replacing each person is the equivalent of four-and-a-half to five months of employee cost or about twenty percent of the cost of keeping that employee for the full two years on the job.

Productivity and Quality

Productivity within the software industry has improved by three to five percent a year, only marginally better than the steel or automobile industry.

Productivity ought to mean achieving more in an hour of work, but all too often it has come to mean extracting more for an hour of pay.

Throughout the effort there will be more or less an hour of undertime for every hour of overtime.

The trade-off between price and quality does not exist in Japan. Rather, the idea that high quality brings on cost reduction is widely accepted.

Quality is free, but only to those who are willing to pay heavily for it.

We all tend to tie our self-esteem strongly to the quality of the product we produce – not the quantity o product, but the quality.

While machines have changed enormously, the business of software development has been rather static. We still spend most of our time working n requirements and specification, the low-tech part of our work.

If you are charged with getting a task done, what proportion of your time ought to be dedicated to actually doing the task? Not one hundred percent. There ought to be some provision for brainstorming, investigating new methods, figuring out how to avoid doing some of the subtasks, reading, training, and just goofing off.

Managment

Most managers give themselves excellent grades on knowing when to trust their people and when not to. But in our experience too many managers err on the side of mistrust.

The manager’s function is not to make people work, but to make it possible for people to work.

Second Thermodynamic Law of Management: Entropy is always increasing in the organization.

Technorati Tags: , , , , , ,


Jan 8 2008

Practices of an Agile Developer – Book Critique

As you may gather from the title, this book explains in detail many of the extreme and agile programming best practices. I think a more suitable name would be Common Practices of a Software Developer as I felt that some of the practices where just common sense advice for a experience developer. I mean, do you need to read two pages to understand to check in code into version control as soon as possible, as soon as you made a fix, every half day if possible but not every five minutes? Well if you do read practice 43, Share Code Only When Ready.

What I liked about this book was that each practice was introduced by a little programming devil that tried to influence the reader into ignoring the practice altogether. This little devil is the one makes us forget to comment our code, that likes to code rather than test. At the end of each practice there is a little angel that describes the benefits of incorporating the practice as a habit into your daily routine, a routine that should include stand up meetings, check out/ins, testing, continuous integration, mentoring, etc.

A book like this might be better suited for a junior developer that does not have experience with extreme programming or any other process for that matter.

Here are some pearls of common sense from Practices of an Agile Developer.

Fix the problem, not the symptom.

The best thing for developers may not be the best for users, and vice versa.

Most users would rather have good software today than wait for superior software a year later.

Having short iterations and smaller increments helps developers stay focused.

Unit testing is an investment. Invest wisely. Testing accessors or trivial methods is probably not time well spent.

Here are some common sense practices I adhered too.

There is more than one way to do it, but do it how more than one developer can understand it.

Design a software solution for the end user, not for a fellow developer, or worse yet your database.

If the end user can’t use your software, that’s a bug.

You may consider your code as art but no one is going to hang your code in the Louvre.

Eat fruit and vegetables before you program.

Technorati Tags: , , , , ,


Oct 27 2007

Top Programming Books on Google Book Search

Here is an extensive list of top programming books available for preview on Google Books. Google Books provides scans of thousands of textbooks. The scans are not the best, most books have visible scan defects in them.

Even though the scans are not the best, there are some features that just work well. Just like Google Maps, where you can send a link to a map (with a set size, address, etc), with Google Books you can send a link to a specific page in a certain book with specific words highlighted. Google also has handy links such as the table of contents, popular passages, and where to buy the book (perhaps in a better quality PDF format).

All the books listed here have a ‘limited preview’, meaning that some pages are not available for viewing but for the most part you can browse through most the the book. Google Books does indicate the pages that are not available.

Java
The Java Language Specification
Effective Java Programming language
Java: The complete Reference
Java In A Nutshell
Head First Java

C/C++
Practical C++ Programming
C++ The Core Language
The Concurrent C Programming Language
C++ Primer Plus

.Net/C#
The C# Programming Language
The Visual Basic .NET Programming Language
Pro C# 2005 and the .NET 2.0 Platform
Learning Visual Basic .NET
VB.NET Language in a Nutshell

Python
Python in a Nutshell
Learning Python
Visual Quickstart Guide: Python
Python Pocket Reference
Python Cookbook

JavaScript/DOM
JavaScript: The Definitive Guide
Beginning JavaScript with DOM Scripting and AJAX
The Book of JavaScript
The Complete Reference JavaScript
JavaScript Bible
DOM Scripting

Ruby/Rails
Ruby in a Nutshell
The Ruby Way
Beginning Ruby
Ruby on Rails: Up and Running
Rails Solutions: Ruby on Rails Made Easy
Beginning Ruby on Rails E-Commerce

PHP
PHP in a Nutshell
Programming PHP
PHP Cookbook
Learning PHP and MySQL
Learning PHP 5

Database
Visual Quickstart Guide: MySQL
MySQL Cookbook
MySQL in a Nutshell
MySQL Tutorial
Programming SQL Server 2005
SQL Server 2005: Developer’s Guide
SQL Server 2005: A Beginner’s Guide
Beginning SQL Server 2005 Express

Technorati Tags: , , , , , , , , , , , , ,


Aug 1 2007

Programming Flex 2 – Book Critique

There are many formats in which to write a technology book, such as those nutshell, cookbook, and dummy book formats. There are also a set of books that introduce you to a subject from a distance, those that provide a ton of nitty-gritty code snippets, and those that build a sample, yet trivial, application. I would classify Programming Flex 2, jointly produced by O’Reilly and the Adobe Developer Library, as a high-level introductory text for Flex 2 so that managers that have not written a line of code since Fortran can put it on their bookshelf. I feel that a better suited name for this book might have been ‘A Nice Review for Thinking About Programming Flex 2’ as it does not provide enough reference material to actually program a useful application. Programming Flex 2 is a nice overview of the programming environment for Flex but in my blunt opinion it does not give enough depth in any of the topics it tries to cover. The book breaks down the Flex 2 SDK into the following 19 chapters…

Introducing Flex

The introductory chapter on Flex 2 goes over how Flex runs on top of the ubiquitous Adobe Flash player. The author touts the market share of the Flash plugin which is thought to be installed in nearly 98% of all internet enabled machines.

The Flex platform is based on standards such as XML, HTTP, Web Services, and ECMAScript and leverages rich media support in Flash. The Flex Framework consists of libraries for UI controls such as buttons, text fields, menus, layout containers, data containers, effects, and more which are used to build interactive UI clients. You can program Flex 2 applications coding markup code by hand or break down and shell out close to $500 on Flex Builder 2, a Eclipse-based commercial-grade IDE.

Building Applications with the Flex Framework

This chapter provides a bit more detail into MXML, the markup used in Flex, and ActionScript. MXML is compiled into ActionScript which is then converted into a SWF Flash file. Flex 2 SDK comes with two compilers, mxmlc and compc, to build Flex applications. This chapter goes over the details on how to compile a Flex application using the command line and the mxmlc compiler.

MXML

With the obligatory introduction out of the way, this chapter introduces the MXML markup language used to write Flex applications. MXML is a markup language like XML or HTML, so proficient web developers and designer will pick it up right away.

Here is the take away from this chapter. There are two available root nodes for MXML documents, application and canvas. An application is made of components, such as buttons or text fields. There are several types of components, visual just as buttons and non-visual such as data. MXML supports events similar to the onclick events provided in HTML.
Continue reading


Jun 22 2006

Rails Recipes

I just received Rails Recipes by Chad Fowler (I original ordered this book through Amazon back in February). This book is jam packed with 70 recipes covering user interface, database, controller, testing, and big-picture, and email recipes. The recipes that I am most interested in are Converting to Migration-Based Schemas, Make Dumb Data Smart with composed_of(), Cleaning Up Controllers with Postback Actions, Write Code That Writes Code, Automating Development with Your Own Generators, Getting Notified of Unhandled Exceptions, Syndicate Your Site with RSS, and Making Your Own Rails Plugins (I wrote my own recipe on rails plugins).

Rails Recipes picks up where Agile Web Developement with Rails leaves off. I got started with Rails just by reading the first few chapters of Agile Web Development with Rails. Now that I am getting into some more advanced features of the framework I will depend on Rails Recipes. Another book that has been helpful in my rails development has been Ruby in a Nutshell by Ruby’s author Yukihiro Matsumoto. These three books form the holy trinity of Ruby on Rails.

Technorati Tags: , , , , , , ,


Jun 7 2006

Belated Spring Cleaning

I was reorganizing and cleaning my technical bookshelf earlier today. I have a whole bunch of books that I don’t use and are just taking space. I want to donate some of these books to my local library, maybe up and coming techies will get some use out of them. Some of these books are a little dated but others are just not useful in day to day software development. Now that I am into Ruby, Python, and Groovy I just don’t have much room in my bookshelf for Perl books. I have a whole pile of Perl books that I am going to toss out, books like Perl Cookbook, Programming Perl, and Advanced Perl Programming. The only Perl book that I am thinking of keeping is Learning Perl. I also don’t have space for antiquated web frameworks so out goes Programming Jakarta Struts, Professional Struts Applications, Enterprise JavaBeans Component Architecture, and Enterprise JavaBeans.

I think these books will be replaced with up coming Groovy titles and maybe the second edition of Agile Web Development with Rails.

Technorati Tags: , , , ,