My Computer Science
Journey

A complete history of my experiences with Programming and Computer science.

Me and Computers

For most of my life I have always been around computers. Computers and software in general have always fascinated me and I've always been intrested in computers. Since the time I realized that any person like myself could create software and computer programs, I have always wanted to create something involving computers.

But with just a computer and no knowledge of any programming languages, I could not reach any of my dreams of creating computer software or programming anything.

This all changed during a sunny day in 3rd grade.

Introduction to Block-Based Programming

It was during a sunny day in the March of 2018, my 3rd grade teacher introduced my class to Scratch. I instantly fell in love with the website, I could create anything using blocks, without needing to learn any real language.

Over the next year, I created many useless and crappy scratch projects. Most of them were 2 player games which I would play with my brother. Despite the fact that most of the games were very glitchy and had many bugs(I was using light mode) I still loved the freedom and creativity that scratch provided.

I continued using scratch until my intrest finally died out in the beginning of 2019 when I realized that there were much better games and ways to use my time.

Scratch 2.0 Project

A blank scratch 2.0 project.

2019 And 2020

After I stopped using Block based programming, I did not go near computer science for about 2 years. Not only was I more busy, but I also realized that other people have already crated things which I would never be able to create using block based programmming. I also got caught up with stuff on the internet and lost intrest in programming as a whole.

During this time I started playing more video games and started using the internet more as a whole. I started developing an intrest in games and game development.

Game Development

After a 2 year break from programming, I became intrested in game development again. This was because I had been wanting to develop a game for a long time since it sounded very fun.

After some quick reasearch, I downloaded the unity game engine and hopped right into building a game, only to hit a wall.

You see, to create a functioning game in unity, a person needs to have at least a basic knowledge of C#. I had next to no knowledge of C# or any programming principles. I tried to follow a few tutorials about learning C#, but my 11 year old brain could not understand any of the concepts and I was left doing nothing. I dug around for any way with which I could create a game without knowing a programming language but I could not find anything.

Unity Game Engine

A project open in the Unity game engine.


Finally, after a few months of experimenting with Unity, I deleted the program and forgot about game development. Although it may seem like I failed, I actually learned some very useful things and concepts which would help me when I started learning Python.
Some of the things I learned about were Visual studio, Visual studio code, Blender, and some basic conputer science concepts like variables and arrays.

A visual studio code Project

This website's code open in Visual Studio Code.

C# logo

C# logo

Python

After I failed to learn C# and get into Game Development, I left programming for a couple months again before deciding to learn a programming language.
After doing a bit of reasearch, I found out that python was one of the easiest and most used programming languages, after which I decided to learn python. For the next couple of weeks, I tried out many courses and followed many tutorials online to learn the language but to no avail. I think one of the most likely reasons that I did not find any success learning from courses and tutorials was because I did not have any understanding of much of the basic programming principles that I needed to understand.

It was not until I was suggested to learn from a book that I learned about the python crash course. Using this book, I was able to learn many programming and python basics fairly easily and I was able to acquire a decently good understanding of the language in a few months.
Not only did this book provide me with a relatively good understanding of python, but it also taught me many programming and computer science principles that are widely used in other languages as well.

Over the next few months, I created many python projects, mostly experimenting with data formats like JSON and CSV and. I also Failed attempted to create a few games with Pygame but it almost always went wrong because Python should under no circumstance be used to create games And because it was confusing and didn't make much sense to me back then. Python was not made and should not be used exclusively to create or render visualization or games. Because of this, I started developing an intrest in Web development and would stop learning python completely in favor of web development.

Python Crash Course Cover

Cover of "Python Crash Course"


Pygame Logo

Pygame Logo

Python logo

Python™

Web Development

During a random day in July 2022, I made a file called "website.html" It looked like this:

Picture of my first website

A wellspring of Cringe and Regret...

Although putting this screenshot on here could be the single biggest mistake of my life, I was pretty proud of myself back then. Back then, having a website seemed like a very difficult thing to do. Even having a plain html file in my web browser seemed like a very big acomplishment.
After building this website, I realized that the bright light was attracting bugs and went to youtube to watch a tutorial on css.
I learned a little more HTML and CSS during the summer of 2022 but stopped learning once school started.

I redeveloped an intrest in HTML and CSS after seeing some cool web pages in replit. I decided to make a simple web page about myself and put some things about myself in it. Although the web page was not very stylish or complex, I learned a lot about HTML and CSS while making this. Some things I learned included the css box model, flex boxes, element positioning, css text styles, and much more.
I created many more Html projects about random things for the next 5 months and further improved my Html and Css skills.

Landing Page to a website

A Landing Page to an Html project which I made


After I gained a solid understanding of Html and Css, I moved on to learning Javascript. I had already learned some basic javascript from my Game dev days and after learning how to make things like loops and variables I realized that it was quite similar to Python. I started learning about DOM manipulation and found it quite easy. The thing that was more difficult for me to understand was AJAX. Jquery's syntax greatly simplified the code and made it much easier to understand.

Landing Page to a website

Jquery™


After learning DOM manipulation using vanilla Javascript, I started learning Jquery since it was a lot simpler and easier to use than vanilla javascript. I had a bit of trouble understanding chaining, AJAX, and binding events but I quickly learned them after some 12 hours of browsing the Jquery docs practice.

Learning Jquery was a very good thing since it has made DOM manipulation and AJAX much easier. I am also happy that I did not learn something like Angular or React since they would have taken much more time and I probably won't need them in the future.

Summer to October 2023

During the summer of 2023 I really thought that I could learn all of the React library and become at least an intermediate at it. I hoped to learn React quickly and easily and then learn a few more things and then be good at front end. I've realize life rarely does that.

Right now im still trying to learn React, there are three reasons why its taking so much longer than it should have. The first reason is my inadequate knowledge of JS ES6+ features; I learned most of my Javascript knowledge from books which were released in like 2015 and did not have much information about ES6. Without this knowledge, I barely understood why things worked the way they did.
The second reason is that life and procrastination got in the way. I lost a lot of intrest in programming after summer, and although my intrest is quickly returning, I forgot some stuff. Procrastination and distractions were also a big problem(especially cs2 :heart:)
The final reason is that I didn't spend enough effort.

At the beginning of October, I basically restarted learning React from the bottom after finally deciding that not knowing ES6 was not worth the trouble.
One thing that made me hesitate on commiting to react is Vue, from what I had researched, it is has an easier learning curve and it also is a full framework, meaning you don't need to install more packages to get most of the features. On top of this it is also way lighter than react and takes up less space. I decided to continue learning React just becuase of the larger community and more widespread usage of it but I think im going to at least try Vue in the future since it seems like a good framework.

I also just learned how to actually use git in the beginning weeks of October. Before this I knew slightly but my understanding had many holes in it and I only used github desktop.

React

After gaining consciousness of my life again and realizing that I did not, in fact, have infinite time, I decided to get serious. Over the month of November during 2023, I learned many things about React and also ES6 javascript.
Before this time, I still knew some parts of React like class components and JSX but not many things that a modern react developer would know. I mostly used a book called "The Road to React" and sometimes google to learn the things I needed to learn. The book was a good book and explained many things. Although I knew most of the fundamentals at this point, I had gotten little practice and over the month of December I made a few projects to solidify my skills. Some of these projects are avaliable to you in the Projects page.

Default create react app page

Create React App landing page



Plans


Internet

  • React
  • CORS
  • Next.js

باید از زمان خود خردمندانه استفاده کنم