intro

I have always learned programming innately, it is the only field that I think I excel at, where knowledge is at my fingertips and I can reach it only when I focus on it.

While I do want to transcend programming and have expertise in other fields, I feel I am not done with programming yet. There is more to gain, newer challenges and exciting theories that I didn’t even glance at.

This article will serve as a reminder of my programming ideal but also as an overview of my programming journey so far.

[09-13]: a slave to youtube tutorials

I can vividly recall the first YouTube tutorial I searched up on programming; it wasn’t anything complex, in-fact, it was something rather simple now that I look at it. But before, it was extremely hard to understand the syntax.

It was an Egyptian video, because arabic is my mother language, on the basics of HTML, it showed how to create a paragraph, headline and other unnecessary HTML basics. It didn’t go over what is HTML, how to style things in CSS, or what purpose does JavaScript serve, instead I just copied whatever was on the screen.

Anytime I wanted to do anything with a computer, I reached out to my favorite friend: YouTube. I learned a lot from YouTube and the massive amount of videos it has.

This included skills like:

  • learning the basics of manipulating other people’s programs to my will
  • how to get more software power through combining two programs or more
  • getting the hand of basic command prompt shell scripts
  • finding different ways to manipulate windows

One skill that I gained through YouTube was how to teach myself something with the help of another person on the internet, it was precisely this skill that got me into the later stages of my programming skills.

I am grateful for this stage because although it was painful, it taught me persistence and built strong foundation for my skills later on.

[14-17]: LOOK AT ME, I PROGRAM.

This is the stage of using linux, building bad projects but advertising myself as one of the best programmers on Earth. I learned SSH, Linux server administration, window managers and ricing but without a sense of connectiveness. There were undeveloped concepts that I memorized but didn’t have enough time to internalize and really understand.

This was also when I showed off the most, I’d tell people that aren’t interested in technology about my various technological abilities.

A lot happened in his period from maturing due to puberty, internalizing my understanding about programming and technology, and finally choosing a path to go through in my programming journey. This stage serves as a reminder that ignorance can be bliss.

Had I known what path I wanted to take, I wouldn’t have experimented so much with technology. This stage wasn’t as painful as the previous one but was full of mistakes and optimizations I missed to see.

For example, I could have taught myself Go and Common Lisp as they later improved my overall programming skills. PHP was a failed journey because it limited my ability to program.

Whenever I programmed in PHP, I always thought “why is this so goddamn complicated?”. I thought this too in Javascript but that was before I learned about MVC frameworks. Perhaps with PHP, I could’ve learned Laravel as that framework seems to be all the rage.

Overall, I have no frame of reference for this stage, but I’d say it wasn’t too bad.

[18-19]: i can see things

This is the state that I am in right now. It’s the stage of seeing things as how they are, not how they seem. I can tell when a developer surpasses me or not, I know what to look for and where. I have enough persistence to improve and enough knowledge to have an advantage over other developers.

My technical knowledge, right now, is that of people I used to admire. I still admire other developers but the range has shrunk dramatically.

I can build projects in days or more but they would be done. Nowadays, my projects have a singular purpose that is valid for a very long time. I feel that I know the ecosystem of software extremely well and what users want.

Not that I am perfect; I am far from that but I have enough knowledge to recognize what faults to fix and what to let be. I had let go of my natural tendency to want to change what programmers think via argument and instead focus more on demonstration.

[20-23]: independence and efficiency

One of my favorite programmers is Russ Cox. Russ Cox has been programming since before I started existing. But that’s not why he’s one of my favorite programmers, it is because he knows the unix toolset so well that he doesn’t have to use programming languages.

I believe that Russ Cox has the ability to orchestrate a web app purely through shell scripts and without touching a programming language. I also believe he could make it so that it outperforms whatever I write in the language helped create, Go.

What made me believe this is his video series on YouTube, advent of code. For those who do not know, advent of code is a series of programming problems that programmers solve. Each year, a new edition is made. Russ Cox is perhaps one of the only programmers who used seq, awk, and sometimes grep to solve those problems.

That’s impressive but what impressed me more was how he incorporated acme into his workflow. For those who do not know, acme is a plan 9 text editor. acme is a little weird considering that it is a text editor without any support for plugins, themes or even syntax highlighting. I was introduced to acme through Russ Cox himself.

Eitherway, the way he uses acme is similar to how Picasso uses a paint brush. He has all these scripts that he wrote himself to help him write code. That sort of independence is exactly what I want, the ability to not need any other tools besides the one I make.

It also ties into a new philosophy I have been adapting into my work lately which is to use tools based on how much value they provide to me, not whether or not they are popular. I’d like to reach a point where I do not have to use JavaScript because it is popular, where I could use Common Lisp everywhere because, in my opinion, it is far more elegant and beautiful than any other language.

That doesn’t mean that I don’t intend to collaborate with other developers, I definitely want to collaborate and be a team player with other devleopers. But I don’t want to collaborate at the expense of dumbing down my programming ability.

Finally, I do not want programming to be the only field that I’ve mastered. Hopefully, by the end of this journey, I am able to devote my time into things that aren’t programming without losing too much programming ability.

In essence, this is what I want to do:

  • Achieve independence through gaining enough knowledge of programming that I create my own tools
  • Not let my wanting for independence hinder collaboration with other developers: Collaborate more than ever before.
  • Out grow my programming ability and venture into other fields