July 2012 Newsletter
The perfect project plan is possible if one first documents a list of all the unknowns. –Bill Langley
On the mountains of truth you can never climb in vain: either you will reach a point higher up today, or you will be training your powers so that you will be able to climb higher tomorrow. –Friedrich Nietzsche
Knowing others is intelligence; knowing yourself is true wisdom. Mastering others is strength; mastering yourself is true power. If you realize that you have enough, you are truly rich. –Lao Tzu
A complex system that works is invariably found to have evolved from a simple system that worked. –John Gall
Developers and programmers tend to be introverted, intrinsically motivated people. This article questions whether agile methodologies, such as Scrum, with their emphasis on interaction and other "social" tools, results in diminished creativity and productivity.
While "top 10" lists are very rarely "one-size-fits-all", this list is a very good summary of some of the key "soft skills" and high-level technical skills that a well-rounded developer should have.
There are plenty of articles on the Internet about what makes a programmer "great". Andrew Binstock says that key traits that separate the "good" from the "great" are excellent memory, broad knowledge of programming techniques and when to apply a particular one, and ability to relate details to the big picture and vice versa. And it's also important to understand the characteristics of substandard developers.
You probably be hard pressed to find someone who would agree that the code reuse promises of object-oriented programming have been fulfilled. But what is the underlying reason? This article discusses the fundamental concepts behind generic programming and how applying these practices can allow you to really develop multi-purpose code.
In development, especially with web services, loose coupling is extremely important to scalability and maintainability. This article examines coupling as it relates to design and implementation of REST services.
This article gives an interesting twist on the seven deadly sins as it applies to software development.
One of the common difficulties with agile implementation is what is the role of the traditional "manager" when the teams are supposed to be self-organizing? This author says that managers should be the financer and builder of the self-organizing teams (i.e., enabler) and the scrum master of the scrum masters.
Most people know that many of the underpinnings of agile development came from the lean manufacturing movement, but did you know that these concepts originated with the drive to make more agile fighter aircraft in the 1960s and 1970s?
Improving the efficiency of testing is vitally important, especially as the complexity and size of applications continues to increase exponentially. This article discusses one technique for reducing the number of test cases that you must run, while still preserving test integrity.
This author makes the (provocative) claim: Bugs are caused by a lack of engagement, a low level of commitment to the work, absence of motivation. He goes on to examine this thesis in view of the common reasons for defects in applications, such as poor requirements, excessive complexity, etc.
Recently, it seems like significant outages of well-known Internet services are frequent occurrences. Twitter is the latest service to succumb to this. But at least some folks had a little bit of fun with it.
As much as possible, as testers, we like to use some amount of randomness in our test cases/scenarios. However, as this article explains, there limits (no pun intended!) to how random our test data can actually be, due to one of the key principles of statistics.
Not all of us are born with good innate UX skills. But that doesn't mean we shouldn't try to learn. This site gathers a variety of sets of tried and true design principles for both coding and web design together for easy reference. It contains a number of categories, including people, organisations, formats, software, and hardware.
Dealing with dates and times in application development is often one of the more difficult items, not only because of the variations between programming languages in how they are handled (consider PHP's nearly inscrutable Date/Time classes and Java's various libraries for dates, times, formatting, etc.), but also because some of the assumptions to developers make about the "rules" involving dates and times.
Go is Google's programming language answer to Java and .NET. While Go's syntax borrows heavily from C and C++ (probably since it was created by Rob Pike), it has some of its own intricacies, as well. This excellent video tutorial gives you a good introduction, with straight-forward, but not too simplistic examples, to the language.
Scala is one of the top languages for the JVM, since it offers a good combination of OOP and functional programming paradigms. This free online book, from Java expert Cay Horstmann, teaches you the basics in an engaging, yet comprehensive manner.
Most programmers with at least a little experience understand that complexity is the bane of development projects. This tutorial gives a good, but not too technical, explanation of the well-known unsolved problem proposed by Turing known as P vs. NP.
Most of us don't set out to actual procrastinate, but sometimes getting down to actually doing the work can be difficult (or perhaps you have a dopamine imbalance). This article provides four practical tips to get back on track. My favorite is finding the smallest next action that you can take, because sometimes you just need something to get going again.
This interesting article suggests that one effective approach to solving difficult problems is to first gain deep understanding in the domain and then use that to find problems previously were difficult, but now are simpler due to unique insights. As a follow-up, the author also offers some suggested "algorithms" for improving your skills.
As we celebrate the 100th anniversary of Turing's birth, this article takes some of the practices that he followed as patterns for productivity that can be useful to anyone working in the technology domain. While certainly none of these habits are particularly unique, but it's always nice to see the human side of a true genius.
A manager of programmers talks about the difficulties in assessing performance of developers. She notes that it's not enough to simply do a good job, but you also must communicate effectively to management about what is being accomplished and how, because the basic currency of development is trust.
Nothing really seminal in this article, but it is good reminder that we don't have all of the answers and that, especially as developers, we need to ask "outsiders" (business users, customers, etc.) for some perspective on what we are doing.
Technology workers are a temperamental lot (but, then again, who isn't?!). In this essay, a programmer discusses the reason for some of the quirks that tend to be stereotypical of developers and what managers can do to keep them happy and productive. At the same time, some of these behaviors may also backfire, especially when it comes to getting a new job… or not.
In this interview, management professor Peter Capelli, author of the new book Why Good People Can’t Get Jobs, says that employers have unrealistic expectations of employees and that wages aren't keeping up with workers' needs. He also suggests that job seekers take the initiative to speak directly to a person at a potential employer to counteract the effect of automated resume filtering.
This free (two active projects with as many users as desired for free account) online tool has comprehensive support for building wireframes and mock-ups of desktop and online applications. Your designs can have fully-interactive functionality to demonstrate intended behavior.
Clink is a productivity enhancement for the standard Windows Command Prompt (cmd.exe) that aims to deliver a good bit of the functionality of the Unix/Linux bash shell. Just a few of the many features are line-editing using the readline library, improved tab completion, paste from clipboard, persistent command line history, and scriptability using Lua.
RESTsh is a Python shell (command line) tool for testing and interacting with REST web services. It formats returned data in JSON or XML, so that you can quickly check the results.
Ever wish that you could write shell scripts using both Python and shell syntax? Well, now you can (kind of, sort of, mostly…). Plumbum is small Python library that mimic shell syntax (using so-called shell combinators) where possible, while preserving Pythonic concepts where appropriate.
Most of the time when dealing with screen shots, we simply want to paste them into a document or e-mail or just save them as an image file. In the latter scenario, Screenshot2Disk makes the process extremely simple by adding a context (right-click) menu option to Windows Explorer that allows you to save the image on the clipboard as either a JPG or PNG file. Screenshot2Disk automatically names the file using the current date and time.
For those of you who are decidedly low-tech when it comes to timekeeping… But what I can't figure out is how the time in Shanghai is the same as it is here! J
How well do you know your programming languages? Visit this quiz site to see if you can identify the language based on each language's implementation of a 99 Bottles of Beer on the Wall program. Some of the languages are very esoteric.
This is an oldie, but a goodie. This is how geeks go about solving problems in day-to-day life.
Hearkening back to the high position of domesticated cats in ancient Egyptian culture, this guy appeals to W3C to remedy an important missing property in a future CSS standard.
Remember the BRIO Labyrinth hand-eye coordination game from when you were a kid? Well, now you can play on a 3-D globe using Google Maps. With 8 skill levels you have to navigate from start to destination by adjusting the tilt of the map.