March 2015 Newsletter
Simplicity is prerequisite for reliability. –Edsger W. Dijkstra
Pick battles big enough to matter, small enough to win. –Jonathan Kozol
The view that machines cannot give rise to surprises is due, I believe, to a fallacy to which philosophers and mathematicians are particularly subject. This is the assumption that as soon as a fact is presented to a mind all consequences of that fact spring into the mind simultaneously with it. It is a very useful assumption under many circumstances, but one too easily forgets that it is false. –Alan M. Turing, “Computing Machinery and Intelligence”
People don’t mind being challenged to do better if they know the request is coming from a caring heart. –Ken Blanchard
The acts of the mind, wherein it exerts its power over its simple ideas, are chiefly these three: Combining several simple ideas into one compound one; and thus all complex ideas are made. The second is bringing two ideas, whether simple or complex, together, so as to take a view of them at once, without uniting them into one; by which way it gets all its ideas of relations. The third is separating them from all other ideas that accompany them in their real existence: this is called abstraction: and thus all its general ideas are made. –John Locke
The higher we are placed, the more humbly we should walk. –Marcus Tullius Cicero
I will always seek God. Some people find God in church. Some people find God in nature. Some people find God in love; I find God in suffering. I've known for some time what my life's work is, using my hands as tools to relieve suffering. –Kayla Jean Mueller
I’m not sure what your experience with retrospectives on agile projects
has been, but I have found them to be rather useless, mostly because the teams
that I’ve been on fail to follow up on the actions and/or to measure to
determine if the recommended changes make any difference. This article gives a comprehensive guide to
carrying out the retrospective and then following through on the results.
One of the popular version control workflows is branch per feature. The main benefit touted is simplifying
implementation of new functionality and then a single integration step among
multiple features. So how well does it
hold up in the real world? This article
gives some assessment and advice.
http://bitbashing.io/2015/02/10/bpf-in-practice.html
This article points out one of the factors that gets lost on teams
implementing agile development processes:
It’s hard work! Many teams begin to lose steam after the
initial excitement wears off, when they realize that, just like any methodology or process, agile
requires appropriate “care and feeding” to succeed.
http://www.dotnetcurry.com/showarticle.aspx?ID=1087
How do you know if you are headed in the right direction on your project
or product? Perhaps this concept
developed by Google Ventures, the venture capital arm of Google, would appeal
to you. The design sprint is 5-day
process broken up into five distinct one-day stages for laying out the problem
to be solved through building and testing a real prototype.
As much as we like the image of the hero programmer who swoops in and
snatches project victory from the jaws of defeat, it’s certainly not a
sustainable operating paradigm. This
author provides some good suggestions about how to maintain sanity, longevity,
and continuity on your project. He says
that it comes down to a few simple things:
process, safeguards (think version control, etc.), documentation,
testing (TDD and independent testing), and deployment (continuous integration).
http://www.benhowell.net/business/2015/01/31/the-hero-programmer-and-the-truth/
As we note frequently, effort and duration estimation is one of the most
difficult (and fraught with error!) aspects of the software development
process. This author says that teams
spend too much time on estimation in an effort to gain certainty and he points
out that estimation is completely “wasteful” in the lean mindset. Instead, he suggests that more effort go into
understanding the business value of a particular user story and ensuring that
post-estimation communication between developer and stakeholder avoids situations
where the story is stuck/blocked until a response is received.
http://agileupgrade.com/stop-wasting-time-trying-to-get-estimates-right-and-what-to-do-instead/
As organizations expand in size, the complexity of getting and managing
business requirements increases, as well.
In this article, the author uses some nice analogies to explain a couple
of strategies. However, he emphasizes
that the key element of the process is in whether or not the developers can
implement and test the defined requirements.
http://agileartisans.com/main/blog/215
Metaphors are important tools in communication, especially when we, as
technical professionals, interact with our business customer counterparts. However, since technical debt is such an
important aspect of good application stewardship, we must be very precise when
explaining the cost-benefit proposition of platform enhancements.
http://www.robg3d.com/2015/01/technical-debt-metaphors-get-it-so-wrong/
As this author points out, except for rare cases, such as safety-critical systems, “complete” testing is not a feasible approach. You must plan your testing to provide the best value for the available time and resources.
http://journal.dedasys.com/2015/01/18/testing-is-a-pareto-thing/
Long known for high-quality applications, former Apple CEO Jean-Louis Gassee raises questions about recent missteps by the company, such as the iCloud breach and problems with their desktop applications. Is the sun going down on Apple?
http://www.mondaynote.com/2015/01/18/apple-software-quality-questions/
Most people know about the conventional wisdom of how Grace Hopper coined the term “bug”. This article gives you some nice background on the story and the etymology. (And I found this personally interesting since I spent part of my youth at NSWC in Dahlgren when my dad was stationed there.)
http://www.jamesshuggins.com/h/tek1/first_computer_bug.htm
As part of a development, one of your responsibilities as a tester is to help the rest of the team navigate the bug tracking and resolution process. This article has some great tips to smooth the path for developers and to keep the channels of communication between testers and developers working well.
http://usersnap.com/blog/easy-bug-tracking-hacks-developers/
Technology is ubiquitous and there are very few areas of our lives that aren’t directly affected by technology. Automation is advancing in the transport world, as well. As this article discusses, the importance of software quality for self-driving cars is of paramount importance due to the potential liability due to software problems.
http://www.insidescience.org/content/when-driver-error-becomes-programming-error/2591
Even though Java 8 has been out for nearly a year, many developers are still transitioning to the new version. This article provides a thorough presentation of the new default method functionality, especially emphasizing some of the potential pitfalls.
http://blog.codefx.org/jdk/everything-about-default-methods/
While I’ve been extremely happy using Vagrant for virtualized development environments (check out my Laravel PHP 5.4 Vagrant configuration here, if you are interested), this article inspired me to look into Docker further. This tutorial will help you get Docker running by using the Docker Machine tool for simplifying the process of configuring a new container quickly.
https://vexxhost.com/blog/getting-started-with-docker-in-minutes-using-docker-machine/
When you switch web browsers to test your code on different platforms, it can get confusing about which incantation keyboard shortcut to use to open the developer tools on that browser. This simple site provides step-by-step instructions for all of the popular browsers and includes links to official documentation.
I don’t expect this tutorial to be immediately useable by most of our readers, but it’s always good to have some familiarity with various algorithms, so that when we run across a particular type of problem, you’ll recall that there’s something out there that might work. This tutorial is excellent in that explains not only the algorithm, including a simple example in Python, but situations where it is useful.
http://katrinaeg.com/simulated-annealing.html
Markdown has become the de facto lingua franca (Wow! Two Latin phrases back-to-back! J) for online writing. For example, for GitHub ReadMe files, wikis, and elsewhere, the standard format is now Markdown. Markdown is a simple, yet rich language, but it takes a bit of practice to get the hang of it. This brief tutorial will get you going quickly.
http://www.remarq.io/articles/five-minutes-to-markdown-mastery/
Almost all of us can fall into the trap of self-destructive behaviors at various times. And, sometimes, these patterns can hurt our careers. These behavior patterns drawn from a new book on the topic can give a guide to identifying and correcting these problems when they come up.
http://www.baselinemag.com/careers/slideshows/are-you-unintentionally-sabotaging-your-career.html
Everyone wants to improve their technical and personal skills and for developers there are some specific things that are important. While there is no one-size-fits-all list, this one is an excellent cross-section of key practices that are applicable regardless of the technology or platform that you use.
http://itshardtofondlepenguins.com/blog/2015/01/25/seven-habits-highly-effective-programmers/
Software architect is one of those things that is hard to put your finger on what exactly it means. This article does a good job (pun intended! J) of characterizing what it’s about and how it’s more of a role than an actual position.
http://spin.atomicobject.com/2015/02/19/software-architect-role/
One of the frustrations that many people have about development work is that the pace of change is so rapid and it’s almost impossible to keep up with the latest tools and technologies. This author shares his experiences with all of the “best practices” and new “gee whiz” frameworks that distract from actually getting the job at hand done.
To the casual observer, the Google Fiber product may look like a retail effort, but the reality is that it’s a key part of Google’s cloud strategy, which focuses on becoming a tier 1 facilities-based provider.
This handy little tool calls itself “a .gitignore magician in your command line” and that’s an apt description. Essentially, it’s a simple Python script that generates .gitignore files with appropriate defaults for a variety of programming languages and frameworks. It might be just the insurance policy you need to prevent uploading private information to Github!
Last month we featured a monospaced font for programming and this month were back with another good alternative. Code New Roman takes a variety of the patterns from other popular monospaced typefaces like Consolas and Vera Sans Mono and combines them into a font that has spacing similar to the traditional Courier type, which makes it very readable.
http://sourceforge.net/projects/codenewroman/
Bug Magnet is a helpful tool for manual web application testing that speeds up data entry, especially when testing boundary conditions. It installs a menu in Chrome with options for generating various text values, based on length; names, including those with special characters that are often problematic; e-mail addresses; numeric values; whitespace characters; and even format exploits like SQL injection.
http://gojko.github.io/bugmagnet/
While CodeLab certainly isn’t the only game in town in this category, it’s got a nice, balanced set of features. Basically, CodeLab is a web design “mini-IDE” best suited for experimenting with HTML, CSS, and JavaScript ideas that you have. In some ways, it’s like an off-line version of CodePen.io (or its many clones). Some of the handy features are seamless integration between HTML, CSS, and JavaScript; project-based organization; dynamic preview switchable between Chromium and Trident (IE) engines (or external browser); auto-save; and built-in FTP upload. It’s not going to replace your typical web development tools, but it’s handy to quickly test out an idea.
http://airbrowse.x10host.com/projects.html
Wow! Read about this passionate guy who is on a mission to remove every case of the grammatical error (or not!) ‘consists of’ from Wikipedia and the software tools that he built to do it. Certainly a bit offbeat, but still interesting. And, hopefully, it inspires you to practice good grammar in your code.
https://medium.com/backchannel/meet-the-ultimate-wikignome-10508842caad
If you remember the space program from the 1950s and 1960s (or probably more if you don’t!), then you’ll love this brilliant ode to that era. Using audio clips from that time mixed with, what the aptly site calls, “futuristic Kraftwerk-meets-Aphex Twin-meets-Daft Punk sounds”, this album tells the story of the dawn of spaceflight, including JFK’s most inspiring speech, culminating with Apollo 11’s moon landing. Think of it as a retro-pop “Dark Side of the Moon” mashup with Sesame Street.
http://www.npr.org/2015/02/15/385549238/first-listen-public-service-broadcasting-the-race-for-space
Hey, bro! How can you call yourself a designer when you don’t have a logo? Well, let the Hipster Logo Generator help you out. It includes plenty of cool schwag for customization. Feel better now? Keep calm and carry on!
http://www.hipsterlogogenerator.com/
One of the more prescient aspects of Orwell’s 1984 was the Newspeak language. The modern (post-modern?) business world has its own language too. If you are tired of reading these buzzwords online, then give Fluffify a try. It replaces these annoying words with an equivalent “normal” word. And since it’s open source, you can even contribute to the cross-reference dictionary. My favorite from the dictionary: "Richard Branson" = "Saruman the White".
https://github.com/serverdensity/Fluffify
Need to get your daily fix of “news” from Reddit, but afraid that the boss might be peering over your shoulder? CodeReddit disguises the Reddit front page as a PHP code listing. It’s a pretty cool implementation and even includes dynamic loading of comments.
Here’s the answer to a question that you probably never even thought of (I never had!): Why is the dollar sign ($) for US currency fashioned in the form of S? I don’t want to spoil the secret, but it’s actually a symbol borrowed from another currency!
http://observationdeck.io9.com/why-is-the-dollar-sign-a-letter-s-1683940575