January 2012 Newsletter
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)
Continuous effort—not strength or intelligence—is the key to unlocking our potential. –Winston Churchill
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.
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.
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.
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.
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.
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.
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.
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!)
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.
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.
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.)
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.
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.
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.
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.
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.
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.
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.
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…
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.
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.
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?
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.
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.
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.
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.
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.).
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.
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.
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.]
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.
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.
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 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 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.
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 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.
Check this blog out to learn computing concepts from the simple to the esoteric written in the style of the Brothers Grimm.
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.
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.