I grew up in rural Iowa, where - as you can imagine - I had little exposure to coding. What few computer classes were offered at my high school were focused on advancing your skills in “business applications” such as Microsoft Excel. I had a knack for fixing high level technical problems, so when a spot in my schedule opened up for an elective, I decided I’d take Fundamentals of Computer Programming as a dual credit course with the local community college. In my final semester, I finally got around to writing my first line of code (in VBA, mind you).
And I immediately fell in love.
When doing the homeworks, I realized I was getting legitamately giddy with every problem solved. I’d always loved puzzles, and coding was like a puzzle with limitless outcomes. I found myself spending hours outside of class creating needlessly difficult programs, just to see what I could do with my limited knowledge of this amazing tool. I remember one such program that would read out the number of days until important moments in my life, and that it calculated it without using a date data type! I cringe at the idea now, but back then, it was so cool that I could build all of these things that just… worked!
When I came to college and realized I could be productive in life while having that much fun, I knew I had found my path. Since then, I’ve been a CS major, and I haven’t looked back.
- (CS:3330) - Algorithims
- Important concepts: solutions using dynamic programming vs. recrusion, time and space complexity, and efficient use of data structures
- Implemented various language agnostic programming assignments (generally in Python)
- (CS:2820) - OO Software Design
- On top of being introduced to Object-Oriented Design, this class provided me with my first working esperiences with Java, Git, and automated testing (Unit and Integration Tests)
- Much of what I learned in this class was useful in my first industry internship with Cerner
- (CS:4640) - Computer Security
- Studied threat models and the way we define security in computers (Semantic vs. Computational Security, IND-CPA Standards, etc.), and explored subjects such as homomorphic encryption, public key systems, and password securtiy.
- Language agnostic assignments, C and C++ preferred
- Concluded with a personal research project of our own choosing - mine was on the insecurity of audio CAPTCHAs and there necessity for blind internet users. You can read it here.
- (CS:3620) - Operating Systems
- Fundamentals of Operating Systems: the objectives of an operating system, how it maintains control, how it interacts with the hardware, etc.
- Mostly Bash scripting and C assignments
- (CS:3820) - Programming Language Concepts
- Introduction to functional programming and programming concepts (compilers, parsers, verification, etc.) through programming assignments in Haskell and Agda