My second year was hard. Although I was told how hard it would be, I kept my poor freshman habits that didn’t affect my classes. Between poor time management, a nonchalant attitude towards classes, bad prioritization or personal issues, I was unprepared for my second year.
Besides the growing pains, the information I needed to know grew in addition to being complex. Things that were abstracted in my first year were being elaborated on. I also found a new home in the science department as almost all the classes I had were in that building and even in the same classroom! In fact, if I wasn’t an RA next year, I would bring my bed and stay in the science building!
This is what I learned,
CS 230 – Programming Languages
In this class, we explored programming languages concepts such as typing, parameter passing and others. We focused on four programming paradigms, declarative (Prolog), object-orientation (Java), functional (StandardML) and imperative (Python). While learning the theory was hard enough, dealing with the quirks that come with learning three different languages was hair splitting. Prolog didn’t make any sense, ML had cool oneliners, but it’s lack of variable declarations disturbed me and Java kept blowing up in my face. Anyhow, CS 230 was a really good overview of Programming Languages and the ideas behind them. Now I can argue on Hacker News with my newly acquired hax0r skillz.
CS 360 – Operating Systems
On the one hand, this class was way too hard for a second year student. On the other hand, it will make my senior year less stressful so meh… In this class, we looked into various operating systems, threads, processes, semaphores, signals, philosophers and a whole load of other incredibly dense topics. For the coding portion, we traversed the Linux kernel using C (which was nasty) and we also implemented a mutex locks and semaphores which helped fix CPU scheduling issues using Python. I haven’t run into serious OS issues yet, but when they do come, I think I’ll be ready for them.
MA252/MA252 – Calculus
Once upon a time, math was simply addition, subtraction, repeated addition (multiplication) and repeated subtraction (division). As I grew older, math started to involve letters and symbols and a whole host of nasty stuff. This nasty stuff includes Calculus, which is the study of rates of change and area. The biggest thing I learned from this class wasn’t Hospital’s rule, Sandwich theorem or 3D calculus. It was the power of teamwork since we needed to work together on homework assignments and even tests. I also got to appreciate my math department, which are really helpful and friendly. In this class, I found some great software like Desmos for graphing and Symbolab for math explanations. The greatest discovery however was Wolfram Alpha which is a great way to do the homework check our answers.
As much as Wolfram Alpha is really fast at solving incredibly complex problems, like the quotient of the US GDP over Kim Kardashians weight, one still has to understand the problem and all it’s variables which is much harder than performing meticulous calculations where a misplaced sign 20% in the problem ruins everything.
PHY 101 – General Physics
As important as it is to understand the way the world interacts with itself, I really did not like this class. What I expected from this class was to understand the formulas and abstractions of the world, like kinematics and thermodynamics which could then be used to make computer games in line with the “I’m in CS to make vidya gaems” meme. Turns out that this class was much harder than I anticipated and with my lack of preparation, I barley passed the class. I really should have planned this out earlier…
CS 320 – Data Structures and Algorithms
This class is considered to be the rite of passage to Computer Science. In this class, I learned about various algorithms, data structures and problem solving techniques that have been developed. I started from really naive approaches (like bubble sort) moving to more complicated yet powerful techniques, like Divide and Conquer (a la QuickSort), Dynamic Programming (which speeds up inefficient algorithms), Iterative Improvement among others. There were many useful things that I learned from this class that would be of great use later on.
CS 249 – Computer and Network Security
I thought this was going to focus heavily on networking but it was more about security (how naive). Still, while it wasn’t as programming heavy as the other classes, it gave me a lot to think about in terms of how to evaluate security. What made this class even more interesting was that we had to watch Mr. Robot and evaluate it to see if it’s legit or if he was just tracking the killer’s IP address using Visual Basic.
CS 149 – Java Programming
This was a really low intensity class in which we learned the how to program in Java in a semester. I had a blog, Semester of Java, where i tried to make tutorial, but that fizzled out. My greatest achievement in this class would be my final project which I managed to make within 3 hours. It wasn’t the greatest and it ate up a lot of resources, but it worked…somewhat.
RE 101 – Literature of The Bible: Old and New Testament
Since my college is Lutheran, they force everyone to take a religion class. While I wasn’t too keen on taking the class, it was actually very interesting. Given that most of my social life before college was in church, this class was really refreshing since it was a more logical approach to the Bible as opposed to the Prosperity Gospel from my home church that somehow sneaks itself in. While there were somethings that didn’t really seem consistent (although the instructor admitted it) and the homework wasted lots of time, the class was taught very well and the instructor only made it better.
IS 201 – Living In a Diverse World: Economic Conditions
This is also another class they force students to take, but this one turned out to be very sobering. In this class, we studied poverty in the United States along with the cultural ideas and policy that make the situation worse. Granted there a many poorer countries in the world, but the US is a first world country, it shouldn’t be this bad. Before I go full SJW, we had a lot of really material to work with, like The Grapes of Wrath by John Steinbeck, The Days of Destruction, Days of Revolt, The American Way of Eating, In America the movie and the American Winter.
This class was really hard to process given the way the US projects itself as being on top of the world. The class was taught by a teacher who is perfectly fits the stereotype of the liberal university professor. She’s a fun teacher, but she can go super SJW to the point where we just don’t know. Maybe it’s just my cognitive dissonance. I don’t really want to say more than I have, but the US really needs to reexamine the ways it faces a lot of these economic conditions with honesty and regard for the citizens the government have been appointed to serve.
CS 280- Computer Graphics
This class started out easy. On day one, we just had to draw a dot. By the end of the week, we were implementing ray tracers in Python, which is really really hard given all the math we had to understand. In this class, we were gaining a better understanding of how computer graphics work and the algorithms powering the graphics. While you wouldn’t want to implement a ray tracer in Python, I’m amazed at all the optimization techniques that can be used to make it “faster”, like PyPy, list comprehensions among others. Also, this class showed me how to make a really big program.
So there you have it! All the classes I’ve learned in my second year of college. They were much harder and required more discipline in order to succeed (looking back, time wasn’t a problem). Also, shout outs to the accessible professors who tolerated my stupid questions and Stack Overflow for being a thing :).