DEV Community

What are some courses I should absolutely take in University as a Software Developer major?

Nashia Fairuz on December 18, 2017

Hi, so I'm going to begin my university in a month (Bachelor of Information Technology). I hope to major in software development. There are no comp...
Collapse
 
nektro profile image
Meghan (she/her)

As a computer science student myself right now, the courses I'm required to take are

  • Calculus 1 & 2
  • Discrete Math 1 & 2
  • Probability
  • Technical Communications
  • 2 of (Biology, Chemistry, or Physics)
  • OOP
  • Procedural
  • Assembly
  • Algorithms & Data Structures
  • OS Design
  • Empirical Methods
  • Models of Computation
  • Computer Ethics

some other classes I would personally be interested in are also

  • language and compiler design
  • graphic design

mix and match your own and to find the classes you like and need to graduate I hope you enjoy school a ton and best of luck :D

Collapse
 
preciselyalyss profile image
Alyss 💜

I definitely second the graphic design or an introductory design course. It goes a long way to understanding how to make things look nicer.

Something I'd add to this list is psychology, sociology, or something that builds on interpersonal communication. No matter what career you go after, that will end up benefiting you in the long run.

Collapse
 
shanker702 profile image
shane

I minored in graphic design and would heavily recommend it if you plan on doing any UI work. I've noticed a lot of software engineers, especially full stack devs, really lack basic design concepts. A good graphic design or web design class can really help set you apart and make your UI's a lot more professional.

Collapse
 
jfrankcarr profile image
Frank Carr

I'd recommend taking some elective humanities courses like in music or art. Creative or expository writing courses would also be helpful. Do something to engage your creative side.

If there's a philosophy of logic class offered that might be useful to you as well, getting you to think in broader, more abstract, patterns.

Business related classes might be useful, especially in the corporate world where you will be likely to deal with topics like accounting practices and financial planning. You'll appreciate this when you're stuck in a day long meeting with accountants debating which rounding technique to use in a report.

Collapse
 
dmfay profile image
Dian Fay

I dropped out a year in, but before I did I took two amazing courses. Discrete was one of them, but you've got that covered.

The other was a 400-level class in "masterpieces of literature" I managed to beg my way into for an elective credit as a transferring sophomore. It turned out to be a deep comparative study of Crime & Punishment, the biblical book of Job, and Goethe's Faust. It's impossible to overstate how useful techniques of literary analysis and exegesis are, not just in communicating with other people, but directly in developing software too. Writing is about making and refining meaning, and writing code is no exception. Felienne Hermans' talk Programming is Writing is Programming is an excellent dive into the subject.

Also, a grounding in the humanities is important for being a well-rounded person. Don't neglect the non-technical stuff!

Collapse
 
ben profile image
Ben Halpern

Microeconomics and psychology complement CS quite well. Any computer history classes are also great IMO.

Collapse
 
twof profile image
Alex Reilly

One of my favorite courses I took before I dropped out was a speech and debate course. I learned how to structure an argument and whatnot, but I also learned how effective being funny was when you are trying to connect with people. That and knowing how to explain myself are two major skills that I credit with passing interviews and being able to communicate well at work.

On the technical side, Algorithms and Data Structures was my favorite. I learned the the 5 or so DSs that they taught and the algos that accompanied, but more importantly I learned how to break down pseudocode which I was then able to use to learn more as needed from Wikipedia.

Collapse
 
pmcgowan profile image
p-mcgowan

data structures and algorithms for sure, might be part of the core though. other than that, most of the courses I've taken are things which can be googled. If you're passionate about programming, the rest will follow. I've taken a lot of math courses and the only one I've used is probably calc 1 or precalc even. Take a DB course if you can too, as it's helpful to learn the basics then go from there.
Having taken a software eng program, comp sci probably would have had more directly applicable programming courses.

Collapse
 
tobias_salzmann profile image
Tobias Salzmann

During my Comp Sci education, I enrolled in mostly theoretical courses (Lots of maths, automata theory, algorithms). Content wise, there is little overlap between those and my current work as a consultant, but I definitely benefit from the reasoning skills I developed over the years of proving things formally. More importantly, they serve me better than the few courses related to Software development I took.

