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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!)
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!)
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.
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.
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…