Up to Newsletter Index

January 2012 Newsletter


Quotable Quotes


Knowledge is like a garden: if it is not cultivated, it cannot be harvested.  –African Proverb


Mathematics may be compared to a mill of exquisite workmanship, which grinds your stuff to any degree of fineness; but, nevertheless, what you get out depends on what you put in.  –Thomas Henry Huxley


Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgment. For even the very wise cannot see all ends.  –J.R.R. Tolkien (Spoken by Gandalf in The Two Towers)


Web programming is the science of coming up with increasingly complicated ways of concatenating strings.  Greg Brockman on Twitter


Continuous effort—not strength or intelligence—is the key to unlocking our potential.  –Winston Churchill


Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.  Melvin Conway (Conway's Law)


Return to top


Software Development Process and Methodology

Article:  On Programming Deadlines

Almost everyone is constrained by time and resources to complete their projects.  This developer offers five tips on how to consistently deliver quality code under time pressure.  The keystone to his approach is unwavering dedication to test-driven development.



Article:  Known vs Unknown

As we frequently point out, there is no one-size-fits-all development methodology.  This article looks at the idea of using how much knowledge the team has about the problem and the solution to determine whether to use traditional (waterfall) or agile methods.  Essentially, when there are more things that are unknown, then agile tends to work better.



Article:  Why everyone hates the IT department

Perhaps a good chunk of this bad reputation that IT has is due to our tendency to say "no" and push back too much.  But maybe the new year is a good time to think about what we can do on a day-to-day basis to make IT easier to work with.  And, of course, just working in IT can be its own reward sometimes.



Article:  Simple Ain’t Easy

In this review of a recent talk by Rich Hickey, the creator of Clojure, the author emphasizes that one of the key goals for developers is to make the application experience simple, but that accomplishing that is not easy.  In particular, simplicity must be intentionally architected and designed.



Article:  How to write efficient unit tests. 5 principles for unit testing.

Rather than being a tutorial on unit testing, this article gives some good concepts for practical, non-dogmatic approach to using unit tests in practicing TDD.



Article:  Quotes from the NATO Software Engineering Conference in 1968

Sure computers are faster and more ubiquitous and we have many more programming language options, but this summary of quotes from a conference more than 40 years ago shows how, at a high level, very little has changed with respect to the hard problems of development, which leads some to ask if software engineering as a discipline should be abandoned.  Likewise, some concepts that we think of as "new" have been around for quite a while, such as TDD and MVC pattern.



Article:  11 programming trends to watch

The only constant is change…  I can't remember who said that, but it's certainly true of software development.  This article discusses how new tools, techniques, and problems are changing the way developers do their jobs.



Video:  What We Actually Know About Software Development, and Why We Believe It's True

Development expert Greg Wilson (and co-author of Beautiful Code) talks about how the day-to-day aspects of software development haven't changed much in the past few decades.  His main emphasis is that most of this plateau is due to very little independent research about improvement methods. He then discusses his expectations for how it will change over the next 10 years, which he says is to look at what industry practices work and do controlled experiments to determine why and how to replicate it.  (And, if you don't have time to listen to the whole thing, please listen to that last 5 minutes or so!)



Article: Water-Scrum-fall is the reality of agile

Ten years after the introduction of the Agile Manifesto, agile methods, particularly scrum, have become mainstream.  However, based on research from Forrester, the reality of agile methodology adoption is that most organizations have created a hybrid between agile and the traditional waterfall methodology.  He uses the term water-scrum-fall to indicate that waterfall methods are used for front-end activities like prioritization and basic requirements-gathering and deployment/transition work and then agile techniques are used for the internal development work.  Sounds quite a bit like RUP to me.



Article:  The 0.1x developer

In comparing/contrasting the popular notion suggested by Steve McConnell that the best developers are ten times as productive as the average, this author makes a keen observation that their productivity is not based on writing 10x the amount of code (remember that lines of code is NOT a good metric for measuring programmers!), but rather in their ability to identify the 10% of the solution that has the greatest impact.  But, more importantly perhaps, this whole debate misses the point, because managers really need to build high-performing teams and have a group of individuals who work well together.



Article:  People of Process: Key People Challenges in Agile Development

This academic research report, based on analysis of agile implementations by 17 large organizations which had used agile techniques for at least three years and implemented in a top-down manner, discusses some of the common difficulties encountered by workers in adapting to the agile methodology, such as increased reliance on social skills and the need for developers to be 'masters of all trades'.  (There is also an overview presentation of the same material available.)



Return to top


Software Testing & Quality

