I'm working toward a software engineering major, (business) management minor, and technical communication minor, and I was wondering: What kinds of non-technical courses should I try to take before I graduate that I might not get as part of my major or one of my minors?

If you prefer to think about it this way, a more general question would be: What non-technical skills do I need as a software engineer or computer scientist?

+3  A: 

Economics. Entrepreneurship (starting/running a business, marketing). Maybe some writing/literature/poetry class. This is highly subjective and depends on what your interests are.

+1  A: 

I'd recommend some psychology course with focus on perception. We had one of those when I read CS in Linköping and it has been valuable for me when working with simulators and user interfaces.

+18  A: 

First few ideas off the top of my head would be:

  • People + project management (if not already covered by your minors)
  • UI design / Usability (if not covered by your major)
  • Psychology (something Joel has mentioned a few times - helps with UI usability)
  • Technical or creative writing
  • Some kind of foreign language
+1 — Psychology, psychology, psychology. The single most common failure I see among skilled, seasoned developers is the inability to anticipate users' reactions!
Ben Blank
+4  A: 

Take a class in Critical Thinking. Also, take a Creative Writing course.

Anyone can learn to program or run a business. Doing it well requires a unique combination of creative problem solving and analysis.

+5  A: 

Writing courses may be useful, because they may help improve your writing abilities. Plus such a course makes you write which is the best practice in the first place. (you need to write to improve your writing)

Language courses (natural languages) may prepare you for an international career in an ever more connected world.

+7  A: 

The two skills I would recommend are getting along with others and understanding business. The first is hard to get in a college course but Dale Carnegie's excellent book "How to Win Friends and Influence People" is a good start. Basic business understanding can be gained from college courses. Taking the introductory courses in economics, accounting, marketing, business law, and finance should help. Good luck and never stop learning.

Mike Polen
+4  A: 

The one single most important (non-tech)skill a good programmer needs, is the ability to communicate effectively with others.

If you can't explain your ideas to team members, or to other non technical people, the types of roles you can do is somewhat limited.


A course that I took (and wish my university offered more of, instead of cramming so much into 10 weeks) was about intellectual property. I found that was enlightening, but putting copyrights, patents, trademarks, and more into 10 weeks was kind of rough.

Thomas Owens
+2  A: 


I don't mean just advertising and I don't mean as a sub-set of Sales.

Marketing is all about making the right product for your market, as well as how you sell, promote and everything else.

It helps convert programming terms like User Acceptance Testing into business terms like qualitative market research.

Other than that, as has already been suggested, some people-skills courses are always good and usually needed by programmers.

+2  A: 

A Technical Writing course is very helpful.

+1  A: 

I would also agree with anything that studies people and their interactions with each other; like psychology or sociology. (I say this in retrospect having not taken them myself.)

From my personal experience, I think something that allows you to do public speaking or debate really pays off. There will be an innumerable number of times when you have to give a formal presentations to groups or day-to-day discussions with your team members. Having experience presenting your ideas while remaining in control of your emotions can make many situations easier and you more effective.

Barrett Conrad
+6  A: 

Communications might help you get your ideas across. You have to be able to stand up and tell people about your ideas, whether it is in a team meeting or on stage at a developer's conference (when you hit the big time).

A good English Composition class couldn't hurt as well. A tough prof will make you cut the fluff and build your arguments.

+16  A: 

One word. Writing.

I would add: creative writing.
Mike Dunlavey
I wouldn't limit it. Creative, sure. Technical? Of course. Being able to effectively get what's in your head into words is important, and however you manage to do it is less so.
+3  A: 

Art. It seems that you've got just about everything covered with your two minors and a major, so I suggest an art class or two. That and make sure you have fun while you're in college :p go out and party.


@icco: Yes, it's important not to work too hard. I'm lucky that my university has 10 week quarters. I tried to take 5 classes once. It was hell on earth. Not to mention, it was a Rochester, New York winter. So I was walking all over campus in the cold and snow and wind, stressed...not fun. Short story's easy to burn out trying to learn everything you need before you leave school. I don't think anyone can do that, without spending 5, 6, 7, or even 8 years in school before entering the workforce.

Thomas Owens
+2  A: 

Take an engineering management course. It will not only provide information on estimating engineering time and cost, etc., but also will instruct you how to recognize and resolve common mistakes within engineering organizations, such as poor requirements, ignorant clients, and metrics on how to quantify what you have accomplished. Moreover, this knowledge is directly applicable to projects outside engineering.

+1  A: 

