7 Life Lessons From A Self-Taught Programmer

I always had a thing with languages. For some reason, I always found it easy to learn them, and had a great time using them. Surprisingly enough, I followed a tech high-school, majoring with a diploma as a programmer in… FORTRAN. After that, I went to the University of Letters in Bucharest, where I studied Romanian and French literature. And in the last 10 years I had my own online publishing company, where I wrote more than 70% of the source code for the underlying software platform.

Why I’m telling you all this? Not to show you that my career life was a roller-coaster, if you read my blog for some time you already know that. But because there’s a link between spoken languages and programming languages. At a certain level, they’re both a vocabulary over a grammar. A programming language can be learned and applied just like learning French or Japanese.

Reality Is Created With Words

If you ever learned a foreign language you remember that special feeling of expansion, both inward and outward. It’s like space is growing around you. And that’s because every time you learn to describe the world in a new language, you actually redefine it, you reinvent it and enjoy it as a completely new reality. L’amour en Francais it’s a completely different thing from love in English, or from dragoste in Romanian. They’re actually new realities. Learning a new language is a beautiful travel.

Now, a programming language is almost the same. It enlarges your mind and gives you access to areas in your life that you didn’t even know they exist. It puts you in uncomfortable situations and forces you to solve complicated problems. Every new app that you start coding is like a trip to Thailand with only a pocket Thai dictionary. When you start the app, you barely know how to say sawasdee, but at the end of it, not only you know how to have a conversation with the locals, but nobody will be able to tell that you have an accent.

7 Life Lessons From A Self-Taught Programmer

I recently finished a very dear project to me, an iPhone / iPad app based on my own life management framework, Assess – Decide – Do. The app is available on the App Store, by the way, and it’s only 3.99. It took me 30 days to put together the first version, but around 90 days in total to have a solid, mature and feature packed app. During this trip, I had an incredible time, learned tremendously and thoroughly enjoyed every breakthrough. What follows is a collection of life lessons learned as a self-taught programmers, mainly while I was coding iAdd.

1. Bugs Are On You

Always. Don’t blame the compiler, the lack of documentation, or the horoscope. You made a mistake somewhere. At some point, something happened in one of your Assess – Decide – Do cycles (yes, you have those cycles even if you’re not aware of them) and you screwed something. I spent countless hours trying to find a flaw in some class or API, basically banging my head against the wall by not accepting that I was the source of that mistake. A typo, a bad copy/paste, or whatever: every bug was in fact my own responsibility.

It’s the same thing in life. If there’s something wrong, check your own history. Don’t blame somebody else. It’s not the universal compiler’s fault (if there would be such a thing like a Universal Compiler, anyway). There’s no glitch in the Matrix. There’s no failure in the Universe. It’s in you. Look in the mirror and try to find out what you did wrong. And then solve it.

2. You Have To Face The Problem, Detours Are Not An Option

Even if you don’t like it, in programming you have to take the most “difficult” path simply because there are no other options. Workarounds are fragile. They may solve the problem for the time being but their fragility will show up the moment you’d want to expand your app. Do it the right way, fix the problem for good. Or, if you settle for workarounds, expect things to blow in your face the moment you’re expecting this the least.

It’s like in life: you can’t live in a continuous status-quo. You gotta take responsibility for your choices, climb the mountain you have to climb, because the solution is always on top of that mountain. You can’t take a detour. Or if you choose a detour instead of facing the problem upfront, you may overcome some temporary difficulties, but you won’t find the real answer. The real answer is always on top of the mountain.

3. Today’s Problem Is Tomorrow’s Laughter

If you learn constantly, what seems difficult now, tomorrow will seem like a joke. Not only once I hit “impossible” situations in my coding, but staying with them long enough made them fade away. I remember the feeling of frustration and powerlessness every time I had to learn something new. Every time some new class showed up, some new algorithms appeared and I felt like I will never finish. But I did. And I laughed at my own frustration afterwards.

