5 things I wish I knew when I was a rookie dev
Published: 2020-05-10 08:10:55

From dropping out of college at the young age of 20 to co-founding a deep-tech startup, the last 5 years have made for a convoluted and enlightening journey. All this while, coding has been a constant positive in my life.

It has helped me find a sense of purpose and a like-minded global community. While I’m nowhere close to having it all figured out, I look back at some of the biggest doubts I had when I started and realized a lot of other people may have similar questions in their mind.

*(Long post warning. All opinions are personal. Also, this post is to reach out to all the budding developers and coders out there. If you are a seasoned developer, this read may be nothing more than a stroll down memory lane.)*

## Which programming language to start with?

> Any!

Just start coding in **any** popular language, be it Python, Java, Javascript, Golang, Perl, C, Ruby, Julia, Haskell, or PHP. You will soon find its elegant parts, stumble upon its quirks and begin your intimate love-hate relationship with the language. You will also discover the wonderful community behind it, and maybe you will fall in love with them!

Nearly all popular languages are general purpose and any language can be made to do literally anything ([Javascript is being used in satellites](https://www.reaktor.com/blog/node-js-satellite-means-anyone-can-space-programmer/)!), so there are no wrong answers here.

As you code more, you will discover a coding language is just like a human language, you need to learn the one depending upon the kind of niche you wanna settle in.

If you settle in Russia, some might get your English but everyone will surely understand your Russian. Similarly, if you want to settle in the Gaming world, C++ is recommended, for the client-side web i.e. browser — JS is the only option and the data science realm is ruled by Python & R.

At the end of the day, you are instructing the machine to do something, and those commands can be expressed in multiple languages. *Start thinking of a language as an abstraction layer, between you and the machine, as a medium of communication. *Soon enough you will realize that learning the art of programming is much more important than the language itself.

I would highly recommend you listen to this [Redhat podcast](https://www.redhat.com/en/command-line-heroes/season-2/hello-world), understand why and how programming languages evolved.

***TL;DR — Pick [Basic](https://en.wikipedia.org/wiki/BASIC) (I taught it myself at age of 11) for all I care, & just code up something cool!***

## Where do you start learning?

> Here!

Right here on this browser, where you are reading this. Internet is, by far, the most exhaustive resource to learn from, the biggest library at your disposal and the greatest equalizer of education. We live in an era where all the knowledge in the world is just a click away and available 24/7!

![Maybe skip school & learn from the internet (Just kidding or am I)!](https://cdn-images-1.medium.com/max/2000/0*ihhiLxtTXZolzxF6.jpg)*Maybe skip school & learn from the internet (Just kidding or am I)!*

Start with Youtube, search whatever you want to learn and start binge-watching. Try enrolling in online courses where you code along or even better, try to integrate your own random project into them and maximize your learning.

As you code more and more, you will come to realize the most significant lessons come not from orchestrated tutorials but from spending copious amounts of time beyond 3 AM on GitHub (reading open-source code by others and random issues), Stack Overflow & official documentation. It is here, the real knowledge is hidden away from all the glam and sham!

A word of caution though, before you pay for **ANY** course, try exhausting **ALL **the free resources at your disposal. *You would be surprised! most of the tutorials you would ever need are in fact **free***. Beware of all those “**academies**” promising huge packages with “**income sharing agreements**”, they are nothing but sugar-coated scams.

In my opinion, professional code tuition services may hinder the curiosity of a learner and box their talent into “**employable**” services.

***TL;DR — Don’t pay, just Google it, watch on Youtube, and reading through that dense and ugly documentation is a very important part of this long journey called learning!***

## What to code?
> Anything!

Just code up anything you wish, a game, a website, an app, an IoT circuit on a breadboard, a dummy ERP, puzzle-like sudoku or hangman, anything you wish, just code without compulsion. Check out this [Tic Tac Toe](https://kshitijpurwar.github.io/DumbTicTacToe/public/) I created a long time ago, we all start somewhere 😅.

![I once coded up a mini dictionary of 13 words with a switch case in BASIC, it gave the definition when the word was entered, quite useless but cleared up some basic concepts at a young age.](https://cdn-images-1.medium.com/max/2000/0*KUk4EP8I68kqgrBv.gif)*I once coded up a mini dictionary of 13 words with a switch case in BASIC, it gave the definition when the word was entered, quite useless but cleared up some basic concepts at a young age.*

You want to practice and learn how to think about state management, the abstractions, separation of logic, DRY principle, flow of control and data, the patterns and anti-patterns, the internal and external interactions, system design and so on. These are the foundational blocks of coding, once you master these, you can design and build nearly anything. L*earning to think on system-level is a key skill, since either you will create one or work in one!*

Just one tip, please don’t limit yourself to cliche projects like Twitter sentiment analysis or ones you build along a course, and if you do them, please put a twist in them. Cliche projects like these reek of Resume Driven Development and lack of originality! Be creative, code up something weird and unique with ***a sole aim to learn something,*** which may be useful.

***TL;DR — Don’t build your startup with your first line of code, kudos if you do, but begin coding mindlessly, and code anything!***

## Is competitive programming a MUST?
> Nopes

The [FAANG](https://www.investopedia.com/terms/f/faang-stocks.asp) fans would like you to believe that it’s a shortcut to the most glamorous jobs but it’s not. It’s like having a 6 pack abs, you surely look uber cool and might a get job at Uber but that’s about it.

It’s more than alright to not do it. It’s like building muscles, yeah you can lift 50 kg but how many people do you see on street picking up that kind of weight on a daily basis? Just be fit, develop the skills, mindset and be adaptable; given any problem, you shouldn’t hesitate to tackle it.

![There’s gymming & functional fitness, understand the difference!](https://cdn-images-1.medium.com/max/2000/1*aU5JEftB5jDP_Ad1UrL6KA.jpeg)*There’s gymming & functional fitness, understand the difference!*

Algorithmic tests are a practical method to test an individual’s logic and problem-solving who is just out of college, which is why it preferred by everyone, but there’s much more you can do to highlight your programming abilities. Understand real-world problems that people face, build the capacity to abstract & solve problems. As a dev, there’s more than communicating with the machine. In real life, people are involved, and developing soft skills is also essential!

If you believe that lack of practice in competitive programming puts you at a disadvantage, it does, but only for a few select companies, for the rest, basic coding skill and ability to learn is more than enough!

<center><iframe width="560" height="315" src="https://www.youtube.com/embed/DdmyUZCl75s" frameborder="0" allowfullscreen></iframe></center>

> “Being good at programming competitions correlates negatively with being good on the job” -- An observation by Peter Norvig when they applied ML in hiring at Google


In the short term, it can provide an edge in rat races that are college placements, but ***no one should see a lack of competitive programming experience as a handicap in their career in the long term!***

I don’t mean to discourage competitive programming, in fact, it does help a bit in building coding muscle. But in real life, a big chunk of a coding job is about banging your head on the wall i.e hit-and-trial. Anyone who believes there is a shortcut to skip this head-banging is simply being delusional.


Indians are known to be ultra-competitive owing to their rigorous education system and a flawed limited [pie or zero-sum thinking](https://en.wikipedia.org/wiki/Zero-sum_thinking) i.e. “limited number of seats” mindset. This will not take you far in the world of coding!

> Ironically in India, millions of students spend their prime years to get a unique rank in a common test! Whereas, what young India should strive is to innovate unique solutions to solve common problems like poverty, gender discrimination, access to affordable banking, pollution, climate change etc.

***TL;DR — skip it & still be an awesome coder. If you are a code Jedi, mastering these algos will be least of your worries. Personally, I find these problems as a good way to practice coding chops in a new language and [*Project Euler](https://projecteuler.net/) is probably more than you will ever need!***

## You MUST have some training, a degree or guidance!
> Not exactly

Yeah, It’s obviously nice if you have someone to guide you but not necessary, *you can be your own guide*. Yes, you will stumble and fail a lot (maybe much more than if you had help), commit lots of silly mistakes and so on. But, that’s okay!

In life, you learn more from your mistakes than your successes, so learn to embrace them!

![](https://cdn-images-1.medium.com/max/2000/1*Q32wWpyR-UkWR3vb6kZMWg.jpeg)

If you think deep enough, you will realize that these doubts are in fact not your own, they have been drilled into your brains over time by the society, and you have absorbed them as self-doubts. If you wish to become a good coder, you got to learn to fight battles alone without any help, so be brave and patient.
> *The most legendary Silicon Valley stories are about patience & passion, not pedigree.*

One key observation from my experience is that we overestimate the world’s capacity to enable us and underestimate our own capability to perform. This is why we try to find someone to tutor us, it’s because we haven’t inculcated the discipline and passion to learn ourselves!

Let your curiosity be random ( [The Bus Ticket theory of Genius](http://paulgraham.com/genius.html) by Paul Graham), discover the world & don’t try too hard!

I agree that learning and career, have an implicit causality but you will go much further in life if you let yourself be driven by passion and do something which truly moves you.

If this post struck a chord with you or helped shine a light on your personal journey then I am glad. If there is something I have left out please reach out to me and tell me. I will be writing more post along these lines in the coming weeks so stay tuned!

The next post will focus on ***how to be a dev without a degree***.

Amidst this pandemic, Blue Sky Analytics (we use AI to detect pollution from satellite data) is hiring exceptional developers. If you feel passionate about technology and want to do something to save our planet, please reach out to me on [@therookiepro](https://twitter.com/therookiepro/).