September 2013 Newsletter
Books to the ceiling,
Books to the sky,
My pile of books is a mile high.
How I love them! How I need them!
I'll have a long beard by the time I read them.
There is not now, nor has there ever been, nor will there ever be, any programming language in which it is the least bit difficult to write bad code. –Flon's Law
The more you give people, the more complacent they become. History, though, tells us how lucky we are. –Dave Hendon
The practitioner of . . . programming can be regarded as an essayist, whose main concern is with exposition and excellence of style. Such an author, with thesaurus in hand, chooses the names of variables carefully and explains what each variable means. He or she strives for a program that is comprehensible because its concepts have been introduced in an order that is best for human understanding, using a mixture of formal and informal methods that reinforce each other. –Donald Knuth, “Literate Programming” (1984)
All of the great leaders have had one characteristic in common: it was the willingness to confront unequivocally the major anxiety of their people in their time. This, and not much else, is the essence of leadership. –John Kenneth Galbraith
The most amazing achievement of the computer software industry is its continuing cancellation of the steady and staggering gains made by the computer hardware industry. –Henry Petroski
Agile development is everywhere.
Or, at least, that’s what it seems like.
But just slapping the “agile” label on a process doesn’t change
culture. Agile implementations must be
intentional and require some fundamental changes to organizational culture. This article explores the role that
development management, both front-line and senior levels, have in successfully
implementing agile development.
http://www.infoq.com/articles/managers-support-agile-transformation
Peopleware, by Tom DeMarco and Tim Lister,
is the seminal work on the matters related to people aspects of software
development. With the release of the third edition, this
author shares some short quotes from the book that encapsulate the principles
of the book.
http://www.benlinders.com/2013/a-peopleware-summary-in-15-tweets/
Development estimation is one of the most difficult and, at times,
frustrating tasks that we have to do.
This article gives a good tour of some recent thinking and discussions
on the topic and adds the authors own insights, as well.
http://everhour.com/blog/why-estimations-regularly-off/
While not strictly about development process or methodology, this article
is interesting in demonstrating how real-time analytics can be applied to an
old problem to help benefit an organization.
http://www.wired.com/business/2013/06/ups-astronomical-math/
Undoubtedly, system architecture is a key factor to maintainability,
scalability, and progressive enhancement of your application. However, there is little guidance about how
to integrate architecture with agile methodologies. This article gives a good approach for how to
effectively include architecture into Scrum.
This developer makes the interesting observation that the proliferation
of “small” form-factor (mobile) devices should push IT groups toward small
teams and reduced process and administrative overhead to more nimbly deliver
business functionality, by using real-time feedback and other such mechanisms.
http://blog.uncluttah.com/the-power-of-small.html
In the vein of simplicity and minimalism, this programmer gives your some
great practical ways to avoid writing code.
He emphasizes some questions to ask to help you design your application
effectively so that all code written is really necessary.
http://improbabletruths.com/the-code-you-dont-write
In most discussions of technical debt, the conclusion is that you should
try to reduce it as soon as possible after it’s identified. This comprehensive article looks at why that
might not be the best approach in all cases and how you should assess the
importance of fixing debt.
http://www.infoq.com/articles/managing-technical-debt
While defect-free software is perhaps possible (see proofs of correctness, but remember Donald Knuth’s famous axiom: Beware of bugs in the above code; I have only proved it correct, not tried it.), most of us would not be willing to pay for it. So what can we do to improve the quality and reduce defects? I’ve long been a proponent of “risk-based testing”, which uses techniques to balance the likelihood of a problem against the costs of the error occurring and the cost to detect the problem. This article explains how to apply risk-management principles to testing.
http://tech.blog.box.com/2013/08/beyond-more-testing-strategies-for-powerful-risk-reduction/
By noting that software testers and programmers/developers need to have different skill sets, especially in the non-technical areas, this author proposes that, rather than using a one-size-fits-all approach, colleges should have special curriculum for software testing.
Here’s an interesting story about a guy who built an intriguing open-source project, called Jepsen, which aims to provide consistent basis of measuring the performance and other characteristics of the burgeoning set of NoSQL databases. The article gives some good insight into some of the factors to consider in your own testing, whether it’s a database server or other application.
This comprehensive tutorial series covers the SOLID principles with relevant and detailed examples in .NET. The author thoroughly explains each concept and then shows how to apply them with a complete and well-structured example.
http://dotnetcodr.com/tag/solid/
Not sure why, but I enjoy learning about web design and especially typography. Even though many of us are (most certainly) not designers, we can all improve how we use type in our designs. This list of five simply tips will make you a better typographer than 70% of designers, according to the author. And check out the rest of the site for lots more information and inspiration.
http://practicaltypography.com/typography-in-ten-minutes.html
If you’re a casual Unix/Linux shell user (or maybe even a very skilled one!), you are bound to run across a shell command that just doesn’t make a lot of sense, especially those with lots of switches and options. And paging through the man pages can be frustrating too. Well, just paste in the command at Explain Shell and it’ll give you a breakdown of the command with pointers to each of the items. It’s based on the Ubuntu man pages archive and includes data from nearly 30000 listings, so it’s comprehensive and up to date.
Data compression is kind of passé now, but it’s still useful to understand the concepts behind it, since some of those principles come into play in other domains, especially security and cryptography. This simple and highly readable, yet thorough tutorial helps you understand the basics, including where to apply the different compression types.
http://georgemdallas.wordpress.com/2013/08/14/data-compression-what-it-is-and-how-it-works/
One of the errors that strikes fear in the hearts of Java developers is the OutOfMemoryError. But there are actually quite a few “flavors” of this error and it’s helpful to know the likely causes of the different kinds.
http://plumbr.eu/blog/understanding-java-lang-outofmemoryerror
Most of will never be managers, but that does not mean that we don’t have influence in our organizations. One of the best ways to demonstrate leadership is to share some of the things we’ve learned with others, especially those new to our team (or even the work world, in general). Here are some tips for mentoring others in the IT domain.
http://www.informationweek.com/global-cio/interviews/5-ways-to-be-a-stronger-it-mentor/240159342
Everyone can probably benefit from better using their time. This presentation gives some great tips for how to be more effective and efficient.
http://www.slideshare.net/egarbugli/26-time-management-hacks-i-wish-id-known-at-20
Many people are familiar with the increased complexity in communication as groups increase in size. This article explores some of the other angles and implications for keeping teams to a reasonable size, based on Jeff Bezos’ rule of thumb that you should be able to feed a team with two pizzas.
Instead of using the “humble-brag” (love that phrase!) about how busy you are, this writer suggests some very practical tips to get a better handle on your time and improve your productivity.
http://blogs.hbr.org/cs/2013/09/please_stop_complaining_about.html
Many people, especially those with families, often consider work-life balance (which some claim doesn’t exist!) as or more important as salary and other benefits when choosing an employer. Here’s Glassdoor’s 2013 list of the best companies for this factor based on employee ratings.
http://www.glassdoor.com/Top-Companies-for-Work-Life-Balance-LST_KQ0,35.htm
As we frequently point out in this newsletter, in today’s business environment, it’s up to each of us to keep our skills up to date. This author suggests that, for a balanced approach to technical skills improvement, you should learn these: Hadoop, MongoDB, Scala, Node.js, C++ or Assembly (!), and Git.
http://www.infoworld.com/d/application-development/6-technologies-you-should-learn-year-225344
Columbia University’s Earth Institute has released their annual survey (based on survey data from 2010 – 2012) of happiness by country. Scandinavian countries topped the list and African nations tended to be on the bottom of the list. The USA came in at number 17, behind Canada and Mexico.
http://edition.cnn.com/2013/09/09/business/earth-institute-world-happiness-rankings/
Perhaps when you were a child, a parent or teacher told you to take a
walk when you faced difficulty in solving a problem. Well, it’s still the best advice as confirmed
by this article in which some of the most creative minds in all of history
provide their perspectives on the value of a good “constitutional”.
Missile Command (Did you know that it’s even an Easter egg in YouTube?) is one of the classics of the video game revolution. This essay explores its cultural impact and the how it profoundly changed the life of its creator.
http://www.polygon.com/features/2013/8/15/4528228/missile-command-dave-theurer
Internet memes come and go. One that seems to be making a resurgence recently is the “What’s the most important trait for developers?” theme. While there certainly isn’t just one that is important, this author makes a strong argument for the value of judgment as key.
http://tammersaleh.com/posts/the-number-one-trait-of-a-great-developer/
Using the model of the organ systems of the human body, this article explains the various pieces of the Internet and how they interact. A very clever and insightful explanation of a dry, technical topic.
http://www.oneurl.me/2013/08/anatomy-internet/
WinToolBox calls itself “the Swiss army knives of utility programs” and it fits its billing. This small package contains a screen capturer supporting entire screen, selected area, or application window; color selector; screen magnifier; font preview; scheduler for system shutdown or launching a particular application; and an amazing application launcher and file system navigator.
http://users.adam.com.au/paulwh/_Pages/wintoolbox.html
UFCPP stands for “Unofficial Fullscreen Command Prompt Patcher” which is a good description of this single-function (follows the Unix philosophy of ) utility. It simply provides customizable hotkeys for making your Windows Command Prompt full screen (and switching back!) and for opening a new Command Prompt. Very handy if you spend any significant amount of time working at the command prompt.
http://www.autohotkey.com/board/topic/88510-ufcpp-the-unofficial-fullscreen-command-prompt-patcher/
HiddeX is a lightweight window hiding utility that allows you to use any of three methods to choose the windows to hide: by name of window, by name of process (application name), or even by window class. In addition, you can password protect your settings and even configure it to mute the sound when activated.
http://dejavu.narod.ru/hiddex.html
This simple tool allows you to create a temporary, free Amazon EC2 server (Ubuntu 13.04 64-bit, etc.) without all of the usual complexity. The key factor is that the instance will be destroyed after about a half-hour. You can pay a nominal fee to keep the instance around longer, if needed. Great option for running a quick test on something.
Maybe this really belongs above in the “Career Development/Miscellaneous” section, but its inspirational, yet humorous nature pushed me to put it here… Many of you are probably “Calvin and Hobbes” comic fans. This comic strip in the excellent style of Bill Watterson captures a speech that he gave over 20 years ago to some college graduates about following your dreams.
In the days before radar and reliable radio communications, the US air mail system used a series of large concrete arrows painted yellow to mark the transcontinental route. While sometimes we think innovation only happens in the technology domain, this shows us that simple solutions are often best.
In an effort to call attention to our unhealthy fascination with gadgets, an artist placed an empty plastic box on display at 5 Best Buy locations. The “device” was named "Useless Plasticbox 1.2” and it’s “warranty” terms included “no warranty with this piece of crap”. Funny and a sad cultural commentary at the same time.
http://news.cnet.com/8301-17938_105-57598563-1/artist-pranks-la-best-buy-stores-with-useless-gadget/
So, it looks like we’re on sort of a comics theme this month! It’s probably reasonable to say that many (if not most!) readers of this newsletter enjoy the eminently geeky humor of XKCD. If you think you can one-up Randall Munroe, check out this site, where you just input a little bit of HTML to create an XKCD-style comic strip.