If you really take the time to look back at your life, you’d be amazed how far you’ve already gone. Just try to remember how was your life 5 years ago. How much was changed in your financial life? In your personal life? In your career? If you did your homework well, as in the number two above, the answer will amaze you. But if your answer will fill you up with sadness and frustration, go back to number two above and climb your mountain.

4. Good Focus Builds Good Things

The temptation of having something running out as fast you can, publishing it on the AppStore and waiting for the cash to pour in is big. Tens of thousands of programmers are hitting this road just like the gold rush in Wild Wild West. But if you look at the top 10 apps they’re all solid, verified, tested and really polished apps. Hurrying up is not a good solution. Especially in a highly competitive ecosystem like the App Store.

They say “all good things come to those who wait” for a reason, you know? You can’t expect to go on with quick fixes for ever. And yet, the perspective of waiting will frighten you up. So bad, that you’ll just run with something that works for the moment and lose sight of the big picture. Doing things incessantly, just for the sake of coping with your day to day challenges won’t take you far. Take some time to think things over.

5. If You Feel It, Do It

Many times you won’t have the tools to query your user base about the features they’d want in your app. You’re either an indie developer (like me), or the company doesn’t have a budget for creating focus groups or there’s nobody watching the forums, etc. Fact is you’ll have to rely most of the time on your own intuition when it comes to adding or eliminating features from your app. So, if you feel like something new will fit in, just go for it.

Of course, there will be times when you’ll be hit by the “feature diarrhea” but that’s a risk you’ll have to take. In time, you’ll develop a fine sense of what’s appropriate and what’s not. And you’ll grow that sense by practice, by direct interaction, by doing stuff.

That’s exactly with life decisions. When you feel it, go for it. Don’t delay, don’t ask for permission. You know better.

6. Be Neat

If you ever wrote a project with more than 5 source code files, you know that managing those source code files can be a nightmare. At this point, iAdd has almost 200 source code files. It would have been impossible to manage them without being organized and neat. By the way, iAdd was developed from the idea stage to the final implementation stage using Assess – Decide – Do, my life management framework. Without a formalized methodology in place, the project simply wouldn’t have been finished. Never.

If you have unfinished things, unspoken sentences or forgotten promises, uncover, speak out or fulfill. Don’t leave things floating around, hoping that someone else will come over and take care of them for you. Nobody will. It’s only you and your life. Keep it in order. Even if you did a mistake, a neat mistake is far easier to be repaired than a complicated one.

7. There’s More Than One Way To Skin A Cat

And perhaps more than 10 ways to implement an algorithm. In my early days as a programmer, I always was afraid there isn’t any way to do it. Now I’m afraid that I won’t choose the right way to do it. You always have more choices than you think you have. The same algorithm can be implemented in dozens of ways and a problem can be solved in thousands of ways.

That’s the same in life. If in the beginning you’ll be afraid that you won’t reach your goal, as you advance and learn, you’ll be afraid that you didn’t chose the most simple and effective way to do it. The subtle lesson here is that there are always solutions. Abundant, flowing and ready to be used. Embracing risks and daring to be different will teach you that nothing is impossible.

Nothing.




