Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

For those of you who received undergrad degrees in Computer Science, do you feel like your school prepared you well for the actual day-to-day work of being a programmer?

I've often felt that my school prepared me really well to go on to a Master's Degree program, but that was at the expense of learning basic working concepts like how software shops are commonly structured and what is typically expected of a professional developer. Also, it would have been nice to learn more about the latest trends in software development so I could have known which skills were most in demand in which industries.

I am not dismissing the value of the more theoretical classes I took, and I do see how they have benefited me. However, I think any CS programs that aren't already doing it should offer a half semester class in this area. It could aim for practical and up-to-date information about what should be expected from the real-world software industry.


If you disagree with me and you feel that your school prepared you for real-world experience, please say so. What kind of classes did you think helped you out?

As I said in the comments below, I'm not suggesting that a university's first responsibility is to prepare you for the working world. I do, however, think there can be a compromise between their goals of getting their students to embrace new ideas and helping to get them ready for life after graduation.

share|improve this question

closed as not constructive by ChrisF May 3 '12 at 11:52

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. If this question can be reworded to fit the rules in the help center, please edit the question.

I think it is hard to get an objective or even a consistent reply to questions like this. It depends on the quality of the university/curriculum/teachers as well as the quality and motivation of the student. Expect to get very mixed responses. –  MAK Mar 22 '11 at 4:27
StackOverflow > my.Universtity –  Garet Claborn Mar 22 '11 at 4:27
Why do your feel that a university's purpose is to prepare students for their future vocation? Isn't that the point of a technical school? University is ostensibly about education, not training. –  Sedate Alien Mar 22 '11 at 5:00
@Sedate Alien: It's a modern American attitude these days. The 4-year university is now the price of admission to the workplace, so almost everyone treats it like some kind of vocational school. It doesn't help that our university system has been monetized into a profitable business entity. –  Joel Etherton Mar 22 '11 at 10:57
@Seth P.: If you're interested in this sort of thing, go to ITT Tech, DeVry or one of the thousands of other IT vocational schools. Universities aren't there to teach you how to work. –  Joel Etherton Mar 22 '11 at 10:58

10 Answers 10

up vote 4 down vote accepted

As for preparing you, you might want to consider my perspective. I manage a group of developers. And, for the curious, a BSEE (Electrical Engineer).

When I hire, I tend to hire fresh graduates. To me, though really my company, a degree is just an entry cost. You need it. Next...

I've found that those from tech schools that focus on more practical aspects ramp up faster than those from university that studied theory. From a short term perspective, tech school grads do seem to be a better deal. But, I'm hiring for the longer term. For the sake of the argument, let's say 5 years.

Within that window, I'm looking for ability to think and solve problems. I'm looking for work ethic. I'm looking for a good, flexible attitude. At that point in someone's career, I expect a level of passion.

My particular company isn't huge or doing some of the 'cool' things. Therefore, I tend to mostly see the mid-tier grads from both types of schools. Over a number of years, I can't really say there's a lot of difference between tech school and university graduates. Most tend to be more subtle. Socio-economic levels tend to be different (makes sense give the cost of tuition). And, related to that are a series of self-expectations that impact an individuals drive and career. But, at the end of that, I don't see a big difference in individuals that come out of one type of school or the other. But, it isn't a clean sample. It's biased around the type of people I hire, which is probably stripping out traits that separate individuals who choose tech schools versus universities.

share|improve this answer

Absolutely not! My experience was probably a rather extreme case.

