Grow into Programming
Tags: programming, coding, beginners, discuss
Published: 2023-09-09 18:45:11

This October marks 3 years since I started programming. Do I feel good? Yeah obviously! I love coding and my passion for programming has only grown since when I started. I love learning new stuff, trying to keep up with what’s new and just over all have a great time.

Talking cool stuff about programming however is not why I am writing this article. The reason I am writing this article is well, I wanted to talk about something that doesn’t get said very often in programming. I *know* I am not like a senior dev with all this cool experiences and anecdotes I can tell you, but yeah I can tell you are few anecdotes from my own learning experiences. So buckle up my friend. 

Programming is not something you learn. In my opinion, it is like an art form that is perfected through smart repetition and having genuine interest. Some of the best programmers I have ever had the pleasure of talking to (chatting with) are some the most humble and amazing people that really love what they do and are pretty good at it. That is something that is taken for granted quite often actually. Programming is not a skill, it is an art. Yes I know I sound like a old couple in a old museum, but I mean it. 

## Git Checkout

I’ll start with a very good example. If you are a programmer, you know what `git` is. It is a version control system used for tracking changes in software development and if you are not a programmer, think of it like Google Drive for your code (I know this definition is not right, but it is not wrong as well, so 🙂). I started using GitHub quite early in my programming journey. My first repo was just to store my Firefox config. It’s been nearly 3 years since I am in the code thing and I started using commands like `git branch`, `git checkout` and `git stash` just yesterday when I was working on a rust CLI that wraps around git and makes it easy for beginners to start out. That is how long is took me to even use the most basic of git features. 

This might seem so wrong to some of you. I mean, how can I use git without *completely* knowing everything about it. Here’s the thing. I didn’t learn git, I grew into git. You learn something for the sake of learning it or probably because you want to. Whereas you only grow into something when you need it. It is sort of like “Necessity is the mother of all invention”.

## Knowing and Learning

We often think that knowing something as completely learning it. This might be true to other sciences, but programming I feel is different. You can never really learn anything. You only know stuff and have used it enough number of times to accurately reproduce the results. That is why developers write code that is so varied. Some like to use the docs, others like to ask on forums or increase their stack overflow points, even use ChatGPT. All of these methods are valid. Because I feel that you are ultimately learning how to solve a problem. Not a learning a language.

This does not mean that I am asking you to be a script kiddie, the type of programmer that cannot even import a function without autocomplete or “looking it up”. You should obviously know what you are doing and must know a language as much as possible. But here’s the thing. You should not actively seek knowing the language as the only measure of your programming skills. This again ties into the concept of not being only a “React Programmer” or just a “Flutter Dev”. I believe once you know the basics of a programming language, to write code in another one, all you should know is the syntax of that programming language. 

One you are familiar with *any* programming language, trying out a new one should not be that big a deal. Just get to know the basic syntax of the language and implement some programs in it. I have a certain set of programs I write in a language before I am ready to actually use it. Doing this gives me confidence on the language and that is enough for me to start a new project in the language. Do I know *everything* about the language? No! But I still can solve a problem in it. I use the docs, sometimes stack overflow and ever since I got the student access to GitHub Copilot, I don’t even need to exit my VSCode or Neovim to ask AI something. 

> If you are wondering why I don’t need to exit, try this. Copilot is technically still GPT. So, if you ask it a question in a comment with `q:`, it will answer it. So, something like
    `q: what are rust macros` will get it to answer it like normal GPT.

So, all you need to know is why you want to do something, 
the rest can be figured out along the way.

## The Issues

It is wrong to assume that this is the best way to do programming.
I have never really worked in the industry, so I don’t know how it is there.
However, I don't think it would be _financially_ viable to learn as you go in a company.
I mean, you are getting paid to do something, so you should know how to do it.
However, I am not talking about the industry. Atleast for now, I program for fun, it is a hobby.

So, I don’t really need to know everything about a language to use it.
I just need to know enough to get started.
Moreover, I am mostly a project based learner.
I write code to solve a problem that most times is not mathematical.
So, I can't speak for leetcoders as well.
All these issues are not something that should stop you from learning this way, but rather short comings that should be
addressed by you later on so that you can be a better programmer.

## However

I am not saying that you should not learn a language.
You should know the language you are using.
You should try and understand it's inner workings, how it works, what it does etc.
Honestly, it is quite fascinating to know how a language works.
I am currently learning rust and recently wrote my first lexer and parser.
I am quite proud of it and I am sure I will be using it in my future projects.

Hence all I am saying is that start to treat programming like an art form more than a skill.
An art is something you can work on for years and still not be perfect.
An art is something that you can never really learn, you can only grow into it.

## How to grow into a language

Well the idea behind it is quite simple. Don't focus on the language, focus on the problem.
If you are trying to solve a problem, you will automatically learn the language.

I mean, let's say that you are writing a parser in rust.
Don't start by learning the whole of rust. Know a little bit about it, just enough to get started.
Then start writing the parser. Oh so what do you need for the parser? You need to know how to read a file.
Okay, cool. Read about the `fs` module in rust. Then you need to know how to build a Abstract Syntax Tree.
Okay, cool. Read about the `enum` and `struct` in rust.
You get the idea. You are learning the language as you go.

You are not opening up the docs and reading the whole thing like reading your favourite novel.
Once you have written the parser, you will know a lot about rust.
This is because you have used it and you have used it enough number of times to know it.
That is how you grow into a language.
You don't learn it, memorize it and then use it.
You use it and then you automatically learn it.

Similarly, you don't need to know every command and every vim movement to start using vim.
I mean, the only thing you need to know is how to exit vim. That too you know only because you entered vim in the first place.
So, don't just be stuck and sucked into these online courses that teach you how to code.
They are useful no doubt, but they are not the only way to learn programming.
An artist can never really learn how to draw. He just draws and draws and draws.
He grows into it. He learns how to draw a face, then a body, then a landscape and so on.

So, to all my fellow code artists (cringey I know), keep on coding and keep on growing.
I know I want to.

## The End

So, the next time you see someone who asks you which is the best way to learn a language, tell them that there is no best way.
There is only the way that works for you. If you are a person who likes to learn a language before using it, go ahead.
I am not saying that is wrong. I am just saying that it is not the only way to learn programming.
You can learn programming by just doing it. You can learn programming by just solving problems.

One more small disclaimer. This is purely my opinion and __not a fact__.
At this point I am just rambling on and on about how I feel about programming.
All these might be wrong and I might be a complete idiot and that's okay. So, yeah.
Take everything I say with a grain of salt. I am just a 18 year old kid who likes to code. 
I am not a senior dev or anything. I mean, I want to be one, but I am not one right now.
Maybe when I like 30 or something, I will look back at this article and laugh at myself. Who knows?
Then I'll probably write another article about how I was wrong and how I have grown as a programmer.
Till then, I'll just keep on coding and keep on growing (That should totally be a song or something).

Thanks for reading this article. I hope you liked it. If you did, please consider sharing it with your dev friends or on social media.
It would mean a lot to me. If you have any suggestions or feedback, please let me know in the comments below.
Hope you have a great day :)