Most important and useful CS courses?

<p>@Turbo</p>

<p>I see it depends on what the SE class encompasses. I guess I’ll cross that bridge when I get there then. It is a Major Design course, if that’s indicative of its criteria. </p>

<p>As for Computer Architecture, thanks for the info. I don’t often hear that the hardware aspect is <em>that</em> useful for Computer Scientist. That, plus the fact that it had the second hardest workload in the EECS department (right behind EECS 381), has steered me away from considering that course as a possibility.</p>

<p>–</p>

<p>@blahblah</p>

<ul>
<li>- “Computer scientists make good software engineers. People who focus on software engineering don’t make good software engineers.” - - </li>
</ul>

<p>Well, I’m not focusing on it…I’m just taking one class. It’s not like it’s going to eliminate everything else I’ve learned. What would you recommend over Software Engineering?: Computer Architecture, Game Design, or App Development.</p>

<ul>
<li>- “Who cares? Does every class you take have to help you get a job?” - - </li>
</ul>

<p>Uh…that’s kind of the main point we go to college, right?</p>

<ul>
<li>- "Have you heard of Google, Facebook, or other big companies who work with large amounts of data? " - -</li>
</ul>

<p>Yes. I have heard of these companies from occasionally. I am also aware that they handle lots of data. That was a funny question.</p>

<ul>
<li>- “They use AI. In fact, Google does a lot of funding for AI.” - -</li>
</ul>

<p>I have no doubts that Google and other really big companies are making groundbreaking innovations in fields like AI. But I’m going to be honest with myself - It’s extremely unlikely that I’ll be working for any company even remotely as innovative as Google. </p>

<p>I guess you could say I don’t have much ambition and you would probably be right. I’ve accepted that I probably will only be an average “Computer Scientist” and won’t do anything major with my career. And I’m okay with that so long as I make a decent living doing something that I enjoy. Sure, working for Microsoft or Google would be nice, but I don’t see a realistic shot of that happening. </p>

<p>My future could change drastically though. In which case, I would change my plans accordingly. If in my first year or two, I realized I was some sort of late-blooming CS genius, then sure, I would go into the more exciting specializations like Artificial Intelligence; so don’t think I’m completely ruling it out. I’m just looking at the most likely scenario. And from what I have observed, it does not appear likely that I will get a job where AI is very important…that would be nice though.</p>

<p>

</p>

<p>That looks kind of like what Michigan’s EECS 481 covers (from the methodology to the actual writing of the code in a large software project):
<a href=“http://web.eecs.umich.edu/eecs/academics/abet/step2/481.pdf[/url]”>http://web.eecs.umich.edu/eecs/academics/abet/step2/481.pdf&lt;/a&gt;&lt;/p&gt;

<p>If you spend your career on large systems that cost lots of money, architecture is important so you could get your money’s worth out of the hardware. If you develop for itty bitty machines, embedded, mobile, etc. it’s important for obvious reasons. The gray area is in between, i.e. write code for PC’s which are so fast these days one does not have to worry much about architecture. Still a good course to have.</p>

<p>Software engineering as pointed out above by ucbalumnus should give great exposure to team programming. We had to do this in the context of a different class (1983 :)) in ‘Systems Development’ or some such, but that’s the idea.</p>

<p>We spent a semester as a team of 7 writing the HR/payroll module for a company all in COBOL, using forms (screen based). Several other teams did A/R, A/P, inventory, etc. Many thousands of lines of COBOL code. Hilarious, tedious, frustrating at times, but very entertaining overall. That was my first and last course thru undergrad and grad school that involved team programming. Later on they started teaching more team programming to the undergrads.</p>

<p>I think a lot of the rants against software engineering course are from people who took a course **many years ago **that they didn’t find helpful. My son took an SWE course this year at WPI and said it was an excellent course.
I think it helps you learn how to apply the knowledge you get from other courses into the real world, where there are product requirements, quality assurance, human factors, iterative scheduling, presentations to management etc… A grizzled veteran has seen all this and the many historical theories about how to tackle major projects, but a student hasn’t.
Take a close look at the course syllabus and judge the course on its own merits. And it would be nice to to not stare blankly at an interviewer when he or she asks “we use agile development here, are you familiar with it?”. Not that I am advocating Agile ;)</p>

