Sunday, January 14, 2018

The 5 Most Valuable Lessons For Programmers

I refuse to accept the view that mankind is so tragically bound to the starless midnight of racism and war that the bright daybreak of peace and brotherhood can never become a reality... I believe that unarmed truth and unconditional love will have the final word 🌹
~ Martin Luther King, Jr.

1 f 

Preamble 😗


Boiling The Ocean

If I had to distill what I’ve learned in my programming career that spans over two decades now—and going strong—it would boil down to the following five lessons:
  1. Diversify 💰
  2. Read 📕
  3. Write 🎨
  4. Seek Mentors And Mentor Others 🎓
  5. Find Your Passion 🔥
Why five? Why not 10 or 15 or more? you might well ask… Fair questions both 👀

First, in asking me to share more than five lessons—trust me, I’ve got plenty more that I could share—you run the risk of opening Pandora’s Box because of my well-known propensity (notoriety, in the mind of some) for exploring ever-widening swathes of related ideas.

Second, this is the age of the soundbite, one to which I could have remained immune for only so long… (Trust me, I can write plenty more, secure in the knowledge that many of you will enjoy it, but acutely aware at the same time that some of you might find your eyes glazing over at my whale-like paragraphs) 🐳

Third, a happy medium of five lessons suggested itself to me; not too little, not too much. So that’s what you get this time around (Should you wish for more, simply ping me and I’ll be happy to share more!)

With that, let’s dive right in to the top five lessons that came to my mind unbidden, almost subliminally. See, this is what happens—subliminal stuff and somnambulism and scorching metaphors and whatnot—when one starts quoting Edgar Allen Poe and his squawking raven as I have in recent essays! 🐧

My Use Of The Term “Programmers"

It seems pretty reasonable to say that the image which the term "programmer" will conjure up in your mind is one of “software designers”, “software engineers”, “ computer scientists”, and such. This group of  practitioners—of which as you know I am one—lies on a spectrum so I feel comfortable in generalizing (the term "programmer") to the even broader spectrum of technologists and, frankly, all practitioners who are looking to raise the level of their game 🏄

2 f
Yes, the diving board above is there for a purpose now: to launch you into the deep blue waters of the inviting swimming pool above for some free—yes, free as in air—lessons on the practice of programming 🏊

Ready to dive right in? (Our craft is vast, and our lifetime all too brief) So let's go! 🚕

3 fDiversify 💰

See the Saturn rings in the picture above? And no, we are not entering the twilight zone of diversifying financial portfolios and bean-counting either—stuff best left to financial wizards. We are, however, very much diving head-first into the ocean that is the realm of a (sustainable) career in the world of programming. More specifically, think of this dive as an exploration of the wellsprings that can fuel your passion over the long haul 🚀

First, though, let me tell you about the wellspring of my inspiration for choosing “Diversify” as the very first lesson that I want to share with you… It goes back to an article in a programming magazine by one of my programming heroes, the late John Vlissides. Way back then, when I was designing programs in the C++ programming language, I read an article by Vlissides that was intriguingly titled “Forget C++!” I did a double take, as you can imagine, before settling down to devour the new nuggets of wisdom which Vlissides was about to share… 💰

In a nutshell, his message was this: Diversify—never allow the narrowing of your vision. And to which I would like to add that the narrowing of one's vision is right up there with the clogging of one's arteries. You'll want to avoid both! 💔

4 fRead 📕


As they say, a nation of readers is a nation of leaders. Closer at hand—as I’ve come to understand how this advice applies to the world of programming—read programs written by great programmers, programmers whose work you admire. All great writers were readers once. And while the reading process, once begun, should never really end, it simply has to begin. It is through exposure to great programs that (and this is where the lesson to read comes in) you learn how to write great programs.

I can trace this priceless listen to a piece of advice from The Pragmatic Programmers: the duo of Dave Thomas and Andy Hunt… 👬

In the end, and even if you forget everything else, please remember this: Taking a leaf from the gardeners and farmers of the world, let us—after of course taking a cue from my nemesis the Bard to get rid of all the language lawyers—go out in earnest and Read The Farming Manual (I mean, our brethren the UNIX gurus have exactly the right sort of idea in admonishing us all to RTFM) 🌾 🌾

5 fWrite 🎨


Lest you jump to the conclusion that the tools in the picture above are what I use for writing, I should hasten to add that—much as I wish they were—they are not. Alas, and this is a long story, we stopped writing (I imagine this applies to the vast majority of fellow humans on planet Earth) in longhand. Sigh…

