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.
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.
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.
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".
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!
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.
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.
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.
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").
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.
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.
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++.
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.
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).
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?!).
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.
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.
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.
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.
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.
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.”
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.