<p>I was a TA for my university’s “Objected Oriented and Advanced Programming”-esque course, and I tend to think the material covered in it is pretty useful. I haven’t read your course’s description, but my guess is that it covers UML and basic software engineering process. If that’s what the course covers then, frankly, you probably don’t need the theory you’d get in Software Engineering.</p>

<p>Also, definitely consider the programming languages course. There’s a lot of material there that might not be covered elsewhere (although you might find a fair amount of it in the compilers course). This recommendation is particularly important if you think you may go on to get an advanced degree in CS; the material is more-or-less obligatory for most PhD qualifying exams and the CS subject GRE.</p>

<p>Taking all three of OS, Networks and DB gives you a pretty strong “systems” focus, which is fine if that’s what your interest is. If you really want to run with this focus, consider trading out some of the other courses you’re thinking about for Graphics and Compilers. EDIT: I wasn’t really much of a systems guy, which is why I tend to recommend other more “fundamental” courses instead.</p>

<p>

</p>

<p>My rant against software engineering (being a SW Engineer myself) is offering whole degrees and graduate certificates in the area. One course is great and it’s all that is needed at the undergrad or even graduate level. Each employer has their own flavor of the software engineering process so one only needs to know the basics and one “general” course is all that is needed.</p>

<p>Now these universities charging money for whole 30-credit M.S./M.Eng degrees or even B.S. degrees?..I think one is better to take a CS degree (or Math/CS in my case) and take one SWE course.</p>

<p>Globaltraveller - I agree :)</p>

<ul>
<li>EECS 482: Introduction to Operating Systems</li>
<li>EECS 483: Compiler Construction</li>
</ul>

<p>This is the foundation of everything and some of the most fun classes.</p>

<p>Software engineering is evil :slight_smile: on two fronts. </p>

<p>First, it allows people who are non-coders to direct / schedule / project / forecast how long things should take, how they should be done, the level of detail, level of testing, and so on. Not so, kids. Agile came along to provide a bottom-up view of the world from the trenches.</p>

<p>Second, an entire industry has sprung to support education as well as tools and methods focused on NON-CODING. Coding itself is the last activity, outsourced to some remote country with a once-a-week connection to the US via Elbonia. Not so, once again.</p>

<p>Last year we completed an incredibly agile methodology project that was the most complex thing the company had done - ever - by a mile. It worked fine and you can buy it at fine retailers everywhere :). Agile with maybe 120 developers in a dozen teams, and two project managers, and lots of paid overtime and free food.</p>

<p>What saved the project? Architecture, that’s what. Two ‘old school’ guys from directional state universities and 60 years of coding experience between them created a Linux based framework that allowed everything to play together. All apps, from media to bluetooth to what not were fairly similar in coding and with little effort we could work on a lot of different parts of the system. Very little ‘documentation’ - mostly UML style diagrams that were obsolete the day we wrote them… Lots of old style software development, nothing fancy.</p>

<p>Right now I’m working on an agile R&D project that is purely science fiction. Fantasy. It’s all 50-year olds coding with 25 year old project managers (not the other way round). By definition we make things up as we go along the customer (who’s paying for the work to see if it can be done). Other than agile, our custom framework, Linux, and a couple of basic tools, it’s all non-software-engineering, just good ole’ coding.</p>

<p>Best part: all the gadget-to-cloud code is straight Unix/Linux sockets code, much like the code I wrote in the mid 80’s :). Gotta love progress.</p>

<p>

</p>

<p>The concepts from the compiler course are less likely to be seen in industry software jobs (unless you happen to write a parser for a complex input language), but the compiler course can be seen as the unification of the various subareas of CS:</p>

<ul>
<li>Theory: language and automata theory for writing lexers and parsers, general algorithm use</li>
<li>Software: general software skills including data structures, developing large software projects, memory management, etc.</li>
<li>Hardware: knowledge and understanding of computer architecture for code generation and optimization</li>
</ul>