2018-07-31

My technology story

https://www.youtube.com/watch?v=PwXOgzmTbVU

So recent events has made me realize that my knowledge of programming has surpassed a amateur hobbyist to a more professional level. My code performs very well, is well documented and easy to understand, follows best practices in the industry, and is future-safe i.e. won't stop working in the coming years. I would like to say that these things come naturally to me, but it tooks me a lot of hard work and time to get to this stage. Calling it hard work feels like cheating, cause I was having a lot of fun on the way. There were hard moments, but the frustration only resulted is amazing moments of catharsis when I finally understood something.

However, I don't think it should have been this hard. If I had a guide, I might be twice as good as I am today. However, that wouldn't have been very fun, because I take pride in the fact that I learnt everything using only free resources from the internet and was motivated by the power of sheer curiosity.

I also feel like I'm lying a bit when I say that I learnt everything on my own. A teacher is defined by the Oxford Dictionary as "A person who teaches, especially in a school." So technically, I had a lot of teachers along the way. The authors of the articles I read, the people who made the videos I watched, and the software engineers whose comments I read to understand the state of the industry. I will never be able to personally thank all of the people who helped me get to where I am today, but I am very grateful that there are people out there who want to see the world learn and become a better place.

I got my first computer when I was 5 years old. Well, it wasn't really my computer, it was meant for my dad, but he didn't seem to use it very often. He occasionally managed his finances using Excel and checked his email. It was open to use for anybody else for the rest of the time. Although my memory of this period of time is hazy, I think I was encouraged to learn to do things on the computer. I remember opening a Excel book that was on the computer desk and going through the exercises listed in them. I think I got past half the book before I got bored. I loved Excel. Not because I loved doing boring statistics or anything, but because it would calculate things so fast! I was mesmerized by the fact that you should drag down a formula to calculate a lot of values without having to copy-paste formulas or having to do them manually using the calculator. Not that I didn't like calculator, they were my sole source of entertainment when my parents went shopping for gold, something that I hate till this day. Stupid shiny metal that means nothing and has no uses in a household...

Anyways, yeah. Excel was fun. A phenomenon that I think was critical for my learning started with it. That Excel book, after I was bored with it, stayed on the desk. And a year later, I came back to it and relearned half of the book. And the year after that. I think this cycle of constant relearning kinda embedded general programming concepts in my brain, like what a variable or a function was.

I didn't do much programming for the next few years, because it was the age of the internet. You could play so many free games online. You could make an email address, and talk to people around the world. I was an avid penpaller, so penpals and games took the majority of my time. However, you see, a decent number of these games ran on Java. And oh boy, Java sucked to run games. Sometimes the games would not run even though nothing in the computer had changed. So that's when I got good at troubleshooting. I would systematically list out possible situations where something might have gone wrong, and then start from the bottom and ensure that those parts were working properly. I was really good at it. A lot of children love playing puzzles, I loved fixing problems with computers. I became quite notorious among by relatives and friends for being good with computers. I would fix a lot of problems that they would have.

This got to my head, but in a good way I guess. I started reading up more into computers. I looked up the latest models of things. I became a walking book of computer recommendations. Everybody asked me what laptop they should by. For a kid, I was elated when someone took my advice. This was a feedback loop, and I kept up on the latest technology news everyday. That was the favorite part of the newspaper that my parents made me read everyday (for a while). I kinda liked reading the newspaper, and still read the news faithfully till this day.

Anyways, yep. I was the tech kid. But you see, I didn't have the tech I was recommending to people. That rusty 5 old computer was still the one that I was using. I became a spoiled brat and forced my parents (crying was involved) to buy me a PS1 and a PSP (The Sony equivalents of a Nintendo Gamecube and DS). So I had fun playing games, until I got bored of them. I needed new games, but games were really expensive. Luckily the video game store where I got my PSP from were specialized at cracking PSPs so that you could play copied and pirated games on them. I got that procedure done, and now I could buy games from them for very cheap.

However, I didn't get enough games. I needed more. but they were too expensive. So I looked online. I found ways to download those games myself. I waded through sketchy forums to find myself download links without viruses. I figured out the way to get them on my PSP. I also figured out a way to crack the PSP myself, which I did when my first PSP broke and my parents got me a new one. Even though that process was kinda annoying, it taught me a lot about technology. The restrictions that manufacturers place on them and how to circumvent them. The most important skill I learned from my PSP days was downloading and installing software.

