Having gotten through CSCI 104 – Data Structures and Object-Oriented Programming, one of the core CS classes at SC, I’ve now moved on to CSCI 270 – Intro to Algorithms! Getting past 100-level classes is a major milestone since this is where the classes get “real” and the content is more applied and this algorithms class is no exception. But what even is an algorithm in the first place and how are they teaching this? I legit had no clue how we’d learn this subject but after 3 weeks I understand it enough to try to explain.
Essentially an algorithm is any set of code that tries to solve a problem (see pretty simple). It builds off of a lot of content from the data structures class; typically peole think of them as one thing but I’m very glad USC split them up because the content is dense. As to how to build one, this is where things get interesting.
There are so many ways to solve a problem, some faster than others, but there are always many ways to do it. We focus a lot of our class on optimizing the algorithm’s runtime, ensuring that it doesn’t take forever. As an example, the search algorithm Google uses, if it wasn’t optimized, could take millions of years to find just a few hundred articles. Instead, it takes barely a second to populate millions of results. That’s kinda the idea we’re shooting for.
To practice, we don’t actually code in this class (crazy right)! Instead, we use pseudo-code. Pseudo-code uses mostly words to describe what the algorithm will do, i.e. compare two items, swap things, search for something, without actually having to code it. We’re just focusing on the technique of how to solve something, not actually doing it. I personally really like this type of learning because it takes the pressure off. I don’t have to actually get my code to run or worry about every little detail in my plan. Instead, I can purely think of ways to solve problems efficiently which is what I think real engineering is.
Overall after 3 weeks, I think this class will be very rewarding in the long term. It won’t be easy, none of engineering is, but it’ll be useful for understanding how CS things work and how to do well on coding interviews (progress updates about those to come soon since it’s recruiting season)!