Impatience as a young programmer

  1. beginner
  2. programming
  3. learning

Programming for fun is exactly what it sounds like - fun! And you wouldn't want to spin your head for basic stuff just to have fun. So you learn the so called "easy to learn languages" like python or javascript - just like I did.

And, to your surprise, you realise that you can get almost everything done using just these two languages. Well the language, and an attitude to hack your way through problems. Now some programming gods might be yelling - "this is the worst way of doing stuff" but it is okay because you aren't making performance critical applications like they are. You are beginner and you are supposed to have fun.

As a beginner you don't want to fathom the intricacies of making complex applications. You are building programs for your pleasure, to scratch the small itches of curiosities that you have.

But things change...

As time goes by you realise that there is more to programming than just writing a few lines of bash to automate your daily task or a python script to maybe build something that is "complex" for your current skillset. This is easily visible in the web development projects, as almost everyone has built the pomodoro timer that you thought was your unique idea.

You start questioning whether you have actually learnt something or are you, still, after months, just a part of the masses?

How to get out of it?

You have to start looking beyond what is easily comprehendable. There is a reason why there are so many tutorials to build a complete todo list or a snake game but not as many good tutorials to build your own game engine (granted the one by The Cherno is pretty good, but it is still hard to follow along). It is because it is hard to break these problems down into smaller tasks, let alone explain these task to a complete beginner.

The point is: the more complex the problem or application gets the less likely it is that you will find a detailed solution for it on your first search. You will have to do the work of breaking down the problem into smaller problems and tackle them one by one. It might seem like programming just got harder, but trust me, this is actually the fun part.

If you start accepting this change in mindset, not only will there be less friction while learning, but your goals and definations for "fun projects" will also change. Rather than building a complete tool that someone might find useful someday, you will try to build a feature that will get your project one step closer to the vision that you have for it.

But if you are anything like me, you still want it done by the end of the week. And why wouldn't you. After all, it is fun to just copy code from the internet and build complete applications from the snippets that you gather. This gives you the illusion that YOU built the application because you did the hard work of copying the errors that you recieved, googling it, and then paste the answer that you found that was probably the first result for the query. Or maybe you even had to make some changes to the code that you copied. So much work! phew, that paid off. Off to the next project now.

You are no longer learning while you code. It just becomes a game of lego where you are trying to find the right pieces to stack things up together.

Copying Code is just asking someone else to build it for you

I have to admit, I fell culprit to this practise as well.

How did I recognise the pattern?

Warning : This part is my rant (out of frustration) as I am trying to learn something new myself.

There will come a time when playing with pieces of code that you do not understand will make you question your expertise as a developer. You might be developing applications for years but still don't clearly understand the tech stack that you are using. Or worst of all, like me, you never actually stuck to one and tried to understand it better.

I am realising this while I am trying to start developing small applications using C. The community of devevlopers using C are mostly really good at what they do, not to mention that C has a steep learning curve too. (aaaah, my excuses)

There are no beautiful documentations like the ones you find for npm modules. You have to either read manpages or documentation from websites that feel like they forgot to import their css files.

Youtube tutorials for popular libraries (i.e. if they exist at all) also require you to understand lots of terminologies before you can actually understand what the developer is trying to do.

And all this while you write a make file by stiching snippets from stackoverflow without actually understanding how or from where your header files are being fetched.

If you have used React, you know which components come from which files or libraries. Or in python which modules expose which methods.

Here, you just include and everything is there. Might sound convinient, but it is frustating if you don't understand what the code base is actually supposed to do. I am stuck trying to understand how functions XOpenDisplay or XCreateSimpleWindow work while still being confused why I am using the X11/Xlib.h library in the first place (probably because I read it somewhere on stack overflow)

Methods in libraries like cairo or xlib have names that are clearly intended to explain what the function is actually supposed to do. But when I see a function called cairo_pop_group_to_source as a complete beginner, I am bombarded with questions like is this popping from some stack, if so which one?, what source?, etc...

Frustrated Beginner

How to get past the frustration?

Evidently, I haven't got past it either. But I guess you just have to be patient. Isn't that how we learnt programming in the first place. Changing our understanding from "a button click leads to some action" to "a button click raises some event that can all be handled sperately within different functions" might seem understandable now but, to a complete beginner it might sound like complete jargon.

You are standing again at the same step that you were at when you first started programming. The differece is that, now you are expected to find your way forward by reading the documentation yourself rather than relying on some "content creator" to make an easy to understand version of the same information.

It will no longer be "easy to understand" but I guess thats the fun part
(I "guess" because I am struggling with this myself😓)

I don't know!