I feel like most people don't really try out new software often. They get comfortable with what is working for them, and they stay that way. I completely understand why they do that. However, I didn't have a comfort zone with my PSP. Every single software could have bricked my computer or have given me a virus. I learned to identify trustworthy sources and good quality software. I had to find software with a decent following behind it, otherwise my PSP would not get any more updates and I would be unable to play the latest games.

While my PSP exploits were happening, I was doing a lot of penpalling. Somehow I realized that the way you add colors and effects to an email was the same way you add those to webpage. I wanted to appear cool to my penpals. I sent emails with so much color and text formatting that I would probably throw up rainbows if I saw them now. It's ironic, given my minimalistic taste in design now. The email clients gave me basic options to format my text, but that wasn't enough for me. My penpals had free email clients too. I needed to do something that they couldn't so that they could be amazed. I needed to learn HTML, the backbone of emails and the internet.

My penpals and I would share so many cool websites. I wanted to make something like them one day. I was very good at school, and barely needed to study. I had plenty of time to acheive that goal. So I set out to learn HTML. I used w3schools to learn it. I'm not linking that website cause turns out, it has a lot of errors in it. But I learned HTML. I could make basic websites. I couldn't put them anywhere online though. All I could do was send them via email or show them to people when they were physically there. I definitely impressed people, but it wasn't enough. I needed to make them look cooler. I needed to get them online so that the entire world could see and witness my creations.

So I learned CSS to make my HTML look better. It didn't take long. However I was obsessed with getting my website online. Luckily for me, that was around the time when free hosting sites were becoming a thing on the internet. You could upload your HTML, and it would be visible at vijay.000freehost.com or something of the sorts. I used them, and felt really good. So tried to start a website to write reviews, cause I was on review websites and lot and wanted to write my own.

It was a lot of effort. I had to manually write a lot of HTML in order to get even a single post out. And nobody read the website of course, cause I was a kid. But I didn't care. Fame was just around the corner. I just needed to crank out more posts and reviews. However this slow HTML writing wouldn't suffice. I needed a faster way of doing things. I need a CMS (Content Management System) where I could easily click new post, type the text in, format it quickly and click publish.

Meanwhile, while my HTML efforts were going on, I managed to convince my parents to get me my first smartphone. It was an LG Optimus One. It was wonderful. I still love this phone. I could do anything and everything with it. I spent a lot of time "rooting" the phone so that I could install anything I wanted on it. This was important, cause I learned an important thing about computers (which phones are). You could have different operating systems.

You see, the default version of Android on the LG Optimus One was notoriously awful. The manufacturer modified default Android to make it look unique, but they ended up making the phone super slow and kinda ugly. I wanted to change that, and go back to how default Google Android looked. In order to do that, I had to install a custom ROM. I had to reinstall the operating system with a different version from the internet. There were volunteers online who would make custom versions of Android with a lot of cool features. I was lucky that the Optimus One was very popular, because there were a lot of options. I installed and reinstalled my phone's operating system a million times (not sure if it's a hyperbole).

One day, while browsing the web, I figured out that Wordpress.com, an online blogging platform, was free to install if you did it yourself. It was called Wordpress.org. I managed to set it up on a free web host. I had acquired the CMS I needed. Soon, the free web host closed down, probably because the business model didn't work out, so I was sad. So I temporarily used Wordpress.com cause my poor followers could not possible endure the lack the articles for a day! That short lived project can be found https://gr8apps.wordpress.com/

I told the organizer of a Toastmaster's club I was attending that I could make her blog so much better if she moved her cooking blog from Wordpress.com to Wordpress.org. She gave me money to purchase paid hosting. I had so much power that I had never had before. The power of money and a good hosting provider. I learned a lot about how Wordpress.org was setup and how CMSs worked. That website never ended up working out. I feel bad that I wasted the money of another person. If you're still here and reading this, please go https://judyscakesandtreats.wordpress.com/ to help me apologize. Her cooking is amazing and she is super passionate about it!

