January 2012 Newsletter
Knowledge is like a garden: if it is not cultivated, it cannot be harvested. –African Proverb
Mathematics may be compared to a mill of exquisite workmanship, which grinds your stuff to any degree of fineness; but, nevertheless, what you get out depends on what you put in. –Thomas Henry Huxley
Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgment. For even the very wise cannot see all ends. –J.R.R. Tolkien (Spoken by Gandalf in The Two Towers)
Web programming is the science of coming up with increasingly complicated ways of concatenating strings. –Greg Brockman on Twitter
Continuous effort—not strength or intelligence—is the key to unlocking our potential. –Winston Churchill
Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations. –Melvin Conway (Conway's Law)
Almost everyone is constrained by time and resources to complete their
projects. This developer offers five
tips on how to consistently deliver quality code under time pressure. The keystone to his approach is unwavering
dedication to test-driven development.
http://rdegges.com/on-programming-deadlines
As we frequently point out, there is no one-size-fits-all development
methodology. This article looks at the
idea of using how much knowledge the team has about the problem and the
solution to determine whether to use traditional (waterfall) or agile
methods. Essentially, when there are
more things that are unknown, then agile tends to work better.
http://www.infoq.com/news/2011/10/Known-vs-Unknown
Perhaps a good chunk of this bad reputation that IT has is due to our tendency
to say "no" and push back too much. But maybe the new year
is a good time to think about what we can do on a day-to-day basis to make IT
easier to work with. And, of course, just
working in IT can be its own reward sometimes.
http://www.pcpro.co.uk/features/371254/why-everyone-hates-the-it-department
In this review of a recent talk by Rich Hickey, the creator of Clojure,
the author emphasizes that one of the key goals for developers is to make the
application experience simple, but that accomplishing that is not easy. In particular, simplicity must be
intentionally architected and designed.
http://casestatement.tumblr.com/post/14056344879/simple-aint-easy
Rather than being a tutorial on unit testing, this article gives some
good concepts for practical, non-dogmatic approach to using unit tests in
practicing TDD.
Sure computers are faster and more ubiquitous and we have many more
programming language options, but this summary of quotes from a conference more
than 40 years ago shows how, at a high level, very little has changed with
respect to the hard problems of development, which leads
some to ask if software engineering as a discipline should be abandoned. Likewise, some concepts that we think of as
"new" have been around for quite a while, such as TDD
and MVC
pattern.
http://www.peterkrantz.com/2011/software-engineering-in-1968/
The only constant is change… I
can't remember who said that, but it's certainly true of software
development. This article discusses how
new tools, techniques, and problems are changing the way developers do their
jobs.
http://www.infoworld.com/d/application-development/11-programming-trends-watch-179761
Development expert Greg Wilson
(and co-author of Beautiful
Code) talks about how the day-to-day aspects of software development
haven't changed much in the past few decades.
His main emphasis is that most of this plateau is due to very little independent
research about improvement methods. He then discusses his expectations for how
it will change over the next 10 years, which he says is to look at what
industry practices work and do controlled experiments to determine why and how
to replicate it. (And, if you don't have
time to listen to the whole thing, please listen to that last 5 minutes or so!)
Ten years after the introduction of the Agile Manifesto, agile methods,
particularly scrum, have become mainstream. However, based on research
from Forrester, the reality of agile methodology adoption is that most
organizations have created a hybrid between agile and the traditional waterfall
methodology. He uses the term
water-scrum-fall to indicate that waterfall methods are used for front-end
activities like prioritization and basic requirements-gathering and
deployment/transition work and then agile techniques are used for the internal
development work. Sounds quite a bit
like RUP to me.
In comparing/contrasting the popular notion suggested by Steve McConnell
that the best
developers are ten times as productive as the average, this author makes a
keen observation that their productivity is not based on writing 10x the amount
of code (remember that lines of code is NOT a good metric for measuring
programmers!), but rather in their ability to identify the 10% of the solution
that has the greatest impact. But, more
importantly perhaps, this whole debate misses the point, because managers
really need to build
high-performing teams and have a group of individuals who work well
together.
http://blog.vivekhaldar.com/post/13855406981/the-0-1x-developer
This academic research report, based on analysis of agile implementations
by 17 large organizations which had used agile techniques for at least three
years and implemented in a top-down manner, discusses some of the common
difficulties encountered by workers in adapting to the agile methodology, such
as increased reliance on social skills and the need for developers to be
'masters of all trades'. (There is also
an overview
presentation of the same material available.)
In this article, the author talks about how she developed (and maintains!) a passion for testing and how that helps her work collaboratively with developers and other team members. It's a great story about how to love your job.
http://www.passionatetester.com/2009/11/harmony-is-beauty.html
A new study which reviewed 365 million lines of code from 745 applications used across many industries found J2EE applications had the most problems on average, while COBOL applications had the fewest. However, one of the most interesting results from the research is that robustness and security declines the more releases an application has, which points to difficulty with maintainability. Of course, there is plenty of commentary in the blogosphere, including this insightful one and this excellent discussion.
This brief presentation gives a useful explanation of how to use Drucker's concept of SMART goals as it applies to software testing, especially test planning.
http://www.slideshare.net/ssuser9ffdaf/problems-definition-with-smart
This article gives a nice conceptual model of the various kinds of testing and the underlying motivation for them. The author gives some good ideas about how to "value" and prioritize your tests.
http://blog.ezyang.com/2011/12/bugs-and-battleships/
While I'm not claiming that this is certainly a case of a software error, this article definitely demonstrates that most any programming defect can have unexpected and very significant consequences.
http://www.stuff.co.nz/travel/australia/6163633/Qantas-terror-blamed-on-computer
Most of the available testing literature focuses on Windows or web-based applications. This article gives a good overview of some of the specific items to consider when testing Linux applications, such as the wide variety of distributions and derivatives of the main distributions.
http://drdobbs.com/open-source/231903171
While I recognize that most readers of this newsletter have a strong
technical background, it never hurts to take a look at the philosophical
underpinnings of the things we do. This
excellent overview of TDD explains the benefit of what might like seem to outsiders just added time and cost.
http://pragprog.com/magazines/2011-11/testdriven-development
While not new, this excellent tutorial explains both the general concepts
behind hashes, as well
as, the details behind how some of the common hash algorithms, such as MD5 and SHA.
http://unixwiz.net/techtips/iguide-crypto-hashes.html
Learning regular expressions often seems like a black art. This comprehensive, yet very logical,
tutorial teaches you simple and a few advanced topics using exercises that show
you exactly what the regex should return/do. Honestly, this is the first regex tutorial that really made sense to me.
http://regex.learncodethehardway.org/book/
Learning
a new programming language (or anything for that matter) can be tough and
good, simple examples always help. If
you are taking up Python, this site
provides thousands (literally!) of tips along with an explanatory code snippet
that demonstrates the concept. Now, if I
can just find something similar for Scala…
Certainly, a technology as broad and revolutionary as HTML5 isn't going
to be something that you can learn in 5 minutes, but this comprehensive
tutorial shows the new features and explains, with excellent examples, how
HTML5 differs from previous versions.
Likewise, it gives you a good feel for some of the amazing things that
you can do with HTML5. And then you can test yourself one what you learned.
http://css.dzone.com/articles/learn-html5-5-minutes
Despite the title, even the author of this tutorial doesn't claim that
you'll be a master of Redis
key-value
store after only 30 minutes.
Nevertheless, this two-part tutorial will give you an excellent
understanding of the concepts and some practice in actually using Redis (or what it's not!)
to help you decide if it's right for your situation.
http://openmymind.net/2011/11/8/Redis-Zero-To-Master-In-30-Minutes-Part-1/
http://openmymind.net/2011/11/8/Redis-Zero-To-Master-In-30-Minutes-Part-2/
Mitchell Harper, the founder of BigCommerce.com, set off a firestorm of controversy from his editorial that universities are out of touch with the needs of business. Another Australian entrepreneur, Matt Barrie, issued his own refutation. What do you think?
http://www.infoq.com/news/2011/11/sweng-uni-debate
Think that you can't do much in 10 minutes a day? This author shows how with just a few minutes a day and a consistent effort to stay with something that over the long haul you can really improve your skills in almost anything.
http://nathanbarry.com/a-little-bit-each-day/
This article explores some of the lesser-known aspects of how Ken Thompson and Dennis Ritchie defied their bosses to create the Unix operating system. The main theme that comes through is the creativity required to develop elegant and efficient code.
http://spectrum.ieee.org/computing/software/the-strange-birth-and-long-life-of-unix/0
According to some new research, creative people have a tendency to be more dishonest. Apparently, the effect is due to their ability to be better storytellers and, accordingly, to better rationalize their behavior. Maybe being left-brained isn't so bad after all.
http://www.livescience.com/17209-creative-thinkers-cheaters.html
Recruiting company Bullhorn has released results of a large survey about what workplace factors were most important to employees. The overall results show that the top three organizational culture aspects are work/life balance, on-going learning, and recognition.
http://www.bullhorn.com/news-event/workplace-dna-project
This article reviews three points about leadership, particularly as it applies to IT, brought out by IBM CEO Sam Palmissano: use the increasing "connectedness" of the world as a competitive advantage, think beyond competition to collaboration, and think about long-term impacts (maintainability, etc.).
Venkatesh Rao argues that the only safe place to invest money today is in software developers. His basic premise is that the economy is now dependent on the ability of social media to effectively advertise and represent any business, good, or service and this requires developers. I'm not sure I buy (pun intended!) his ideas, but it's an interesting concept to consider and apparently even applies to national politics.
http://www.forbes.com/sites/venkateshrao/2011/12/05/the-rise-of-developeronomics/
Sometimes I find it just easier to "Google it" instead of trying to remember some fact. Apparently, this is a general trend and by 2025 the information (not sure it can be classified as knowledge!) on the Internet will exceed that of all of the humans alive at that time.
http://1000memories.com/blog/116-the-internet-is-becoming-our-memory
This old essay from Admiral Hyman G. Rickover still rings true today. As an engineer, Rickover recognized that it was people who got things done, not systems or procedures or the like. [On a personal note: As a young boy, my dad was the most junior officer working for Rickover and my dad took me to work with him one day and I got to meet him, although, of course, I had no idea who he was.]
http://bebekim.wordpress.com/2010/08/27/doing-a-job-by-admiral-hyman-g-rickover-u-s-navy-retired/
While you've probably heard most of the tips in this article before, this is a nice compact listing of them. Perhaps adopting one or more of these ideas in the new year would be a good goal. And while you're at it, take a look at how to apply these concepts to agile development.
http://www.inc.com/ilya-pozin/7-things-highly-productive-people-do.html
Larger organizations tend to have more turnover among the top employees. This author gives a "top ten" list of the prevalent reasons. Nothing really surprising on the list, but it may be somewhat reassuring to know that many of these problems are common across businesses.
Most dock bar tools for Windows are more trouble than they are worth. Ticno Multibar is different. It adds a dock for launching your favorite applications. In addition, the dock supports add-ons and, by default, includes a weather add-on, "quick run", and search tools. One of the nicest things about the dock is that it doesn't pop up when you move the mouse to the screen edge; instead you click on a "tab" to open it. Plus, you can define hotkeys for any add-on or application and even define text shortcuts for them.
Fedora Utils is a handy, multi-function script to use after installing Fedora (or Fuduntu). It allows you to make some tweaks to your system, such as optimizing boot by turning off services, add colors to Terminal, and set yum to keep cache. Moreover, it installs a variety of tools, including Java JVM, wine, multimedia codecs, Adobe Flash, and many more.
http://fedorautils.sourceforge.net/
MyFolders is a shell extension that adds a number of useful functions to the standard Windows Explorer context (right-click) menu for the your most commonly used ("favorite") folders. Simply right-click on the file or files and select from options to copy, move, or go to a folder and then select the folder from the pop-up menu. You can even open a Command Prompt in one of the favorite folders.
http://www.coretechnologies.com/products/MyFolders/
Jerry, part of a larger Java library called Jodd, is a re-implementation of the jQuery Javascript library API in pure Java. You can you use most all of the CSS selector and do nearly any kind of static HTML/DOM object manipulation that you can with jQuery.
I wasn't sure whether to put this in the utilities or "Just for Fun" section… In many cases, testers need to have a corrupt file to test system behavior. Just upload your source file and this tool corrupts it for you!
KumoSync is an automated (or on-demand) tool for synchronizing your Google documents with a local folder (or folders). It works with multiple Google accounts and supports any file (document) type. You can even assign a drive letter, such as G:\, for your local documents folder.
http://www.fieldstonsoftware.com/software/kumosync/
Check this blog out to learn computing concepts from the simple to the esoteric written in the style of the Brothers Grimm.
http://computationaltales.blogspot.com/
If you enjoy nature and landscape photography, these images will surely fill you with awe. In each of them, the use of light and color is incredible.
This cool interactive feature allows you to make your best guess at when we will see certain advances in technology in categories such as transportation, communications, and computing. You can "vote" on to move the already submitted items earlier or later.
https://www.nytimes.com/interactive/2011/12/06/science/20111206-technology-timeline.html
From the creator of Minecraft comes a small (and highly-addictive) miniature browser-based version of the game. Game play is similar to Minecraft.
http://gun.io/blog/notchs-new-game-minicraft-source-code-and-android-port/