Book Review: Don't Make Me Think

Sometime last month I received the second edition of Steve Krug's Don't Make Me Think.

Many people have raved about the original Don't Make Me Think in the past, but fewer probably realize that there is that new edition out. It's in fact so new, that the copyright note is of 2006.

Anyway, the book:

Interview: Tom Copeland of PMD & Rubyforge

This is the first in a series of interviews we're making available to the CodeSnipers community. We have been working to track down people who we thought had something valuable to say about the software development community, tools, practices, or direction. Some of the names you will recognize immediately, others you've probably never heard of, but all of them have made an impact in one way or another. Without further delay... our first victim... er... is Tom Copeland of the PMD project.

Some of our community may be familiar with the Java tool PMD, but many are not. Could you tell us a bit about PMD and your role in the project?

Sure! PMD is a utility for finding various "opportunities for improvement" in Java source code. It uses static analysis, meaning that it parses and analyses the source code without actually running the program, to find unused code, unnecessary object creation, and bad practices. You can run it using Ant/Maven/command line/various IDEs and generate text, HTML or XML reports.

The Career Programmer: Guerilla Tactics for an Imperfect World

Here is something I learned over the last couple years, with the lessons mainly being conducted between the hours of 9 and 5: It rarely matters what is right or wrong. Decisions are not always based on logical thought. As a developer/programmer/software engineer/etc. you can say you just want to do your job and create software. The reality is that the work environment may not be entirely in agreement with your goals. Maybe other individuals/departments follow their own agendas at your cost and maybe you do not receive the freedom (and tools) to actually do your job. There can be many problems. Christopher Duncan's The Career Programmer: Guerilla Tactics for an Imperfect World is a book worth reading to understand your environment and deal with it more effectively.

Which books do you keep on hand?

There are a handful of books that I make a point of keeping close to my desk as general reference guides. I thought I'd take some time to share my list and see if there are others out there that I'm missing. Suggestions for specific languages, concepts, or principles are welcome.

Book Review: Java Extreme Programming Cookbook

Since I've been talking about Unit Testing quite a bit recently, I thought I'd offer up a review on a book I read a while back. I thought it was a solid roundup of both the principles and the tools used to support Extreme Programming in Java. Overall, I'd give it a 9/10 and I deduct a point solely due to the fact that since it details the usage of numerous Open Source projects, it's halflife could be very short. Regardless, this is more than enough to get you started and will teach you the basics to be able to do even more interesting things.

Just to make this clear right off the bat, if you're not working in Java, only pages 11-27 are going to be of any use. These pages go over the different pillars that make up Extreme Programming (XP). Whether you're using XP or not, you can pick and choose the pillars you need and customize them to your project pretty easily. The principles are: Pair Coding, Unit Testing, Refactoring, Iterative/Minimal Upfront Design, and Regular Builds. I have yet to see a project that cannot benefit from having Unit Testing and Regular Builds in place. These two items serve as a great safety net for current and future development efforts by detecting errors soon after insertion.

Agile Web Development with Rails

Many people (like me) want to start using Rails, but are a little intimidated by picking up a new language and framework. We don’t want to spend countless hours reading through online documentation and puzzling out how things work. We just want to get stuff done. Agile Web Development with Rails is written with this group in mind and it certainly delivers.

The book is targeted at people who are familiar with coding and object oriented design. While prior knowledge of Ruby is certainly helpful, the book works well for those who are new to the language as well as the framework of Rails (like me). For Ruby newcomers there is an appendix that covers some of the basics of the language. Let’s get on to the meat of the book.

got something done

A meeting in a stuffy conference room, over lunch, no less. Issues were raised, some fingers were pointed, solutions were discussed. Nothing too unusual really, until the end, when the host cleared his throat and inquired: Alright, so what's the next action?

This, right then and there made my day.

Are bad Requirements our fault?

Over the past week or so, I've been reading Marcus Buckingham's First, Break All the Rules. I caught him at a conference last year and finally got around to picking up both of this books, so I've been looking forward to this.

Anyway, I'm approximately half way through it and while I was reading this morning, I was struck by something. Let me quote:

Conventional wisdom asserts that good is the opposite of bad, that if you want to understand excellence, you should investigate failure and then invert it.

He goes on to support this by pointing out that we tend to study things if we want to prevent them: student truancy, drug use, etc, etc. And I found this interesting when applied to some of my recent projects. Everyone tends to focus on "what went wrong and how do we fix it" instead of "what went right and how do we do more of it?"

As is common in the software world, we complain quite a bit about not having a specification. We talk about it to anyone who will listen... and I was actually doing it this morning. Maybe we need to change our perspective a bit. As John pointed out in his recent post, most of our customers and even we take things for granted in how they should work, how we perceive the world, and what we expect from our people and our tools. When we are working with something as intangible and complex as software, we need to focus on making things a bit more tangible and descriptive for our users. We have to make sure that they can understand some of the key things... not *how* we're doing something, but what the tradeoffs are.

I believe that we need to educate our customers on not only what is possible, but what is impossible given their constraints. Not only could this help clarify requirements, but it might completely eliminate silly requirements like "Build an auction system on par with Ebay".

Cross-Platform GUI Programming with wxWidgets (book review)

If you spend time writing applications targeting several platforms like Windows/Unix/Mac or even embedded platforms like Pocket PC (WinCE) then, no doubt you have come across a open source widget system called wxWigets.

Book : Cross-Platform GUI Programming with wxWidgets
By : Julian Smart, Kevin Hock, Stefan Csomor

Cross-Platform GUI Programmg with wxWidgets, was published recently, on July 25, 2005, and is a must for any cross platform UI developer. The goal of wxWidgets is not to replace UIs such as MFC or Motif even or GTK+, but to work above them. For a cross platform developer, this is a saving grace. I could now build advanced cross platform applications that have a native look and feel on the target platforms.

Perhaps like many, if you are unaware of wxWidgets ,also referred as simply wx, you may think its just another GUI, and the problem with that, is having people to relearn GUIs, which can lead to fustration. Even Joel Spolsky cautions about user fustrations with UI design, from his classic User Interface Design book. Lets face it, mostly everyone has experienced Micrsoft's Windows UI. So we have come to accept and expect certain Microsoft UI formalities. Like expanding a window by moving the mouse to a window edge. For most other UIs like motif, that would just move the window and cause user fustration. So the last thing we need is to re-learn another UI. Wx resolves this by using the native underlining UI on that platform, such as MFC if it were a Windows application, so the end result is an application that really is using MFC but was programmed with wx.

Some problems with new UI is often, that it is incomplete, compared to some UI like MFC. Most UI, don't include networking functions, memory management, database functions, or advance graphic engines. Wx is very complete, with ODBC functions, and OpenGL routines. KICAD is an open source CAD software using wx, how amazing is that!

Overall, this book is a simple read, it is geared towards C/C++ programmers, and if you have any experience with other GUIs as MFC, OWL you will quickly excel in its application. You can also use a variety of other languages such as Python, Perl, Basic, Lua, Eiffel, Java, JavaScript, Ruby, Haskell and C#.

I don't really have too many cons against the book. Other than, its really a beginner to intermediate introduction to wx. If you're a wx expert, you can still benefit from the book, I expecially liked its multithreaded section.

Also what is not covered in the book, is macros in wx which contain really nice features that allow for dynamic classes to be defined on runtime and imported via dynamic libraries and make for some cool plugin technology, for those whom don't wish to make thier application open sourced, and yet, want users to extend the UI of their application, via plugins.