My memory of what happened next is hazy, because I became much smarter at understanding computer related concepts so I learned them really fast. I took a C++ course in a summer while I was in high school. I don't remember any C++ now, so that's how much traditional training works for me. I tried to learn Java myself and failed. So I paused my programming aspirations and kinda gave up on it.

You see, those programming languages were boring. You could never do anything useful in them (with the knowledge that I had). Sure, I could do basic math and calculate the Fibonacci series, but I really didn't care about those things. What I liked about computers were user interfaces, design, automation, and efficiency. Writing C++ to achieve my tasks would simply take forever, and therefore not worth it.

I then had a "serious gamer" phase. I played the video game "League of Legends" a lot. In doing so, I learned about latency and how the internet worked. I had to learn those things to reduce my ping. You see, the United Arab Emirates did not have a League of Legends server nearby, so I had to play on European ones. This made it harder to play, because the delay between pressing my keys and when the action actually happened on the screen was painstakingly long. So in my quest to reduce it, I figured out the basics of how the internet worked.

Soon, high school ended. I played a lot of video games that summer. But when I got to college, I quickly realized how pointless they were. Sure, I was amazing at playing the game, but that accomplishment meant nothing to the world. My gaming wasn't making anybody happy or live a better life. It was only harming me by preventing me from doing more productive things. So I stopped.

However, at around the same time, I developed a personal philosophy that I still follow today. A philosophy based on acknowledging privilege and helping others. A philosophy that acknowledged the massive power of technology to be the driver for that change. I thought, and still think, although to a lesser degree, that teaching people how to use a computer was a good way to lift up the lives of people in countries where lack of information was a problem. This meant that cheap computing was an important part of the equation.

I was always privacy minded my entire life. I would look at summaries of the terms and conditions of the online services I used, and would only use them if my data was being respected. Websites like https://tosdr.org/ were a godsend to me. I also read technology news a lot. Initially I kept up on technology news to get the latest and greatest versions of Android when they came out, but slowly my interest drifted towards the legal and ethical issues. So one fine day, Windows 10 came out.

Windows 10 was criticized extensively throughout tech media publications for having awful privacy settings. You simply could not turn them off easily, and had to resort to scripts and programs online that would edit the registry for you. To me, this was a super shady move. I was typically the type of person who would search for the telemetry setting in programs and enable it, cause I knew that data was important to craft and enhance user experiences. I was also fine with opt in being the default. However, it looked like Microsoft removed the opt out option.

I started to get frustrated with Microsoft. I was running bootleg copies of Windows my entire life, so I never really paid them much money, but I was my own person now. I had money that I could spend that I was responsible for. I wanted to purchase the software I used, cause that was only fair. However, Microsoft didn't seem to care about the rights of the people who purchased their operating system. It looked like they were getting comfortable with their monopoly, and were now abusing it. Well, then, I needed an alternative. They I remembered, hey, there's a thing called Linux.

I was a software connoisseur in high school. If someone needed a piece of software to do a specific task, I knew the right software for the task. I would always recommend the free option first, and if there wasn't, I would give them a cracked copy of the paid software. I knew that the paid versions of software were better, but there was something about the generosity of people who made free software that made me want to recommend their piece of work first. So in my search for free tools, I eventually came across Ubuntu, a Linux distribution. You see, Linux is a kernel, a backbone of sorts to an operating system. Ubuntu is a derivative of Debian, which used Linux to make their own operating system. You could take another operating system and modify it to your needs because they were legally restricted in a cool way. You could use the software for free all you want, but if you modified it and made any improvements, you had to send your improvements to the maker of the software so that they could incorporate it into the official free version if they chose so that everybody could enjoy those benefits. These type of licenses are in a group called copyleft (the opposite of copyright, heh) (also I like the fact that left is the side for freedom :) ).

I was awestruck that there could be an entirely free operating system. I downloaded it and went through the hassle of trying it out. It was okay. It worked, and could do most things. However it couldn't play the games that I played often, so that fascination was put on pause.

Fast forward to college, I didn't really care of games, and cared a lot more about human rights and privacy, so Linux was looking attractive again. I was a lot smarter now too. So I did something that would have unthinkable to me a year before high school. I deleted Windows off my laptop and installed Linux on it.

