<p>I'm going to be starting grad school as a chemical engineering major. I do want to take computer science electives (possibly do a minor). if you were to pick KEY computer science courses that i absolutely need to have a shot at software programming jobs what would they be? I know its a tough question but try your best. Especially for those who have worked in industry. what courses would you say were the most important-</p>
<p>i know data structures and algorithms is a must but can you please name others</p>
<p>The freshman and sophomore level introductory sequence is typically a prerequisite for others. It is often a good base for further self-education if you do not have time for additional course work. If you have time for junior and senior level courses, consider the following for most likely utility in industry jobs:</p>
<p>Algorithms and complexity
Operating systems
Networks
Software engineering
Databases
Security</p>
<p>You don’t need any computer science courses to work in a software company. Maybe data structures since they occasionally ask questions from this course in interviews.</p>
<p>Just read “getting started with android development” tutorials and just learn as you go. In 1 month you’ll be a ‘software engineer’.</p>
<p>Depends on the company. In a lot of interviews I’ve had (and was told about), there were other CS topics covered, such as sorting algorithms, graph algorithms, and operating systems.
Most jobs I’ve held (and that were held by others who held titles such as “software engineer” were expected to understand computer science principles. These principles did not have to be learned in a class, but they needed to be learned somewhere.</p>
<p>
</p>
<p>If you only read how-to tutorials, you will become a “developer”, which is not the same as an engineer. Engineers understand principles that are used to make informed design, development, and testing choices. This is important, especially when one is part of a small team.</p>
<p>–Object-oriented software design. Be proficient in C++ or Java. I’m NOT talking about an intro to Java or intro to C++ class. I don’t know what the “title” of this course would be.
–Some class where you learn good software engineering principles. Maybe be the same as the OOP class.
–Numerical methods (know how to solve diffy qs and such numerically).
–Some class that revolves around a big team project.</p>
<p>Tom Servo when you say object orienting programming design do you mean a second level course in computer science? i know its different at every school but typically you have a procedural progamming course as the intro level and then you take OOP after that. is that what you mean?
cmon james- i have interviewed with software companies and been asked OOP questions so obviously you need computer science courses…i self taught myself OOp but i want to take advanced courses formally…</p>
<p>so ok ill take data structures and algorithms</p>
<p>how about computer architecture, computer organization and design? and systems engineering- which is a prerequisite for operating systems. is operating systems an important course? also how about algorithm analysis/design( i thing its called theory of computation in some schools)</p>
<p>Computer architecture and organization are important topics for systems software engineers, and to a much lesser extent, applications software engineers. There are, of course, jobs for which you would be less qualified without the knowledge you would gain from courses in these topics (or, possibly, through equivalent self-study). Ditto operating systems.</p>
<p>Theory of computation can refer to formal language theory, automata theory, complexity theory, etc. Typically, this sort of understanding is not required for non-research jobs.</p>
<p>All this being said, these topics (in my humble opinion) do comprise part of the core knowledge which all computer scientists and software engineers should know, as a matter of professional ethics and integrity. Working in software development without some standard knowledge in each of the following areas I find less than satisfying:</p>
<p>Introductory programming in a modern language
Programming languages and paradigms
Computer networks
Operating systems
Computer architecture and organization
Theoretical and mathematical aspects of computing
Algorithms and data structures</p>
<p>I think that having one or more areas of application, or special, knowledge is also important, but wouldn’t hold it against someone who focused on the core knowledge outlined above:</p>
<p>Software engineering, process, quality, modeling, etc.
Artificial intelligence or machine learning
Relational et al. databases
Computer security
Parallel and distributed computing
Cloud, mobile, embedded, etc. computing
Scientific computing or numerical methods
etc.</p>
<p>In every single internship interview I’ve had, I have been asked to do problems relating to OOP or algorithms/data structures. So just from that, I think it’s important to know (at least as far as getting a job goes). </p>
<p>JamesMadison and yagottabelieve: For what it’s worth, several of the companies I applied to (including the one I’m working at this summer) have Software Development Engineer positions. :D</p>
<p>I completely agree with aegrisomnia. There’s no way I’m leaving college without having taken all of those core classes and one specialization track or another.</p>
<p>Out of curiosity, what is covered in a computer architecture class? I think such a course exists in my department but has a different name.</p>
<p>aegrisominia and sumzup- AWESOME posts Thanks so much. I’m definitely going to make sure i take data structures,operating systems(and its prereqs-computer organization & design, systems programming,etc. ) </p>
<p>geo1113- i like both Chem E and computer programming. Definitely want to take this opportunity to advance my knowledge of computer science- and delve into algorithms. The jobs i REALLY want involve Chem E+Computer Programming.</p>
<p>@sumzup Computer architecture courses typically cover aspects of computer systems such as processor design (pipeline, superscalar, RISC/CISC, branch prediction, etc.), memory system design (especially cache design), connections between various system components (buses, interconnects, etc.), and the like. It’s not about hardware, necessarily, nor about how the operating system works; rather, it’s somewhere in between those two topics, although the treatment is still usually at the level of methods, algorithms, processes, and data structures; actual physical characteristics are only discussed if they motivate the more abstract models which constitute actual architecture.</p>
<p>One way that you might think about it is that if CS majors study computer software, and EE majors study hardware, then CmpE majors study computer architecture.</p>
<p>Thank you, raccnna. Looks like you received good answers as you noted. The only thing I would add is to check with the schools to which you are applying. Most of the MS in Chem E programs I see generally require 8 Chem E classes. So you get 2 electives. Speak to your professors and use the good answers given here as a base to ask questions. A;lso, you may need to take some summer or online classes to get to the level of class they may expect for a ChemE grad elective.</p>
<p>Yeah its 4 ‘electives’ but they only allow up to one upper level undergraduate course as an elective. It gets a little tricky. The other 3 have to be graduate level. </p>
<p>But anyway i’ll definitely try and fit in 2/3 comp sci classes even if some dont count</p>