<p>If you got a job with a BS in CS, what would the job really be like? Would it be mostly programming, or mostly thinking of algorithms for other people to program? Basically, is a job with a BS in CS more theoretical (thinking of advanced algorithms) or more practicle (writing code). What is the % breakdown of the amount of time spent on the two?</p>
<p>In the ordinary business world, usually there isn’t much need for fancy algorithms even for new custom development, and if you needed one you could look it up (although you’d probably have to adapt it and translate it into a different language). However, there is plenty of design work aside from coding where you can still use your creativity. Unfortunately, business these days usually wants you to quickly get things working correctly and elegance, efficiency, and innovation come second. Aside from business and industrial applications, a company that makes new software would usually have the most interesting or advanced work in application areas like communication, networking, defense, operating systems, compilers, etc.</p>
<p>Most of the people I know who have a BS in Computer Science do work in the business sector - basically setting up database applications and writing simple web applications that use business logic, not any kind of advanced computational skill. Most high-end CS industry jobs are in government, academia, or in high-tech focused companies (not just Microsoft or Oracle, which is largely into services, but like NVIDIA, Akamai, Google, etc).</p>
<p>mrego, what are these other things that let you be creative?</p>
<p>I don’t think you can understand a CS concept theoretically without being able to write code for it.</p>
<p>My dad has a masters’ in computer science. Depending on who you work for, you basically sit at your desk all day developing systems and writing code. Commonly there are projects and people collaborate on them. Like I said depends, that is the typical job. There are probably very interesting ones if you look hard.</p>
<p>There are a wide variety of jobs that the CS major can do and capturing them in a quick post is basically impossible.</p>
<p>Most of the people that I know with CS degrees work in software engineering. There are a variety of tasks including writing specs (functional, design, detail, test), working with support groups (project management, requirements gathering, working with project managers, documentation staff, education staff), fixing bugs, visiting customers, etc.</p>
<p>There is a lot of time spent coding but there are lots of other things that are done.</p>
<p>Complex debugging, testing, and analysis can require creative thinking. You may also need to be able to develop a quick work around or other immediate solution with little time so the ability to adapt something for another situation can also require substantial creativity. Most business and industrial applications involve a large database. However it is not always obvious how that database will be used in the future. Imagining future needs and providing for that in the initial data model is also a creative activity. Asynchronous or parallel processing may which require you to mentally slow down and imagine near instant electronic transactions. Building user interfaces will require you to put yourself in the place of your possible users. Good design should look and feel natural, but can take a lot to create. In Unix, for example, you can chain many smaller utility programs together, but often there are several ways to order and choose between operations to get the same result, so you get to decide which options would be the better choice and minimize potential failures. When you are thinking in cyber-space, you have to mentally create a virtual world inside your head. So there are many things you’ll be working on daily that you can still be creative with. Beyond algorithms, there’s plenty to do with meta data and higher level functional process design.</p>
<p>As an example, suppose you have the task of developing a disk defragmenting utility which requires you to move fragments of files so all parts of all large files are contiguous on the disk if possible. In order to move the fragment you need to put it in a spot where another file’s fragment already is so you’ll need to move that first and may need to move it to a place also already occupied or to an intermediate free space, etc. (And you can’t lock down the disk while doing these moves in order for other programs to continue to run.) After analyzing the problem you determine that it is similar to a Towers of Hanoi puzzle. So you find a recursive algorithm for solving that puzzle and adapt it to your purpose. The creativity is not in creating the algorithm which already exists, but in applying it to your problem.</p>
<p>CS is a very dull career unless you like sitting in your cubicle 8+ hours a day pounding away at a keyboard. You will become a zombie with no human interaction and your cubicle will beome a dungeon. Then after its sucked the last little bit of life out of you, your job will get outsourced to India… that’s what a CS job is like.</p>
<p>
</p>
<p>You sound very bitter and very biased against software engineering industry. I do not agree with anything you have said.</p>
<p>Eh from my internships I would have to disagree with what UIUC said. I would say by his very basic description that’s what the majority of people do in the office work setting (not just CS) at least that and meetings. Now as for the regular job in CS you’ll most likely have to like coding somewhat ;), but you certainly do not have to become a zombie :P.</p>