January 2014 Newsletter
Everyone you will ever meet knows something you don't. –Bill Nye
Our highest endeavor must be to develop free human beings who are able of themselves to impart purpose and direction to their lives. The need for imagination, a sense of truth, and a feeling of responsibility—these three forces are the very nerve of education. –Rudolf Steiner
Hold fast to dreams,
For if dreams die,
Life is a broken-winged bird
That cannot fly.
Hold fast to dreams.
For if dreams go,
Life is a barren field
Covered with snow.
But there is only one thing that has power completely, and this is love. Because when a man loves, he seeks no power, and therefore he has power. –Alan Paton, Cry, The Beloved Country
There is no right answer... and always a better way. Show and discuss your code, without emotional attachment. You are not your code. –Bruce Eckel
You may be deceived if you trust too much, but you will live in torment if you do not trust enough. –Frank Crane
You should never ask people about their opinions directly. You should observe them, figure out what's wrong and then slowly figure out where the true problem lies. –Armin Ronacher
One of the distinct differences of agile methodologies compared to traditional processes is how requirements are developed and managed. This excellent hour-long video goes through the entire agile requirements process including development of features and user stories through the change process as the user request was implemented.
As developers, we must remember that users of the systems we create see those systems as tools. This excellent article explains the difference in mind-set with respect to applications between users and programmers and provides some good context for how to bridge the gap between the two groups.
The author of one of the most widely used textbooks on software engineering gives his predictions for what will and won’t change in programing over the next 20 years. One of his predictions is that, due to complexity, tolerance for failure of systems will become standard (Isn’t it already?! J), but systems will be more robust and resilient in the face of failure. Also, interestingly, he suggests that the process of development will be much the same as it is today.
One of the common principles of agile teams is maintaining the team membership, as much as possible. But what do you do if you need to move folks around? This article presents some ideas for dealing with this inevitability.
You might sub-title this article “Taking Agile to the Extreme”. This article looks at how to develop an application without all of the usual trappings of effort/duration estimates, detailed specifications, and the like. While most organizations probably aren’t mature enough for this approach, there are plenty of good ideas that apply generally.
One of the most difficult (and frequent and frustrating!) aspects of programming is estimation of effort for implementing a feature or function. No matter how hard we try, it is nearly impossible to get reasonably accurate (+/-25% in my view!) estimates. This article discusses some of the background for these difficulties and offers some mitigation strategies, including adding up to 50% (wow!) of buffer to estimates. (Personally, I prefer the 3-point estimate approach, which, of course, isn’t perfect.)
In working with agile methodologies for a few years, I’ve observed that it is very easy fall into the trap of “high ceremony” agile. This article takes the Agile Manifesto and then breaks it down into how to apply each of the principles effectively and minimally, in the true agile spirit.
From the outsider’s point of view, they are probably curious why there are so many programming languages (and doubtless that this list is incomplete!), with many more popping up like mushrooms each year. The fundamental premise behind each language, many intended for very specific tasks or domains, is that it is intended to make developers more productive: get more done in less time. However, as this article explores, almost everything we know about programmer productivity related to language choice is strictly anecdotal.
This essay takes another look at the age old question of how to measure developer productivity. While it certainly doesn’t resolve the matter, it offers some interesting insights about motivation and the role of management in the development process. See this Hacker News thread for some interesting comments.
Since programming and software development are human endeavors, they are subject to all of the limitations that we have. This article emphasizes that the most difficult things that developers do have little to do with writing code.
While mostly a discussion of the academic definition of program correctness, this article has some interesting perspectives on how complexity affects the likelihood of defects, which may give you some ideas for how to approach white-box testing.
Even with the wide-spread adoption of agile methodologies, specialized/dedicated testers are still the norm for most projects, according to a new survey. In fact, the distribution of testing responsibilities has essentially remained the same over the past six years.
I remember setting up my first test lab (in the Windows 3.x days) with a few cast-off 486 PCs. As much as technology has changed in the development world in the past several years, perhaps more is different in testing. In particular, virtualization has revolutionized testing. This article covers some of the ideas that are key to agile testing.
Financial matters are often low on the priority list for technology workers. But, that seems odd, since most of us work mainly to get money to support ourselves and our families. This brief, but thorough guide explains stock options in simple language with analogies that will make sense to the technically-minded.
Sooner or later, you are going to do something in git where you wish you could change it. This is a thorough, yet understandable explanation of how to undo, correct, or even remove (after other commits have been done!) an errant commit.
While certainly intended to try to sell you on their development tools, this multi-part tutorial series gives an excellent explanation of the concepts and practices of test-driven development (TDD). The author thoroughly explains everything and provides plenty of examples, including how to do mocking, which is often overlooked in many TDD tutorials.
I’m not primarily a visual learner, but we’re all familiar with the idea that the picture is worth a thousand words. This excellent site shows animations of a variety of common algorithms and data structures to help you understand how they work. Source code is available for all of them, so you can dissect them for your own edification.
One of the best ways that I’ve found to learn (or improve your skills with) a programming language is to answer questions to test your conceptual understanding. This tutorial helps you learn C++ by showing you a code snippet and asking a question, such as the output. Each question has a difficulty rating and you can ask for a hint, if you get stuck.
This essay discusses how our cultural fixation (and rewarding) of “busyness” is actually a character flaw and offers suggestions for trading “hard work” for doing work that matters at a reasonable pace.
Most of us know that sleep deficits are one of the main causes of errors and poor performance. And, yet, our culture still promotes the hero mentality around getting less than the necessary amount of sleep (which, of course, varies from person to person). This article shows that we are starting to recognize the importance of sufficient rest and the economic costs of not getting enough.
One of the unanticipated consequences of the economic downturn and the federal stimulus (‘quantitative easing’) is that instead of hiring additional workers, many businesses opted to increase investment in software to improve productivity. In fact, business spending on software has increased 19% since 2007. And, during that same period, automation has continued to under-cut hiring in the jobs in the middle of the economic spectrum.
In counterintuitive new research, investigators found that just staying out of direct observation of management made workers 10% - 15% more productive. Moreover, they also determined that workers develop group norms that improve productivity, but hide them from management for fear of reprisal.
On trait frequently seen in programmers and other technology workers is the perfectionist streak. We like order and completeness. But this often puts us at odds with our business counterparts. This article gives some suggestions for how to maintain application quality and integrity and still deliver your product.
It’s no secret that broadband Internet speeds in the US lag far behind other countries. In a step toward perhaps improving this, the ITU has given preliminary approval to the G.fast standard which could provide transmission speeds currently only available via fiber over copper lines for locations within 250 meters of the distribution node.
The concept of software-defined networking (SDN) has been around for almost 5 years (maybe longer!). However, until now, hardware hasn’t been powerful and inexpensive enough to make a breakthrough against traditional routers and switches. This article indicates that SDN may start to be applied more broadly (or not) in 2014. With all of the struggles that most organizations have with “normal” software development, it will be interesting to see how effective SDN turns out.
This small, handy utility allows you to back up all of your web browser settings and configurations for Google Chrome, Chromium, Firefox, and Opera browsers. It saves everything into a compressed and, optionally, encrypted archive. It supports bookmarks, contacts, passwords, skins, toolbars, plugins, and many more browser-specific features. Browser Backup makes it easy to switch configurations, such as for cross-browser testing, without worrying about losing your regular settings.
If you are new to Git, especially if you are coming from another version control tool, many of the shell commands can seem arcane and overwhelming. git-ext is a set of Bash shell scripts (you knew that even on Windows, the Git command prompt runs under Bash, right?) which provide “aliases” for the common commands that will probably feel more natural to you.
This cool console (command prompt, if you prefer) for Windows packages a number of great utilities, including ConEmu, clink, and msysgit, together with a powerful interface including great keyboard shortcuts to make you feel like you are working on a Linux machine, without the overhead of Cygwin. The entire package is completely portable so you can run from a USB drive and take all of your aliases and other customizations with you.
Window Hacker (WndHack for short) is a tiny utility for inspecting and monitoring almost any type of window, both top-level and child windows, in Windows. Select which windows you want to monitor and you’ll be able to get details about them, send or post common WM_... messages to the window, query for parameters of the window, and even query for top-level windows.
Almost every discipline has its own set of jokes, most of them enigmatic to outsiders. Even though most of us aren’t scientists in the conventional sense, you might get a chuckle (or groan!) out of some of these.
Fortunately, I’m WAY beyond today’s dating scene. But with every cultural shift comes its impact on the courting rituals. Here’s a humorous look at the upsides and pitfalls of dating developers.