Looking back on my computer science education at Notre Dame, it’s hard not to remember conversations I’ve had with friends at other universities over the years about the differences in their CS programs and ours. I also find myself remembering comments I’ve heard from companies and interviewers along the way regarding the ND CSE department organization. Many friends and interviewers have wondered why ND waits until junior year for data structures, essentially making it much more difficult to land an internship for the summer between sophomore and junior year. Others have wondered why we go so far in mathematics. The CS department recently reorganized a few things, and the data structures question will be a non-issue soon, something I think is a huge positive move. Notre Dame is not a top engineering school nor is it the best CS school around. But after reading through the ACM guidelines and the ABET accreditation criteria, it would be hard to say that it isn’t a great one. Copied below are the knowledge areas in the ACM guidelines and the number of Core Tier1 and Tier2 hours that should be spent on them.
A few things stuck out to me when I was reading through the guidelines. For one, we at ND spend much less time on Algorithms and Complexity than the guidelines recommend. Some students go further through electives, but the requirements in algorithms might need to be increased in the future. When reading through the specifics of Computational Science, I didn’t feel knowledgeable in the subject and there were many topics I had never seen before. While I am currently in a Human Computer Interaction class, I am taking it as an elective – Notre Dame doesn’t require any courses in HCI. After taking the course, I partially believe it is something that should be required, as it gives a very different view to CS than any of my other classes have. Outside of these topics, I believe the ND CSE education manages to cover most of the KAs. I also noticed some areas that ND seemed to cover more than the guidelines recommend. For instance, the guidelines mention that they don’t believe either Linear Algebra or Probability and Statistics need to be required courses, but ND requires both for CS majors.
Looking at the ABET requirements, I didn’t see much that ND doesn’t have covered. CS-specific, they require 1.33 years of computer science teaching and 1 year of science and mathematics. The first specific bullet point for CS is “1. Coverage of the fundamentals of algorithms, data structures, software design, concepts of programming languages and computer organization and architecture.” I believe ND gives us a strong base in all of these topics. Through our college and major requirements, we cover the science and mathematics side as well.
I found the CS2013 Curriculum guidelines very interesting and surprisingly easy to follow. Honestly, I expected to read a bunch of nonsense paragraphs that had been written by a group of 75 year old men in a small room, reminiscing about what computer science used to be, but it was far from that. I especially liked the way the guidelines are organized and how the ACM divides requirements – what was previously just divided into Core topics and Elective topics, we now see the Core topics divided into Tier 1 and Tier 2 topics. This organization is because the ACM found that many institutions were still not able to cover all of the core topics. By dividing them into tiers, the hope is that institutions will cover all of the tier 1 topics, while sacrificing some tier 2 topics if need be (but still covering a minimum of 80% of tier 2).
I’m not sure if you need to go to college to be a good computer scientist or programmer. I’ve seen documentaries on homeless men who are given computers and who teach themselves how to code without ever sitting in a classroom. For the majority, though, I think the college education is necessary. Can you learn to code on your own? Yes. But computer science isn’t just coding. One of my biggest takeaway classes at ND was Programming Paradigms junior year. We learned a good chunk of new languages and had a few weeks of practice with them, but the point of the class was not to expose us to a few basic concepts and then to move on to the next language. The class got us to think outside of the languages and just look at the code structure itself. Every language is different, but the patterns that they abide by are what you have to recognize. Without an education, who knows if I ever would have picked up on those patterns that allow me to code much more easily and efficiently, as well as confidently, now.
Do I know everything I need to go about computer science? Absolutely not. But I don’t believe that is a requirement of heading into the real world and a career. A job can teach you the skills that you need to be successful there. When I start my job in August, I immediately head to orientation and developer school for two weeks. If the company believed my CS education taught me everything I needed to know, there would be no need for developer school. However, do I feel that Notre Dame has adequately prepared me for future careers? All that and more. I am so grateful to have been able to attend this university and to have been a part of the CS department. I feel like I have a strong background in CS, but additionally I have taken courses in math, science, philosophy, psychology, business, humanities, history, and even acting. This wide range of courses and requirements has helped me to round out my education as well as who I am as a person, and I know that I will be able to relate to many people and problems both in and out of the workforce because of that background.