Up to Newsletter Index

February 2016 Newsletter

Quotable Quotes

The hardest thing about choosing good names [in programming] is that it requires good descriptive skills and a shared cultural background. This is a teaching issue rather than a technical, business, or management issue. As a result, many people in this field do not do it very well. –Kamil Lelonek, Why is it hard to name a class, a method or a variable?

Debugging is actually all about finding the bug. About understanding why the bug was there to begin with. About knowing that its existence was no accident. –Elliot Alderson, Mr. Robot, eps1.2_d3bug.mkv

My great concern is not whether you have failed but whether you are content with your failure. –Abraham Lincoln

Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious. –Fred Brooks, The Mythical Man-Month

Is it so bad, then, to be misunderstood? Pythagoras was misunderstood, and Socrates, and Jesus, and Luther, and Copernicus, and Galileo, and Newton, and every pure and wise spirit that ever took flesh. To be great is to be misunderstood. –Ralph Waldo Emerson

Return to top

Software Development Process and Methodology

Article: Choose design over architecture

As developers, pundits frequently remind us that architecture must be defined early and then it is sacrosanct to change it. This article turns that idea upside down and promotes the philosophy that design should drive architecture and that the design should be “test-driven” by users before you commit to any architecture.


Article: The Cost of Frameworks

Frameworks are ubiquitous in almost all corners of contemporary programming and development. And they provide value, otherwise no one would use (or build!) them. And even if you don’t use a “public” framework, chances are that you’ll end up building some sort of framework in the course of your project, even if it’s not intentional. This article looks at the performance “penalty” of JavaScript frameworks, but the author also touches on other costs, such as time to learn, maintainability, and others. The key point is to be intentional about all of the tools that you use.


Article: Evolution of Software Applications

This article thoroughly explores an oft-forgotten aspect of software development and architecture: how the application evolves and changes over time. The author suggests 7 stages in the life of an application from a completely manual (pencil and paper) system to a highly-architected network-enabled application. In each step, he emphasizes the key elements to ensure the ability to grow to the next level.


Article: Object-Oriented Programming: A Disaster Story

While it seems unlikely that the object-oriented paradigm in programming will go away anytime soon (and certainly not as the result of one person’s passionate teardown!), but this article (with an accompanying video) provides some good points about some of the pitfalls that we need to consider. In particular, the author says that encapsulation has the problems of strong coupling between behavior and data, as well as, managing state.


Articles: The seven deadly sins of microservices (redux)

Certainly, microservices are part of the future landscape of most application development projects, especially with the growth of container-based development. But, microservices are definitely still immature, so you’ll want to check out these 7 “anti-patterns” for them to avoid in your work.


Article: The Single Biggest Mistake Programmers Make Every Day

You’re a good coder, right? You don’t make mistakes, because you practice TDD and following other best practices, right? Well, this developer says that the most common mistake that we make is making our applications too complex. He suggests emphasizing simplicity in a variety of areas, including focusing on doing the simplest thing that will work and then iterating to improve.


Article: Towards an understanding of technical debt

Technical debt seems to be a hot topic in development and architecture circles lately. (To wit, we’ve featured several articles on it in recent issues, including another above.) This article provides a relevant discussion about just what we are referring to when we talk about it and the importance of ensuring that our business customers have a common understanding, as well, and, more importantly, that they understand the implications.


Article: Mobility to Take a Big Share of IT Budgets in 2016

Wondering if mobility is still an important part of your IT strategy? A survey of more than 100 CIOs and senior IT managers shows that more than 2/3 of them will spend at least 20% of their budgets on mobile technologies in 2016. Furthermore, most of the remaining organizations will spend between 20% and 50% of budgets in this area.


Article: Out of the Tar Pit

In searching through the 15+ years of archives of this newsletter, I discovered that this article has never been included. In my view, it is one of the essays that should be read (at least) annually (or as some refer to them “desert island papers”) to help remind you that much of your job is to reduce (or perhaps even remove) complexity in your applications and architecture.


Return to top

Software Testing & Quality

Article: NYSE shutdown caused by engineers loading wrong software to system

On the same day that United Airlines suffered an extended failure of its scheduling system, NYSE was down (for only the seventh time in history!) for several hours, as well. This caused all manner of conspiracy theories. However, for the NYSE, the cause was much more mundane. The root-cause analysis for the NYSE problem found that the wrong version of software had been applied as part of an upgrade procedure.


Article: The F-35’s Terrifying Bug List

I can’t think of a situation where software quality is more critical than when people’s lives are at stake, such as with military aircraft. A new report from the Pentagon’s top testing official says that the F-35’s hardware and software problems result in “ambiguous threat displays, limited ability to respond to threats, and a requirement for off-board sources to provide accurate coordinates for precision attack”.


Article: Apple’s declining software quality

Previously, we referenced the observation by former Apple executive Jean-Louis Gassee about the decline in quality of Apple products, particularly since the death of Steve Jobs. This article points to several high-profile indictments about Apple quality and suggests that the underlying cause is lack of focus on core products.


