September 2012 Newsletter
He who finds a new path is a pathfinder, even if the trail has to be found again by others; and he who walks far ahead of his contemporaries is a leader, even though centuries pass before he is recognized as such. –Ibn Khaldun
Remember that Google is your teacher, there is no other way to learn how to code practically. If you're not Googling, you're not learning. –Comment on Hacker News
If people do not believe that mathematics is simple, it is only because they do not realize how complicated life is. –John Von Neumann
The better we get at problem solving, the more successful we are. Theory is only fully understood by solving problems. One cannot succeed in life with mere theories; it is only the application of theory, in overcoming problems, that brings the desired results. So Work hard, have the right attitude and lead your way towards the success. –Shahzaib Khan
Work for a cause, not for applause. Live life to express, not to impress. Don't strive to make your presence noticed, just your absence felt. –Unknown
Humor is emotional chaos remembered in tranquility. –James Thurber
A man has to learn that he cannot command things, but that he can command himself; that he cannot coerce the wills of others, but that he can mold and master his own will: and things serve him who serves Truth; people seek guidance of him who is master of himself. –James Allen
This excellent (but long) article discusses some of the author's experiences
in dealing with the more difficult and esoteric aspects of programming. He says that the most difficult areas are optimization,
networking, security, reliability, and scalability.
http://qaa.ath.cx/The5HardestThings.html
The inimitable Steve Yegge proposes that software development (and the
associated IT cultures in organizations) have their own political axis ranging
from conservative to liberal (which have special meanings in this
context). He defines a few criteria that
define the "conservative" and "liberal" ends of the
spectrum. And you can even take a survey to see where you fall on the continuum.
https://plus.google.com/u/0/110981030061712822816/posts/KaSKeg4vQtz
https://plus.google.com/u/0/110981030061712822816/posts/iuRbQe6EoiK
This author says that IT organizations are starting the really feel the
effects of the "bazaar-style" practices (see Eric S. Raymond's
seminal essay "The
Cathedral and the Bazaar") that were introduced as the standard
paradigm during the dot-com boom/bust of the late 1990s. He shows a salient example of how the
freewheeling approach results in chaos for development projects, even
open-source systems for which CatB was originally
penned.
http://queue.acm.org/detail.cfm?id=2349257
This article includes some ruminations on the
traits that separate the average programmer from the great ones. The key difference that he emphasizes is that
great programmers spend the majority of their "development" time
designing and looking for ways to improve quality rather than actually
"slinging code".
http://www.thoughtclusters.com/2010/09/characteristics-of-great-programmers/
As programmers, we probably don't think about the economic/financial
implications of the implementation decisions that we make on a daily basis when
developing applications. This article
suggests that perhaps we should with the author examining the (assumed)
decision that Kernighan and
Ritchie made to
use null-terminated text
strings (instead of using a extra 1-byte string-length). Consider this along with Tony Hoare's mea
culpa that null
references were a billion-dollar mistake and you have a lot of cost!
http://cacm.acm.org/magazines/2011/9/122797-the-most-expensive-one-byte-mistake/fulltext
This article gives an excellent overview and introduction to kanban (one of the lean tools) for software development. It explains where kanban
came from and what scenarios it is good for.
One of the key aspects is that explains that kanban
does not replace any existing methodology, but overlays it.
In deference to our soundbite-enamored society,
this software development professor has distilled the key principles of
programming into 20 statements of 140 characters or less. Although brief, they are all good reminders
for how to effectively design and build applications.
http://blog.prof.so/2012/08/setweets.html
Robert Martin (a.k.a. Uncle
Bob) tosses his new application architecture recommendation into the ring
with the plethora of other popular software
architecture models. In many senses, he attempts to harmonize many
of the various models by focusing on the common elements across them.
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
This site describes itself as "An illustrated collection of
(sometimes violent) fables,
concerning the Art and Philosophy of software development." Each essay includes a kōan
to inform you about some particular aspect of development.
http://thecodelesscode.com/contents
This article encourages each of us to question assumptions about why one
particular development methodology (e.g., Scrum, lean, extreme programming,
"waterfall", etc.) is better than any other. The author emphasizes that each organization
ends up with a customized methodology that depends on the culture (called "context").
http://craftedsw.blogspot.com/2012/08/the-best-approach-to-software.html
For meaningful testing, especially regression testing and "fuzzing", generating random, yet relevant, test data is often a chore. This article (and a companion one) give some great suggestions for doing this with MySQL, which can be adapted easily to most any database platform.
http://moinne.com/blog/ronald/mysql/howto-generate-meaningful-test-data-using-a-mysql-function
If you've doing testing (or development!) for any appreciable amount of time, you've very likely encountered the problem that can't be reproduced (or is very intermittent). This article quotes an estimate from Capers Jones that in large systems ~10% of defects are not reproduceable. It goes on to offer some tips for debugging and fixing these ghoulish problems.
http://swreflections.blogspot.ca/2012/08/fixing-bugs-that-cant-be-reproduced.html
This article reviews the results of analysis of over 6000 projects to assess the impact of programming language choice on developer productivity (based on function points). Java makes a good showing, but, by comparison, C# is 1/3 less productive and lags behind both C and C++.
http://www.drdobbs.com/jvm/the-comparative-productivity-of-programm/240005881
The CEO of Knight Capital has admitted publicly that a software defect is behind the problem that caused their trading system to go haywire. Some have even speculated that Knight Capital accidentally deployed their test code causing the trading platform to run amok, although it turned out to be accidental redeployment of old code during an upgrade. But it's certainly interesting that the importance of software quality has garnered the attention of the "mainstream" media. The key point is that software quality is now one of the factors that almost every business, regardless of industry, has to pay attention to with respect to their reputation. Furthermore, it's important that non-technical people in our organizations understand the complexity of software development and testing.
Just weeks after Facebook's problems with their IPO, they have again made a misstep. As this article points out, having a back-out plan is just as important as good testing before implementing such a significant change.
This excellent visualization helps you to see all of the different hats that testers have to wear in doing their jobs and various important traits for good testers.
http://www.reqtest.com/blog/what-makes-a-great-tester-infographic/
While functional programming has taken
a bit of a beating lately (see here
and here),
the functional concepts are still important and valuable. When coming from imperative (procedural and
object-oriented) programming paradigms, the functional mindset can be hard to
grasp at first. This brief article
explains the ideas using simple examples from Java (or from
Haskell, if you prefer).
http://pragprog.com/magazines/2012-08/functional-thinking-for-the-imperative-mind
We often tend to think of algorithms and data structures as contrivances
of the programming era. However, this
interesting tutorial looks at a human-optimized algorithm for organizing and
finding books in the library (remember those places?!).
http://jorendorff.github.com/hackday/2012/library/
Arguably, writing good comments in code is one of the most important
skills that a developer can have. I
can't tell you how valuable my own comments are when looking back at code and
trying to remember why I did something the way that I did. This brief tutorial gives some ideas for how
to write good comment content and how to effectively style your comments for
various purposes.
http://antjanus.com/blog/web-design-tips/best-comment-separator/
Since the Java StringBuilder class was introduced relatively late in
the evolution Java (J2SE 5.0), it is sometimes shrouded in mystery about its
value and utility. This article tries to
debunk some of the myths with salient examples and comparison to plain String
and StringBuffer.
http://code-thrill.blogspot.com/2012/08/stringbuilder-optimizations-demystified.html
The explosion of JavaScript frameworks makes it difficult to know which
ones to pay attention to, which ones you might want to use for a particular
effort, and so on. This excellent,
comprehensive article introduces the TodoMVC project
and explains how to use it to evaluate many of the frameworks. In addition, the article includes some brief
"pro and con" items for some of the frameworks.
http://coding.smashingmagazine.com/2012/07/27/journey-through-the-javascript-mvc-jungle/
This 7-part comprehensive tutorial series takes you step-by-step through
making your site's CSS more flexible and maintainable by using the excellent
open-source LESS toolkit. LESS allows you to use variables, nested
rules, and more for more efficient CSS implementation. Then LESS compiles it into standard CSS for
use.
http://www.developerdrive.com/2012/06/learning-less-put-it-into-action/
If you sometimes feel like jerks run the world, you might not be imagining things. New research shows that jerky behavior itself isn't the reason that jerks move up the leader, but rather the concomitant fact that these people allow themselves to be put on pedestals by others by demonstrating overconfidence.
http://www.forbes.com/sites/daviddisalvo/2012/08/18/why-jerks-get-ahead/
Most of us want to improve our self-control in some area of life, whether it's caloric intake, cash flow, or something else. Here are over a dozen simple things that you can do to increase your willpower.
http://www.bakadesuyo.com/15-research-based-secrets-to-bulletproof-will
It's hard to know whether businesses lost more productivity during August due to workers watching the Olympics or with them playing the associated games on the Google Doodles. Nevertheless, the fun diversions actually help boost productivity and morale. Likewise, just having some variety and anticipation of change helps boost productivity and quality of work and this can be effectively and productively included in the development process. And don't forget that encouraging a little goofing off can pay benefits in the long run. As Einstein once said, "Combinatory play seems to be the essential feature in productive thought.”
http://mashable.com/2012/08/10/goofing-off-google-doodle/
An HR productivity expert describes five reasons why she believes that the quiet "steady Eddie's" (or maybe we should call them even-tempered Neil's) in a group are frequently the best producers.
http://www.fastcompany.com/3000226/link-between-quietness-and-productivity
This IT consultant suggests that developers take a market-based approach to managing their careers. He says that you need to rationally and honestly evaluate your skills and look at how they align with needs of the market. He goes on to propose a process for improving marketability along the lines of Linked In founder Reid Hoffman's book The Start-up of You.
http://mrdanadams.com/2012/your-career-is-a-business/
This essay takes a very well-reasoned and balanced approach to rebutting "Uncle Bob" Martin's claim that career development and skill enhancement are completely the responsibility of the individual. The author explains how employer contributions to employee improvement improve productivity and engagement.
http://blog.markrendle.net/2012/08/23/the-professional-employer/
Most work in the modern workplace is organized around teams. So it's vital to understand team dynamics, including optimal team sizes. This article reviews the various studies that compare team size to performance.
http://blogs.hbr.org/cs/2012/08/why_less_is_more_in_teams.html
Very few people are true geniuses. Nevertheless, each of us can learn something by considering how geniuses think and work. This article explores some of the characteristics of how jazz genius Miles Davis was such a successful collaborator by doing things such as demonstrating courage and knowing when to take the lead and when to let others get out in front.
http://www.elezea.com/2012/05/true-genius/
The recent cases of horrific mass killers James Holmes and Anders Breivik and the fact that neither had Facebook pages has caused some to speculate that "Facebook-lessness" (I'm trademarking that word!) is a sign of mental illness. However, I think it's probably more indicative of being a loner, which is also a classical indicator of sociopathic behavior. Simultaneously, Facebook also faces the prospect of people intentionally quitting the service.
Pundit Thomas Frey, author of Communicating with the Future, predicts that, in the next two decades, 2 billion jobs will be eliminated by technological change in five areas, including the power industry, personal automobiles, and education. He also indicates the kinds of jobs that will be created in the wake of these changes.
http://www.futuristspeaker.com/2012/02/2-billion-jobs-to-disappear-by-2030/
AnyEdit is a handy plug-in for Eclipse that adds some helpful functions, most of them related to text conversion. Features include converting from camel case to underscores, inverting case, changing to uppercase of lowercase, sorting the selected text either alphabetically or numerically, comparing/replacing with text on clipboard, another editor window, or a file and many more.
http://andrei.gmxhome.de/anyedit/
X Tile is a handy GUI application that works with any window manager/desktop environment which allows you to tile any (or all) open windows in any desired layout. It's extremely useful for arranging a terminal showing a log file with your IDE or editor and a running application.
http://www.giuspen.com/x-tile/
PasteAsFile is a simple add-on for Windows Explorer that allows you to save the contents of the Windows clipboard as a file in any folder. It supports text, RTF data (i.e., copied from Microsoft Word), and many graphic formats. Perfect tool for quickly saving screen shots without any intermediate tool.
http://starpunch.net/#PasteAsFile
TabExplorer is a Windows Explorer add-on that unobtrusively adds tabs to Windows Explorer. If you frequently have multiple Explorer windows open, you can quickly switch between them via the tabs. It really simplifies tasks like moving and copying files between folders. Plus, it can run as a portable application, so you can take it with you and/or run it only when you want.
http://www.iwesoft.com/product/36/tabexplorer
Jump-Location is a Windows PowerShell clone of the well-known autojump Python script for Linux/Unix. Essentially, it "learns" which directories you change to most often at the command prompt and indexes them. Then you can simply pop up that index and cd to one of your frequently used directories quickly. Jump-Location also features the ability to open Windows Explorer in one of the indexed directories or use the directories in other commands executed at the command prompt.
http://timkellogg.me/blog/2012/08/21/introducing-Jump-Location/
I'm often accused of being verbose. But what if some of our great literary icons were programmers? This author imagines JavaScript code written by Hemingway (one of my favorite authors!), Shakespeare, Dickens, and others.
http://byfat.xxx/if-hemingway-wrote-javascript