January 2015 Newsletter
Constrain the user's expectations to match the abilities of the software. –Bruce Tognazzini
The cost of a thing is what I call life which has to be exchanged for it, immediately or in the long run. –F. H. Bradley, quoted in Geoffrey Madan’s Notebooks
As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications. –Dave Parnas
Scale back your long hopes to a short period. While we speak, envious time will have already fled: seize the day [carpe diem], trusting as little as possible in tomorrow. –Horace
Bet on companies with software engineering groups to always win over those with “IT departments.” Actually, that’s a startup ideation strategy. Find Fortune 1000 cos with compartmentalized IT departments. Build what they can’t build. –Balaji S. Srinivasan, on Twitter
We act as though comfort and luxury were the chief requirements of life, when all that we need to make us happy is something to be enthusiastic about. –Albert Einstein
The messiness cannot go into the program; it piles up around the programmer. –Ellen Ullman, Close to the Machine
Adversity is the trial of principle. Without it, a man hardly knows whether he is honest or not. –Henry Fielding
Most of us think of the computer era beginning with the creation of ENIAC
or, perhaps, development of compiled languages (or maybe it was Konrad Zuse’s Z1),
but this nice “infographic” shows that it goes back well before that time. Perhaps the most salient milestone to define
modern computing was the Church-Turing
thesis, at least 10 years before any modern hardware.
http://www.capterra.com/history-of-software
In my experience, most development teams struggle more with effort and schedule
estimation than budgeting, but this article makes some excellent suggestions
about techniques that can be used to build a good financial picture for a
project and help with effort/schedule at the same time.
https://hbr.org/2014/12/your-agile-project-needs-a-budget-not-an-estimate
I noticed the #NoEstimates meme in the
development community several months ago, but preferred to avoid the fray until
it ran its course a bit. In any case,
this is a great article the emphasizes that no estimates at all is unrealistic
and makes several good recommendations about appropriate places for estimation
in the development process and best practices for getting good estimates.
http://www.udidahan.com/2014/04/19/noestimates-really/
Development teams and other technical workers are often led by
non-technical people and this is fine.
However, those leaders need to pay attention to the different styles of
leadership and management that are effective for technical employees. With insights from project managers at top
companies like Facebook, Google, Microsoft and others, this article gives
simple, but valuable advice.
https://medium.com/@akarve/how-to-lead-engineers-9e5f993f6f43
In this interesting perspective, the author makes the observation that,
rather than the conventional wisdom of requiring workers to adopt a new culture
in order to embrace and succeed with agile, instead, the process of moving to
an agile process should itself drive the cultural change. His conclusion: Change
comes first, culture follows.
http://allankelly.blogspot.com/2014/11/does-agile-require-cultural-change.html
If you’ve worked in IT for any significant amount of time, these three
reasons for project problems will probably not be surprising. Nevertheless, this article goes into some
good detail about the contributing factors for each of the overarching causes.
http://clearcode.cc/2014/12/why-software-development-projects-fail/
We are all familiar with the psychological concept of flow and how this
state of concentration is often key to developer productivity. This author compares interruptions of
programmers to the relationship between Superman
and kryptonite, emphasizing that it’s the recovery period after the
interruption that is the killer. He goes
on to make several good suggestions for reducing disruption and how to recover
more quickly when they happen.
http://thetomorrowlab.com/2015/01/why-developers-hate-being-interrupted/
In the last several years, it has generally be acknowledged that software
development is as much an art (or perhaps craft in the sense of artisanal work
or “skilled
creators”) as it is a science. This
excellent article provides a great visualization about how technical knowledge,
experience, creativity and curiosity come together to give us great software.
https://medium.com/@erikaheidi/the-creative-programmer-2dde54f83e3a
This essay discusses eminent programmer Don Knuth’s claim
that much of what we consider the “history” of programming and computer science
is flawed due to a lack of emphasis on the technical challenges and technology
breakthroughs that they brought about. I
think it’s a delicate balance in all areas of history and historiography
to provide sufficient depth on the topic and the context surrounding it, while
maintaining the interest of the reader.
http://cacm.acm.org/magazines/2015/1/181633-the-tears-of-donald-knuth/fulltext
Much of the technological advancement of the 20th and 21st centuries comes from basic research in the sciences and engineering. As with everything else in the world, much of that research relies heavily on software, especially for statistical analysis. This article explores the potential crisis in research caused by defective software.
http://motherboard.vice.com/read/how-bad-software-leads-to-bad-science
Do you ever wonder if all of those long hours that you put in testing your applications really matter? If the results of NASA’s Orion test flight, after many recent spacecraft failures, is a good indicator, then the answer is a resounding, “Yes!”
It seems fair to say that the recent history of software security failures is a less than glowing commentary on the industry. This developer makes several great suggestions for both technical and methodological changes that would not only reduce the instances of security breaches but lessen their impact when they occur.
http://cafbit.com/entry/reinventing_software_for_security
Integration testing is one of the key elements of any test strategy/approach. Here are a collection of great tips to help you focus on the important aspects of integration testing and avoid getting off in the weeds.
http://blog.fogcreek.com/9-integration-testing-dos-and-donts/
This article explores how Netflix uses what it calls “failure injection testing” to understand how “small” problems can have pervasive and unexpected impacts. The overall goal of the process is to minimize the cascading impact of failures and keep them isolated (i.e., minimize the “blast radius”).
http://techblog.netflix.com/2014/10/fit-failure-injection-testing.html
Rob Pike may not have the name recognition of some of the world’s famous programmers, but undoubtedly he’s one of the most influential. Here are his five principles for writing good code.
http://users.ece.utexas.edu/~adnan/pike.html
By now, most of us understand that REST APIs are the “secret sauce” of
good application development. Since the
URL structure of your application is the “language” of your API, it’s important
to include it in your design. This
article gives some simple, practical tips to design a straightforward,
effective URL format.
http://apiux.com/2013/04/03/url-design-restful-web-services/
The Java reflection API is one of the most powerful, yet least understood
features of the language. It is one of
the tools that make Java so flexible.
This excellent, detailed tutorial will help you not only get started
using the functionality, but help you best choose when it’s appropriate to use.
http://rodrigosasaki.com/2013/07/12/javas-reflection-api/
I’m not sure if it’s coincidence that this article came out around the annual performance review cycle, but it provides some great tips about how to handle yourself in any sort of confrontational situation. The bottom line is that you should remain calm (not always easy!) and focus on asking questions instead of making statements.
http://www.bakadesuyo.com/2014/12/difficult-conversations/
With the long nights of winter, many folks tend to show their negative sides more and these ill feelings can rub off on others and almost certainly impact others in some way. In this interview, a researcher discusses how project managers and development team members can deal with their own and other team members’ negative feelings and emotions and how it impacts team dynamics and productivity.
http://www.infoq.com/news/2014/12/negative-emotions-teams
We frequently reference articles which confirm that multitasking is typically a bad idea. However, this researcher shows some specific scenarios where it’s beneficial, specifically in cases where association is important. The author notes that the problems in multitasking come in when we try to employ rapid context-switching between independent tasks or activities.
https://hbr.org/2015/01/the-curious-science-of-when-multitasking-works
Everyone wants to be more successful, whether it’s in your career or your relationships or some other aspect of your life. But the big question is how do you do it? According to this research, the answer is a bit counterintuitive, including insights such as happiness drives success rather than vice versa and how we need to consider difficulties as opportunities and not threats.
http://www.bakadesuyo.com/2014/09/be-more-successful/
Recently, I’ve decided that organizations need to emphasize culture over traditional mission statements. This essay from the leader of his company borrows from the incredible This I Believe radio series to simply define the culture that he wants his organization to engender.
http://stablekernel.com/blog/this-i-believe-culture-means-everything/
Similar to Wireframe.cc, which we've featured before, Mockup Designer is a minimalist online tool for building web site mockups, especially simple web forms. Each document gets a unique ID, so you can share with others. Likewise, the tool supports import/export of your design as JSON and a preview window. And you can export to PNG image, as well.
http://fatiherikli.github.com/mockup-designer/
Keeping CSS definitions clean and consistent can be a difficult task. CSScomb is an open-source Node.js tool that applies consistent structure and format to your CSS, such as ordering the attributes according to greatest impact. It has good configurability, including indentation, brace placement, quoting and much more. Likewise, it supports CSS pre-processors like SASS and LESS and even has integration with Sublime Text and Brackets. (For a great tutorial on CSScomb check here.)
The development tools built into the Google Chrome web browser are some of the most polished and well-conceived utilities for web developers of all stripes. But what if you could run them outside of Chrome with most any browser? Well, now you can thanks to this utility! It runs as a completely separate process via NodeJS and node-webkit. You can use it to test and debug web designs using any browser or even none at all!
https://github.com/auchenberg/chrome-devtools-app
This handy online tool allows you to convert small images to base 64 encoded data that you can then include as CSS objects on your pages. While your mileage may vary, in general, loading the images from CSS is faster than loading an image, because the browser doesn’t have to make another request to the server for the image, since the CSS is already loaded and cached.
Most of us have our favorite applications that make our system a comfortable place. When you build (or re-build) your system with a clean installation of Windows, it can be a daunting task to download and install all of your tools. Npackd is a free tool that catalogs almost 1400 freeware and open-source Windows applications and allows you to install them directly from its interface. The catalog has good categorization to make finding what you are looking for easy. And since the tool is community-built, you can even share your own tools.
Over the past several years, the NetBeans platform has really grown and matured and I find it superior to Eclipse now. If you prefer NetBeans and also want to do Android development, then check out the NBAndroid plug-in. It provides a fully native Android development environment, including remote debugging and support for real devices and emulators.
You may have heard recently about how at just 31-years-old, Margaret Hamilton was the lead developer of the software for the Apollo Guidance Computer that put people on the moon. If you want to get a feel for how primitive such a system was by today’s standards, check out this simulator written in JavaScript.
http://www.svtsim.com/moonjs/agc.html
Everyone has their favorite programming language. But did you ever wonder if your favorite is your favorite because of its simplicity? Here’s a humorous look at learning curves for some popular languages.
https://github.com/Dobiasd/articles/blob/master/programming_language_learning_curves.md
How far away is the future? Often it depends on the context of the question. Anyway, here’s the BBC’s attempt to consider what’s ahead for the Earth, humanity, and the universe.
http://www.bbc.com/future/story/20140105-timeline-of-the-far-future