Up to Newsletter Index

January 2014 Newsletter


Quotable Quotes

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.

–Langston Hughes


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


Return to top


Software Development Process and Methodology

Video:  Agile Requirements: a Self-Building Documentation

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.



Article:  The Two Cultures of Computing: User Culture Versus Programmer Culture

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.



Article:  Software engineering – looking forward 20 years

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.



Article:  Changing the Composition of Agile Teams

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.



Article:  No Deadlines For You! Software Dev Without Estimates, Specs or Other Lies

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.



Article:  Q&A: Why do programmers miss deadlines?

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.)



Article:  Agile important bits

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.



Article:  Exploring Programming Languages’ Science and Folklore

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.



Article:  We Analyzed 30,000 GitHub Projects – Here Are The Top 100 Libraries in Java, JS and Ruby

This is an insightful summary of where developer mind-share is headed, based on the top (most active) Java, JavaScript, and Ruby projects on Github.  Some of the findings include significant fragmentation in the JavaScript world, mocking is gaining traction in Java and Ruby, and NoSQL is giving MySQL a run for its money in the Java domain.



Article:  Are Your Programmers Working Hard, Or Are They Lazy?

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.



Article:  The Ten Toughest Tasks in Development

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.



Return to top


Software Testing & Quality

Article:  The Probability of a Correct Program

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.



Article:  Specialization Still Prevails in Functional 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.



Article:  The Perfect Dev/Test Lab: 10 Principles that make it Possible

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.



Return to top



Tutorial:  An Engineer’s guide to Stock Options

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.



Tutorial:  On undoing, fixing, or removing commits in git

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.



Tutorial:  30 Days of TDD

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.



Reference:  Algorithm and Data Structure Visualizations

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.



Reference:  A brief note on Node.js understanding

You have probably heard about Node.js and developing in JavaScript on the server side, but you may be unfamiliar with why you would want to use it.  This article explains many of the concepts that underpin Node.js to give a feel for how and when to apply it.



Tutorial:  Cppquiz.org

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.



Return to top


Career Development/Miscellaneous

Article:  The abundance of slowness

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.



Article:  Real Men Go to Sleep

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.



Article:  Fed Stimulus Blunted as Software Replaces Hardware

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.



Article:  Hiding From Managers Can Increase Your Productivity

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.



Article:  Overcoming Perfection

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.



Return to top


Telecommunications/Networking Industry

Article:  500Mbps Internet over phone lines might solve fiber’s “last mile” problem

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.



Article:  SDN - The ‘S’ Doesn’t Necessarily Mean “Someday”

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.



Return to top


Useful Utilities

Browser Backup (Free – Windows XP/2003/Vista/2008/7/8 – 1.08MB)

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.



git-ext (Free – Cross-platform/Shell – 6.2kB)

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.



cmder (Free – Windows XP/2003/Vista/2008/7/8 – 23MB)

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.



Aezay Window Hacker (Free – Windows XP/2003/Vista/2008/7/8 – 239kB)

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.



Return to top


Just For Fun

Scientists tell us their favourite jokes

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.


Pros and Cons of Dating a Programmer

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.



Return to top