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