A modern paradox is that it’s simpler to create complex interfaces because it’s so complex to simplify them. –Pär Almqvist
In short, resisting a more powerful opponent will result in your defeat, whilst adjusting to and evading your opponent’s attack will cause him to lose his balance, his power will be reduced, and you will defeat him. This can apply whatever the relative values of power, thus making it possible for weaker opponents to beat significantly stronger ones. –Jigoro Kano, the founder of the martial arts discipline Judo
A great discovery solves a great problem but there is a grain of discovery in the solution of any problem. –George Pólya, How To Solve It
Courage is not simply one of the virtues, but the form of every virtue at the testing point. –C. S. Lewis
In the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox. There exists in such a case a certain institution or law; let us say, for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, “I don’t see the use of this; let us clear it away.” To which the more intelligent type of reformer will do well to answer: “If you don’t see the use of it, I certainly won’t let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it. –G. K. Chesterton, The Thing
Novice developers tend towards brittle designs, intermediate developers tend towards overly fancy and flexible, generalized ones (in ways that never get used). Expert designers choose with insight; perhaps a simple brittle design whose cost of change is balanced against its likelihood. –Craig Larman
I keep on making what I can’t do yet in order to learn to be able to do it. –Vincent Van Gogh
Of course, good application architecture and development practices are important. However, as this author notes, when it comes to building your application, best practices should not impede delivering value to the customer. He says that the key is to efficiently evaluate the costs and benefits and make an intelligent decision and move on.
http://www.infoworld.com/article/2917777/application-development/app-design-best-practices.html
Mary Meeker of venture capital firm KPBC just released her 20th annual report on Internet trends. This is one of the most watched and trusted (for good reason) reports of its kind. This article covers some of the highlights with analysis on those items and what they mean for your organization, work and career.
http://simplicity.laserfiche.com/what-meekers-2015-internet-trends-report-means-to-you/
Undoubtedly, managing programmers and other technical workers is quite unlike other supervisory responsibilities, because these workers tend to think in different ways. This programmer and development manager (who also happens to be a popular novelist!) discusses some of the key elements to success in managing developers.
http://techcrunch.com/2015/06/06/on-managing-developers/
Enterprise software tools are a huge business, with some estimates saying that companies spend $3.8 trillion annually. This article discusses how some of the big players in enterprise applications are making pitches to reduce cycle time for deploying new applications.
http://fortune.com/2015/06/24/good-software-is-hard/
This article provides an interesting insight into the fact that over time applications tend to degrade in quality (robustness, proper function, performance, etc.). The author says that this tendency is due to the fact that good components of the application, which are also easy to replace, will be replaced and this results in divergence from the (more) coherent original implementation. This fact is something well worth considering when you refactor code and/or address technical debt.
http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2015-06.html#e2015-06-14T09_17_33.htm
In this interview, software development leadership pundit Roy Osherove discusses leadership in the development organization and how problems, such as quality deficiencies, schedule slips, etc., all have a common root cause of poor communication. He emphasizes that each team member should demonstrate leadership, whether they have an official “management” role or not.
http://blog.fogcreek.com/all-software-problems-are-people-problems-interview-with-roy-osherove/
It’s happened to almost all of us at one time or another. You have too many options to solve a problem that you get stuck debating the relative merits. This developer suggests that you do some small (limited time/scale) tests of some of the options to see if any of them look better than others in practice. And he gives some good ideas about how to do such experiments.
http://sam-koblenski.blogspot.com/2015/06/avoid-analysis-paralysis-by.html
Many (most?) of the articles about agile development that have appeared recently emphasize the problems and shortfalls of the methodology. But perspective is always important and taking a step back usually helps. This author compares programming to a couple of other industries (film making, architecture, and auto production) to show how factors, such as design completeness, production completeness, and cost to change vary over time and, therefore, how agile techniques such as iterative development help in software development.
Have you ever struggled to explain to non-programmers what exactly it is that you do? New media pundit and erstwhile developer Paul Ford, in response a request from the editor of Bloomberg Businessweek, does a great job of explaining this esoteric topic. And for some more background on how the author created it, check out this article.
http://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/
Certainly, Java has gotten lots of press about the celebration of its 20th birthday, and deservedly so. So you’d be forgiven if you didn’t know that PHP, which powers a large portion of the web, is also commemorating 20 years, as well. Here’s a look back at how it’s evolved from simple tool to a sophisticated OOP language.
http://www.infoworld.com/article/2933858/php/php-at-20-from-pet-project-to-powerhouse.html
This article presents the business value of quality assurance activities, such as software testing. It emphasizes that the primary objective of QA is to reduce risk. Furthermore, the author provides recommendations for the types of testing recommended at various stages in an organizations lifecycle and whether the company is business-to-consumer or business-to-business.
https://blog.rainforestqa.com/2015-05-18-qa-is-a-hedge-against-risk/
Successful test automation is fundamentally about choosing wisely about what can and should be automated and what simply is not a candidate for automation. This article gives five succinct tips for helping you do that.
https://ghostinspector.com/blog/5-best-practices-automated-browser-testing/
Most readers of this newsletter know that I’m a firm believer that the purpose of testing is risk assessment which feeds into risk management. This article supports this concept by emphasizing the costs (financial and other) of good testing and the value that it provides.
http://testhuddle.com/the-economics-of-testing/
In this article, the author seeks to uncover the real meaning that organizations have when they decide to “focus on quality”. He concludes that too often it’s a euphemism for introducing test automation without a systems approach to quality improvement. In other words, it’s putting the tool before the process.
http://www.softwaretestinghelp.com/tools-over-skills-are-we-missing-the-point/
Who says that quality and security don’t pay? Following on the heels of their successful 2014 program to find and fix security problems in the Chrome browser, Google is now offering generous rewards for finding and fixing vulnerability in the Android OS.
http://blog.lifars.com/2015/06/17/google-will-pay-you-up-to-40000-to-find-bugs-in-android/
Most of us don’t work with safety-critical systems, but as software has become ubiquitous in almost every aspect of life, we need to be aware that we could be a link in the chain of such an important system. For example, we may not think of telecom services as particular safety-critical, but when it comes to E911 services they are vital. With the history of defective software, such as the recent A400M failure and the Toyota unintended acceleration problem, we all need to consider the lessons that high-reliability systems can offer, such as development of a quality-minded culture and using best practices from outside of technology.
http://motherboard.vice.com/en_uk/read/how-is-critical-life-or-death-software-tested
This developer suggests that the Wikipedia definition of “software bug” is insufficient, because it does not explicitly refer to erroneous “non-functional” aspects of the application, such performance and maintainability. This is a struggle that I’ve faced many times when trying to validate correct behavior. What do you think? How would update the definition? Do you think that the IEEE 610.12 standard (1990 version here) or other standards, which refer to it as “error” or “fault”, provides a better characterization?
http://www.yegor256.com/2015/06/11/wikipedia-bug-definition.html
If the extent of your knowledge of data science is map/reduce, you’ll find this tutorial very helpful. Unless you work frequently on these types of algorithms, understanding the basic concepts can be difficult. This author explains each in plain language, including examples, where you might use them, and whether it is supervised or unsupervised.
http://rayli.net/blog/data/top-10-data-mining-algorithms-in-plain-english/
This site contains several simple jQuery snippets that you can use to improve the consistency and interactivity of your site without much effort. All of them are simple and easy to understand, but powerful.
https://github.com/AllThingsSmitty/jquery-your-mom-should-know
If you’ve been looking into (functional) reactive programming (FRP) paradigm (see here, here, and here from so good overviews/explanations), you may be wondering how to actually use this pattern. This nice, objective review of some of the various frameworks provides some helpful guidance based on the particular use that you are considering.
http://rrees.me/2015/06/04/overview-of-javascript-reactive-frameworks/
Need a refresher on some of the basic algorithms? Or just looking for a clear explanation? Algosaurus is a new blog about algorithms that aims to provide clear explanations with an emphasis on visualization.
We’ve mentioned the Docker virtualization platform several times in this newsletter and it (or, at least, containers, generally) does seem to be the way of the future (even though I still prefer Vagrant for development work). The learning curve for Docker can be steep, but this open-source book gives you a gentle introduction to both the concepts and brass tacks of Docker with a focus on using boot2docker to get started quickly and getting, using, and creating images.
http://odewahn.github.io/docker-jumpstart/
QuickQWERTY is a free, online touch typing tutor that runs completely in a web browser (with JavaScript enabled). It takes the user through various units to help you build muscle memory for the location of keys on the keyboard. After learning the “grip” (as the tool calls it), you can then type words and sentences and then go on to a test. Very comprehensive and almost fun. If you aren’t a touch typist, it’s the single best skill you can learn to improve your productivity in programming.
Ever made a mistake when using Git? If you’ve used it for more than 5 minutes, undoubtedly you have. This excellent reference from the experts at Github provides simple “recipes” for how to recover from common errors. And the best part is that each one provides an explanation of what the “undo” is actually doing.
https://github.com/blog/2019-how-to-undo-almost-anything-with-git
Everyone knows that each of us is responsible for our own careers. This commentary on a recent article on the Harvard Business Review web site shows that workers of all types have experienced a widening deficit in real wages/salary compared to productivity increases. While the authors of the original article attribute this decoupling to emergence of new “digital technologies”, the author of this article thinks that globalization is as much of a factor as anything.
http://avc.com/2015/05/the-great-decoupling/
Most programmers after they get settled into their job aspire to advice to the position of “senior developer”. But have you ever stopped to think about what that role actually involves or how it’s different from other jobs, such as architect? This article from an experienced programmer gives a good explanation of what senior developers do (or should do!) and what skills are required.
http://mattbriggs.net/blog/2015/06/01/the-role-of-a-senior-developer/
I’m not sure if this is an example of the adaptability of people or the “law of unintended consequences”, but I have observed this same phenomenon in my office, although I haven’t been able to apply it myself (by choice). The bottom line is that wearing headphones to drown out background noise (or just to send a tacit “I’m busy right now” message!) is a backlash against the open-plan office.
http://www.zdnet.com/article/headphones-are-the-new-walls-for-people-in-open-plan-offices/
Recently, there is a lot of discussion by pundits and everyday folks alike about whether we do (or soon will) have shortage of workers with technology skills. No article can fully resolve the matter, but this review of a half-dozen books offers some good perspective on the topic.
http://www.nybooks.com/articles/archives/2015/jul/09/frenzy-about-high-tech-talent/
Looking for a new job? If so, you might want to check out this list based on Forbes’ top 500 software companies which shows rankings based on whether employees would recommend their company to others and how employees rate the performance of their CEOs. Some of the company names are familiar, but many you may not have heard of.
With the proliferation of programming languages, many very specific to particular applications, deciding which language to learn (or to shore up your skills on) can be overwhelming. This presentation offers some guidance about the languages showing both growth and staying power.
http://blog.pluralsight.com/pick-right-programming-languages
As technology workers, we tend to work on the “upstream” side of the technology disruption flow. But, as we’ve seen recently, particularly with all of the discussions about robots taking away jobs, disruptive innovation can be double-edged sword. This article gives you some advice about how to analyze these trends and factor them into your career planning.
https://medium.com/packt-publishing/disruption-738ea528887e
Researchers at UC San Diego have demonstrated the capability to use more powerful lasers for fiber optic systems without distortion, which allows the signal to be transmitted farther without regeneration. They were able to successfully interpret signals sent 12000 kilometers over regular fiber optic lines.
http://www.scientificcomputing.com/news/2015/06/key-fiber-optic-power-and-distance-barriers-broken
Several months ago, Microsoft released the .NET platform as open source. However, this doesn’t mean that it’s easy to do .NET development outside of Visual Studio (including VS Express) on Windows. OmniSharp is not a single tool, but rather a collection of various open-source applications that provide a comfortable .NET development environment using your existing text editor on most any platform.
This Java library allows you to apply most of the common Python coding idioms to writing Java code. Some of the features include support for dict, list, and tuple; sliceable and iterable strings; creating object instances via Python constructs; and much more.
https://github.com/WantedTechnologies/xpresso
This Google Chrome extension adds auto-complete/search suggestion functionality to the search box on the GitHub site. Powered by Algolia, it substantially enhances the functionality of GitHub search.
https://chrome.google.com/webstore/detail/github-awesome-autocomple/djkfdjpoelphhdclfjhnffmnlnoknfnd
This small Python utility provides syntax highlighting for Git diffs of Python code. This makes understanding the displayed differences much simpler.
https://github.com/ngzhian/colordiffs
If you have a JavaScript snippet that you’d like to turn into a bookmarklet in your browser, just head over to Bookmarkify. You can even quickly add includes for CDN-based JavaScript libraries, like jQuery.
Tagging itself as “Buzzwords-as-a-Service (BaaS)”, this site replaces the standard lorem ipsum placeholder text with industry buzzwords and phrases. Just to prove how well it does its job, the first sentence that I got from it was: Going forward, our customer-focused team player will deliver value to capabilities. Perfect!
Are you a polyglot programmer? Then take this challenge and prove it. Instead of trying to identify the programming language by its syntax, you must decide by looking at the “shape” of the code, such as the indentation and other whitespace. It’s not as easy as you might think!
Remember as a kid those newspaper or magazine picture drawing games where the original picture was overlaid with a grid to help accurately re-draw the image? Well, this technique meets modern technology with Golden Draw, for iOS and Android. Just take a picture on your device and it will apply boxes to help you draw it. You can adjust the box sizes and aspect ratio and zoom in or out of the boxes. Cool and fun!
http://www.goldenspeak.com/goldendraw.php
According to computer science researchers at MIT, the most memorable character on Game of Thrones is… Yep, you guessed it: Daenerys Targaryen (a.k.a. Emilia Clarke). You can even upload your own picture to get your “memorability score”.
https://www.csail.mit.edu/most_memorable_game_of_thrones_characters
Ornithology (bird watching for the uninitiated) is one of my favorite pastimes. But if you go to an unfamiliar area, identifying bird species there can be difficult. With this cool application for iOS and Android, you answer a few questions about the bird you saw to narrow down the choices and get a short list from the ~300 most common North American bird species. Fun and educational!
http://www.openculture.com/2015/06/free-bird-app-from-cornell.html