DEV Community

Reynaldo Veras
Reynaldo Veras

Posted on

What is top 5 most valuable courses in a CS Degree?

Greetings Everyone! Once again I am overwhelmed with a ton of noob questions. I am pursuing a CS degree and I want to make sure I am taking the best classes for my electives in case it isn't part of my curriculum. If my school does not provide these courses, I would still make sure I am learning after college.

Bonus
Random Rant:
I can't wait to finish school so I can really start learning what I want to learn. I hate college and it really kills my motivation. I'm motivated to finish soon so I can have freetime to focus on gaining an actual skill. I feel depressed because college shouldn't be a piece of paper to help me get through the H.R filter but a place where I know I am getting the best of the best in a education in technology. It's sadly not living up to my expectations.

I feel like I am my own teacher and a student because non of my teachers taught me anything. Heck one of my teachers barely spoke english and had a super strong accent and I had no idea what he said all semester. most of my teachers just give me an assignment and I get it done and thats pretty much all they do for me.Sorry for the long rant I just needed to vent and was hoping at least someone out there knows what I am talking about.

Top comments (7)

Collapse
 
nestedsoftware profile image
Nested Software • Edited

I feel for you regarding all the busywork and apathetic attitude on the part of professors/instructors. If you push yourself and surround yourself with friends who are also passionate about the subject, I think you can still learn a lot in college - both from the courses, and perhaps more importantly, on your own and with your friends. Here are the courses I would recommend not missing out on:

Core:

Optional:

  • Introduction to Logic and Reasoning: Not formal logic, but rather the course that focuses on understanding logical fallacies and arguments - sometimes it's a philosophy class. I think being able to understand correct and fallacious thinking and also to appreciate rhetorical devices that are psychologically convincing but logically wrong is super useful in many aspects of life. I wish everyone had to take this type of course in school. It would hopefully make people much more aware of when they are being fooled or manipulated.
  • Human Computer Interaction: Most of the above core topics are very technical, and they will put you in the mindframe of solving problems from an engineering perspective. I think a quality course in HCI and Human Factors is very helpful to correct a bit for that; so that you always remember that ultimately software is for people; and that concept should be included at the very core of any design, no matter how complex and technical the implementation might be.
  • History of Computing: This is obviously not of huge practical importance, but I find the history of computing very interesting. If there's a course like this at your school, and you have room for it, I think it could be refreshing to look at computing from this kind of perspective. You'd learn about ancient computing devices, like for keeping track of time or looking at the stars; things like slide rules; Charles Babbage and Ada Lovelace and the first designs of truly universal computers; early architectures of both analog and digital computers from, say, the 1920s to the 1950s; and so on. I think that could be nice palate cleanser if you're taking a lot of really hard technical courses.

Textbook links are just possibilities for anyone reading this who may want to study these topics on their own. For autodidacts, I have found that researching such topics online can be very helpful also.

I think these would form the core of a solid foundation that allows you have a lot of flexibility in what you end up doing in the future - whether that means doing a masters/phd or entering the workforce. I've omitted formal logic and computability. I don't think this is as important unless you're really interested in theory. If you're specifically interested though, certainly go for it! If you're interested in an in-depth study of compilers, taking a compilers class or looking into the famous compilers dragon book could be a good idea.

Probably at least some of these courses are required, but I thought I'd list the things I consider to be the most important. If I started my own CS Program, I would just cover these subjects in depth, and then assume that was enough for people to cover whatever else they were interested in on their own :)

Good luck!

Collapse
 
cjbrooks12 profile image
Casey Brooks • Edited

The classes that lent themselves most to what I do everyday now are:

1) Graphics programming - I don't do graphic programming or game development, but it did teach me the best overall picture of real-world software development. How do you take some abstract idea (drawing a 2D or 3D scene), break it down into smaller, easier to solve problems (lighting, shading, drawing different types of objects, reading graphics models from a file), and then assemble them into a larger working whole.
2) A capstone project - Universities don't typically teach students modern development frameworks or technologies, as it is simply too hard for professors to stay up-to-date with this rapidly evolving landscape, and ultimately universities want you to come back to their graduate programs, not to the working world. At least mine did that. But I digress.... That being said, capstone courses are some of the only classes that even attempt to get you working with real-world, modern technologies, rather than trying to re-implement them yourself. This is really important, because it will teach you how to search documentation and learn to work within constraints. It also helps you learn that you don't need to know everything every aspect of a technology in order to successfully use it.

The classes that I wish I could go back and learn better, now that I've been developing professionally for several years:

1) Systems Programming - While I don't do any systems-level programming, I do work a lot in Java and Android, where many of these systems-programming terms are common. I vaguely understand IPC, networking, threading, filesystems, and memory optimization, enough to get by, but certainly not well enough to actually do any of those things well. Having a better understanding of what the OS is actually doing would make me much more confident approaching tasks involving these.
2) Databases - A capstone project of mine involved building a small database engine, but I never took a full course on it. I really wish I knew more about how databases worked, so that I could do things like understand how to speed up slow queries, know how to properly set indexes, and structure the tables efficiently. Nearly every project you work on will have some kind of database in it, so you should probably know enough about them to be comfortable setting one up.

Collapse
 
theoutlander profile image
Nick Karnik

If you want to become a Computer Scientist, you should consider courses that provide a well-rounded exposure to various aspects of Computer Science.

  1. C / C++

  2. Discrete Math

  3. Data Structures

  4. Algorithms

  5. Computer Architecture

  6. Network Programming

  7. Operating Systems

  8. Image Processing

  9. Compilers

  10. Co-op / Internship in the field

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

I never got a degree - my life just took a different path - although I did attend college. (I did three full-time semesters, with an unbroken 4.0 GPA, before I left to focus on business pursuits instead of racking up more debt.) I took calculus, CS, psychology, and a slew of other courses.

My own experience aside, I've had the privilege to work directly with CS professors at major local universities, and to be an instrumental part of the career growth of many CS students and graduates through my company's internship program. Therefore, I'm no stranger to the CS degree, albeit via a different means than most.

I would say that, adding to many of the fantastic suggestions here, communication classes are by and away the most important courses you can ever take in college. When I was attending college, I took Public Speaking, Interpersonal Communication, Intercultural Communication, and Non-Verbal Communication. I have used what I learned in these four courses every single day since, and they've done more for my programming career than even the math and programming courses I took.

So, while I definitely echo the recommendations to take copious classes in math, CS theory, and various technologies - these are undoubtedly critical - make time to take any and all communication classes you can! (Bonus, they count towards your required elective humanities at most colleges.)

Collapse
 
ghost profile image
Ghost • Edited

Let me just throw in one: Models of Computation - state machines, automata theory, context-free grammars etc. These are pretty much the foundation of computer science, leading on to things like parsers and compiler design. It's so nerdy, but surprisingly useful when you write your own stateful code, file loaders, and more.

Collapse
 
dmfay profile image
Dian Fay

Literature with a critical bent, something in the studio arts, library skills, an introductory/survey psych or sociology course, and discrete math. I'm serious.

Collapse
 
speculative profile image
Jeffrey Tao

I agree with this wholeheartedly! I took a bunch of East Asian history courses (enough to get a minor in it) in my undergrad and they were among the most important courses that I've ever taken with respect to my understanding of the world.

I think that it's important for developers to be human beings first and programmers second.