Article: Testing Trends on the Horizon for 2016

The head of a software development lifecycle consultancy says that some of the trends that specifically impact testers this year will be more connectivity and the blurring of the definition of “mobile”, increased speed of development, and more.


Article: What does it mean to be an Agile tester?

Like it or not, the development world has adopted agile methodologies as the standard practice. And even if your organization isn’t using agile yet, it’s important for you to develop an agile mindset about your own work. This article gives some practical advice about what “agile” means for software testers, as well as some best practices.


Article: United Airlines Pays Man a Million Miles for Reporting Bug

Last year, we reported on Google’s new bug bounty program. And this month, we learn that United Airlines’ program isn’t small potatoes either. They have award one million miles, equal to ~$25000, to security researcher Jordan Wiens who found a remote code execution flaw on the United web site.


Return to top


Tutorial: Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5

Did you know that you can write web applications in pure C or C++? With the amazing Emscripten transpiler, your C/C++ code gets converted into native JavaScript that will run in the browser or NodeJS. This tutorial gives you a step-by-step introduction to how all of the pieces fit together.


Reference: The HTML & CSS Workmanship Manual

Many web design/development guides are so long and intricate that it’s difficult to find or apply the appropriate concepts. This excellent guide takes a very different approach to focus on a few basic principles with examples and reasoning. Likewise, it includes some references in case you want to learn more.


Reference: Exceptions in Java: You're (Probably) Doing It Wrong

If you’ve programmed in Java for any length of time, doubtless that you’ve used (or, at least, encountered) exceptions. This article recommends the sparing use of exceptions for “exceptional” circumstances, where recovery is likely impossible (or very difficult). Moreover, the author looks at criteria for using checked exceptions.


Reference: 19 Tips For Everyday Git Use

Sometimes you run across a set of tips that turns out to be too esoteric to be of much use. That is definitely not the case with these. You are certain to find at least a half-dozen tips for Git to use immediately.


Tutorial: OO Design is more about ‘Doing’ than ‘Being’

Don’t worry; this article is not about phenomenology (although that is a fascinating subject in its own right!). I had never really thought about this idea before, but it makes very good sense. This article explains that one of the difficulties many people face when starting with OOP/OOD is that they focus more on behavior (“doing”) rather than state (“being”). The author gives some good analogies to make the point clear.


Return to top

Career Development/Miscellaneous

Article: The Akrasia Effect: Why We Don’t Follow Through on What We Set Out to Do (And What to Do About It)

All of us make plans and set goals, either formally or informally, but they often fall by the wayside. This excellent article looks at the psychology behind procrastination and avoiding things. Likewise, it provides some great ideas for how to fix those problems.


Return to top

Useful Utilities

yank (Free – Linux/Mac OS X/Cygwin/MSYS – 7kB)

This tiny command-line utility allows you to copy output from command-line (shell) programs to the clipboard using xsel. It’s fully interactive so that you can select exactly the output that you want to copy. And it uses Emacs key bindings for even more fluent usage.


QuickMockup (Free – Cross-platform/HTML/JavaScript – 234kB)

QuickMockup is a simple, self-contained web GUI prototyping tool, built with HTML and jQuery/JavaScript. Just drag and drop common HTML elements from a tool palette and edit the labels in place. It even has support for callouts and notes to annotate the details. Then just save the page as a regular HTML file to share with others.


Jotted (Free – Cross-platform/JavaScript – 11.2MB)

Tools like JSFiddle and JSBin are very useful when prototyping designs or demonstrating a web design concept to others. But sometimes you might want to share an example on your own site. While JSBin is available for self-hosting, it’s not always easy to set up. Jotted as a minimalist alternative that you can install and configure with just one npm command and one grunt command. And it supports other editors like Ace and Codemirror, as well as most any pre-processor plugin.


Turtl (Free – Linux/Mac OS X/Windows/Android – 34.5MB)

Turtl is a new, secure alternative to Evernote, supported on most of the popular platforms. It allows you to store notes, bookmarks, passwords, photos, documents, or most any other digital content online with tagging and filtering. And you can easily share your content with others. And the client is open-source, so you can ensure that it meets your security criteria. (The application is free up to 100MB of storage, which should be plenty for bookmarks, notes, and the like.)


Atomic Chrome (Free – Cross-platform Google Chrome extension – 164kB)

With all of the advancements in web technology, you would think that by now we’d have a better way to edit text in HTML textarea elements. Atomic Chrome is a free/open-source extension for Google Chrome browser that allows you to use the familiar surroundings of the Atom text editor when filling in textareas. When activated, via a customizable keyboard shortcut, it opens a new tab in Atom (Atom must already be running) and synchronizing the content between Atom and the textarea. (If vi is more your speed, check out the Wasavi extension for all of the major browsers, which we’ve featured before.)


Return to top