Good proxy for whether or not you will enjoy being an SWE
Spring 2024Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (2.9 / 5): ★★★☆☆
Difficulty (2.1 / 5):
Workload: 10 hours/week
Pros:
1. Projects are straightforward, well defined, and not particularly challenging (if you have worked as an SWE)
2. Course material is very relevant to mobile application development
3. Excellent Piazza support
Cons:
1. Lectures aren't structured to follow the course progression, they're only really useful as a spot check for particular features you're working on at any given time.
2. If you don't have much practice self-debugging and revising software you've written, you're in for a rough time
3. High volume of assignments. 9 Flipped classrooms, 5 homeworks, and a final project
Detailed Review:
I really enjoyed this course. The assignments build off of each other well, the homework is not too difficult, and there are no "Gotcha" assignments. Everything is straight forward and well defined. You are told exactly what the assignments need to do, what functionality the app should have, and potential edge cases you may need to consider. Plus there is the bonus of the final project being fairly open-ended, so you are able to tackle any android application that you are passionate about building within a set of pretty loose requirements. The assignments are also all laid out in the MVVM framework which is helpful for learning about the structures of on-device applications.
As others have said, out of all the classes in the program, this is probably the closest you will get to software engineering as a job rather than computer science as a field of study. The assignments are not focused around learning theory laden concepts and are instead focused around continuously writing close to production level code. Similar to an entry-level software engineering role, instead of building a small assignment from scratch (with the exception of the final project) most of the homeworks and flipped classrooms are "go build this module" or "implement and integrate this UI component" of a larger project. For those who have worked as a full stack or mobile software developer, this course may seem trivial at times. For example, some of the flipped classrooms took me ~30-45 minutes. Even if you have 0 professional development experience, the course is still very doable, just might be a bit of a learning curve to the change in structure. You'll quickly figure out whether you like the difference or not.
The caveat to all of this is this course basically assumes that you can effectively read, write, and debug code. I reviewed my git history for this review and my commits for the course totaled ~8000 lines of code across all the projects.
The course also covers numerous different external APIs, outside libraries and resources, and concepts like asynchronous programming, atomic data, events, lifecycles, REST APIs, databases, authentication etc. Interfacing with all these components is fairly standard, but you're given the links to the read the docs and resources and expected to run them down. Some people really don't like this style and prefer the content to be in the lectures, but I felt that it is more of a preference thing than a good vs bad.
The last thing about this course that was great this semester was the course staff and Professor Witchel are very helpful. The TAs and professor would respond to discussion posts all the time and there was generally very good communication. Also, Professor Witchel's teaching style is just fun. It's never dry, always very relaxed and easy going.