In three weeks from today, I will have graduated, with honors, from the University of Florida with a B.S. in Computer Engineering (software emphasis) and a minor in Business Administration. Overall, I’ve had an incredible college experience and have learned a ton, had some great experiences, and built relationships with a lot of really great people.
I thought it’d be worth mentioning the classes at UF that, looking back, had the greatest impact on me. I’ve taken a bunch of classes over the past 4.5 years, but these were the ones that I really can appreciate the most…
1. Digital Logic & Computer Systems (EEL 3701), with Dr. Eric Schwarz
It wasn’t until this class that I really understood how computers worked. I started this class as a freshman who could barely count in binary. In one jam-packed semester, we learned all about: number systems, logic gates, mixed logic, k-maps, multiplexers, flip-flops, ALUs, RAM, ROM, etc. We also learned how to design hardware components using Quartus and VHDL, and program them onto our PLDs to watch different LEDs on our breadboards react to various switches and buttons (see picture of my breadboard wired up after programming a PLD).
All in all, we started with simple logic gates and designed an entire (basic) 8-bit CPU – and then programmed it by writing and hand-compiling assembly code. What a great learning experience!
This was also a great example of where it was completely worth taking the class with the harder professor who gives more homework, because he was very passionate about the subject and knew how to teach it well. I don’t remember every detail of what I learned 4 years ago in this class, but because I had a great professor, I can still explain most of the major concepts and would feel comfortable diving back in if needed.
2. Object-Oriented Programming (COP 4331), with Dave Small
This OOP class has had a greater influence on me as a developer than anything else ever has. Heavily based on both in-class lectures (with reading assignments) and very large get-your-hands-dirty team programming assignments, the course was a great mix of theory and practice.
We went over many important topics such as encapsulation, inheritance, composition, cohesion, encumbrance, type conformance, Law of Demeter, Tell Don’t Ask, Open-Closed Principle, Liskov Substitution Principle, and MVC. We also became deeply familiar with reading UML diagrams and sequence diagrams and used these to express complex software object models.
The real value from this course, though, came from the programming assignments. We worked in groups of 7-8 people throughout the semester on three different iterations of a real-time role playing rage (RPG) in Java based on proper OO design based on what we had learned at that point in the semester. We actually started from scratch for each of the 3 iterations, and, for each iteration, I spent about 90 hours outside of class working with my group on a solid UML design and implementing our design in Java.
These group assignments, even though they were very time consuming, had a huge amount of value in helping us turn abstract OO concepts into practice. They were also very rewarding as we were creating a pretty cool game
A side effect was that I also learned a lot about teamwork and leadership, and working with a group of people under high-stress work environments. They also were what caused me to really know Java well.
- Design Patterns in OOP (CIS 4930) – Dave’s other class. I’d highly recommend it to anyone wanting to become a better programmer/designer.
- Business Finance
- Intro to Financial Accounting