| If cost is an issue, go to your local state uni (not private). The education will at least be credible and diverse, and you'll earn back your tuition in just a couple years out. Depending on where you live, some state schools are among the best in the country. It's terribly hard to justify going out-of-state or to a private school on a purely monetary basis unless it's someplace really very special or you get a free ride. It can take something like 12-20 years to earn the tuition back compared to a state school grad and the salaries usually end up meeting parity within 3-5 years anyway. As others here have said, what you describe is Software Engineering not CS. But if you learn CS, Software Engineering comes pretty easily (which the inverse is not necessarily true). Most credible CS programs will give you some exposure to SE as part of the curriculum. If you find a program with very little math, it's the wrong school. If you find a school with classes like "Regular Expressions" avoid it. However, if you find a program with a lot of math, and courses with names like "Formal Evaluation of Algorithm Design" and "Regular Languages, Context Free Grammars and Compilers" it's probably fine. Expect to take lots of course you don't find immediate application for, like English Lit, Social Sciences or Communications. Take those classes and ace them. They'll be cakewalk compared to the weedout classes you'll have to take (most likely something like "Data Structures and Analysis or Algorithms" or "Concurrent Processes and Distributed Applications" or whatever your school has chosen). Expect to spend 40-60 hours a week on those classes and be one of the 10% remaining in the class at the end of the semester. Most good programs will take you through the entire computation stack, from designing digital circuits to ASM and machine code, to C and/or C++ in terms of modeling computation, operation systems and concurrency, networking communication theory, algorithms, graph theory, Chomsky's hierarchy of languages, probably some alternative computing principles and languages. If you haven't spent time in at least a half-dozen different languages, from Prolog to Lisp to C++ to ASM, it's probably not a good program. Expect to write at least one toy Operating System, and design at least one function 8-bit clocked calculator (if you are lucky it'll be a stored memory computer or a co-processor of some type). You'll need to take about as much math as a math minor. If you can, take the extra 2 or 3 classes and just get the minor. It'll put you out a whole semester since you'll be doing heavier loads than most majors. At least at my school, there was an informal hierarchy of undergrad majors that indicated relative hardness (and therefore respect): Math > Physics > EE/Engineering > Computer Engineering > Computer Science > Software Engineering > Information Systems > Biology > all soft sciences like poly sci and intl relations > Art > Criminal Justice. This hierarchy generally represents what a person from one major can do in another. For example, a Math major can learn to be a Computer Scientist without too much fuss, but not necessarily the other way around. A French lit major wouldn't likely survive an EE curriculum intact. Everybody knows this hierarchy and it can sometimes be the bases for clique formation and preconceived judgement between members of different majors. It's weird, but it happens. Computer Engineering is a good applied program if you want to stay out of computational theory for the most part and just build stuff. It'll probably have lots of circuit design work and you'll spend lots of time with embedded systems. Research will more than likely happen as part of your MS program (or if you go into it, your PhD), not your undergrad. But you better be ready to hyper-specialize pretty quick if that's what you want to do. Don't pick a school based on name brand recognition, pick a school with a solid program -- some well known schools also have solid C.S. programs, most do not. Do a B.S. program. If your school offers such a thing as a B.A. in C.S. run far away and don't look back. It will be challenging, and even if you don't end up doing pure C.S. work, you'll be in good shape to do most of anything else, even non-technical work. The best courses I ever took in my C.S. program were the required history courses. My two semesters of Chinese history have probably made me a $80k in salary doing research work for technical assessment papers early in my career. If you get a chance to do a study abroad program for a summer, do it. Even if you have no hope of ever making that money back. Those programs will also really stick with you. Consider teaching English after graduation for a year also in a foreign country. That stuff will make you ready for any crap the job market will throw at you. |
Former physics minor: your hierarchy is useless. Advanced classical mechanics (a weed-out course) is no harder than EECS 310 (discrete math).