Should I Major in Computer Science?

<p>I'm currently a freshman at my university and I'm still not sure what I want to major in. I've recently been interested in computer science since I love computers and I would really like to study technology-type courses. I'm kind of looking towards being a mobile app developer when i grow up because I like designing and I'm really artistic. If I could integrate art and technology into a career then that would be great! But at the same time I also know that there's more behind it then just making apps look pretty (such as coding). </p>

<p>The thing is that I'm not really that familiar with CS and I was wondering if anyone here knew more about it. I would love to know the type of courses I could potentially take and the type of careers I can pursue with this major. Thanks!</p>

<p>Start with the introductory CS courses for CS majors (schools vary in how they are organized) and math courses required for CS majors (typically calculus, linear algebra, and discrete math, with the latter being most important for CS in general). Check the department to see if there are other requirements for the major. If you like and do well in those CS and math courses, CS may be a good major for you.</p>

<p>

</p>

<p>I pretty much never use discrete math in any software engineering work, nor have I seen co-workers using it. I have used a lot of linear algebra, trig, and statistics.</p>

<p>

I think this is pretty atypical for most software developers. Really, I’d be surprised if any software developer really used linear algebra, trig and statistics more often as a more fundamental part of their jobs than they used discrete math. Of course, discrete math is harder to see, because you typically don’t have to use calculators or write many equal signs when you’re doing it.</p>

<p>Off the top of my head, the following are exercises in discrete mathematics:</p>

<ol>
<li>Class design, in fact, basically anything OO.</li>
<li>Relational database design, in fact, anything related to SQL.</li>
<li>Writing code.</li>
<li>Testing code.</li>
<li>Functional/logic/etc. programming.</li>
</ol>

<p>Granted, you probably don’t sit down thinking about how you’re going to do some discrete math by writing a Fibonacci function, but the thought processes that you’re employing during that process are very much based in discrete mathematics. I mean, depending on the level of pedantry that you want to allow, mathematical logic counts as discrete mathematics, so anytime you find yourself distinguishing between true and false… or 1 and 2… or something from anything else on a computer, it’s sort of discrete math.</p>

<p>That’s an overly-broad characterization. It’s a bit like saying people need to take Number Theory because ultimately everything in a computer is represented by the numbers 0 and 1.</p>

<p>Most programming doesn’t require a class in discrete mathematics. You surely don’t need to take a discrete math class to distinguish between true and false or 1 and 2, do you?</p>

<p>Well, you usually don’t need to have attended medical school to dress a scrape or cut, but it’s a medical procedure to which medical knowledge might be applied; moreover, it might mean the difference between distinguishing a common and harmless injury from one where you might need to worry about complications. Similarly, you don’t need to be a car mechanic to do an oil change, or to be a lawyer to successfully defend yourself in court. However, it seems to be going a bit too far to say that being a car mechanic wouldn’t give you an advantage over most people when doing an oil change, or that being a lawyer wouldn’t give you an edge when representing yourself.</p>

<p>I, for one, believe that knowing about discrete mathematics can and does make most people better programmers. Is it required to get a job as a programmer? As you point out, it wouldn’t seem so today; but then again, I’d argue that neither are linear algebra, trig or statistics. Realistically, it seems that all that’s required today is a command of English sufficient to fill out employment-related paperwork, and the ability to write code that compiles. Now, that’s not all programming jobs, but that’s enough of them.</p>

<p>Besides, you argue against only the most far-fetched of my examples; do you agree, then, that the first five examples constitute exercises in discrete mathematics? If so, it seems clear to me that discrete mathematics is an important class for a CS major to have. In fact, it’s the only math class I’d consider directly relevant to what programmers and software developers do (with the possible exception of statistics). People wanting to get into CS, of course, should take as much math as they possibly can; people who want to write software really only need to know about calculus, differential equations, linear algebra, trigonometry, geometry, etc., if they get a job where there boss says, “write a program to do X”, where X implies calculus, differential equations, linear algebra, trigonometry, geometry, etc. Granted, plenty of applications do rely on these disciplines, but that doesn’t make them necessary to the study of CS/SwE/etc… expedient from an employability perspective, perhaps, but not necessary.</p>

<p>Well, you have to take discrete math for your CS degree so all of this is a moot point, yes?</p>

<p>OP, just look at the requirements for the CS major at your college it should be laid out. Then see what the electives are offered. UCB alumnus has good advice for you to explore whether you would like this major.</p>

<p>For careers, well there are several major areas to work in. You will be problem solving and likely programming. I’m sure there is a lot of established info online to google. My daughter aims to be a professional researcher, so she’s in grad school. My sister started out programming but moved into project and then product management.</p>