I'll second any course that helps improve your communication with others; it's our stereotypical kryptonite.


I think it should cover the weakness of most developers: arts

  • Calligraphy and Typography
  • Layout and Design for print
  • Photography
  • Usability and UI Design
  • Ergonomics

And of course, if you really want to be rich:

  • Management
  • Business and finance
  • Entrepreneurship
Jon Limjap
+4  A: 
  • Writing classes. I was lucky to be on a good school newspaper. Having to write on deadline for a large audience was great training.

  • Business classes are good -- even if you don't run your own group, it's nice to know how the system works.

  • I wish I would have taken some communications classes -- anything to have helped my almost paralyzing shyness about getting up to speak.

  • I enjoyed the art class I took. It helped for doodling diagrams (my official rationale), but it also qualified me to go to the figure sketching sessions where I got to look at a live naked girl, which we didn't see much of in the computer labs of that time.

Mark Harrison

Non-technical skills: listening and getting your point across. A debate class, perhaps?

The other would be humility and the ability to seeing things from different angles. I don't know if they have a class for that.

And honestly, if you have the time, take a random course just for fun. Those were some of my most influential classes in the long run, now that I think back.

+1  A: 

I would go for something with that focus' a developer on an outcome.

I've done courses on Time Management and Neuro linguistic programming they really make you think what you are doing and why

Christian Payne

The courses that I taken that have had the biggest impact on my engineering career are: - Technical writing - A general business course which included both accounting and analysis of financial statements - Project Management (this wasn't a full blown certification course, just a 3 day introduction to the concepts) - Teaching and Training Adults (I became a much better student after taking this and much better at analyzing performance problems!)

However, you might want to reconsider your timing. If your future employer will reimburse you for cost of the courses, it would be better to do the courses after your graduate. Also, after you graduate, you will find that you learn better by applying the course content to real life situations.

Best of luck with your studies!


Right now is a good time to be asking who you want to program for when you get out of school.

Any shop that is hiring new graduates will probably be inundated with a lot of undifferentiated resumes that will end up more or less unread. If you want to work within a specific field, taking enough classes in that field to be able to speak intelligently on the subject will put you head and shoulders above other recent graduates.

On the other hand, you may take a class and discover that the field you thought you wanted to work in is actually unbelievably dull. Think of the time you'll save then.


Basics of intellectual property law if you expect to have a technical career; that and some business law if starting a company is in your plans.

Will M
+4  A: 
  1. Presentation skills.
  2. Writing skills - see "Elements of Style" by Strunk and White and "Style: Toward Clarity and Grace" by Joseph Williams.
  3. Some philosophy _ see "The Consolation of Philosophy" by Ancius Boethius.
  4. Thoughts on what we're doing - see "Hackers and Painters" by Paul Graham. And the article that started it.
  5. Some thoughts on what's comi9ng down the turnpike - see "Here Comes Everybody" by Clay Shirky (get the european copy 'coz the US one has a crap cover). And also an amazing associated article.



Rob Wells
+4  A: 

Having worked in computer programming for 20 years I think I'd like to offer a few insights.

Do something practical and hands-on. Programming can be so very abstract, doing something like carpentry or something is very good once in a while. It is good for concentration, for coordination, for getting your mind off things, for the feeling of accomplishing something that may outlast the next major OS-release.

Learn to play an instrument. Develops the rest of your brain, according to reliable sources.

Spend time outdoors, preferably in uncultivated surroundings. Very healthy for feet and eyes. Geocaching is a way of motivating oneself.

If you're a guy, find a way to spend time in the company of women. It's important.

In other words, wear sunscreen. (Sorry if I started to sound like Baz Luhrman, but he has some points.)


Take a course about another language with a non-Latin alphabet can be enlightening. A second language course can have some benefits in terms of understanding how difficult some communication can be but if you combine that with another alphabet, I found that to be very interesting. In my case I took Russian and found it quite interesting as well as easy to do well in since things like attendance accounted for like 25% of the final grade.

JB King

Biology: The greatest machines on earth our our own cells. It's amazing how efficient they are, how they process code (DNA), replicate, adapt, etc. Learning about biological cells put computer apps into perspective.

Logic: Just an all around great class if your are doing any type of thinking.

Neil N
+1  A: 

I agree with the answers that say writing.

But not just any writing. Stories, poetry, stuff that's fun and makes you think about other people.

It's really important to understand that there's more to life than technology and making money.

When you nurture this side of yourself, it will make everything else worthwhile.

Mike Dunlavey