February 2015 Newsletter
The creative adult is the child who has survived. –Ursula K. LeGuin
Smart data structures and dumb code works a lot better than the other way around. –Eric S. Raymond, The Cathedral and The Bazaar
If you can dream — and not make dreams your master; If you can think — and not make thoughts your aim… –Rudyard Kipling, If
It is a mistake to look too far ahead. Only one link in the chain of destiny can be handled at a time. –Winston Churchill
Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something. –Robert A. Heinlein
In an all too familiar trade-off, the result of striving for ultimate simplicity is intolerable complexity; to eliminate too-long proofs we find ourselves “hopelessly lost” among the too-long definitions. –Michael Harris, Mathematics without Apologies
This author explores the concept of “good enough” in the context of design and development. His key insight is that to succeed with your application or system you must have focus on intentional incremental improvement. And it is vitally important that all three of these elements work together.
While I grant that this essay is a bit condescending in tone, it’s still a very eloquent reminder that, as technical workers, our underlying responsibility is to please our customers and to deliver business value. The author makes several salient references to things that you might forget about in the “heat of battle”, but that you need to account for.
The year 2014 seemed like the nexus for bashing agile development techniques and methodologies, including several “counter-manifestos”. This pundit offers some perspective on the tide of frustration and emphasizes that agile is not (and never was!) about methodology, but about streamlining process and delivering business value.
Simon Sinek hit the nail on the head with the title of his book, Start With Why. The idea is that we always need to understand why we do the things that we do, because some (many?) times, we don’t have a good or valid reason to do so. This article approaches TDD in the same manner. The author’s conclusion that writing tests in about reducing cost, particularly the total cost of ownership (TCO) of your code over the long run.
Estimating effort and duration of development projects is probably the single most difficult aspect of software development. This author emphasizes that the key element of good estimation is to reduce the amount of uncertainty about what is required to achieve your objective. This led me to the insight that this means that just like development itself is iterative, we must make the estimation process iterative as well.
Undoubtedly, one of the touchiest topics in the development world is measuring developer productivity. We’ve all heard the horror stories about misuse of metrics like lines of code or number of commits to version control. This author offers some other advice on the topic with the key aspect that managers should be measuring outcomes, such as business value, improved quality, etc. and not output.
You are probably familiar with the phrase “Big upfront design is an anti-pattern”. Unfortunately, this claim often comes to mean that you shouldn’t do any upfront design and simply let the application evolve organically. This author makes a very good case for the importance of appropriate architectural design during the initial stages of a project.
Similar to the programming language popularity ranking above, here’s a report, based on 10000+ responses from users of Code Anywhere platform about their favorite IDEs and text editors. Which one do you think came out on top: Eclipse, Vim, IntelliJ IDEA? Well, surprisingly (at least to me!), the top editor was Notepad++, well ahead of runner up Sublime Text.
This article is oriented toward test-driven development (TDD) and unit testing, but the principles apply just as well to how to approach any software testing effort. The author emphasizes that you need to focus on the key areas of the application, such as core functionality and those areas that seem weakest and/or most prone to problems.
Many organizations have abandoned the notion of a separate/independent quality assurance (QA) organization. According to this article (from a programmer!), this often has disastrous results. He uses the example of the poor ratings of the Facebook IOS application.
Even though test automation is increasing in capability, this article shows that manual testing is still an important and valuable tool. The author explains that nothing can substitute for the skills of a creative and intuitive tester.
Don’t let the title of this article fool you; it’s a comprehensive, detailed look at both the approach and implementation of test automation for mobile platforms. Specifically, the author gives a step-by-step tutorial on using the Appnium open-source mobile testing toolkit with both IOS and Android.
While you may consider that is author is splitting hairs, he makes a good argument for a small philosophical shift in thinking about software quality and security to include testing to validate that not only does it work correctly (meets requirements), but also that it does not do something wrong. Certainly, the concept may not apply in all cases, but it’s something to consider when planning your tests.
This is a simple little game that you play in the terminal/shell to test your skills with Git version control tool. It’s very interactive and actually kind of fun. Each step gives you a task to complete using Git to reveal the next task. (And don’t cheat by looking at the branch names on GitHub! J)
Unless you are an expert in the field, you should use existing patterns and practices for security and authentication in your application, especially libraries and frameworks already provided for your platform. This excellent reference helps you understand the standard practices to use for permissions and security for most applications.
If you’ve made the switch to Java 8, this tutorial will help you adopt one of the fundamental functional programming practices in all of your new code: elimination of loops. The best part is that the new Java 8 functionality is fluent and understandable, so it makes the transition much easier.
This jewel is a collection of some well-known and some rather obscure tips to increase your productivity and efficiency when using Git, especially (but not only!) when you work with Github. Some of the best tips include switching the previous branch and nice styling of your Git log.
If you do almost any work in the Linux/Unix shell (console, command prompt, terminal, etc.!), inevitably, you will come across a situation where you need process some text files, such as log files. While most systems have high-level tools, such as Perl and Python, which are up to the task, in many cases, the Unix philosophy provides the best approach and often awk is that option. This brief, yet comprehensive, tutorial teaches the basics of awk and then provides several real-life examples. And there’s even a debugger for Awk, if you write some complex scripts.
Among all of the people in the world, Warren Buffett is one of the most respected for both common sense and shrewdness. In this article (from my favorite blog, Farnam Street!), Buffett and Berkshire Hathaway vice-chair Charlie Munger share their secret to success. The bottom line is that it comes down to reading—and reading a lot—and then thinking about what you read. Perhaps it’s my own bias toward Midwestern sensibilities, but I think that they are absolutely correct!
Newton famously said, “If I have seen a little further it is by standing on the shoulders of Giants." But even he borrowed this phrase! In the same vein, this author makes a great suggestion about sharing knowledge with others when you solve a problem or make a meaningful discovery. In some small way, I hope that this newsletter fulfills that, as well.
Writing code is now a standard practice for most technical job interviews. But if it’s been a while since you’ve interviewed, you probably aren’t familiar with how to prepare. Check out these dozen of excellent tips for preparing and succeeding when the heat is on.
Do you feel overwhelmed by the pace and trappings of our technology-saturated society? This neuroscientist says that you’re not alone in suffering the side-effects of so-called info-mania.
We often feature articles related to productivity improvement for technology workers. And those articles are valuable (or I hope that they are!). However, this article elegantly emphasizes that any tool or technique intended to help you improve are only as good as your ability to dedicate focus and effort. The article discusses how self-discipline is the linchpin of success in your work.
The Knight Foundation, the non-profit charitable foundation originating from the Knight-Ridder newspaper empire, looks at the public debate over net neutrality from the perspectives of media, public comment, and open-Internet advocacy groups. Their conclusion is that public sentiment is strongly in favor of net neutrality, but their voices are significantly drowned out by lobbying efforts by telecom providers.
With a showdown over net neutrality looming, President Obama goes on the offensive to promote legalization of municipal broadband systems.
Splat is an abbreviation for Simple Program Launching and Termination. It’s a simple application launcher that includes a few nice twists. Instead of just launching a single application, Splat allows you to create launch “profiles” which can launch applications, files, folders, etc., stop/start other applications, and/or stop/start system services. You can even include delays or CPU usage thresholds. And each launch “profile” can have its own hotkey.
Most developers are always on the lookout for a good monospaced font to use with their favorite text editor. I won’t claim monoOne is the best, but it’s certainly worth checking out. It’s an OpenType format font, so it works on almost all platforms and some of the nice features include great readability for symbols and a modern, but not strange styling.
There are plenty of GUI front-end tools for Git version control out there, but what makes GitForce different is that it’s small and the same binary runs on both Windows and Linux (via Mono). Likewise, GitForce doesn’t try to abstract away all of the Git command line features, but simply makes some of the more esoteric features easier and provides an “at-a-glance” view of your files with respect to their repository status.
Database testing is hard, because you need to get a consistent sub-set of the available data without copying the entire database. This tool is a simple, yet elegant SQLAlchemy script that will automatically pull out a consistent set of data from any database. You can even specify how many child records to pull.
Everyone knows about the Internet time-sink called BuzzFeed, but have you heard about FuzzBeed? It’s an algorithmically-generated parody (or is it satire?) of BuzzFeed. Very creative and many of “stories” are quite funny.
What if BWK and DMR had H.P. Lovecraft help them write their classic tome on the C language? Well, this site might give you a little taste.
We hear a lot about outsourcing these days, but this is an ingenious application of the concept. Need a list of numbers sorted? Why bother having the computer do it, when you can post the list to Twitter (140-character limit enforced, of course!) and ask one of your followers to help you out?
While this is certainly satire, it may not be too far from the truth is some cases.
Will the Vim versus Emacs debate ever end? Probably not… But that doesn’t mean that we can’t have a little fun along the way.