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.
http://www.infoq.com/news/2012/03/agile_stifiling_introverts
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.
https://sites.google.com/site/markussprunck/blog-1/top10thingseverysoftwareengineershouldknow
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.
http://www.drdobbs.com/architecture-and-design/240001472
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.
http://www.elegantcoding.com/2012/04/what-is-generic-programming.html
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.
http://byterot.blogspot.co.uk/2012/06/what-i-think-coupling-is.html
This article gives an interesting twist on the seven deadly sins as it
applies to software development.
http://gigaom.com/2012/06/02/the-7-deadly-sins-of-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.
http://www.softwareandi.com/2012/04/how-to-manage-self-managing-team.html
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?
http://practicalagility.blogspot.com/2011/07/fighter-pilot-who-changed-software.html
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.
http://blog.caplin.com/2012/03/30/pairwise-testing/
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.
http://flowchainsensei.wordpress.com/2012/07/01/bugs-are-a-signal/
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.
http://www.wired.com/gadgetlab/2012/06/a-cascaded-bug-brought-twitter-to-its-knees/
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.
http://blog.regehr.org/archives/660
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.
http://principles.adactio.com/
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.
http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time
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.
http://research.swtch.com/gotour
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.
http://alecbenzer.com/blog/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.
http://www.dextronet.com/blog/2012/06/how-to-overcome-resistance-to-work-4-techniques/
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.
http://calnewport.com/blog/2012/06/12/what-you-know-matters-more-than-what-you-do/
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.
http://arstechnica.com/tech-policy/2012/06/the-seven-highly-productive-habits-of-alan-turing/
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.
http://katemats.com/2012/06/12/the-paradox-of-autonomy-and-the-meritocracy/
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.
http://typedwiththumbs.posterous.com/168-solving-a-problem-are-you-looking-at-the
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.
http://spectrum.ieee.org/podcast/at-work/tech-careers/why-bad-jobsor-no-jobshappen-to-good-workers/
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.
http://code.google.com/p/clink/
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.
https://github.com/jespino/restsh
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.
http://plumbum.readthedocs.org/en/latest/index.html
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.
http://screenshot2disk.codeplex.com/
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.
http://home.tiac.net/~cri/1998/toilet.html
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.
Schemaverse is a multiplayer online game with a space-adventure theme implemented entirely in PostgreSQL database. You can use raw SQL commands or level-up by writing automation using PL/pgSQL.
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.
To celebrate the 20th anniversary of Wolfenstein 3D, head over to this site to play the game entirely in your browser.
http://wolfenstein.bethsoft.com/