Writing! Programmers need to be able to make themselves understood by other humans. You need grammar, style, structure, and lots and lots of practice. If you confess to your advisor or an English faculty member that you're not terribly interested in literature, but you want to do what it takes to become an effective non-fiction writer and communicator, they can probably point you in the right direction.
(And if your school should happen to offer a rhetoric class, take it/them.)
Or you could actually be interested in said literature and take classes on it :) I think literature and code have a lot in common, they both tell a "story", though with code it tends to be more imperative.
Investigate the professor, or whoever is actually teaching.
What I got out of my courses depended in some very significant ways more upon how they were taught and by whom, than upon the ostensible topic at hand.
I have great respect for educators who have sincere interest and a passion to convey it.
These are also the people who tend, one finds, to have a better handle on the "mechanics" that are important to and education. Writing, presenting, engaging in dialog and debate, respecting one's conversational partner -- even while endeavoring to enlightened them as to their mistakes and assumptions.
Such people also engage you in the work, so that it's actually interesting and enjoyable to do. It's a lot easier to learn things, including those "mechanics", when that is the case.
That said, do try to get some -- but not solely or even primarily -- grounding in the "real", workaday world. Schools matriculate too many students who have no idea what they face once they walk out the door.
If I could go back and do it all again, I'd definitely do more stats courses.
Also if you're interested in data science in general, some basic linguistics (syntax/semantics) would be useful. (Saying this as someone with a PhD in natural language processing, who had to self-learn all the linguistic background the hard way)
Any philosophy course will help you a lot. Whether it's for thinking, or just to appease some of your wandering thoughts. A general Intro, Ethics or Epistemology will do you good.
A course on art history will open your mind a little and get you thinking about design, aesthetics, and much more.
If you don't read classic literature, take a course on classic English or Russian lit. Most of these novels are timeless and could provide an important impression on you.
Completely agree - I loved philosophy so much in college that I changed my art minor to philosophy. You wouldn't think that CompSci and Philosophy would go good together, but I couldn't be happier with the results. Some of the classes even have direct correlation with how you should think as a programmer. You should ABSOLUTELY take a Logical Reasoning course.. unfortunately for most schools that is a 2 or 3 hundred level course so you may have to take some philosophy intro classes first.
I agree, but would suggest a higher level course focusing on the works of Quine and Davidson may be of interest to an analytic mind. For a cs student with a strong mathematics background, a propositional logic course is often too basic.
I would also suggest a course in either philosophy of science or philosophy of law. I found courses in other areas; aesthetics, epistomology, existentialism to be much navel gazing.
If you go this route, I also suggest you keep in mind the goal for these courses should be to hone your skills in analytical presentation. Philosophy generally require you produce many papers.
Public Speaking (where you actually do it to groups not in class, may need to go to something like toastmasters or find your own to properly practice this)
Technical Writing/Composition - People tie writing well up in their brain with literature. This is due to the American educational establishment thinking writing belongs to language arts teachers, who all have English degrees. There may be a "science writing" course offered at the grad level, see if you can audit it.
Accounting 101 - This class will teach you the fundamentals of all the things you will have to do with your bookkeeping. You're really not going to be able to afford to hire a bookkeeper at first most likely.
Publishing (aka, School Newspaper) - A semester of this will teach you how press works, allow you to see the revenue model of papers, and will allow you to see things first hand a newspaper is writing about before it comes out. This is very useful later in life for understanding how to properly help newspaper writers and editors not mis-spin your business
A course on pricing in the business school - They don't always have these, but the theoretical frameworks they talk about may be easier to digest in the classroom setting then picking it up on your own after you leave school.
I agree, and yet I hesitate. People who have taken one or two philosophy classes are often insufferable and not least to themselves (or so I suspect). E.g., there's no broadly accepted 'answer' in epistemology (can we know things? What does it mean to say we know something?), and in an intro class you're only likely to be introduced to the problem and a few of the historically popular responses. These may lead you to conclude that philosophy is a lot of sound and bespectacled fury, signifying nothing or else that your newfound cynicism about knowledge constitutes an important superiority over naive mortals.
Epistemology is just one example. Whatever tickles your brain in an introduction to philosophy--whether arousing your curiosity, 'clicking' with something long felt, or leading you almost to despair--you should treat as a diagnosis. Valuable information, no doubt, but almost worthless to you unless you go on to seek treatment, that is, to study it further.
Your experiences and/or preconceptions about what happens in a philosophy class differ greatly from what I experienced in school. Any decent philosophy teacher will present the historically popular responses and then let the class discuss and explore their own feelings on the subject. Nearly everybody goes to school with some kind of social and spiritual programming from their upbringing, and a few philosophy classes goes a long way in opening up your mind to the broader world. NO philosophy class should ever attempt to make you believe that one way of thinking is right or wrong, but instead should present all the ways of thinking so you are at least aware that they exist. Even knowing that such other schools of thought are out there makes you better able to communicate with and understand different people who think in a variety of ways throughout your life.
Agreed. By far my favorite single class at U.S.C. was the first semester introduction to classic philosophy.
One of the special things about that course was it was a special program at the school to introduce underclassmen to the best professors the school has to offer. (Often, you don't get to the most prized professors of a university until later.) So that's actually another way to select classes-- look for programs that are unusual in their approach but still give you credit.
You might also consider other things depending on where you want your career to go. If you're interested in web design, for example, you might want to consider photography so you can learn more about composition, color, light, and other aspects of art.
Two other extremely rewarding classes that might seem a little out of the ordinary to you:
1. Mechanical engineering drawing. You'll learn how to draw neatly and precisely, which is of tremendous value over your career. Turns out, this and other aspects of art are surprisingly mostly about craft, learned skills, discipline, and practice as they are about talent. Come to think of it, just learning that concept alone is worth the price of admission. ("If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all."- Michaelangelo). You'll stand in front of a whiteboard or notebook tens of thousands of time in your life, and this single course will forever change and enhance the way you do anything on paper.
2. Digital electronics, (EE101 and the like) teaches you about digital logic, gates, flip flops, and so on. Even having already built all kinds of circuits, this was still very enriching because it shows formalized systems for how to optimize digital circuits down to the minimum number of components in ways that are kind of mind blowing (e.g. http://en.wikipedia.org/wiki/Karnaugh_map).
I've taken a few courses suggested here and just a small bit of warning: Make sure you're going to enjoy, or at least be interested enough, to learn something.
I've taken Psych. I've taken Sociology. I've taken Philosophy (both Logic and otherwise). I've taken technical writing courses.
Other than the logic courses, I hated them all. I hated them to the point where, though I passed, I did not take anything out from them at all. It just didn't interest me.
All I'm saying is that as you read these suggestions, try to make sure that you are taking into account that there's something you want to get out of the class so that if you end up not liking it you can focus and try to get something out of it. -- I didn't, even though I could have.
Philosophy -- learn to see things from different angles, different philosophies. Most importantly, observe how others in your class react to discussing touchy philosophies and concepts, like religion and politics. Learn to step outside that box, and be objective while respecting opinions, and make your own decisions. Trust me, its well worth it. Both for the laughs, and for the wisdom.
edit: Just noticed I'm echoing what many others have said. Interesting that we all had the same thought.
Some options to step out of the technology/science/engineering courses:
* A business course or two could be extremely useful depending on the course content -- you probably want to talk to a course counselor in the Business school about this.
* Take at least one art/design course. As a developer, I cannot tell you the number of times I've wished I understood design a little better. If nothing, understanding basic design principles will allow you to creatively contribute to a designer at some later date.
* Learn at least one new language. You haven't mentioned which country you're from (your profile doesn't say much), but Spanish is a good choice in the US. Personally, I wish I learnt German (I'm Indian and I find German a lot similar to Hindi and other Sanskrit-derived languages).
* Take a course that furthers your hobby: Photography, Art, Snowboarding, Archery and what have you.
* Take a course in the biology department. Preferably one that tells you more about the human body -- yourself. At the very least, you should be able to read your doctor's professional diagnoses or reports and understand what they mean. Know proximal vs distal, dorsal vs ventral and so on.
I'm sure there's more. I haven't had enough coffee to think right now though.
Ancient Greek/Roman, especially epistemology and stoics. Helps with accepting what comes and questioning how you know what you know.
Late 19th Century. Helps with questioning your real role in what you do, and why you should or should not.
Surveys of Eastern Philosophy. Adds a certain playfulness to life, also disabuses you of American perceptions of Asian traditions (such as Zen, widely mis-characterized in the west).
I think a lot depends on the teacher. If there is a really good teacher which challenges their students then any course can be a great learning experience (even beyond the material covered). Obviously, it will always be different between schools. If I were you, I'd ask fellow students to see if anyone has taken a truly interesting/challenging course.
I took a Negotiations course my senior year of college and it was easily my favorite class of all time. There was a lot of roleplaying and class debate, but the teacher played Devil's Advocate and poked holes in everyone's arguments. He truly required us to think creatively and analyze a situation thoroughly before speaking/writing, or else he'd rip us apart. It was a breath of fresh air after many other classes were purely focused on learning concepts, rather than applying them creatively.
Specifically in this career, I'd like to say that CS courses alone is sufficient, certainly not optimal, but sufficient in making you a good programmer, though it's up to you what you make of your program.
For entrepreneur, in my experience, you have got to be a people person. And, you have got to understand the finances. For business/marketing and related classes I would say that generally different courses have different business logic which may or may not work depending on the situation. So, I would say prioritize on performance arts/public speaking if you're not already a people person. Else, go the finances route. It's amazing what basic knowledge of time value of money can teach you.
I took Environmental Science and Evolution and Biodiversity. Both jolly interesting. Expanding the breadth of your knowledge is always good. Your best bet is to pick courses that interest you, that you will enjoy.
If you have floating credits, take something that you are interested in learning, not something you think that will help you in the long haul.
I talked my way into a 300 level (non-entry level) Buddhism class because I wanted to learn about it but didn't have the pre-reqs my senior year and loved every minute of it.
I learned about cultures I'll probably never see and ways of thinking that have only improved my ability to reason about complex problems. There's something to be said about learning for learnings sake!
TLDR; Take something you don't know much about, but want to learn about and it'll expand your mind.
Accounting/Finance will do you well. Business law, too. It will help a great deal to know when to start a business as a C Corp or an S Corp, how dilution works, how to keep control of your company, when and how to file patents, copyrights, and trademarks, the downside of taking money, how to build cash-flow, profit and loss, and balance sheets, etc.
If you get some business basics in, you lower your chances of getting screwed. Being able to protect your interests and work efforts could end up being your most valuable skill.
And not just in the baseline required rhetoric class that require little more than a pulse and a spellchecker - find a composition course that will actually demand something of you. Fiction writing, poetry, etc., something that makes you really learn how to communicate.
On that note, if you can find a presentation-heavy class, consider that. There's a lot of accessible comm classes that force you to get up in front of a crowd repeatedly - this could be invaluable in an entrepreneurial career.
Other than the business courses mentioned by others...
Technical writing courses, if available, are invaluable. Being able to write and explain things clearly is an amazingly helpful skillset to develop.
Linguistics classes can be useful for helping you think about both computer and human language construction and use.
Engineering courses can help develop problem solving skills.
On any classes you take, I'd try to dig up syllabi from previous semesters to see if they're worthwhile (try to find the same teacher/course combination).
I took 3 100 level business courses: Intro to Business, Intro to Marketing and Intro to Business Law. I'd recommend anybody with entrepreneurial ambitions take something similar. Of the three, I'd say the Intro to Marketing had the most useful information in it.
Taking at least 1 course in Accounting probably wouldn't be a bad idea either.
You might also find some value in Statistics courses, and other Maths courses that aren't part of your CS degree.
As a Business Administration graduate, I can safely advise that Social Psychology, Negotiation and Human Resources are the best courses an entrepreneur can take. You can learn Business Law and Accounting on your own, they are easy. As I see from the comments, Programmers tend to dismiss finance, but finance strengthened with operations research can make a mediocre company a great one.
Marketing - If people don't know that you're selling something, it won't get bought.
I agree with a lot of the Philosophy comments people are making, but in general you should try to avoid as many people as you can if they are not your customers.
Your direction usually dictates your education. Your ability to learn new shit is far more important than your inherent knowledge.
Take Econ courses. Understanding economics changes the way you make decisions. At it's simplest level, an understanding of sunken costs and opportunity costs overrides many "logical" decisions people make daily. At a more advanced level, understanding market forces and reactions will help in an entrepreneur career.
I would suggest taking some music class. I am not a music person but have recently taken up piano and somehow feel it's a great way to spend time after a day long of programming (or... reading) in the office.
But this won't directly help you with programming as career, it's just one way to spend time. YMMV.
I'd recommend you take an intro to macroeconomics course. You'll learn about how monetary policy works (interest rates) and that will help you your whole life. Understanding economics helps you understand business trends, investing, and it gives you more perspective on current events.
Maybe it was just the class I took, but I took macro and wished from the first day and ever after that I had taken micro. I felt like one class of micro might have gotten me some information I could actually use in business, whereas one class of macro was far from enough to get a handle on current events or monetary policy.
Philosophy, Drama, Applied Math, Russian Literature, a spoken language, Travel/Exchange programs. All those have helped me immensely in addition to a computer science curriculum.
This is an odd request for Hacker News. Everyone here knows that the liberal arts are stupid. Focus. If you have time to take courses outside of the CS department you should be using that time to write unit tests for your homework assignments or think about how you can work in SEO optimization strategies into next semester.
That's terrible advice, I hope you're being sarcastic but I fear not. There's plenty of useful stuff outside of CS which isn't liberal arts.
Maths, stats, electronics, physics could all be useful in an entirely computing-based career.
Biology or chemistry could open up a career in bioinformatics, molecular modelling or simulations. Likewise linguistics for text mining, information retrieval, speech/language processing.
Economics if you're interested in being an entrepreneur.
The crunchier end of philosophy, where it overlaps with maths and linguistics and cognitive science, will give you a much deeper frame of reference for understanding many hard problems.
Not all computing jobs involve twee social web startups or mundane CRUD.
What a horrible advice. Don't do assumptions on our behalf!
You'll be spending a lot of time with computers once you graduate, so better off spending it off computers while in school.
Socialize, make connections, study art/literature/philosophy.
I disagree with your opinion of the liberal arts, but I will certainly agree that getting practice writing unit tests for your code on homework assignments will be a boon in the long run.
(And if your school should happen to offer a rhetoric class, take it/them.)