32 thoughts on “7 Life Lessons From A Self-Taught Programmer”

  1. Dragos,

    I came across your blog searching “the life of a programmer”. Thanks. Very well written. I am at a crossroad in life and want to make a career change. I have considered a career in programming/IT but have been very hesitant to pull the trigger. I find your words very inspirational and comforting. Its June of 2014, and I have committed to starting an MS in Computer Science program in the fall. Thanks again.

    Rich

    Reply
  2. Hey great article…am a self-taught PHP developer and I agree it’s really tough learning new algorithms every time and the technologies change every day. It just takes determination and passion. love what you do and you will survive

    Reply
  3. More than one way to skin a cat, indeed. Debating approaches to a problem with programmers has led to some of my most interesting conversations of late- I especially like trying to apply coding logic to planning a weekend or getting a new perspective on a relationship issue.

    Reply
  4. Hi Dragos

    Inspirational and great advice! I am 22 and i have been studying for 2 years changing my course twice! nutrition then dental. Now i have no choice but to change again due to circumstances and i can only do tafe. If i do a diploma of IT webiste development and its duration is 12 months, is it possible to learn all that in a year and then be employed???? Just wondering because i don’t want to waste anymore time! the only coding ive tried is very small amount C++ and it was ok!

    THankyou!

    Reply
  5. When I am stuck with solving a problem, I pause for a while, stand in front of the mirror and tell myself. I can do it or it is possible. The moment I say that all my fears diminish instantly. Your articles are really inspiring. Keep up the good work.

    Reply
  6. Reading your post made me remind myself. Definitely, we both have the same paths. I studied for electronics engineer but I have the same love for programming. That means all programming languages I have learned I have done it by myself. And I had to pass for all those points you mentioned there. However, I have many things in my mind that I often drop some projects for going after other projects. Thank you for sharing.

    Reply
  7. As a programmer and language freak (currently learning Icelandic) I completely subscribe your words here Dragos. Learning a new language is seeing the world with different lenses, and learning a new programming language changes completely the way you can program. Programming in an imperative language vs a functional language vs a stack based language… All different paradigms, al different mental models of the algorithmic world. I love these differences.

    Cheers,

    Ruben

    Reply
    • Icelandic is cool. Or cold, I guess 😉 And yes, I love those paradigms too and the way they’re literally enlarging your vision. I mean Objective C is a bitch, but once you got the grasp of it, it’s really cool. Or cold 😉

      Reply
  8. “Bugs Are On You”

    Every software has bugs 🙂 If you haven’t found a bug – you haven’t looked hard enough. (Forgot who said it)

    For me the biggest thing to discover in programming (in 20+ years of programming) was top-down approach. That was a real eye-opener. Still use it.

    Reply
  9. Well said. Adopting minimalism in all aspects of my life has is slowly helping get rid of overwhelming feeling of organization that has haunted me the past few years. From my experience being persistent, consistent and (VERY) organized goes a long way to accomplishing goals.

    Reply
    • minimalism is cool (noticed how I wrote it with a lower “m”, just to be in the trend? 😉 ) What bothers me sometimes about it is the hype. So was break-dance 20 years ago…

      Reply
  10. “In my early days as a programmer, I always was afraid there isn’t any way to do it. Now I’m afraid that I won’t choose the right way to do it.”

    I love this Dragos! Sometimes too many choices is far worse than not enough.

    Reply
  11. Hey Dragos,
    I remember Fortran!! Or maybe I should say…I remember studying Fortran (I … don’t remember how to write in Fortran any more!!).

    Love these lessons you gleaned from this time working on iAdd. Number 5 is especially meaningful to me right now – so this is also good stuff for me to soak into my soul…

    Reply
  12. Wise insights. Having studied a semester abroad in Spain last year, I understand exactly what you mean about another language being a new reality. Not to mention that when you speak that language- and particularly when you do so with other human beings- you explore a completely different part of yourself. I found it absolutely liberating.

    I believe that mastery of any skill to the level you describe involves the internalization of the underlying principles of a successful life. This makes sense, as life is comprised of activities. While the principles remain the same, it can be very insightful to learn how these principles can be seen through different activities and skills- and even more insightful to experience it, as you have with programming.

    Nice post and nice blog. Consider me converted.

    Reply
  13. Nice job Dragos – you always come up with the best computer analogies to relate to personal development, and I am not even a programmer.

    Sorry that we have sort of lost touch within the past few months. I hope to be commenting much more in the future.

    Reply
  14. Thanks Dragos,

    I’m really interested in computer programming and your 7 lessons re-inforce what has been at the back of my mind and helped bring it forward a little. I especially like the analogies to life in general.

    Reply
  15. Hi Dragos,
    I’ve always believed that thee is no better school than the school of hard knocks… it is important to remember that suffering is not a prerequisite. All my business ventures have had many challenges… when I awakened to the idea that they need not be suffering ordeals progress comes quickly.

    Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.