<p>I am going to be starting school in the fall. Academically the school is pretty tough, not Ivy League tough but think state flagship school. I love programming, and I enjoy the logical thinking process of both math and computer science. My problem is our Information systems major falls in the business school while computer science is liberal arts. This would require me to take both core classes (for business school and liberal arts school). I saw this as a problem because I wanted to work and still have time for a social life but I didn't exactly look at my Computer Science program all too much.</p>
<p>The university I will be at know for two things: business and pharmacy. Therefore, our math and computer science are one department and it is very small. Also, the classes might be hard depending on the professor, but the number of credit hours I will need to take to get the CS degree is a very low number. Math and Computer Science overlap in a lot of the classes, and when you combine the fact that both are not majors that require lots of credit hours, the double major is a lot more do-able. I really think if I was a Math/CS double major I would taking only a few more classes than someone in a CS major at a school where CS is big (MIT etc.). I can really look at this two ways. I can walk out with two pretty difficult majors than many other people. However, I will be stuck in a very small department with not much focus from the university as a whole.</p>
<p>On the other hand, I really like business, mainly Entrepreneurship, but I seemed to like all my business classes in high school. Our Info. Systems major does not exactly overlap with our CS major. Other than a few classes I would basically be adding on another major. However, there are two reasons why I was really thinking about going this route. First, even though the classes don't overlap, the content does. Looking at the course description the things I would learn would help me with programming. (I guess you could say the Math major would as well- but not as directly. I feel the math major would help me think more logically about my code where as the IS major would give me a more technical advantage.)
The other reason I was thinking about picking this up is the same reason I don't want to - it is in the school of business. Our school of business gets all of the attention. This includes from employers. We have fairs where people come from all over the region. There are activities that help you prepare for interviews and jobs. All of this would help me so much, but to stay in it would mean taking a ton of extra courses. A friend I was talking to brought up a MBA, and how it is easier to start more technical (math/CS) and advance to business rather than the other way around. Right now I am leaning on the Math/CS route, but what are your opinions in this situation?</p>
<p>I may get some flack for posting this, but I have always felt that a CS major can do I.S. jobs but I.S. majors cannot do CS jobs. In other words, a CS core foundation (don’t even NEED the entire major) pretty much OVERLY-prepares you for I.S./I.T. positions. Regardless if you do a full CS major as part of your dual Math/CS degree or not, make sure you get in the following CS foundation courses:</p>
<p>Object-Oriented Programming I & II (Java or C++…varies by school)
Algorithms (may be combined with a Data structures into one course)
Data structures (may be combined with a Algorithms into one course)
Operating Systems
Theory (or Organization) of Programming Languages (not totally needed but good to have)
Database Systems (face it, data has to be stored somewhere)
Computer Networks (face it, data has to be distributed somewhere)
Software Engineering (a one-course overview just to tie up all the topics)</p>
<p>As you probably know, you can use the cross-listed Math/CS courses to “double count” for both majors. The usual suspects are:</p>
<p>Cryptology/Error-Correcting Codes
Numerical Analysis
Numerical Linear Algebra
Combinatorics
Graph Theory</p>
<p>Personally, I like the Math/CS route because you still have options under the mathematician-type jobs as well as using CS/IS/IT/Software jobs as a backup plan.</p>
Really? Really??? Most CS majors I know couldn’t do an IS/IT job. I certainly can’t. You seem to forget that many smaller CS departments don’t offer courses on databases or networks or software engineering. At my undergraduate college you’d get the traditional CS core: computer organization, operating systems, programming languages, compilers, algorithms, theory of computation. </p>
<p>Anyhow. I’d recommend to the OP that he sample all three majors and then decide which ones he likes best. If he’d like to have an IT position, the CS + IS combo certainly makes more sense than CS + math. Vice versa if he’d like to optimize high performance graphics algorithms for Pixar.</p>
<p>Many CS majors will not be good at IT for reasons other than lack of technical expertise. However, a CS major, or someone else (including an IT major), who took the CS courses in operating systems, networks, and databases is likely to have a much stronger technical foundation on these subjects as needed in IT than a typical business-type IT major (many of whom seem to struggle with unusual problems or learning new technologies when working in IT).</p>
<p>That sounds a bit like the argument that math majors make excellent engineers… But as long as we agree that CS majors do need additional training to do an IT job, I am good.</p>
<p>Thanks for the replies, from what I got it really depends on what I plan on doing with it. Like you guys said I would be fine as long as I get certain classes, but what would be the optimal path for a software engineering? Would the math background be put to good use or would it be better to spend the time working on a more technical second major (like IS or something similar).</p>
<p>An extra math background will help you if you want to be more than just a pure coder. For instance, if you work in an interdisciplinary environment, among engineers and scientists of all different backgrounds, you’ll need to have a strong math background if you want to be able to communicate with them. The math background will also help you understand and perhaps even help develop algorithms, rather than just simply implementing them without having a clue about how they work. For instance, if you get hired by Amazon to work on their customer recommendation system, you’ll have a lot of trouble understanding how any of it works if you have a poor grasp of statistics or linear algebra.</p>
<p>The “technical” courses in the IS program are unlikely to give you much of a technical advantage anyway. If there are programming courses in the curriculum, they will almost certainly be easier than introductory, lower division programming courses for computer science majors. The technical courses in an IS program will probably be very shallow, focusing on the use of different technologies without delving into its design or implementation. For instance, an IS course may teach you how to use relational databases and write SQL queries, but a CS course will teach you relational calculus, how B-trees are used to optimize queries, how databases handle contentions, how they can be made to recover from failures, etc. Even if your school is known for it’s business school, no tech company is going to go to a business school to recruit engineers.</p>
<p>When you start working as as software engineer, you are implicitly expected to be able to learn things on the fly. Never used SQL before? Figure it out. You’ve never programmed in VBScript? Again, figure it out. Never wrote a SOAP web client before? You should be able to pick that up fairly quickly (even though SOAP is bloated, over-engineered , and, thankfully, going out of style). If you had a solid undergrad CS education, you should be able to learn new technologies, and there are plenty of resource out there to aid you. What’s more difficult to teach yourself “on the job” are the math and science fundamentals.</p>
<p>Echoing Mokonon here. The only thing I would add is a sort of summary - if you don’t want to be just a code monkey, you need to know math. Not that there’s anything wrong with being a code monkey (I’m code-monkeying for an internship right now, and i think it will be a valuable experience). It’s just better to have options.</p>
<p>i think it just depends what you want to do.</p>
<p>I was a business/IS major and had 2 courses on object oriented programming, one course on networks, one course on databases, one course on hardware/software architecture (assembly language and whatnot), one course on end user support, one course business analysis (which has proven quite helpful), and a few other courses.</p>
<p>didn’t take anything as far as algorithms, data structures or software engineering are concerned but several of my friends from my program have gone on to become software engineers at various companies. the nice thing with our program was that it was broad enough that we studied a variety of things to prepare us for a variety of positions as opposed to pigeon holing us into a CS only role. Not that there is anything wrong with a CS role, but most companies seem to have more room for IS type people then CS type people. You only need so many people to write the software, but you need quite a few to support it.</p>
That isn’t necessarily true. Any reputable CS program will have a course on designing algorithms (not just analyzing them) - which will teach you more about algorithms than someone who takes, say, a course on topology. Any reputable CS program will require you to take at least discrete math and linear algebra (and usually multivariable as well).</p>
<p>
Data structures and algorithms are absolutely critical to getting a software job. Unless your friends studied this by themselves, I’m a little skeptical.</p>
<p>I won’t disagree with you as far as systems needing folks to support it BUT there is a pretty big gap in pay between systems architects/designers/developers and folks who support an application. Only in the area of databases and operating systems can the “administrator” types get paid a lot of money…and there is still a “design” component in their jobs as far as the layout of the overall supporting database or operating system resources.</p>
<p>who knows if they studied it themselves or not… that class may be important if youre a new college grad looking to get a job in that field. If you work in IT or CS or whatever, you know this industry is very much about show me what you can do and what experience you have… and then who cares what the piece of paper says… you could have a degree in music or no degree at all and wind up being hired as a lead on something in IT if you have the experience doing it.</p>
<p>My one friend works in game design for EA and doesn’t even have a college degree. Guy makes 2-3x what I make (which makes me sad). Started off being a programmer somewhere during college, dropped out to do it full time, and has changed jobs over the years, slightly moving up and taking different offers at various places.</p>
<p>Another has the same degree as me… one of our prof’s helped him get a job at a big place during college and after we graduated he transfered to another job and is a systems architect now, without ever taking a course in data structures or algorithms.</p>
<p>and sure there is still a design concept to jobs but that doesn’t mean you need to take a college course on data algorithims. there are several developers at my work who don’t even have college degrees. They’ve just worked their way up the ladder and learned as they go. I would guess a lot of companies are like that.</p>
<p>I’m currently a sys admin… but thanks to my degree i have no trouble writing some javascript or working with our DBA’s on issues. i personally think it’s nice to be well rounded.</p>
<p>You have just nailed it…you need the algorithms course in college to enhance your chances for that first job.</p>
<p>I agree, I am pretty sure the IS grads learned algorithms on job. When IS/IT majors ask me about coursework, I always tell them to take a few CS courses (mainly data structures and operating systems). On the flipside, I tell CS majors to take some IS courses (mainly databases and networks) because (like you alluded to) most software jobs center around the processing (data structures/programming), distribution (networks) and storage/retrieval (databases) of data.</p>
<p>But YES, the #1 key in software engineering is learning on the fly…not degrees. You get the degrees to get the max money because many corporations still tie promotions to completed academics and you learn on the fly (or get certifications) to remain employed and marketable.</p>
<p>I agree. I wish more CS majors took more IS courses so that they have a better understanding of how the software they are about to develop will work with everything else. And I think that the IS majors who only have one semester of programming should take at least another programming class - either the next level up or something different. I took c++ and php. Hardware/software architecture taught us a lot of more in depth stuff too. I still think it was crazy writing assembly language code and I don’t remember any of it, but at the time it was neat.</p>
<p>It would be advantageous for both CS and IS/IT majors to take the CS version of databases and networks courses, rather than the IS/IT version, in order to get stronger foundational technical knowledge of these subjects that are important in both fields. (Yes, I have encountered IS/IT people who have little more than user level knowledge of these things.)</p>
<p>
</p>
<p>Yes, there are many who self-educated many topics in CS as needed for their jobs. On the other hand, if one is in school already, one might as well learn the important subjects (algorithms, operating systems, databases, networks, etc.) with the aid of instructors in school in order to have a “head start” for future self-education that will inevitably be needed on the job.</p>
<p>terenc, I was talking about real world algorithms – not theoretical “traveling salesman” algorithms or toy problems like finding the shortest path in a graph. Believe it or not, an undergrad computer science curriculum isn’t sufficient for real world algorithm development. Algorithms for real world problems require a great deal of expertise that the typical undergrad doesn’t have. </p>
<p>I worked in scientific computing for 5 years, and I had to work very hard to understand the algorithms developed by our scientists and engineers. If I could go back and do my undergrad studies over, I would definitely focus a little more on math and skip some of the CS electives that I took (like introduction to security, introduction to networking, object-oriented software engineering, etc.).</p>