Article:  Harmony is beauty

In this article, the author talks about how she developed (and maintains!) a passion for testing and how that helps her work collaboratively with developers and other team members.  It's a great story about how to love your job.



Article:  Bad code plagues business applications, especially Java ones

A new study which reviewed 365 million lines of code from 745 applications used across many industries found J2EE applications had the most problems on average, while COBOL applications had the fewest.  However, one of the most interesting results from the research is that robustness and security declines the more releases an application has, which points to difficulty with maintainability.  Of course, there is plenty of commentary in the blogosphere, including this insightful one and this excellent discussion.



Article:  Problem definition with SMART

This brief presentation gives a useful explanation of how to use Drucker's concept of SMART goals as it applies to software testing, especially test planning.



Article:  Bugs and Battleships

This article gives a nice conceptual model of the various kinds of testing and the underlying motivation for them.  The author gives some good ideas about how to "value" and prioritize your tests.



Article:  Qantas terror blamed on computer

While I'm not claiming that this is certainly a case of a software error, this article definitely demonstrates that most any programming defect can have unexpected and very significant consequences.



Article: Testing Linux Code

Most of the available testing literature focuses on Windows or web-based applications.  This article gives a good overview of some of the specific items to consider when testing Linux applications, such as the wide variety of distributions and derivatives of the main distributions.



Return to top



Reference: Test-Driven Development:  A Guide for Non-Programmers

While I recognize that most readers of this newsletter have a strong technical background, it never hurts to take a look at the philosophical underpinnings of the things we do.  This excellent overview of TDD explains the benefit of what might like seem to outsiders just added time and cost.



Tutorial:  An Illustrated Guide to Cryptographic Hashes

While not new, this excellent tutorial explains both the general concepts behind hashes, as well as, the details behind how some of the common hash algorithms, such as MD5 and SHA.



Tutorial:  Learn Regex The Hard Way: Scanning And Parsing Text Without Going Insane

Learning regular expressions often seems like a black art.  This comprehensive, yet very logical, tutorial teaches you simple and a few advanced topics using exercises that show you exactly what the regex should return/do.  Honestly, this is the first regex tutorial that really made sense to me.



Reference: Python Facts

Learning a new programming language (or anything for that matter) can be tough and good, simple examples always help.  If you are taking up Python, this site provides thousands (literally!) of tips along with an explanatory code snippet that demonstrates the concept.  Now, if I can just find something similar for Scala



Tutorial:  Learn HTML5 in 5 Minutes!

Certainly, a technology as broad and revolutionary as HTML5 isn't going to be something that you can learn in 5 minutes, but this comprehensive tutorial shows the new features and explains, with excellent examples, how HTML5 differs from previous versions.  Likewise, it gives you a good feel for some of the amazing things that you can do with HTML5.  And then you can test yourself one what you learned.



Tutorial:  Redis: Zero to Master in 30 minutes

