I grew up in rural Iowa, where - as you can imagine - I had little exposure to coding. What few computer classes my school offered were focused on advancing skills in “business applications” such as Microsoft Excel. In my final semester of high school, a spot in my schedule opened for a dual-credit elective course, and - knowing I had a knack for problem solving (espescially high-level technical problems) - I decided to take Fundamentals of Computer Programming through the local community college. In Spring 2015, I wrote my first line of code in VisualBasic.
And I immediately fell in love.
As I completed the homeworks and in-class assignments, I realized how much fun I was having. 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 and complicated programs, such as a “Days Until Important Life events calculator” that didn’t use 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! Despite my scarce knowledge, with enough perseverence, anything seemed possible.
When I arrived at the University of Iowa and realized I could both have fun and be productive, I knew I had found my path. Since then, I’ve been a Computer Science major, and I haven’t looked back. There have, of course, been challenges: I’ve had somewhat of a late-start compared to some of my outstanding peers, and CS@Iowa is a bit too “traditional math”-heavy for my taste (really, really was not a fan of Calculus II). Nevertheless, I’ve found enough of what I was looking for to feel I made an excellent decision.
- (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