May 2012 Newsletter
Every man's life lies within the present; for the past is spent and done with, and the future is uncertain. –Marcus Aurelius
Great minds have purposes, little minds have wishes. –Washington Irving
Forgiveness means giving up all hope for a better past. –Lily Tomlin
Simplicity is prerequisite for reliability… How do we convince people that in programming simplicity and clarity—in short: what mathematicians call "elegance"—are not a dispensable luxury, but a crucial matter that decides between success and failure? –Edsger W. Dijkstra
The happiest people are those who do the most for others. –Booker T. Washington
There are no winners in the 'all features on time' game. –Jeff Patton
In my experience, the best creative work is never done when one is unhappy. –Albert Einstein
One of the perennial questions in software development circles (perhaps in all career domains) is what it truly takes to become good at your craft. Everyone wants to become a better coder and this article gives you a tried-and-true approach. And remember that no one ever said it would be easy!
When just starting out in adopting the agile methodology, a common trap that organizations fall into is simply focusing on the iterative aspect (e.g., two-week sprints). This author provides a nice explanation of how agile is a philosophy that goes far beyond iteration.
Programming is generally a good profession. But, as with all domains, it has its difficulties that we must grin and bear. Here's a list of 10 facts that we need to recognize and live with.
The author provides a good discussion about the reasonable boundaries for refactoring. He notes that it is quite easy to go down a slippery slope in refactoring to fully redesigning or even rebuilding your application and we must avoid doing that.
In this essay, the author posits that using concurrency and parallelism will require developers to make a complete break from the imperative (procedural) programming style by adopting functional style and its inherent immutable variables.
Sorry, but the author doesn't actually have a way to improve productivity 100 fold (yet). However, he makes some insightful points from Alan Kay about how using brute force in development, often due to time pressure and/or bad design, results in complexity that then reduces productivity.
This article is chock full of great resources on user stories, but the most important aspect of the article is how it emphasizes the conversational style of interaction between IT and the business that is engendered by agile techniques. It's very important to remember that this type of interaction isn't limited to agile, but can be used with any methodology, when there is management commitment.
In this article, the author addresses the concern that managers have with self-organizing teams: Are the employees really working as hard as they can/should? She observes that the traditional measures of individual performance are no longer valid and that management needs to change their thinking to looking the results of the team. Furthermore, working "extra" isn't a sustainable long-term option either.
Many teams end up having "technical debt" work pushed out of their iterations due to the volume of feature/functionality requests. In this article, the author emphasizes that such work needs to be built into the overall process and accounted for just as any other work.
Just like adopting agile techniques requires that developers "unlearn" certain things to be successful, we need to do the same thing with some of traditional ideas about testing. This article provides an excellent list of the "conventional wisdom" that we need to re-consider when it comes to becoming agile testers.
This developer says that QA (which includes testing in his view) needs to change along with other aspects of development and take a more salient role in the process. In particular, he notes that QA should be about managing and minimize risk around software problems.
As we all know, there are no silver bullets. So, I would probably call this list the golden rules of testing. In any case, the brief list is a good set of fundamental points to keep in mind when testing.
While technology has certainly changed software development in recent years, the impact has been even more pronounced for testing. In this article, the author says that sometimes we need to step back from technology and use simple tools that get the job done.
In this book excerpt, James Whittaker outlines the approach that Google uses for software testing, including the fact that testing is part of the "engineering productivity" organization and how testing and development are closely intertwined.
Ever wonder why testers frequently have a smile on their faces? No, it's not because they are scheming about another way to break that application. It's because, according to a new survey from CareerBliss, they are the happiest employees.
Are you a Scrum Master (or maybe you play one on TV? J) and are struggling with "What am I supposed to be doing?" This brief, but comprehensive list covers the main duties in four areas: product owner relationship, the Scrum team, process and technical practices, and how the team fits into the organization.
Hacker Shelf is a directory of completely free books on programming, math, networking, version control, and other topics. The list aims to include only books that are clearly licensed as free.
The future of Java is really the JVM. Thus, we've seen a proliferation of languages targeted for the JVM. Clojure is a mature Lisp implementation for the JVM. This comprehensive tutorial will introduce you to Clojure, even if you have no background in Lisp. After you learn the basics, check out the articles here and here to go further.
MapReduce is one of the fundamental principles of the NoSQL database movement, but it's typically quite difficult to understand at first. This humorous article gives a basic overview of the concepts as told by the cast of Star Trek.
Over the history of jQuery, much has changed concerning event delegation. This article explains some of the subtle differences between the various methods. Overall, starting with jQuery 1.7, .bind(), .live(), and .delegate() are all deprecated in favor of .on(), as noted by Jeff Way.
If you are using Apache Solr for searching and indexing, you absolutely must get this comprehensive reference guide. Weighing in at nearly 400 pages, it is provided by the company that is involved in most of the enhancement/development of Solr.
E-mail is the linchpin of most modern business communications. So, it is vitally important to be effective and efficient in your e-mail activities. These articles give some tips about avoiding some of the e-mail "gotchas".
Most articles about how to get along with others are too simplistic (common sense) or go off on some psychological tangent. This one strikes a nice balance between those extremes.
Recently, the COO of Facebook, Sheryl Sandberg, has raised a lot of eyebrows (and some ire!) by suggesting that everyone in IT/technology go home at a reasonable hour and have dinner and time with their families.
In this video, .NET expert Scott Hanselman shares some of his developer productivity tips, including the obvious, but often forgotten, concept that to optimize your reading/research time you must develop discipline in knowing what to skip.
Computer science professor Norman Matloff says (perhaps only PARTIALLY tongue-in-cheek) that perhaps programming is not the best career choice, since most programmers are out of the field by the time they are 40 (But where do they actually go?) and the number of management positions is decreasing.
With the job market improving widely, more folks will be making the rounds of job interviews. Here are some tips on handling the technical interview. And don't forget to brush up on answering the ubiquitous question about your "greatest weakness".
Here is a nice list of up and coming skills that IT pros will need to have to increase their marketability in the near future.
This author suggests (and supports very logically) that effort and skill are not the most important characteristics for success in the modern (post-modern?) business world. To him, at the end of the day, it comes down to relationships and connections.
I frequently read (and link to in this newsletter!) the Positive Sharing blog. Now, the author of this blog has created a book about happiness at work and how it increases productivity and profitability. You can read the entire book online for free at this site. It has some great insights into technical worker motivation.
Computer science professor Latanya Sweeney says that privacy is a natural imperative and that computer scientists and engineers need to do a better job of considering the social implications of their work.
Small projects (those of just a couple of hundred hours or less) are often ignored when it comes to applying project management discipline. This article gives some tips for managing them without too much process.
Show My Code is a free online decompiler for Zend-encoded PHP files, Java class files, Flash SWFs, .NET (C#, VB.NET, and C++.NET) DLLs and executables, and QR codes. Just upload your file or point to a valid URL and Show My Code will return the decompiled version.
PDF4Eclipse is an open-source PDF viewer plugin for Eclipse. It includes two different PDF renders to support the widest range of PDF files. It allows you to display PDF files, such as documentation, side by side with your source code.
One of the highly touted new UI features in Windows 8 is the Win+X Menu of shortcuts to various system utilities. Users of Windows XP, Vista and Windows 7 don't have to be left out with this small add-on that gives you the same functionality, plus the ability to customize the menu to your own liking.
Android Personal Server is a free and simple HTTP server for Android devices that allows you to share files via WiFi on your LAN. You can quickly toggle the server on and off and allows multiple clients to connect simultaneously.
Mosh (contraction of "modern ssh") is an ssh replacement with lots of great features for 21st century computing. Among some of the great improvements are automatic re-connection, even if you change connections/IP addresses, fixes variations in terminals (xterm, Gnome Terminal, screen, tmux, etc.) by using only UTF-8 character set, and better interactivity, by not waiting for remote server response to display what you typed. (To use in Cygwin, you must build from source with the Protocol Buffers and Boost libraries.)
MapsTD is a mash-up of the popular Tower Defense (or "Defence", if you prefer!) game genre and Google Maps. Play the game in any location on the globe or choose from one of the historic sites recommended when you launch the game.
Most of us know that 'retro' is all the rage in technology. Well, this example is WAY retro. This guy got Ubuntu Linux 9.04 to boot (albeit it takes 2 hours!) on a homebrew 8-bit microcontroller with clock at 24MHz.
This is a classic-style text adventure (also called interactive fiction) game that supports multiple display modes. One of the modes makes the screen look like the Eclipse editor, so that your coworkers don't know what you're doing.
Oh, hai! Who in their right mind would not want to be fluent in LOLCODE? Your (YR) next job might require it! Well, this is the place to learn it through various online tutorials and exercises.
This awesome animated site shows the current prevailing wind patterns, including velocity, across the entire U.S. This site is an excellent example of what might be called "code as art".