Despite the title, even the author of this tutorial doesn't claim that you'll be a master of Redis key-value store after only 30 minutes.  Nevertheless, this two-part tutorial will give you an excellent understanding of the concepts and some practice in actually using Redis (or what it's not!) to help you decide if it's right for your situation.




Return to top


Career Development/Miscellaneous

Article:  Mitchell Harper: University Education of Software Engineers is a Waste of Time

Mitchell Harper, the founder of BigCommerce.com, set off a firestorm of controversy from his editorial that universities are out of touch with the needs of business.  Another Australian entrepreneur, Matt Barrie, issued his own refutation.  What do you think?



Article:  A Little Bit Each Day

Think that you can't do much in 10 minutes a day?  This author shows how with just a few minutes a day and a consistent effort to stay with something that over the long haul you can really improve your skills in almost anything.



Article:  The Strange Birth and Long Life of Unix

This article explores some of the lesser-known aspects of how Ken Thompson and Dennis Ritchie defied their bosses to create the Unix operating system.  The main theme that comes through is the creativity required to develop elegant and efficient code.



Article:  Creative Thinkers More Likely to Cheat

According to some new research, creative people have a tendency to be more dishonest.  Apparently, the effect is due to their ability to be better storytellers and, accordingly, to better rationalize their behavior.  Maybe being left-brained isn't so bad after all.



Article:  Workplace DNA Project

Recruiting company Bullhorn has released results of a large survey about what workplace factors were most important to employees.  The overall results show that the top three organizational culture aspects are work/life balance, on-going learning, and recognition.



Article:  IBM and Thoughts on the Future of Leadership

This article reviews three points about leadership, particularly as it applies to IT, brought out by IBM CEO Sam Palmissano:  use the increasing "connectedness" of the world as a competitive advantage, think beyond competition to collaboration, and think about long-term impacts (maintainability, etc.).



Article:  The Rise of Developeronomics

Venkatesh Rao argues that the only safe place to invest money today is in software developers.  His basic premise is that the economy is now dependent on the ability of social media to effectively advertise and represent any business, good, or service and this requires developers.  I'm not sure I buy (pun intended!) his ideas, but it's an interesting concept to consider and apparently even applies to national politics.



Article:  The Internet is becoming our memory

Sometimes I find it just easier to "Google it" instead of trying to remember some fact.  Apparently, this is a general trend and by 2025 the information (not sure it can be classified as knowledge!) on the Internet will exceed that of all of the humans alive at that time.



Article:  Doing a Job

This old essay from Admiral Hyman G. Rickover still rings true today.  As an engineer, Rickover recognized that it was people who got things done, not systems or procedures or the like.  [On a personal note:  As a young boy, my dad was the most junior officer working for Rickover and my dad took me to work with him one day and I got to meet him, although, of course, I had no idea who he was.]



Article:  7 Things Highly Productive People Do

While you've probably heard most of the tips in this article before, this is a nice compact listing of them.  Perhaps adopting one or more of these ideas in the new year would be a good goal.  And while you're at it, take a look at how to apply these concepts to agile development.



Article:  Top Ten Reasons Why Large Companies Fail To Keep Their Best Talent

Larger organizations tend to have more turnover among the top employees.  This author gives a "top ten" list of the prevalent reasons.  Nothing really surprising on the list, but it may be somewhat reassuring to know that many of these problems are common across businesses.



Return to top


Useful Utilities

Ticno Multibar (Free – Windows XP/2003/Vista/2008/7 – 13MB)

Most dock bar tools for Windows are more trouble than they are worth.  Ticno Multibar is different.  It adds a dock for launching your favorite applications.  In addition, the dock supports add-ons and, by default, includes a weather add-on, "quick run", and search tools.  One of the nicest things about the dock is that it doesn't pop up when you move the mouse to the screen edge; instead you click on a "tab" to open it.  Plus, you can define hotkeys for any add-on or application and even define text shortcuts for them.



Fedora Utils (Free – Fedora Linux – 70kB)

Fedora Utils is a handy, multi-function script to use after installing Fedora (or Fuduntu).  It allows you to make some tweaks to your system, such as optimizing boot by turning off services, add colors to Terminal, and set yum to keep cache.  Moreover, it installs a variety of tools, including Java JVM, wine, multimedia codecs, Adobe Flash, and many more.



MyFolders (Free – Windows XP/2003/Vista/2008/7 – 847kB)

MyFolders is a shell extension that adds a number of useful functions to the standard Windows Explorer context (right-click) menu for the your most commonly used ("favorite") folders.  Simply right-click on the file or files and select from options to copy, move, or go to a folder and then select the folder from the pop-up menu.  You can even open a Command Prompt in one of the favorite folders.



Jerry (Free – Cross-platform/Java – 820kB)

Jerry, part of a larger Java library called Jodd, is a re-implementation of the jQuery Javascript library API in pure Java.  You can you use most all of the CSS selector and do nearly any kind of static HTML/DOM object manipulation that you can with jQuery.



Corrupt-a-file (Free – Cross-platform/online tool – N/A)

I wasn't sure whether to put this in the utilities or "Just for Fun" section…  In many cases, testers need to have a corrupt file to test system behavior.  Just upload your source file and this tool corrupts it for you!



KumoSync (Free – Windows XP/2003/Vista/2008/7 and .NET 3.5 Framework – 2.6MB)

KumoSync is an automated (or on-demand) tool for synchronizing your Google documents with a local folder (or folders).  It works with multiple Google accounts and supports any file (document) type.  You can even assign a drive letter, such as G:\, for your local documents folder.



Return to top


Just For Fun

Computational Fairy Tales

Check this blog out to learn computing concepts from the simple to the esoteric written in the style of the Brothers Grimm.



25 of the most breathtaking and colorful places of the world

If you enjoy nature and landscape photography, these images will surely fill you with awe.  In each of them, the use of light and color is incredible.



Predicting the Future of Computing

This cool interactive feature allows you to make your best guess at when we will see certain advances in technology in categories such as transportation, communications, and computing.  You can "vote" on to move the already submitted items earlier or later.




From the creator of Minecraft comes a small (and highly-addictive) miniature browser-based version of the game.  Game play is similar to Minecraft.



Return to top