But all is not lost; we have at our disposal a reasonably good set of alternate tools to ply the craft of writing (both prose and programs). Yay! 👓 📘 💻 📌 📗 📙 📕

"No impression without expression", so goes an intriguing adage that I came across in the pages—gulp, I do confess to having been a fan boy, decades ago—of the once-venerable Readers Digest magazine. So what does this have to do with programming? Nothing, and everything! Let me explain…

Tying this lesson back to the previous one—the advice to “Read”—while reading is a great start, it is just that: a start. To get anywhere, you simply have to take the next step, which is to write your own programs and thereby hone your proficiency at writing programs (Should you ever start forgetting, remind yourself that programming is not a spectator sport!). Other things remaining the same, the more you write, the better you get (within reasonable limits such as taking crucial aspects of, for example, feedback and quality) 🏇

6 fSeek Mentors And Mentor Others 🎓


See the warrior in the image above, fearlessly standing his ground even as he wields his weapons to slay the complexity monster? He is doing it alone. However, much as there is a rightful place for heroics, it doesn’t have to be that way—there are saner approaches to taming the green-eyed monster that is the sprawling expanse of software writ large… 🐉

Everyone was a beginner once, on their way to becoming a journeyman, and then an expert. And this is where mentoring comes in: seek mentors, and once you become an expert yourself, please make sure to keep the virtuous cycle going by mentoring others!

7 f

Find Your Passion 🔥


As you take in the time-lapse photography in the lovely picture above, I want you to keep in mind the overarching, all-encompassing slant that I hope you will see permeating the ethos of the picture…

If I had to boil down all the lessons I’ve learned in the practice of programming—distill everything down to an uber lesson—this would be it: Go and find your passion… 🔭

And I’m not talking about some fairy-tale romance or arabesque musings. No, nothing of that sort; well, mostly nothing of that sort. After all, passion and prose do have to connect somewhere, they do have to intertwine something… 🍒

But what I have in mind, and what I want to share here—without this particular lesson turning into a whole new essay of its own—is far more workmanlike (and work-woman-like, to be sure!) It is simply this: motivation is hugely important, so take up this business of finding your passion in great earnest! Let me share a pointer or two in this connection:
Good enough for now?
8 fEvery book, remember, is dead until a reader activates it by reading. Every time that you read you are walking among the dead, and, if you are listening, you just might hear prophecies.
~ Kathy Acker 😽
9 fIt is good to have an end to journey toward; but it is the journey that matters, in the end.
~ Ernest Hemmingway  🚂

11 fTo honor the overarching (undercurrents of the) theme of the oneness of humanity which I've done my best to honor in this essay, and the imprints of which you may well have discerned in the images I’ve carefully chosen, let’s bring this essay to a close with the following two memorable sets of words, lyrics really—the first set from Pink Floyd and the second from U2—which reaffirm that the most important lesson of all is to keep our faith in the oneness of humanity as the basis for what is the very best of spending the fleetingly little time we've been given on the wondrous planet that we call Earth… 🌍
Hey, you!
Don't tell me there's no hope at all.
Together we stand,
Divided we fall.

~ Pink Floyd (Lyrics from Hey You)
🍒
One love
One blood
One life
You got to do what you should
One life
With each other
Sisters
Brothers
One life
But we're not the same
We get to
Carry each other
Carry each other
One...life
One

~ U2 (Lyrics from One) 👫
12 f

2 comments:

  1. Nice post Akram. What books would you recommend to programmers around these five lessons ? Would you recommend reading The Pragmatic Programmer ?

    ReplyDelete
    Replies
    1. - Thanks, Shahbaaz! (Comments from readers like you make my day, every day!!)


      - First, let me address your second point, which is actually your second question ("Would you recommend reading The Pragmatic Programmer?") Here we go: It just so happens that this is the book that set me on the path of continuous learning, so it has an especially soft spot in my heart... You simply can't go wrong with getting yourself a copy of the venerable book that is The Pragmatic Programmer!


      - Second, and this is to your first question ("What books would you recommend to programmers around these five lessons?") is a deep one, and really requires a brand-new essay of its own! Stay tuned in a future installment right here on Programming Digressions!!
      - Meanwhile, I will now (and this is specifically around two of the five lessons, the ones simply entitled "Read" and "Write" respectively) point you in the direction of a handful of essays that appear elsewhere (on this blog), and which address these (two lessons) directly:

      [1] ....On Writing: Or How I Write
      [2] ....On Writing: Or Why I Write
      [3] ....On Writing: Or Now I Write

      Delete