March 2011 Newsletter
Computers are like Old Testament gods; lots of rules and no mercy. –Joseph Campbell
Anxiety does not empty tomorrow of its sorrows, but only empties today of its strength. –C. H. Spurgeon
In the beginner’s mind, there are many possibilities, but in the expert’s there are few. –Shunryu Suzuki
It is difficult to say what is impossible, for the dream of yesterday is the hope of today and the reality of tomorrow. –Robert Goddard
Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. –Donald Knuth
It’s a good thing to turn your mind upside down now and then, like an hour-glass, to let the particles run the other way. –Christopher Morley
In this 12-part series of articles, the author explains his experiences
with Scrum process and gives some excellent insights into how agile
methodologies work in practice. This
series is a "must-read" for anyone involved with agile development.
http://jessewarden.com/agile-chronicles
In the first of a series of articles,
this author explains why, even in the age of agile and lean methodologies,
corporate business sponsors are still reluctant to sponsor application
development projects by internal IT organizations due to perceived risk and/or
likelihood of failure.
http://nomadic-developer.com/2011/01/03/why-does-custom-software-cost-so-much/
In this article, the author explores how the traditional cardinal sins
express themselves on software projects and what you can do to avoid ending up
in programming hell.
http://www.infoworld.com/d/developer-world/the-7-deadly-sins-software-development-872
On the occasion of the 10th
anniversary of creation of the Agile
Manifesto, RUP expert Philippe Krutchen takes a
detailed look at some of the problems with agile methodologies that have arisen
in the intervening decade. He also some relevant suggestions on overcoming these impediments.
http://pkruchten.wordpress.com/2011/02/13/the-elephants-in-the-agile-room/
As you gain experience in any area, it's easy to forget about some of the
fundamentals. This article points out
the importance of getting all of the parts of a user story ("As a ___, I
want ___, so that ___.") to provide the appropriate context for the
"I want" portion.
http://www.docondev.com/2011/02/telling-complete-story.html
In this essay, the author does a great job of highlighting a point that
seems to often get lost in the IT-business alignment
discussion: It's not that programming
(or any skill for that matter!) is intrinsically difficult, but rather that effectively integrating that skill into
the overall process and organization is where complexity comes in.
http://www.thoughtclusters.com/2011/01/programming-is-easy-software-development-is-hard/
This well-reasoned article explains why the type of temperament
("scientist" or "engineer" in the author's terminology)
matters significantly in the success (or lack thereof) of test-driven
development. He points out that like all
methodologies and techniques, the results are what matters, not that the
technique itself.
http://michaelfeathers.typepad.com/michael_feathers_blog/2010/12/making-too-much-of-tdd.html
The premise of this article may be obvious to most of us, but the primary
value of test-driven development (TDD) is that the programmer think about the
design of the code before writing the code, which is where the definition (and
implementation!) of tests before other coding comes in.
http://www.drdobbs.com/229218691
This article bemoans the fact that estimation in software development
projects is essentially useless. While
the article itself doesn't offer much in the way of improving the situation,
the comments have some interesting perspectives on fixing some of these
problems.
http://blogs.mulesoft.org/development-process-estimation-is-futile/
Long-time CEO and author Neil Giarratana says
that IT folks need to stay focused on track with projects and commitments. He also says that IT needs to do a better job
of managing conflicting signals from various parts of the business.
In n-tier architectures (even though some say they are going away), many
developers struggle with separating business logic from the data access and
presentation layers. This article gives
some good perspective on this topic and suggests that "processes" and
"calculations" are a good definition for business logic.
http://database-programmer.blogspot.com/2010/12/working-definition-of-business-logic.html
Feature creep
(a.k.a., scope creep) is arguably the greatest danger to on-time delivery on a
development project. This article
presents the concept that having a clear understanding of users' goals (and
limiting those goals to a small number!) and then focusing singularly on those
goals with all decisions in the process is the best defense against feature
creep.
http://www.jankoatwarpspeed.com/post/2010/12/23/feature-creep-users-goals.aspx
Developers have a tendency to be very critical of other people's
code. This developer says that
criticizing other's code without understanding the big picture is a sign of
immaturity. She suggests that you use
these as opportunities to learn.
http://www.girldeveloper.com/2010/07/your-code-sucks.html
In this article, the author uses photography as a fantastic metaphor for software testing. He uses the key principles of taking great pictures as a way to explain how testers can improve their effectiveness.
http://andreas-simon.blogspot.com/2011/02/photographic-testing-lessons-learned.html
Martin Fowler argues, in his own inimitable way, that internal quality (those aspects of an application that are hidden from the user) are not negotiable and that the development organization must not use them as tokens to be traded for new features, etc.
http://martinfowler.com/bliki/TradableQualityHypothesis.html
JavaScript has become mainstream in web applications and, therefore, testers need to develop skills in testing with JavaScript. This comprehensive article gives great examples and methods to do white (or, at least, grey) box test JavaScript.
http://msdn.microsoft.com/en-us/scriptjunkie/gg655487.aspx
One of the most difficult things to do in testing an application is determining when testing is done and what criteria should be used to make this decision. In this article, the author discusses the questions that you should be asking to make the decision.
http://www.basilv.com/psd/blog/2011/when-is-testing-done
This excellent site covers many of the core principles of software testing. The author divides axioms presented into categories like delivery, test design, and stakeholders.
Sometimes it's easy to get caught up in all of the technical details of
something when what you really need is to take a step back and consider the
underlying philosophy. That's what this
article does concerning unit testing with a slight leaning toward using it in
Java development.
http://www.andrewspencer.net/2011/principles-of-unit-testing/
Here's a cool tip on how to use Dropbox as your git SCM repository.
Basically, it just involves a few simple commands and you can even make
your repository public by sharing it with other Dropbox
users.
http://www.intermediaware.com/blog/1085
This author gives an excellent, detailed explanation of finite state
machines and how they apply to both "regular" programming (like what
you probably do) and pure computer science.
http://blog.markwshead.com/869/state-machines-computer-science/
Cryptography is an interesting and ever more important topic for application
developers. This comprehensive video
course developed by Google will give you the basic understanding of this
subject and how to apply it.
JavaScript is a powerful, but sometimes quirky language. As the de facto scripting language for web
applications, it's very useful to know about these idiosyncrasies. JavaScript Garden is an on-going effort to
collect and document these peculiar behaviors in one place.
http://bonsaiden.github.com/JavaScript-Garden/
At one time or another during your career, you will probably need to do some
Unix/Linux shell
scripting that involves some sort of text processing. This article gives you an introduction to 5
of your new best friends in this endeavor:
grep, awk, sort,
uniq, and head.
And for a real boost in productivity at the command line, check out ack.
http://symkat.com/1/five-text-processing-tools-you-should-know/
Perhaps one of your resolutions for the new year (Remember those?!) was to improve yourself by changing one of your behaviors (a.k.a., get rid of a bad habit). Here are some excellent tips to help you trudge through those times when you feel like giving up.
http://moonbase.rydia.net/mental/blog/personal-development/top-10-mistakes-in-behavior-change.html
If anyone (still) doubts the importance of gaining skills in cloud computing (or whatever you like to call it), this article will probably put those doubts to rest. Many consultancies are seeing increased spending on cloud services but almost no growth in IT hiring.
http://www.computerworld.com/s/article/9210140/As_cloud_grows_IT_hiring_flatlines
Inevitably, in your work and personal life, you'll run across people who
are just difficult to work with. These
are some great suggestions for maintaining your cool and making the most of
interactions with these folks.
http://www.techrepublic.com/blog/10things/10-tips-for-dealing-with-difficult-people/2289
Speaking of resolutions, every year (or so it seems!) I resolve to stop procrastinating, but it seems that I always put it off until the next year. J In any case, this author provides some great and practical advice on how to break the procrastination habit. And it's helpful in knowing that procrastination seems to be a universal human trait.
http://lesswrong.com/lw/3w3/how_to_beat_procrastination/
This article will probably be of limited interest to this audience, but I encourage you to read it. It is a history of the paragraph symbol (¶), called the pilcrow (who knew?!). I found this story fascinating about how grammar adapts and evolves through use.
http://www.shadycharacters.co.uk/2011/02/the-pilcrow-part-1/
This very cool graphic shows the history of the computer from the 1940s to today, including some information about the popular GUI operation system versions.
http://www.testking.com/techking/infographics/a-comprehensive-history-of-computers-infographic/
After procrastination, probably the biggest killer of productivity is distraction and context-switching (see multitasking!). In this brief article, the author gives six practical steps for how to improve your attention span and reduce distractibility. My favorite is you need to develop your attention like a muscle, steadily a little bit at a time.
http://www.theenergyproject.com/blog/take-back-your-attention
Looking for a new job? Or maybe you will be interviewing some candidates soon? Here's a list of good technical interview questions (slightly shaded toward .NET) that cover a broad spectrum of knowledge that experienced developers should have. Even if you're not looking for a job, these would be some good things to brush up on, if you find yourself a bit shaky on how to answer them.
http://www.hanselman.com/blog/NewInterviewQuestionsForSeniorSoftwareEngineers.aspx
If you enjoy technology history, this story by Aza Raskin about how Jef Raskin helped design the original Macintosh will surely inspire you. He uses some of Jef's original memos to tell the tale.
http://www.fastcodesign.com/1663212/the-untold-story-of-how-my-dad-helped-invent-the-first-mac
This organizational culture change expert says that in order to make interactions productive managers should use conversational style discussions instead of the staid formal meetings that so often dominate our work day. He provides some practical tips on how to start using this technique.
http://blogs.hbr.org/cs/2011/02/hold_conversations_not_meeting.html
I go back and forth about whether I like or dislike Jeff Atwood, but this article of his is certainly a gem. He says that success as a programmer is largely dependent on communication skills and goes on to recommend that to improve your communication skills (and, therefore, your development skills, as well) you need to blog or participate in forums or other areas where clear, concise written communication is required.
http://www.codinghorror.com/blog/2011/02/how-to-write-without-writing.html
Most readers of this newsletter probably take broadband Internet access for granted. So, sometimes, we don't remember that broadband is a luxury in many places in the US. Here's a story about how this may be changing, though.
http://www.technologyreview.com/communications/32280/
While the technical specifications of this service aren't especially ground-breaking, the interesting part of this announcement is that traditional telecom carriers are getting back into the application hosting and data center business.
http://www.sdtimes.com/link/35279
SilverSHieldD is lightweight SSH/SFTP server tool for Windows. It allows secure connections via SSH/SSH2 and SFTP with standard authentication methods (keyboard interactive, password, and public key). Its greatest feature is simplicity of installation and configuration.
http://www.k2sxs.com/silvershield.aspx
Dok is a free stand-alone GUI for Actionscript 3.0 and Flex 4.0 API documentation. It allows you to conveniently search and display the documentation in a much more user-friendly manner than the standard browser-based documentation.
GeeMail is a desktop client for Gmail which allows you to use Gmail outside of your browser, just like any stand-alone e-mail client. It even has offline support, so you can compose your e-mail and it will be sent the next time you connect. Plus, since it uses the familiar Gmail interface, you can enable any of the GoogleLabs Gmail features that you like.
http://www.sourcebits.com/geemail/
TextLightning is a handy add-on for MS Outlook that includes some great features like one-click insertion of boilerplate text that includes context sensitivity such as recipient name, e-mail subject, and more; checks for proper addressing of recipient in e-mail body and missing attachments; and easy copying/moving of messages to popular folders.
http://www.xequte.com/textlightning/
Maybe this belongs in the tutorial section above, but in any case, this is an excellent example of how binary arithmetic can be put to practical use. And becomes even more handy when you combine it with casting out nines. (I know that this mental arithmetic stuff shows my age!)
http://everything2.com/title/Russian+peasant+multiplication
What if you wrote your papers back in school in a programming language? Well, hilarity ensues! (Warning: Some of the other cartoons on this site are definitely NSFW!)
http://www.somethingofthatilk.com/index.php?id=135
While I've never been much of a video game player (too impatient, I suppose), The Legend of Zelda is one that I have found interesting and enjoyable over a long period of time. But, honestly, I didn't know that it's been around for a quarter-century.
http://games.slashdot.org/story/11/02/21/1930238/The-Legend-of-Zelda-Turns-25
While I'm certainly no romantic (as my wife will surely attest!), these marriage proposals go way beyond normal. My personal favorite has to be the LOLcats one.
http://www.networkworld.com/community/blog/geekiest-marriage-proposals-all-time
Ready to strike out on your own and grab a fistful of that VC cash? Stop by this site first to get plenty of great startup ideas. Hee hee…