Generally, prefer courses that build up your skills and abilities over courses that increase your knowledge, especially if that knowledge is specific to some technology.
Even more important, learn what you find enjoyable, because that's going to stick anyway.

Some specific things I recommend to pick up:

  • Statistics/ Probability theory: A good Intuition of probability will help you a lot with predicting problems with software, debugging and general practical problem solving. Also, if you want to go into AI, that's going to be very useful.
  • Functional Programming: A lot of what makes up great code has roots in pure functional programming. It is not super easy to pick up. If you can find a course with a good teacher, that'll help a lot.
  • Distributed Systems: Servers, Microservices, Actors, Coroutines, are all part of distributed systems. Understanding how to manage the complexity that naturally arises when systems interact with each other is a core skill to develop.
Collapse
 
blazselih profile image
Blaž Šelih

Strong maths foundation will be helpful even if you never use it directly. It will sort of prime your brain to be better with abstract reasoning and internalizing non-intuitive concepts.
In addition to discrete, I would strongly suggest taking linear algebra and statistics/probability. Anything relating to ML, big data, computer graphics, etc. will be much easier to grasp.
Also, some basic (project) management and communication courses can be really helpful.

Collapse
 
lukewestby profile image
Luke Westby

If your university offers any courses on music technology I hope you’ll consider taking one! Making music with software is fun and I learned more about human-computer interaction from that course than any other. I’d also recommend computer ethics and at least one elective each of history, political science, and philosophy if you have room in your schedule. Even if you don’t find those subjects interesting on their own the course work will be great for working on writing, communication, and critical thinking outside of technical domains.

Collapse
 
craser profile image
Chris Raser

There were two things I learned as an undergrad (USA) that helped:

  1. I took a class that used Oracle RDBMS & SQL to teach some basic data theory stuff. It gave me an advantage getting my first job, and I've used something from that class every day since then. (I'm a web dev.)

  2. The compilers & interpreters classes I took taught me how to parse stuff, and it's the reason I have zero issues parsing configs, data files, etc. (And why I tend to get impatient when I open up "parsing" code and find a pile of regexes...)

Now, two things I wish I'd taken:

  1. I was going to recommend getting conversant with git, but I see you're already on github.

  2. I wish I'd taken a class on workplace psychology. My favorite book on the topic is How to Talk so Kids Will Listen, and Listen so Kids Will Talk. All humans are grown babies.

And here is the HOWTO I put together for my cousins when they started college. You probably already know a lot of it, but I thought I'd throw it in anyway.

All the best!

Collapse
 
adele profile image
Adele Francois

An odd recommendation but it's high demand..but defintely any security/systems related course, if your university offers one. It's something that kind of falls by the wayside for software devs/computer science majors, but it's really a great topic to get into!

Some other areas of recommendation are

-Software Testing (Quality Assurance)
-Introduction to Networks

Best of luck of your journey!

Collapse
 
kspeakman profile image
Kasey Speakman • Edited

If you have any interest in game programming, take a look at basic Physics, Linear Algebra, and Vector Calculus. Linear is also interesting for crypto, as it provides an understanding of how some operations (such as hashing) are one-way only.

gamedev.net/articles/programming/m...

Collapse
 
brianjmiller profile image
Brian J. Miller

Accounting + anything non-technical, particularly in the writing/communications arena.

Collapse
 
vgrovestine profile image
Vincent Grovestine

Speaking from personal experience, a course in deductive logic (Philosophy) is a worthwhile elective...perhaps even a GREAT elective, IMHO. :)

Collapse
 
jvanbruegge profile image
Jan van Brügge

I have a few mechanical engineering courses. My absolute favourite is "Introduction to space flight", a colorful mix of orbital mechanics, thermodynamic and rocket building.

Collapse
 
wayfarer_youth profile image
kristian

I did the same bachelors and these subjects were the very first ones I did. Deakin?
Definitely do discrete maths and take up as many programming classes as you can. The more exposure, the better!