I love reading programming blogs, especially those which dive under the hoods of an API or articles that describe how the author wrestled with a tangled problem and finally fixed it. They speak to me of a hero's journey - the programmer switches on her computer and fires up her favorite IDE; the world is all good; there is music, dancing, wine and sunshine. But can it last long? Off course not. Evil soon raises it's head in the form of a pesky bug, a surprising gotcha, or an API whcih refuses to work as docmented and the world changes. There are hours of hair pulling, head-banging, cursing, ranting and utter frustration. But evil cannot last forever and the light finally wins. The bug is fixed, the gotcha is worked around, the software starts humming again and the programmer can finally call it a day (and blog her struggles next morning). Such is a programmers life and their blogs are historical artifacts of bloodshed, gore and victory.
I have spend a great deal of time reading teachnical blogs and quite some time -- although lesser -- writing them as well. In the course of time I have noticed the kind of blog posts which the community finds useful or entertaining. The themes that are well received keep coming up again and again. Some of you are probably thinking of the adage which suggests that the best writing is that whichis written for an audience of one. And it's correct. The best writing is that wihch comes from the depths f your soul - that which is esentially for yourself - and yet it is my belief that it helps to know the genre of articles that others will find useful. As much as I write for myself, I enjoy it far more when my writing is read and it helps people. I'll discuss below some common themes which the programming community finds helpful and entertaining.
A long time back I ran into considerable trouble getting Java Applets to work on my newly installed 64 bit Linux system. After a some research and trial/error, I realized there were issues with the Applet plugin's default installation. Turns out I had to manually create certain directories and copy libraries into them to get the Appletviewer to work. Not just that, after copying the files I also had to stand on my head and do a gypsy dance so it would continue working - but I digress. The whole experience turned out to be so frustrating that it made me take a vow - no other programmer should have to undergo the same hell. So I did what any noble programmer would do - I ranted about my horrible experience to anyone and everyone who was willing to listen. After having performed my vociferous duty, I did what any sensible human would do - I wrote a small how-to article to help other programmers who found themselves in a similar situation. I am not sure if my rant helped anyone, but my article certainly did.
I am sure all programmers face similar situations every week. We work with a huge diversity of technology which is always in a constant state of flux. All sorts of problems can come up - from installation issues to getting a certain API to work as documented. Then there are database failures, performance issues, known bugs, and what have you. Given large amounts of time and patience we could probably research these problems and figure out how to fix them. But with deadlines looming, time is usually a luxury and how-tos are the lifeline to help us out of the ditches we frequently find ourselves in.
I have often been saved by how-tos written by kind hearted developers. To return the kindness, I have made it a point to write an article every time I understand of fix something difficult. So the next time you have to spend an insane amount of time figuring something out, don't rant; but blog. It'll make you feel better and someone somewhere will bless you!
A deep dive under the hoods
Do you enjoy doing deep dives and really figuring out how things work? Does it excite you to peek into the source code of an ORM to understand exactly how it generates SQL? Lot of programmers love doing these type of deep dives. I find them to be an adventure; an exploration in unraveling the mysteries of how something works. Besides being fun, these explorations also help me improve my own mental ability to understand how a system works.
Several years back I spend a few hours digging into the source code of log4j (a Java logging library) and in reward, figured out the order in which it looks for the log configuration file and how it applies defaults. The whole exercise was educational, fun, and I got good fodder to write a deep dive blog post to help other developers.
If this sounds like fun then you can learn (and share) a lot by peeking under the hoods of your favourite ORM library, or the web framework, a database driver, or even your operating system.
I think the read write web changed our relationship with the Internet in very significant ways. Instead of just being consumers of information, we all became producers as well. It turned many of us simple folks into product reviewers. Reviewers of books, restaurants, mivies, software, vacation spots; pretty much everything that spans the human experience. Probably, very few of us now make any purchase decision (even when the price tag is $0) without reading reviews.
Interesitingly while I used to be a bit wary of expert reviews, I find myself trusting reviews from regular people like you and me. And it's not just me; most people feel that way. Blogging about your experience as a consumer of software libraries, databases, computers, apps, gadgets... anything... is very useful to the community at large. But that's not all; I think my entire experience of using a product changed once I started writing reviews. Just like teaching helps us learn better, reviewing helped me understand the nuances of a product which had escaped me earlier. I started seeing products with a higher mental resolution. I notied more things I liked and just as many things I did not. But now every time I disliked something, I wold try to think of the rationale; why was it designed like this? What are the alternatives? What are the pros and cons? After all I wanted to be fair. I did not want to say something negative without understanding why that choice was made. This process gave me an appreciation for the pros and cons of design decisions. I understood the effort that goes into creating a great product and how difficult it is to please everyone.
If you use things, you should certainly review them. Along with helping others make better decisions, it will also change the way you think and see the world (mostly for the better; but you will have to careful to avoid becoming a review monster).
The programming life
There are interesting idiosyncrasies, challenges, rewards, and just random odds and ends in the life of a programmer, as there are in a doctor's life or an architect's life, or in the life of any other person. As programmers we often deal with work-life balance challenges, or health (as well as sanity) challenges that come from long hours of sitting. Sometimes programmers complain about not having a life due to deadlines, and at times aggressive colleagues drive us crazy. But that's just one side of the coin. There are programmers who have managed to see the world while working because they can telecommute. We are also one of the few groups of workers who can create awesome products, single handedly, with nothing but a laptop and the Internet.
I love it when a programmer discusses how he built a standing desk to overcome health issues. Or how people deal with difficult deadlines and even more difficult colleagues. Reading a travelogue of a developer who is coding from Siberia one week and Bahamas the next never fails to warm my heart. But the icing is always when I read about how a college student created an awesome summer project which went on to become a successful product.
The confluence of programming and life is a wonderful area to write about. It not only gives hope to other programmers who are struggling with similar issues, but it also shows how we can hack our work and life to make it more fulfilling and be better humans.