Our professor was literally stuck on COBOL (this is in 2004). He was learning C++, I was often teaching him. :( Very very disappointing. I was hoping to learn at least of a language or two I hadn't heard of yet,...but that was apparently to be on my own time.

There are schools out there which do prepare students. Personally I believe these are the schools that tend to have students work on more projects than exercises, especially collaborative projects that build over time.

Too many other computer science departments I see out there are just teaching kids the basics of web development along with C++ data structures and little else. Some are amazing.

share|improve this answer
But if your professor was stuck on COBOL and teaching you "the basics of web development", then he wasn't a good CS professor. He would simply get eaten alive by the real scientists. It's patently false a CS teacher can afford to "stay behind" -- there is a lot to keep up to date with in this field! –  Andres F. Aug 27 '12 at 13:24
I took "Computer Science I" (a C++ class) from an instructor who had started learning C++ during the Summer. (It was Fall.) She'd use Pascal previously. It didn't matter, though. It turned out to be a great course. My point is that the specific languages used don't really matter. The fundamentals being taught are the same. And you may have just had a bad professor, but it wasn't necessarily because of his COBOL background. Also, what's wrong with teaching "the basics of web development along with C++ data structures"? I can see that comprising a legitimate part of a CS degree. –  user1172763 Jan 24 at 20:43

Currently a senior and going to graduate this semester.

I give my CS department a lot of shit and bitch and moan about how they aren't preparing me for the real world and how everything I learned was on my own. "They didn't teach me anything about the real world of software development" is something I hear a lot.

But when it comes down to it, they really have prepared me well. They've given me the tools and resources to go about learning what I need to know. They offer an environment where I get to spend time working on my own projects in my free time and give me projects to challenge me on things I wouldn't normally work on.

It's not their job to teach me about the most current, fashionable technology. They should be teaching me about the theoretical aspects of my field. They should be teaching me the skills that I will find useful for the rest of my life, not the stuff needed to get me a job after I graduate.

While classes weren't necessarily the most important thing to me, the general atmosphere of a University was incredibly helpful. I can never tell when something theoretical will be helpful, but it's nice to have a broad knowledge so I know where to begin looking when I encounter that problem. The practical skills were all things I could learn on my own anyway so it's not like they needed to teach me that stuff.

Overall, I would say my CS program prepared me well. I wish it had ventured further outside Java/C though (there was one required class where they introduced functional programming and other languages, which is at least something).

share|improve this answer
+1 While I may disagree about some of your points regarding what your university should be doing, I think it's great that you found a program that prepared you well. Best of luck to you after you graduate. –  Seth P. Mar 22 '11 at 4:24
+1 "They should be teaching me the skills that I will find useful for the rest of my life, not the stuff needed to get me a job after I graduate." Amen to that. –  Lukas Stejskal Aug 27 '12 at 10:43

My CS degree is a B.Math in Applied Math and Computer Science from Waterloo.

It prepared me extremely well for the job I do today. I keep my notes in my office and consult them frequently. However, I have a job that is very "computer-sciency" compared to most people.

We were explicitly told that the function of a CS degree is not to teach you how to succeed as a programmer working on business applications. The function of a CS bachelors degree is to teach you the basics of computer science, which is a theoretical field. If you want to learn the theory of software engineering, take a software engineering degree, not a computer science degree. If you want to learn how to program web pages and business forms, take a community college course.

Waterloo has the largest cooperative education program in the world. I spent 32 months taking courses and 24 months working at WATCOM and Microsoft as an intern, and graduated with a four year degree, two years of experience and no debt in five years. I cannot recommend coop education programs highly enough. The coop program is what teaches you about the real world, the degree program teaches you about theory. Both have turned out to be extremely important for my line of work, but again, my experience isn't the same as everyone's.

share|improve this answer
coop/internships are extremely important, both to give you real world work experience, and just to see if you actually like doing it in the real world. –  BlackICE Mar 22 '11 at 13:01

Here's the real problem. There seems to be a fundamental mis-understanding about what exactly a Computer Science degree is. A Computer Science degree is NOT a Software Engineering degree. A Computer Science degree isn't supposed to prepare you to be a Software Engineer. In some programs (mine included) modifications have been made to teach Software Engineering classes. But unfortunately that alone isn't enough to prepare someone sufficiently to be a Software Engineer. We are still left to our own devices to spend a lot of time preparing our selves for the work we'll actually be doing as Software Engineers.

Computer Science is a science. This means its primary focus (when it hasn't been altered to have somewhat of a Software Engineering focus) is to teach students fundamentals of the science behind computers. This means a LOT of theory. Theory about programming languages. Theory about architecture. Theory about the concepts of computers in general. Etc, etc, etc. This training is to provide students the ability to study, explore, and expand this knowledge to develop the computer world so that new technologies can be utilized. When looking for software engineering positions you'll often find large companies hiring Computer Scientists as well. These positions will largely be Research and Development.

Now all this being said there is a lot of overlap between Computer Science and Software Engineering. There would also be a lot of overlap between Computer Science Degrees (unaltered) and Software Engineering Degrees. And as I mentioned before, knowing that most students pursuing Computer Science are really wanting to pursue Software Engineering is likely the reason why many colleges are trying to (if their departments aren't large enough to have both) teach both at the same time under the title of Computer Science. In the end how prepared you are for the real world will depend on how much time and effort you invest into your career on your own time. That being said I'm sure you're much more prepared than you realize as we often don't see the full growth that we've made because we're with ourselves 100% of the time. You can't spend 4+ years immersed in something and not be slightly affected by it.

My recommendation: Learn what you're taught in school well. Use this teach yourself further at home. Utilize sites such as this to keep up on current trends and developments. Then work hard at your job and you'll be very well prepared!

share|improve this answer
no, there is not a fundamental misunderstanding, that is your opinion. many disagree. –  Chuck Stephanski Mar 22 '11 at 6:08
If there is no difference then why is there a Computer Science Degree AND and Software Engineering Degree? –  Kenneth Mar 22 '11 at 6:11
Computer Science has about as much to do with computers as Astronomy has to do with telescope construction. Can't remember who that should be attributed to. –  Matthew Schinckel Mar 22 '11 at 10:51
@Matthew Schinkel: Dijkstra –  reinierpost Mar 22 '11 at 11:19
@Seth Here's the problem with that idea though. The best they could do would be to introduce a small aspect of the field or give you a brief intro to a few areas because there's so many areas to the Software Engineering field. And even if they were to try to do so, there still would be no substitute for personal time engaged in self-learning of languages, tools, best-practices and such. Education can only point us in the right direction and help us have a foundation which will allow us to find the answers we need. –  Kenneth Mar 22 '11 at 14:26

Great question! Actually there's a great debate as to whether a CS program should focus on theoretical computer science or prepare you for a career in industry. These debates rage in schools throughout the country, maybe throughout the world. There was a shift in focus at my university when there was a change in department chair.

To answer the question, no, my CS program did not prepare me well at all. I wish there had been more balance because I'm glad to have the theoretical background, but there was not a single course that provided me with preparation for a career as a software engineer, and I believe strongly that there should have been.

share|improve this answer

Nope, but I would say that when you are too passionate or have big enthusiasm in CS then you can find yourself easily in a situation where you either have already mastered (most of the) things which they teach you or you find them not "attractive" (this is however my subjective experience). This topic reminds me a great article about education by Gian-Carlo Rota.

share|improve this answer

I used to think not. I graduated with a CS degree from a liberal arts school whose program focused heavily on the theoretical aspects of computer science. My advisor was adamantly out to produce scientists (those who built to learn) rather than engineers (those who learn to build). I became a software engineer and was thrown into teaching myself the full software lifecycle and going from the cowboy coding that got me through my classes to coding for maintainability and working on a team of more than 2. While I did fine I was a bit awed by the steep learning curve.

Then I began a masters degree part time at a university whose masters program catered to working adults near my job. I realized that compared to what I was learning in my masters program what I'd learned in undergrad had absolutely prepared me to be a software engineer. In my masters program there was rarely rigor (for some reason the software engineering classes were different and did have rigor, but only two of my eight CS classes did). In my undergraduate program proofs were done with mathematical precision. In my masters program learning the basics wasn't as important as learning the professor's personal specialty. In my undergraduate program the professor's specialty was used to inform our grasp of the basics. My masters program was a "Java school" in the worst sense.

The fact that my undergraduate program combined rigorous theory and science with the general education requirements of a liberal arts school didn't mean I came out of college ready to jump into the full software life cycle without a lot of work. What it did prepare me for was a lifetime of learning that would allow me not only to master the full software lifecycle but to continue improving myself as a programmer for years to come. Not only has the ability to improve myself helped me as a programmer, it's helped me as a person.

So despite my initial frustrations that my CS program didn't perfectly suit me for my job from day one, I've come to be so grateful for it. It taught me the basics. It taught me how to teach myself the rest.

share|improve this answer

I think it depends on the "educational culture" of the country/city/university you are living/visiting.

I had a great experience in Brazil, where the university was also theoretical but strongly advised that you should also work during your student years in order to cover this "gap". I left it with my CS degree and a very nice experience and understanding of how a company works.

Now I am studying in an European country, which I won't tell which one, but is a very respected one. The students here are very good, they really know a lot. But once they start working, I can feel the difference, because they are not mature enough to work in a company, either technically nor psychologically.

Although I think the main role of the university is not bring you this company-related knowledge, I think it is very important that the students gather this kind of experience during their university years. And, IMO, the universities should support this search for different experiences.

My feeling is that, because my university supported me looking for a job while I was studying, I am completely secure working in big companies and with older and more experienced people. :)

share|improve this answer

Yes it prepares.

Its far from being good preparation. There is no other way that I know of. I went through software engineering program that included 98% of computer science degree.

Keep in mind that the hardest part in every job is getting to know the place you are in: its internal tools and specific composition of the solution that no other company does.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.