October 2014 Newsletter
I do not here speak of that perfection only which consists in power, but of that also which is founded in the conception of what is fit and beautiful. It is probable that a careful analysis of this question would conduct us to some such conclusion as the following, viz., that a perfect method should not only be an efficient one, as respects the accomplishment of the objects for which it is designed, but should in all its parts and processes manifest a certain unity and harmony. –George Boole, An Investigation of the Laws of Thought
Sometimes you can move a project along just by providing a name for a concept. A meandering discussion can snap into focus because someone has a name for an idea everyone vaguely understands. –John D. Cook
Right-engineering is difficult. "Make it work first" is indeed one of the most important ingredients to reach success. Right-engineering is more the application of good development strategies than it is pure coding skill. –Martijn Faassen
Far better an approximate answer to the right question, which is often vague, than the exact answer to the wrong question, which can always be made precise. –John Tukey
No one has a greater asset for his business than a man’s pride in his work. –Hosea Ballou
How we spend our days is, of course, how we spend our lives. –Annie Dillard
Don’t mistake speed for precocity: the world doesn’t need wrong answers in record time. –Cennydd Bowles, A Letter to a Junior Designer
There is nothing noble in being superior to your fellow man; true nobility is being superior to your former self. –Ernest Hemingway
Good engineering is characterized by a gradual, stepwise refinement of products. –Niklaus Wirth, “A Plea for Lean Software”
One of the dangers that can befall developers is focusing too much on
technology and what can be done with it.
We must always remind ourselves that the technology is a means to an
end. And, accordingly, we must emphasize
the human aspect of the process, both in IT and with our business customers,
and write
code that is meaningful to people.
http://pressupinc.com/blog/2014/09/programming-people/
This article gives an insightful (and brutally honest) explanation for
why we still rely on estimation in software projects, even though nearly
everyone involved knows that it is very inaccurate. The author says that estimates tend to act like
a “security blanket”, because we have a “number” that can be grasped.
http://www.gilzilberfeld.com/2014/09/the-hidden-cost-of-estimation.html
One of the hold-overs from our manufacturing-based management practices
is the concept of time-tracking in development.
This developer provides a great analysis about why it is simply the
wrong tool to use to measure productivity for development.
http://bocoup.com/weblog/developer-weeks/
From Gartner’s annual conference comes this list of their predictions for
2015. None of them seem shocking or
revolutionary and most follow directly from predictions for the last few years,
with security, cloud-based infrastructure, and ubiquitous computing topping the
list.
http://www.forbes.com/sites/peterhigh/2014/10/07/gartner-top-10-strategic-it-trends-for-2015/
This experienced programmer says that one of the most critical mistakes
that you can make in development is re-writing an existing application from
scratch. He says that instead you should
embrace progressive enhancement focusing on the parts of the application with
the most problems or that are most difficult to maintain.
http://www.theeffectiveengineer.com/blog/cardinal-sin-of-software-engineering
One of Stephen Covey’s “7
Habits” (and personally my favorite!) is “Begin with the end in mind.” With much of application development today
focused on API development, this is good advice for that effort, as well. This article explores how to effectively
architect your REST API to avoid having to change it frequently.
http://blogs.mulesoft.org/designing-restful-api-longevity/
According to a new report, the speed with which organizations are able to
exploit IT operations and take advantage of new technologies is a good measure
of the overall success of the company.
Nearly half of respondents in a survey for the report said that slow IT
response caused missed business opportunities and that lack of IT capacity was
a problem for their organization.
http://devops.com/features/harvard-business-review-survey-responsiveness-predicts-business-success/
Mention the word ‘metrics’ to most testers’ (or technical workers of all stripes!) eyes will glaze over. But, objective information is what testers are after, so that management can make informed decisions. This comprehensive article explores some testing metrics and the pros and cons of each.
http://www.softwaretestinghelp.com/software-test-metrics-and-measurements/
One of the ironies of programming is that as much as our society relies on software, the development process still has many of the same problems that it did from 50 years ago. In this book excerpt, the author looks at where we’ve come from and why this is such an intractable problem.
http://www.informit.com/articles/article.aspx?p=2246403
In this interview, the curator of the State of Testing Report, which is based on surveys of over 600 testers, talks about some of his findings, as well as some of the surprises. The most interesting result (to me) is that testers frequently have roles/responsibilities beyond just testing, which indicates that they are viewed as more integral to the development process.
http://www.infoq.com/news/2014/09/state-of-testing-report-2013
This infographic summary of a recent IBM survey (free with registration) reveals some interesting tidbits about software testing, including that only 30% of testers spend time working on automation and 35% spend more than half of their time on non-testing work.
This article emphasizes that the value of testing is not only realized in the process of execution of tests, but that simply designing tests helps prevent problems in the first place.
Automatic garbage collection (GC) is one of the features that appealed to programmers when Java first arrived on the scene. But have you ever wondered about what the various schemes for freeing memory that’s no longer used worked? This article, including source code, shows how various GC algorithms approach the task.
http://spin.atomicobject.com/2014/09/03/visualizing-garbage-collection-algorithms/
Last month, we included an article about developing debugging skills. And here’s another excellent discussion about how to effectively learn how to debug. The author emphasizes that debugging is as much art as science and that it must be taught, rather than assuming that it can just be picked up on the job. And it’s important to remember that debugging involves a variety of techniques.
http://blog.codeunion.io/2014/09/03/teaching-novices-how-to-debug-code/
This site bills itself as a set of tutorials about design for programmers and it really lives up to its name. It provides some fun games to help you learn some of the more esoteric design concepts and how they are applied. And it covers a variety of items including color theory and typography. Like the site says, “You're already a pretty good designer”.
JUnit is the de facto standard for unit test frameworks in Java. This is an excellent 6-part tutorial series which starts with the very basics and takes you through the process of creating a well-designed and structured set of unit tests It includes a plethora of code examples.
http://www.codeaffine.com/2014/09/24/junit-nutshell-junit-tutorial/
Getting started with Git for version control can be a daunting undertaking, especially when you are working in a team environment. This comprehensive, but very understandable 4-part tutorial series takes through all of the details, from getting started to integrating Subversion to the most important aspect of an appropriate team workflow and branching strategy.
In its heyday, Bell Labs was the epicenter of technology innovation in many fronts, including telecom, electronics, and programmer. Interestingly, precisely the innovations that they developed spelled the demise of the organization. This book excerpt offers some remarkable history of its culture and achievements.
http://www.wired.com/2014/09/coupland-bell-labs/
One of my favorite sayings is how Garrison Keillor characterizes the children in Lake Wobegon: “…and all of the children are above average.” Of course, not everyone can be above (or below) average, by definition. But most of us are average, in the normal sense of being within three standard deviations of the mean, with respect to our work and skills. This article is a nice manifesto about those who actually get the work done and their value.
http://qz.com/271084/the-case-for-being-average/
Whether you are a manager or you are an individual contributor, this simple, straightforward list contains several jewels of wisdom for your career. And, if you are considering making the move to management, this list will give you a pretty good idea of the fundamental change in the focus of the your responsibilities in moving out of a technical role.
http://www.defmacro.org/2014/10/03/engman.html
In the past, we’ve noted that some business skills, such as understanding account principles, are valuable to technology workers, even if they aren’t used on a frequent basis. The same is true for sales and this article helps you understand the mindset and psychology behind the sales process.
https://stormpath.com/blog/sales-for-hackers
What’s your favorite core Java class? I’ll bet that you’ll find it in this list of the most frequently used classes from analysis of over 10000 open-source Java projects. And the entire list is also available, if you want to go beyond the top 100.
http://www.programcreek.com/2014/09/top-100-classes-used-in-java-projects/
Often, we look at productivity improvements as something to be accomplished at the macro level, such as the whole organization. This article offers an interesting paradigm shift by considering it from the personal perspective, with a focus on maintaining the knowledge worker’s attention and reducing distraction.
Most developers know that code reviews are effective at finding and fixing problems. But they very rarely happen (at least in my own experience). One of the problems is that few of us know how to do them. This excellent article provides great suggestions for how to go about setting up and carrying out a code review without some of the overhead that often bogs down the process.
http://blog.originate.com/blog/2014/09/29/effective-code-reviews/
In a radical move, Cisco and some education heavyweights aim to replace venerable TCP/IP as the core protocol for networking with a technology called Named Data Networking. The emphasis of the effort is to improve efficiency in networks for mobile devices.
Software-defined networking (SDN) appears to be the wave of the future for both LAN and WAN. This is an excellent article that reviews the technology and paradigms that are most prevalent at this point.
https://docs.google.com/viewer?url=http%3A%2F%2Farxiv.org%2Fpdf%2F1406.0440v1.pdf
Veteran technology journalist Steven Levy interviews Ray Ozzie about his new startup Talko. Ozzie says that the voice call isn’t dying, but rather needs a makeover with such features as asynchronous communications (i.e., voice texting).
https://medium.com/@stevenlevy/brave-new-phone-call-f4064a4e720f
Map Glyphs is a beautiful set of SVG map icons. It includes over 300 images of the globe, all of the continents, every world country, and each U.S. state. It is free for both personal and commercial use, but requires a link back to the site or you can pay a nominal license fee.
If you’ve ever used a Java Jar library that didn’t include source code, but needed to do some tracing of its execution, you probably got frustrated very quickly. Jar Surgeon allows you to extract and add instrumentation code to such a library and re-compile/re-package it to run it. Ironically, the tool itself is built in Ruby and Python.
https://github.com/cernekee/jarsurgeon
Responsive Test is a simple online tool that displays your site and allows you to specify the dimensions of the view port to see how the site looks on various devices. It includes built-in configurations for popular models of desktop, laptop, tablet, and phone.
Recently, Google released some Android apps to run natively in Chrome web browser. Well, it didn’t take long from some bright hackers to come up with a way to let you run any Android app! This tool converts an APK app package into the format compatible with Chrome. After you’ve converted an APK, in the Chrome browser, open the Extensions page and ensure that Developer mode is enabled/checked. Then click on Load unpacked extension… and browse to the folder for the converted app that you want to install.
https://github.com/vladikoff/chromeos-apk/
What if you could write your Excel macros in Python instead of VBA? Now you can with xlwings. And it works bi-directionally, so you can call Python code from within Excel or interact with an Excel workbook directly in Python, including interactively. Both Python 2.x and 3.x are supported and xlwings does not require installation as an Excel plugin.
I realize that this will likely only appeal to a small segment of those who read this newsletter, but this site is a fascinating exploration of many of the concepts of relativity with some amazing computer animations of the effects.
http://www.spacetimetravel.org/
Totally geeky humor… Just go check it out! And make sure to read the responses. :)
https://twitter.com/__get__/status/516601097948237824
You might have learned about many of the database normal forms, but I’ll bet you didn’t know about these!
http://www.johnmyleswhite.com/notebook/2014/09/10/the-lesser-known-normal-forms/
Scientific writing is notoriously dry and boring and difficult to understand. But these researchers put a little fun into the otherwise stoic world of science.
http://www.theguardian.com/music/2014/sep/29/swedish-cientists-bet-bob-dylan-lyrics-research-papers
Want to keep up with the latest scuttlebutt on the Internet, but don’t want to risk looking like fool for spreading false rumors? Check out Emergent which tracks them shows whether they are true or false or still unconfirmed, including links to pro and con resources. And in the true spirit of the Internet you can share them through all of the popular social media outlets right from the site. Who’s got time for work when there might be someone wrong on the Internet?! :)