I had a desktop with Windows as backup. I would still occasionally play a game or two. However I used my laptop to study and take notes. Those really matter a lot to me. I take pride in the fact that my notes are publicly available online so that people with disabilities and those that could not make it to class can use them. You can find them) here. Initially I had to make compromises in the way I took notes, but soon I became much more efficient that I was in Windows. That was because of a simple text editor called Vim.

Now you see, Vim was just a text editor, like Notepad on Windows or TextEdit on macOS. However you could program it. You could make commands to do the repetitive tasks and focus on typing the true content. It has it's own programming language of sorts that was very easy to understand. You could basically record the keys you typed, and replay them with the press of a single button. Now efficiency obsessed me had a field day with this. I made a command for everything. I could type notes at the speed of light. I had time in class to focus on the presentation and the clarity of notes instead of rushing to getting everything down before the professor changed the slide.

At around the same time, I doubled down on my minimalism. All my notes were stored as text files. The space they took up on my computer was barely anything. I liked the fact that Linux made working with plain text very easy. You see, Vim (praise be) didn't limit you using it's own programming language. If you needed, you could use any other programming language and insert its output in Vim. So that's when I started to learn Bash, the language of the Linux terminal.

Many people don't know what the terminal is, or if they do, they are intimidated by it because they only see it when it shows up in hacker movies. I think it's pretty simple. It's a textual way of interacting with your computer instead of graphically clicking and dragging. For example, in order to move a file to another folder, you'd typically click the folder, hold it and drag over the target folder and release the mouse button. To do so in the terminal, you'd do this.

mv file_you_are_moving.txt folder_you_are_moving_to/

mv is an instruction telling the computer that you want to move things. You are instructing the computer to mv file_you_are_moving.txt into folder_you_are_moving_to/. It pretty simple really. If you're puzzled by why I would use a technique that's less intuitive and involves more typing to achieve the same thing, I completely understand. However the magic in this is that you can save that "command" in a file and run it again whenever you want in a terminal. You can't easily do that in a graphical program. You're gonna have to drag and drop a billion times if there are a lot of files and folders. So most people don't bother. However I could save sequences of these instructions like "move this file into this other folder, then encrypt the folder and upload it to the internet" and run them whenever I wanted. The actions would complete in seconds, and efficiency was achieved.

These sequences of instructions were called scripts. Soon I was making quite long scripts to do things for me even outside the Vim editor. I was using my computer with an efficiency that most people could not handle, which I was proud of. People really didn't understand how I was doing the things I did. That was sweet.

Now, you see, Bash is a great language for short instructions, but when stuff gets longer, it becomes tedious to work with. A common recommendation online in those cases was to switch to Python because it made more sense and was equally as simple as Bash. So I did. I fell in love with Python. I converted all my Bash scripts into Python scripts. Python was a real programming language that I finally knew how to use. I went crazy. I looked up how to do different things in Python and did them all.

Since Python was a serious programming language, I could do a lot of stuff with it. I could even make programs (something like mv). I could do a bunch of stuff on the internet too. Internet huh... My home... I wonder, if, you know, I could just, make a website using Python.

Fast forward a lot of hard work and self-learning, I did. It was beyond just a website. It was powered by a database, and had rich information on all the music that I had. Although I have a much more improved version up today, it was available at https://lists.vijaymarupudi.com/.

Since I knew Python pretty well, I thought, hey, Javascript was always confusing to me, let me try to learn it again. And I did. Learning programming languages was now super easy to me. I can do anything by just reading the documentation on how to do it. I felt powerful. So I made my lists website even more complicated and pizazzed it with Javascript.

Thinking about my current situation, I'm realizing that I can do anything. I have achieved a certain level of mastery over this tool called a computer, which is quickly becoming the future of the world. While my long path was messy and filled with luck, I don't think my path is necessary. I think anybody to learn to be as good as I am right now. It would probably take 3 months or so, but I think it's a goal worth striving for. My next post will be about the resources I would recommend to learn the things I know today. A post with shortcuts and best practices, so you don't have to trip up, fail, and get back up again like I had to when I was learning how to do things.

This post ended up being very long, but I'm glad I documented my history with technology. I hope you weren't awfully bored by reading this. Have a nice day!