October 2012 Newsletter
No man is greatly jealous who is not in some measure guilty. –Benjamin Whichcote
High-quality software is not expensive. High-quality software is faster and cheaper to build and maintain than low-quality software, from initial development all the way through total cost of ownership. –Capers Jones, The Economics of Software Quality
The only unit of time that matters is heartbeats. Even if the world were totally silent, even in a dark room covered in five layers of foam, you’d be able to count your own heartbeats. –Paul Ford, 10 Timeframes
I never could have done what I have done without the habits of punctuality, order, and diligence, without the determination to concentrate myself on one subject at a time. –Charles Dickens
Interviewer: In your experience, how long does it take for a novice programmer to become a reasonably proficient C developer capable of writing nontrivial production code?
Do not look for approval except for the consciousness of doing your best. –Andrew Carnegie
Bad programmers worry about the code. Good programmers worry about data structures and their relationships. –Linus Torvalds
This article discusses the chicken-and-egg problem in programming around how to get experienced developers when the processes used in many cases are counterproductive with respect to improving skills. The author suggests that most methodologies and techniques that are touted as being improvements have little empirical evidence to support those claims. Instead, he says that reduced cycle time (think "two-week sprints") and more feedback in the development process can actually be demonstrated to improve delivery.
This excellent article reviews the traditional view that all other things being equal organizations should have a preference for buying software from the marketplace instead of building it. The author goes on to demonstrate that the changes in software development over the past decade are causing a shift in this strategy.
Most development teams have at least some technical debt that they'd like to address, but often business priorities trump that work. This article gives some practical tips for how to present the value proposition of working down technical debt to your product owner and management.
This developer opines about how much software which is so important in our lives doesn't work properly and the (seeming) dearth of any urgency to do anything about it. He says he knows that we can do better and solicits suggestions for how to summon the will to do something about it.
And here's one passionate and cogent response.
This article, which is a response to some recent posts online about some of the frustrations that people have with agile methodologies, does a good job of explaining the agile mindset and how agile must be adapted to each organization. The author goes on to discuss the maturity levels in agile adoption, using some basic milestones for measurement.
When initially implementing Scrum, many organizations mistakenly try to have Scrum Masters do the role of project manager and/or lead developer as well. This article explains the unique role of the Scrum Master and why it is important for this to be a separate and unique role on the project team.
Most developers are familiar with the mythical man-month concept. One of its corollaries is that you can get your project done better and faster by building a smaller team of exceptional developers. This article explains why that approach is typically flawed.
As agile methodologies reach adolescence (or is it middle-age in Internet time?), many are starting to question some of the practices (which is not necessarily a bad thing). Popular blogger Jimmy Bogard discusses some of the problems he sees with Scrum and suggests replacing them with lean-based approaches.
This excellent article promotes the idea that instead of developing the best user interfaces, designers should actually try to eliminate the interface as much as possible. The basic idea is to examine the process for using the system and determine what are the naturally required steps and try to eliminate all of the others.
This author says that the four key traits of good (great?) programmers are code quality, code correctness, code performance, and code productivity. He goes on to not only explain each very well, but provides a plethora of links to help you improve in each area.
This article presents some ideas for how testers can overcome their fears, especially about loss of identity, in the transition from traditional development processes to Scrum methodology, where "everyone" is responsible for testing.
Typically, we think of "bugs" in applications as being bad. In this story, from a new book about prediction and forecasting, in the epic man-versus-machine battle between IBM's Deep Blue supercomputer and Garry Kasparov, a bug in Deep Blue (one of the few!) worked to its advantage. To me, this points out the fact that a bug (or defect, if you prefer) is really any unintended behavior, not just those that cause problems.
Especially as agile methodologies become mainstream and development projects are organized around teams, the role of the tester is changing. And with this change, sometimes the independence of a tester becomes muddled. This author says that healthy teams nurture the independence of the tester and they respect the role and value that the tester provides.
One question that seems to never go away in the testing world is: What is the correct ratio of testers to developers? While this may never be answered, this panel of experts provides some interesting insight and carries this question beyond into some unexpected areas.
This author suggests that it's just as important as deciding what to test, when doing test planning, to determine what not to test. Given that every project has limited resources, as a tester, you must prioritize and perhaps some features or functions simply shouldn't be tested. He discusses what kind of things are good candidates for skipping in test.
Development productivity and methodology expert Capers Jones says that 15% of all defects are still in a system when it is delivered. He suggests that static analysis tools before testing can reduce this to only 5% of latent defects.
When measuring algorithm complexity, the O-notation is a good tool, but I often have difficulty remembering just how different the various results are. This excellent interactive tool helps you understand and compare. And check out some examples in Ruby,
Programming, design, web development, etc. are almost exclusively mental endeavors. As such, our brains are the most important tool in the toolbox. And the brain is a mysterious engine. This article gives some great practical tips for get top performance from your brain.
In many Java development shops, Apache Maven is replacing Ant as the standard build tool. But how do you decide if Maven is right for you and how to implement it? This site provides a comprehensive online book about the Maven philosophy and lifecycle and the brass tacks of using it.
Design patterns are one of the cornerstones of good design and development. But sometimes it's difficult to remember the basics of the various patterns, if you don't use some of them frequently. This simple, but comprehensive, 2-page chart describes each of the classical pattern along with a UML diagram for each.
Functional programming is starting to become more mainstream, but many developers don’t have much experience with it. This interesting presentation shows how both OOP and functional paradigms can be used together in an application.
While the title of this article probably isn't shocking to most readers of this newsletter, the author provides some good guidance for those who ask you what they need to do to learn to program. He also offers a useful analogy to doing art: You have to get all of your "bad programs" out, so that you can begin building good ones.
Serial entrepreneur Steve Blank shows that, despite the strong temptations to embellish your resume, in the long run you'll be better off to simply state the facts and emphasize your abilities.
This excellent infographic explains some of the reasons that even with U.S. unemployment over 8% (13 million people) nearly 4 million jobs remain unfilled. Almost half of businesses surveyed said that they decided not to hire, because they couldn't find a candidate that was the right fit.
Looking for a new job? Check out this list of employers that rank highest by the masses. Google, Amazon, and Apple take the top three spots.
At one time or another, most people have worked with a brilliant person who also was a jerk. This article says that regardless of the amount of great work this person does, the damage done to moral and productivity of others on the team isn't worth it.
Everyone wants to make good decisions, whether it's deciding where to go to dinner or whether to buy some stock. So it's a good idea to be aware of the various cognitive biases that can derail making the best choice.
Recent research studies demonstrate the long-held hypothesis that we become more productive as we see (if it's only an illusion!) the completion of a goal nearing. Perhaps this is one of the reasons that agile development techniques and their short, frequent sprints/iterations are so much more effective at getting work done (not to mention Parkinson's Law).
This article discusses online tools for calculating salaries based on a variety of factors and using this information for negotiating power with your current employer or when looking for a new job.
Ten years after Deep Blue (and its human creator Murray Campbell) beat Garry Kasparov, computers continue to dominate the chess world. But, in general, even though computers are becoming more powerful, they are also improving the skills and intelligence of humans, too.
Dagri is a bit difficult to describe. The Dagri web site calls it "the world's first data grid desktop application". It appears most like a spreadsheet application, but it's really different and useful. It has basic spreadsheet functions, but it's really power is in organizing tabular data and managing relationships between them without the complexity of a database (although the internal data is stored in SQLite database).
While I'm certainly not condoning illegal reverse engineering, there are times when decompiling a Java class can help, such as when using a third-party library with no source and trying to debug an interaction with it. This Eclipse plug-in made up of two existing standalone utilities allows you to decompile directly inside of Eclipse.
The ndocs utility for Node.js platform provides the handy function of listing all of the methods contained within a particular module. It lists all of the methods including the method signature at the command prompt, making it much quicker than trying to look them up online or in the HTML documentation.
This cool little bookmarklet lets you inject CSS into the current web page. It's helpful for debugging CSS, especially browser-specific handling, on systems that don't have Firebug or other DOM inspectors installed.
This handy standalone utility allows you write C# code and test it immediately without having to open Visual Studio, create a project, and compile your code before you can run it. It will output the code snippet results and you can even configure it to display a log with Error, Debug, and/or Info output.
In pinch to know the 'Bacon Number' for an actor in a new movie? Google to the rescue! Just put in the actor's name and 'bacon number' in the search and voila!
Did you know that there is a real (using the term loosely!) RFC describing transmission of IP packets by pigeons? Well, now you do!
Most technology workers (OK… geeks!) enjoy the off-beat humor of XKCD. Read this great interview that find out what makes its author tick.
If you asked most folks, they'd probably say that the first PC was the Apple ][ or maybe the MITS Altair 8800. But this fascinating article gives you the inside story of a small team at Italian computer maker Olivetti who sold the first PC in 1965!
While not the typical entry in this section, hopefully, you'll enjoy this one. It's said that every cloud has a silver lining. But over half of American's think that the stormy weather will disrupt cloud computing!
Remember when you did math with pencil and paper? Return to those thrilling days of yesteryear with this printable calculator that can do multiplication and division and find square roots all with just a ruler. It's based on a mathematical concept known as an elliptic curve, which was one of the keys to Wiles' proof of Fermat's Last Theorem and which are used for powerful cryptographic functions.