History
Most of my experience with programming has come from school, and it was my experience with a programming class that led me towards the field of computer science. At the time, my understanding of programming was narrow, and I thought that software development only involved writing code. Furthering my education in college led me to gain a better understanding of what software development actually entailed, and I was exposed to larger and larger projects with greater complexity and more advanced topics, such as data structures, algorithms, and multithreading.
Early Programming (High School)
Of course, I had to start somewhere with my programming journey, and high school is where I got my first real experience with programming languages. Processing was the language taught in the course, and it was a good choice for an introduction to programming, as it provided more visibility into what the code was doing. The Processing website even mentions that the goal of the language is to be a teaching tool for programming, and it succeeded in its mission.
Initially, the course had students create simple images with code. This allowed me to get a grasp on the basic syntax and concept of programming without overwhelming me. Eventually, more complex tasks were added, such as replacing hardcoded numbers with variables and having the shapes move on screen. As the more complex tasks were given, explanations on how and why to avoid bad practices were given, such as not using global variables and hardcoded values. The end result of the course was a working game of Pong. A few other more advanced topics, such as object-oriented programming, were touched on, but they were not fully developed or explained.
On my own, I was interested in learning more advanced languages, and I gravitated towards C++. I used sites like Sololearn and YouTube to get the basic syntax of the language. Therefore, I entered college with a basic grasp of C++ syntax.
Intermediate Programming (Early College)
The first few courses related to programming reiterated the basics that I had previously been taught, but with different languages, Python and C++. They also included new information that I had not previously learned, such as files, datatypes, and basic data structures. Around this time, I started to get more comfortable with programming, and I was even able to write a handful of scripts that helped me with my home lab.
Most of these programs were small in size and complexity, with fewer than ten files per program. However, they did provide a good starting ground to get into more advanced topics. I quickly picked up object-oriented programming, and I started learning how to analyze algorithms for efficiency.
Current Programming (Late College)
Most of my recently taken courses focused less on programming, as it was expected to be known, and focused more on other skills that software developers need. For example, managing large software projects, version control systems, teamwork, and agile development methodologies are all topics that have been taught in my past few courses. In particular, teamwork has been a primary area of interest as the structure of the courses has centered around large group projects that simulate actual software development jobs.
Learning about more advanced concepts in larger-scale projects has also been rewarding. Testing software, distributed computing, and software design were all major components of recent classes, and I have been particularly fond of multithreading and distributed computing. Several past programs that I wrote have been rewritten to utilize multithreading, and I currently have plans to add distributed computing technologies to my home lab to gain more experience with them.