<p>For game design, here’s an interesting take from an industry pro:
[John</a> Ratcliff’s Code Suppository: So your teenager tells you they want to ‘make video games’ for a living…](<a href=“http://codesuppository.blogspot.com/2013/04/so-your-teenager-tells-you-they-want-to.html]John”>John Ratcliff's Code Suppository: So your teenager tells you they want to 'make video games' for a living...)</p>

<p>

</p>

<p>No, not at all. Discrete math was a typical requirement back when I was getting my CS degree in the early 80s, while linear algebra or statistics rarely were. Now things seem to be changing. I’m seeing fewer CS programs requiring discrete math, and more requiring linear algebra and statistics. That reflects the reality of what programmers actually do.</p>

<p>I took discrete math over 30 years ago, so I don’t remember all the details of what was covered, but of the things I do remember from the class, I’ve never had to use them for work. On the other hand, linear algebra can be important because if you do anything involving 2 or 3-D graphics or simultaneous equations, it’s natural to plug those numbers into matrices and solve them the way they you learned in linear algebra.</p>

<p>I personally think math is overstressed for CS degrees. In 30 years of work, I’ve never had to deal with a differential or integral, and I’ve never had to do a proof. For 90% of programmers, the most advanced math they might use at work would be for plotting points or lines on charts, or some basic statistics for data analysis.</p>

<p>

Most good programs I know of require it; I would consider it a mark against a program not to require it of CS majors, and in the absence of other factors indicating that it is a high-quality program, would avoid it. There are just too many decent programs that do make you take it.</p>

<p>

Still disagree; the things I list are what software developers really do, and they are activities that benefit from having studied discrete mathematics. You can do them without having studied it, but that’s true of absolutely any activity human beings have ever done.</p>

<p>

What in the world do you remember learning that you have never used?</p>

<p>

My gut says that most programmers don’t have to code stuff in this area, and those that do are going to use libraries 90+% of the time.</p>

<p>

Totally agree; calculus, analysis and differential equations are mostly not part of what software developers do. I’d throw linear algebra into the same bucket as well.</p>

<p>

I’d contend that while this isn’t something you sit down and think about doing, every time you design an algorithm or data structure, you are at least informally doing some proofs as you go along. Otherwise, how do you know it works? You may not write them down, but working through the logical implications of a discrete object to convince yourself that your code is correct is tantamount to doing a proof in your head.</p>

<p>

There’s more to math than using calculators and drawing graphs. You might not call it math, but that’s what the rest of us call it.</p>

<p>aegrisomnia, your whole argument seems to be based on redefining math so broadly that everything and anything involving programming is math. It’s not. Do you seriously believe that running through an algorithm in your head is tantamount to developing a proof? I think that’s a stretch.</p>

<p>If you go that route, I can just as easily claim that all CS students need to take semiconductor physics because everything on a computer involves semiconductors.</p>

<p>What I remember from discrete math is a lot of graphing theory and optimization. The class was interesting, and I did a lot more optimization for my IE graduate degree, but I never used any of it outside school. That’s kinda my point - what you learn in discrete math is too academic and theoretical. While there are a few specialized applications that use it, it’s not directly applicable to the work most programmers do.</p>

<p>If you have personal experience on a job where you directly use what you learned in discrete math, I’d love to know what that job is and specifically how you use it.</p>

<p>As for linear algebra, I did say that most programmers don’t get involved very deeply in math at work, and that includes linear algebra. But if you do number-crunching on a computer, linear algebra is so practically and fundamentally essential that you need a good understanding of how it works. Even if you call library/package functions, you’ll inevitably get things like divide by zero errors, or your 2000x2000 processed image showing up inside out, upside down, or compressed into one pixel. You need to know what’s going on inside those functions in order to debug problems and set up the input correctly.</p>

<p>I use discrete math when I’m judging whether or not my program works. If you can’t give any argument on why your program works, that’s surely a bad sign.</p>

<p>I am broadly describing discrete math as understanding proofs, propositional logic, induction, graph theory, and discrete probability theory.</p>

<p>“I use discrete math when I’m judging whether or not my program works.”</p>

<p>Can you explain exactly how you use discrete math for this?</p>

<p>In any event, I’m more interested in hearing whether people who have graduated and moved into the work world directly use what they learned in discrete math.</p>

<p>

</p>

<p>This demonstrates one of the differences between programming in school and programming professionally. Once you get out of school, nobody’s going to ask you to prove on a white board that your program works. Other people will simply run it, and if it doesn’t work, they’ll jump on your back.</p>

<p>@simba9</p>

<p>My school requires two discrete math courses, while linear algebra and statistics are optional courses :x</p>

<p>I’d say discrete math is more useful in academic CS than it is in software development.</p>

<p>For the OP, CS is not about art and design. It is about math and programming. It may not be what you want.</p>

<p>I think fewer CS programs are requiring math past Calculus II and Linear Algebra but most CS programs today require Discrete Math/Discrete Structures. Statistics should be required also especially if the CS student takes computer networks or data mining.</p>

<p>Go for it!</p>

<p>

</p>

<p>I agree. I know every so often I see someone from academia advocating that people use mathematical proofs to show that their programs work, but those suggestions really don’t apply to real-world development.</p>

<p>As I’ve said ad nauseum, CS degrees prepare people for graduate school and not the workforce. If you’re objective is the former, discrete math may be of some use. If it’s the latter, it’s not applicable.</p>

<p>Definitely. There are computer science jobs everywhere.</p>

<p>Is it likely that I’ll be able to find a decent job with a cs bachelor’s degree?</p>

<p>Absolutely. Consult the Bureau of Labor Statistics Occupational Outlook Handbook (assuming you’ll be wanting a job in the US, anyway) for employment projections for a lot of professions. Software developers should enjoy better than average job prospects, especially for employees with a bachelor’s degree or better.</p>