Introduction
While the title of this article may appear to be about my 25 years of Coding – What I learned. This article is not about me but mostly about you and how I can potentially fill in a gap in your void with my experience.
This may seem like a long article and read to you so please grab a relaxing chair your favorite drink and get ready. One thing I can promise to you is that I will try to make this as entertaining as possible to you.
We will go over the good, the bad and the ugly situations I had over the years and how I managed to cope and deal with them at every stage. While I experienced certain things earlier in my journey it doesn’t mean those will happen to you at an early stage too and vice versa.
Everyone has a different learning curve and the way they learn and absorb things. I am certainly not great at it and a lot of times I had to learn the hard way.
So lets dive right into it and explore the lessons I learned over the years.
How To Improve As A Programmer – Learn To Be Patient
I’m going to give you an inspiration quote on each section to make this a bit more fun.
For this one I think Alan Watts says it very well.
“Muddy water is best cleared by leaving it alone” — Alan Watts
This one took me a long time to fully grasp. When you start programming in general there tends to be a big enthusiasm. You write your first application it runs and all of a sudden you hit your first milestone. This is great and has a feels good effect and you are looking forward to taking a next big step to your success.
This is where most of us fail over the years. Let me explain when I started out I wanted to start skipping steps and taking shortcuts in order to feel good and brag to my friends on how fast of a learner I am.
What I did not understand (I was very naive) was that in programming there’s no shortcuts. Period let me say this again there are no shortcuts.
Sorry for repeating myself but the sooner you come into terms with that the better of a programmer you will become. But since I don’t want you to just take my word for it I will give you a one sentence examples of where this really hurt me.
- I did not fully understand memory management and I started using an unmanaged language like C. The end result was that I did a lot of things wrong and my applications where never optimized and a lot of times ended up in memory leaks. What I should have done was to be more patient and understand the fundamentals of memory allocation.
- I skipped the lessons on concurrent programming so when I wrote my first multi-threaded application I ended up with deadlocks. Deadlocks for those that do not know is when two parallel executing tasks compete for a resource and no one can get it. What I should have done was spend a bit of time understanding parallel programming and particularly multi-threading.
- Differences in low level networking stacks. I often made wrong decisions and used in applications TCP instead of UDP. If I had spent the time to understand the strengths of each of those two technologies I would have had lower latency applications that performed better.
My list could go on forever but the point I’m trying to make here is that you need to learn to be patient and take it one step at a time. If you skip over things you will end up in trouble and it will be costly to you and whomever you work for.
How To Be A Better Coder – You Are Always Going To Be Learning New Things
Since we are in the quote game my favorite one here is Einsteins quote on:
“Education is what remains after one has forgotten what one has learned in school.” — Albert Einstein
Basically the point here is that you never stop learning especially in technology more so than any other field. As you know Technology evolves at a very fast pace and there’s a lot of permutations of things happening.
In order to stay ahead of the curve you need to keep the mentality that anyone and I mean anyone even someone starting out could teach you something new or correct you on something you thought you knew.
So stay humble and continue to learn. In my experience from managing a lot of teams of very senior and junior people I have seen it all happen. And guess what the ones that are not humble and feel above and beyond everyone else are usually the ones that stay behind of the curve.
So when I see a really senior guy on a team being certain about his skillset and not open minded then that’s a red flag that tells me I should keep an eye on them as they will eventually slip off and make a mistake.
Please do not be the one that thinks they know it all and falls for it. Programming is a very difficult thing to learn and the way things are changing you will just never be able to know it all. If anything at least keep a window open when someone comes to you with a suggestion. At the best case you will be able to learn something you didn’t know and at the worst case you will re-assure yourself what you knew is still current.
In my opinion the most important part to understand here isn’t that your knowledge is not good or you misunderstood something, it’s more if you have stayed up to date to what is the best solution to your problem. Sort of like a catch22 where the technology train will always outpace you.
How To Become A Good Programmer – Practice Your Skills
So here I think I have a fun quote this time from Bruce Lee.
“I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times.” — Bruce Lee
Practicing is the mother of success when it comes to programming. You may consider yourself a proficient coder in theoretical level and may have read a lot of books but you will never succeed in your career unless you start practicing.
When I say practicing let me be clear I don’t mean periodically revising old things and stay up to par with the current technologies. I mean doing a lot of repetitive tasks you think are easy and you understand until you master them without any faults.
There have been numerous times I start doing a task thinking it would be easy because I knew the theory behind it and in my mind it just clicked but when I started practicing and trying to automate do it properly I found struggles that I never expected.
As they say the devil is hidden in the details this is very true and you can only find out about those details when you start doing something over and over again. While most people may say you are doing monkey work (no offense to monkeys) they are actually failing to understand that being a good programmer and delivering requires you to do these tasks flawlessly. Remember in computers the result can be either a 0 or 1 there’s no in between in other words it works or it doesn’t.
You can only know if you bring the task to completion several times without failing.
How To Better Your Coding – Don’t Compare Yourself To Others
There’s too many good quotes here to choose from but there’s one sticking out for me and resonates very well with the programming paradigm, this one comes from Oscar Wilde.
“Be yourself; everyone else is already taken.” — Oscar Wilde
There are several reasons as to why you want to stick to your own path and journey and not compare yourself to others. But when it comes particularly in programming it becomes even worst as the ecosystem is so diverse that you will always find someone that’s better than you at this something you never spent time on.
Think about it for a bit lets say you are a perfect C programmer. And then this new function comes out in C that you know nothing about. Someone brings it up in a conversation and obviously you are caught by surprise. Now if you were to start comparing yourself to them you’d think wow I thought I was good at C programming but didn’t know this detail.
As you can see it’s easy to go on a tangent here and basically get lost in a meaningless train of thoughts. Since the C programming language is pretty much endless when it comes to libraries and other things you can basically never win. Similarly this holds true for every other aspect of technology the possibilities are endless so do yourself a favor and stick to your path and don’t compare yourself to others as this will just have negative consequences for you.
How To Reach To the Next Level As a Coder – Keep A Positive Mindset
How can I not put here one of the most inspiration/positivity quotes ever.
“Only when it is dark enough can you see the stars” -Martin Luther King
The true essence of being a good programmer is being able to overcome your own self. Basically since it’s you and the computer most of the time coding is a lonely sport. You better get used to facing yourself for the majority of the time.
There have been numerous times for me that I had to face my own thoughts and often times this sucked up my own resources and time. Eventually I started learning how to mute them and keep my attention to something positive.
I remember a time where I used to debug a kernel bug which kept happening at random instances. It was very hard to reproduce and it required a very tedious process to get through.
The lessons I learned while I was trying to fix this issue where priceless for the rest of my coding journey. I learned how to be patient and keep a positive mind that I will eventually solve it. You can think of a lot of the coding problems as puzzles that take patience and positivity to be solved. Often times when I solve a puzzle I like to see the end result in the enclosure box. This reminds of how things would be when it’s completed.
Similar in programming it’s imperative to visualize how things would be once the solution is there. This will keep you going in the difficult times you’d have debugging and solving problems. After all we as programmers have to learn to operate under assumptions and those assumptions can only come if you see the end game.
How To Stay Motivate As a Developer – Motivation
Oh boy this is probably one of the biggest things I struggled with over the years. And for a good reason I left it for the end since I think it’s very hard to explain it to someone. Ultimately I can tell you this is a very personalized thing and it roots down to how badly you want something.
So while I can tell you a lot of stories about myself and how I stayed motivated to finish difficult programming tasks in this particular section I think I’m going to let others that are much more famous and popular than me tell the story. Yes my little humble experience as a developer I did spend and struggle with this over the years but somehow I almost managed to come on top of things.
Over the past 25 years of my coding career I have been hit with everything around the sun here’s some things I can list:
- Money problems (this was the biggest one)
- Health problems
- Existential problems (no this isn’t mental related I mean physical ones)
- Self integrity and confidence problems
Without wanting to flood you what I’m trying to say is that we all get hit by something. Life has a way to get the best of us at different times. The question is how do you recover from them or not even let them get to you.
Besides hitting rock bottom which is a difficult one to recover from some people just have the experience needed to simply ignore those situations. So you’d ask how do some people have the courage to keep going as if nothing happened? Are they just ignorant or completely naive? Or have they really trained their brain to cope better with these things?
The answer I think is somewhat a bit of everything. Some people are just naturally less sensitive to things while others need a lot of mental work to overcome issues.
How To Keep Going As a Programmer
In my experience I found myself more on the sensitive side of things so for me it took a long time to recover from things and resume my coding at difficult times.
Having said that programming in general is a very mental task and a lot of times it messes with you at very deep levels. Especially if you are trying to solve a difficult problem that you do not readily have the solution for. If you compound external factors into it then this task may be even harder and get you closer to abandon the code as an excuse. I can tell you these thoughts almost always cross my mind when this happens. And now this is up to you to ignore them and keep going and here’s where I think I’m going to give you the first inspirational quote.
“If you can’t fly then run, if you can’t run then walk, if you can’t walk then crawl, but whatever you do, you have to keep moving forward.” — Martin Luther King
The above simple says even if you can’t make a lot of coding progress in your task at least make some. This could mean as simple as opening your editor and writing one line of code. It can also mean not opening your editor at all and just taking a notebook and trying to solve the programming riddle you are trying to solve. I have used this method successfully in the past and it worked very well for me, in fact most of the times it motivated me to go back into coding very fast.
How To Never Give Up As A Developer
Moving into another one from my favorites come from Elon Musk which I think is pretty self explanatory but it’s very powerful.
“No I don’t ever give up. I would have to be dead or completely incapacitated” — Elon Musk
The assertiveness in the above statement simply leave little benefit for your brain to think about alternatives or cops out. As you know our brains are very much like machines what thought you feed it in it takes it almost for granted before you even fully comprehend it. So if you tell yourself I don’t ever give up this is what it’s going to do. This is so powerful that I was able to recover a project once that I was coding for over 3 months and I had hit a big road block that was very difficult to debug. Also since it was pretty much unknown and no one had attempted it I couldn’t get much help from the community simply because no one had experience on what I was doing.
I remember replaying this quote in my mind every morning when I was drinking my cup of tea until it fully set it. Eventually I grabbed my notebook changed scenery completely away from my computer and went to one of my favorite coffee places. I sat there for hours until I solved my problem. Sure enough in a 3 hour time span (yes that short) the solution simply came to me.
I sat down and drafted a quick architecture of my solution before I forget any of it and then I took the notebook went back to my home and implemented it. To my surprise the problem was solved successfully. The lesson learned here is that you don’t want to leave any gap to your brain to deviate and think it has a way out. Tell it you can only leave if you complete the task!
How To Stay Determined As a Coder
Finally and closing I will be addressing potentially the hardest subsection of motivation for me. This is basically understanding and exploring the full potential of what we can do. The best quote that comes into my mind here is:
“Incredible things can be done simply if we are committed to making them happen” — Sadhguru
The above statement is very simple. It says once you commit to something you can achieve the things you can never imagined you can. Often times we limit ourselves by using the past to determine what we can accomplish in the future. This is basically a trap as it locks us into our memories and things that have already passed. Not only have they already passed but they may be negatively influencing you at the current moment.
Once you deeply understand that your past has nothing to do with what you can do in the future everything is possible.
As an example I’m going to use a company I started back in 2015. Basically at the time I was leaving my 9-5 job and I wanted to enter the entrepreneur space as a rebound to my previous failed one. While this could seem easy to recover it was a very daunting and difficult for me as it was tied to a failed attempt many years ago. So naturally I had to overcome this and also be able to see forward to something new, something better.
At the time I had an idea on making basically a specific device lets say that monitors the network. It had a few aspects that companies needed and I knew it was a niche. I had researched the competition of applications and the existing landscape on similar apps. I had not been able to find anything similar in the space so I knew if I tried it I had a 5-10% of success.
Luckily Sadhguru’s quote still echoes in my mind when I took the plunge and went for it. Many years later with a lot of work hitting basically every aspect that I spoke about in this article it ended up being successful and autonomous.
What I am trying to say at the beginnings I did not know the capabilities of what I could do I just knew that if I pushed through with it I will eventually succeed. Every project is very explorative in the beginnings and there’s always unknowns, ambiguity and frankly even simple things such as implementation, scaling the code etc. Your mental is the most important part on how you approach it this is why you need to have a framework before hand to be ready to tackle it when the time comes.
Conclusion
If you found this useful and you think it may have helped you please drop me a cheer below I would appreciate it.
If you have any questions, comments please post them below or send me a note on my twitter. I check periodically and try to answer them in the priority they come in. Also if you have any corrections please do let me know and I’ll update the article with new updates or mistakes I did.
Out of curiosity did you learn anything from my article if so what was it?
You may find some articles I have related programming languages useful below: