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.

I'm about to move into my final year at university, and it's finally kicked in that in just over a year from now, I'll be doing my best to secure a job.

Yet I still have no clue about the level of proficiency expected of graduates trying to make their way into the programming industry.

I've read that they'll weed out the non-programmers with some fizzbuzz style questions, but after that, what sort of people am I likely to be up against? And what skills would be worth studying to push myself ahead of the competition?

I'm currently trying to get comfortable with inheritance / polymorphism, currently just with my own code, the next task I've set myself is gaining confidence in extending existing code. I've studied PHP, Javascript(+JQuery), Actionscript (and probably some others I can't think of off the top of my head) as hobbies, Java at university, and currently pushing my way through C# (in an attempt to kill two large birds with one stone).

Is this panicking undergraduate headed in the right direction? D=

share|improve this question

migrated from stackoverflow.com May 10 '11 at 7:13

This question came from our site for professional and enthusiast programmers.

closed as not constructive by Yannis Rizos Mar 8 '12 at 15:53

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.

13  
You'll have to start working when you get a real job. :) –  Will A May 10 '11 at 7:08
20  
You'll start to notice that the best practices you've learnt at University are almost never used, in my experience. :( –  Nick May 10 '11 at 9:03
3  
I've heard that I'll learn more in the first few months of working than I have in my entire time at university. I certainly hope so since I learned most of what the university taught about programming through time spent as a hobby two years beforehand D= –  mhorne May 10 '11 at 10:28
3  
I have never, in all the interviews I've gone to over the years, been asked the Fizzbuzz (or similar) questions. Any company that still uses that technique should be avoided as they don't have a clue what they're looking for or what they should be looking for. –  BBlake May 10 '11 at 11:38
8  
@Nick, they taught best practices at your University??? :-o –  Wayne Werner Feb 29 '12 at 17:41
show 12 more comments

19 Answers

This gets ahead of the transition from school to work, but it's important to also have a long-term view of where you're going. Unfortunately, I have to view programming as a poor, very poor career path for most people for 2 reasons: 1. Companies no longer feel any responsibility to provide ongoing formal education for employees - programmers or others. You'll have to spend your vacations and nights doing that yourself. Yet they are always looking for those with the latest technology skills. That may be you as you come out of school, but it will not be you in 10 years. 2. Companies are looking for the lowest cost programmers they can get. This has resulted in the offshoring, domestic "renting" of programmers from "consulting firms", and other "consulting" arrangements - but few career opportunities.

Software is critical to these companies and should provide a great career, but I don't think that is what you'll find.

share|improve this answer
add comment

It might be too late for this summer, but get yourself into an internship ASAP. I can't stress that enough.

Most new grads are on approximately equal footing on the technical knowledge side, and frankly a little extra studying is unlikely to distinguish you. Where you can potentially stand out is on the process and tools side that they don't teach in school, but you can pick up in an internship (there I go emphasizing that again).

Can you...

  • Handle a large code base?
  • Use version control appropriately?
  • Ask others for help intelligently?
  • Handle vaguely specified requirements?
  • Learn new technologies on your own?
  • Split a large task into manageable chunks?
  • Perform unit testing?
  • Troubleshoot a bug report written by a non-programmer?
  • Convince someone your solution is correct?

That's what you can expect to learn once you leave school. That being said, don't worry too much. Employers expect to give you quite a bit of on the job training in those areas.

share|improve this answer
2  
+1 forinternship - they can be tough to get at good places though –  SHug May 10 '11 at 8:00
12  
I would +50 for the internship if I could. Real world experience is 100,000 times more valuable on a resume as college courses are. –  BBlake May 10 '11 at 11:39
2  
+1 for mentioning tools...that's the biggest thing I got from my coop. Learning to work on a large software project with robust version control was a whole new world for me. Generally just working as a programmer you learn lots not directly related to coding. –  Mr. Shickadance May 10 '11 at 14:12
show 5 more comments

Often a lot of noise in the open plan office including lots of people on conference calls all day as well as people holding “meetings” at their desks.

Unlike a university lab, in a lot of companies there is no concept of having quiet to enable anyone to think about the code they are writing.

So you may find yourself spending lot of time answering questions on stackexchange sites, as the other people in the office will not let you work.

share|improve this answer
add comment

Well let me start answering in the descending order.

From my personal experience, the best way I was able to distinguish myself from my peers was an internship. It helped me get real-time experience and allowed me to work on real-time project within a small span of time and gain attention from potential employers.

What skills would be worth studying to push myself ahead of the competition?

  1. Graduation & Courses with Internship: You can get good internships by registering yourself in coaching institutes that offer internship after course completion ( I had this approach ) in concurrence with your graduation, you can distinguish yourself when you are applying for your first job.

  2. Multiple Languages: Knowing more languages is the best way to widen your placement window. So knowing more languages and platforms will definitely boost your chances for a better placement although having in-depth knowledge in a specific language/platform wouldn’t hurt.

I've read that they'll weed out the non-programmers with some fizz-buzz style questions, but after that, what sort of people am I likely to be up against?

Well this is completely debatable as there the pragmatic view to this can differ based on the employer but the most what most employers are keen in knowing are

  1. How strong are you in your concepts (OOP for example)?
  2. How honest you are with your accomplishments.?
  3. You ability to learn and adapt quickly.

What can I expect when moving from University to a real programming job?

From my experience, as Michel Keijzers pointed out, the biggest thing to expect is the steep learning curve to handle Bigger applications and Complex designs.

Apart from this,

  1. Deadlines: Depending upon the project you are assigned to, there would be a time window within with the project must be completed. But not to worry, your seniors would be there to guide you through the process. Your first 6 months will be a testimony to this.

  2. Team Work: There would be more focus on synchronizing your work with your colleagues to achieve a common goal because the objective is usually modularized to individual members of the team by the team leader.

Bottom Line

Have a positive attitude and never loose hope towards your goal.

Success is yours!

Good Luck!

share|improve this answer
add comment

I graduated from college in May 2010, and had prior programming experience throughout highschool. I started my own Android project which I published on the Android market in October 2010, got an interview two months later, and started my first job in January 2011. I never did an internship. With that background, here's my answer to this question...

What can I expect when moving from University to a real programming job?

The primary difference is that most of your work is going to be on code others have already written: New features, bug fixes, and so on.

One other major difference I had not even considered while in college is the time spans involved.

  • It's easy to get burned out, working on a computer for 7 or so hours per day. In college, I could work at any time I wanted to, for as long as I wanted to. At work, I'm expected to work while at work.
  • How quickly you are expected to pick everything up. A four-year degree could be compressed into a single year if I had been learning at the same pace I was those first few months on the job.
  • We just completed a major project that we started in May. About 9 months of work for a 5-person team - something that just isn't possible in college, where semesters are 4 months long and you rarely have a single project for the whole semester.

I've read that they'll weed out the non-programmers with some fizzbuzz style questions, but after that, what sort of people am I likely to be up against?

Not necessarily FizzBuzz; the test I got before my interview involved code comprehension questions like, "Here is a function normalise(), describe what it does in plain English", write a function to reverse a string, determining the state of a few variables after a loop completes, and putting together an SQL query.

I later learned that these exact same questions weeded out a surprising number of candidates who apply.

And what skills would be worth studying to push myself ahead of the competition?

Not a skill, really: Have something you did that you created, that you can show off. After getting the in-person interview, about half of it was focused around the Android app I mentioned at the beginning: Why was a motivated to make it? What difficulties did I have? Do I have further plans to improve it?

Apparently even having that app on my resume made me stand out. My interviewers both commented that they were surprised to find anyone who did programming outside of their job or college degree.

share|improve this answer
show 1 more comment

Find out who the customer is. In college, the professor was the customer. In industry, it's different. Your boss is not your customer. The customer is the end-user. Find out what they do, what their pain-points are: a data-entry person is taking too long to fill out a form, an executive has to wait until the weekly report to find out there's a delay in a delivery, a house-wife needs to upload a bunch of photos from her camera to a print-online website, etc. Then be an advocate for the customer, and deliver solutions that make the customer's job easier. This will guarantee you'll do fine in the long-term. Everything else is ego.

share|improve this answer
add comment

There are many excellent insights and distinctions related to moving from academia to industry presented here. I've moved back and forth 'twixt these two domains in 34 years, and I'd like to add one consideration I've come to view as critical: what is the economy in a given organization? By this I mean what's actually really important to an organization; where's the revenue stream come from and what's produced? These things and their side-effects are often not so obvious.

For example, in one academic position, funding from US federal agencies was the revenue stream, so grant writing and winning grants was important. A subtle secondary effect from this was the University charged the funding agency US$0.63 in addition to every grant US$1.00 received, so buying a big dollar computer system was far more important than the question of whether the big dollar computer system was effective for its intended use.

One common example is that a team of grad students is organized and produces results quite differently from industry development teams. Grad students are relatively inexpensive; professionals in industry less so - this drives the team organization and interactions.

One industry example is from one company I worked with once upon a time. On the surface, it seemed our product was computer systems and software. It turned out that our real product was generating patents and intellectual property, which in turn generated the real revenue stream - a huge amount of investment capital. So, I realized being focused on patents was the way to contribute to that company.

You get the idea. Look for what's really important to the organization and how what's important organizes and shapes the environment. Look beneath the surface for what's really so.

And, on a more personal note, have fun! No matter what.

share|improve this answer
add comment

As a freshout, you aren't expected to really know much of anything. One semester's worth of class hours adds up to a little over one work week, so you'll probably learn more in the first month on the job about the practical side of software development than you did in your entire degree program.

You are expected to learn quickly, and not just coding skills -- you'll need to develop analytical and troubleshooting skills as well. You'll also have to learn all the processes and procedures associated with patching and delivering software, and everyone does it differently. Pay attention and don't be afraid to ask stupid questions. There's the very real possibility that you may wind up working on something that you had little or no exposure to in school. Almost all my classes used C or Fortran on VAX/VMS (yes, this was the late Cretaceous era), and my first professional assignment was in Ada on an ancient Encore mini. I spent the first week on the job inhaling an Ada reference manual and writing stupid little practice programs. By the end of that project I had delivered code in Ada, C, Fortran, SQL, and DCL.

Just like law school doesn't really teach you the law so much as it teaches you how to think like a lawyer, an undergrad CS or CE program is supposed to teach you how to think like a programmer. To that end, good interviewers are less interested in what you know than in how you think. They won't care if you haven't memorized every last library call (that's what reference manuals are for), they're more interested in how you would go about solving a problem. You don't have to know the answer to every question, but you need to demonstrate that you can work the problem.

Re: internships. I won't say you need to do one (I didn't), but certainly snag one if you can.

share|improve this answer
add comment

I think you're asking about a couple of issues

  1. Getting the job: My experience has been that knowing people supersedes knowledge. The adage "it's not what you know but who you know" is absolutely true. But you can't be completely incompetent because the fact that you are asking questions implies you have the right mind set. To get the job, go to meetups, .NET, web developers, java, etc... socialize and make friends, they will help you get hired.
  2. Internships: As Karl mentioned, internships are Gold Stars on your resume if you have no connections and interviewing blind.
  3. Interviews: In an interview, be completely honest, the best product managers and business owners are superior BS detectors. In interviews I have done, even if the person I'm interviewing has demonstrated knowledge, when I push him into an un-familiar topic/territory I'm searching for honesty. If they do that then I know they are not a coding 'diva'. I look for open minds, desire and ability to learn. If you BS on a topic... done. Don't be afraid to say "I don't know" and asking the interview questions is a good sign (asking questions about the company is not a good sign.)
  4. Technology & Career: Everyone will have an opinion about the technology of the future, pick something you love working on. As Karl said, employers expect your to do a lot of learning on the job. In the meantime, build your own apps for demonstrations of your competence, get involved with open source... and be open minded... If you really love programming then you will continue to teach yourself the newest tech that comes out. The best programmers and best paid developers never stop their education. It's a 24/7 process to keep yourself valuable. Stand still on one tech and you'll be one of the last COBOL programmers looking for a shrinking pool of mainframe programming jobs...

p.s. enjoy your free time. it disappears!

share|improve this answer
add comment

I've been a Team Lead and student/intern mentor for going on 10 years and I'm also the primary internship coordinator for incoming software development students, so I've worked with quite a few students. I also have an advanced degree in computer science so I'm quite well versed in the world of computer science/software engineering academia and the inherent differences between what your taught in school and the way things work in the "real world."

From my experiences on both sides of the line I have two main pieces of advice for you:

  1. Learn to write clean code. Bob Martin's Clean Coder is a great book on software craftsmanship that teaches the reader the importance of writing clean, efficient and self-documenting code. I can't stress this enough, writing clean code will gain you measures of respect from your peers and result in more maintainable applications.

  2. Study design patterns. Factory, strategy, template method, dependency injection, IOC containers, repository. These and many others are all great patterns. Architecting your applications using appropriate patterns will increase the stability of your base and make life easier when things need to change or be added in the future.

I'm also a very strong proponent of Agile, but not all companies leverage this software development philosophy so I'll leave that out of my spiel. Let me know if you're interested in any resources on Agile and I'd be happy to offer up a few I've found useful over the years.

The very best of luck to you

share|improve this answer
add comment

If you dont have any visible projects, make some. I recently hired an intern (well a couple months ago now) and he had built his own simple jQuery extension. It didnt do much, There were plenty of other libs out there that did the same thing, but he had his own library. I was like.. "WOW" this is the guy. He turned out to be an okay developer, and we were all pleased with his performance, and really probably the next candidate could've have done just as good.. but shoot, this guy had something visible and it demonstrated his abilities (even if it took him waaay too long to make, may not have been as fancy as it could've been, at least he took a stab at it). That Library gave us insight into his code before we even spoke to him.

Now for the Job part. Again, same answer just enhanced. You're going to want to have some good examples that they can check. You may want to build up your profile here on stack overflow, and reference it on your resume, just make sure to answer what you feel comfortable with, don't go answering complex problems and being wrong.

Some Jobs are looking for a "good fit" where personality makes a big difference, others want true skills. I wrote a quick on-line test and made every candidate take it before I would consider them. It weeded out a lot of candidates (it was pretty lofty, some of my fellow dev's couldnt pass it.. lol.. but it was intentionally hard). I also didn't expect many people to get them all correct. To me, the most important question was "why do you want to work here". We ended up finding some good well rounded candidates.

I've been on many interviews where i had to take a test also, and generally they're very hard. Again, just getting through it will gain you some kudos.

Now, once you have the job, you're pretty much going to have to really blow it to lose the job. Blow it like do a DELETE without the WHERE a good few times over.. Once they've gone through their process and selected you, the successful candidate, they're not going to want to do it again. That being said you can't get lazy. You must be willing to take on everything and anything and be willing to get answers yourself, maybe from Google, Stack, etc.. and get it done right.. People dont mind answering questions, but no one likes doing the grunty work of stopping what their doing to answer a question easily answerable from the interwebs..

So your checklist:

-Get some work visible
-Get your own domain (I've heard hiring managers notice custom domains and be impressed)
-Make some libraries (even if no one uses it or cares, 
 it gives people a sense of your style and ability,
-Wear a big smile, engage in conversaion
-Dont over dress on the interview. (we're programmers, 
 not customer facing, so dress nice (iron your button up),
 but dont dress like you're going to a wedding.

Once you have the job, get ready to hit the ground running.

-Think about your work when you go home
-Dont try to introduce new technologies
-Get books and READ THEM.
-Learn the lingo, even if you dont know 
 how to implement it, you'll benefit from sitting in on the conversations.
-Dont bother other dev's with answers that are easily attainable.. 
 go to them last so you can ask intelligently.

Good luck out there! You're in a growing field, There's lots of jobs out there so keep it up till you get one.

also, some advice some will definately disagree with:

Plan to Jump Jobs every 1-3 Years

many will say they don't like people who jump around.. but you're constantly facing new challenges, working with new teams, learning new techniques and methodologies. that will not do anything but make you more knowledgeable and valuable. You'll make lots of friends too.. dont worry, it's how we make more $$ these days..

and one last thing (since i'm on a soapbox already) Dont worry about jumping jobs and hurting anyone's feelings. You have to do what's best for you. If you find yourself gettig stagnant, start looking. You have to stay interested, otherwise you'll get bored staring at the computer day in and day out..

OH yeah, one last piece of info.. I'm an ART MAJOR (I was a programmer hobbyist)!!! so what you do in school will not at all limit you. Your Ambitions, Self-Motivation, Dedication and Interest are what will keep you sharp and moving up..

You're really only going to learn once you get out there.. so get out there!!

GOOD LUCK!!

share|improve this answer
show 1 more comment

Bigger applications At the University you probably dealt only with very small programs, created by your own or in a small team. You know every file and probably also a lot at the content/context. In a real life application, expect millions line of code, some of which you never will touch, some you change a lot.

Complex designs As above, since applications are bigger, designs are more complex. One of the reason is that lots of people work at it so there are procedures to have some designs that are shared among the application.

Procedures When lots of people work at an application, procedures are needed to make sure someone does not 'break' the code, i.e. makes a compile error after linking or breaks functionality (from himself or another).

Meetings When a lot of people are involved, communication is more and more important, to know what you have to do, how you have to do it.

Version control At the university, probably version control was not much more than backing up the latest code. In a real environment, expect branches, baselines etc. Every company works a bit different regarding this.

Documentation Probably you have dealt with this, but expect to not make only a design document, also test documents, acceptence documents, manuals maybe etc.

I can go on but this are some of the items that will change. Welcome to the real world!

share|improve this answer
show 2 more comments

The fact is, anyone in the working world is going to understand that a college graduate generally just isn't going to know a lot or have much in terms of experience that relates to the real world.

To break this down, I guess it's easiest to look at the two major steps in getting a job:

Getting an interview

When looking for entry level positions, employers are going to be interested in courses you've taken, projects you've done, and your GPA. Since you've never had a job before, you're going to have plenty of space to fill on your resume. Use this space to put little summaries of the most interesting courses you've taken and most interesting projects that you've done.

If you can get an internship, that is most likely going to get your resume put at the top of the pile for interviews.

Interviewing

For entry level employees, employers are generally going to be looking for two traits: smart and enthusiastic. You are most likely going to be given basic programming questions and asked to talk about courses you took or projects that you did.

Show that you have a solid understanding of basic programming concepts (inheritance, polymorphism, etc) in whatever languages that you have experience with. If you get a question that you don't know the answer to, work through it the best you can. Explain your thought process as work. In many cases, this is what the interviewer is interested in rather than a correct answer.

When you talk about courses you took or projects you did, get excited. Talk about them in detail. Mention significant design decisions and the reasoning behind them. You'll get bonus points if you can talk about mistakes or failures and explain what you learned from them.

It's amazing how much you can learn about someone by just listening to them talk about what they've done. It's absolutely crucial that you show a genuine interest in a programming career. In fact, it's more important than being able to rattle off definitions to 50 different programming terms.

share|improve this answer
show 1 more comment

Some things I look for in recent/new/upcoming graduates are:

  • Basic skills and knowledge - The key word here is basic. For example: I don't expect new graduates to know everything there is to know about the version control that we use, but you should at least know what version control is and why it's necessary.

  • Acknowledgment of personal limitations - You are making a good start on this one by asking this question. I know you have limitations. Everyone has limitations. If you don't realize that, you could end up doing me a lot more harm than good.

  • Eager to learn - To be successful in the job market over the long term, you will have to keep learning throughout your career. If you are eager to learn, I won't have to be pushing you to learn and you will become productive sooner and stay productive.

share|improve this answer
add comment

Studying Computer Science turned out to be extremely helpful for me because it gave me a reason to do things that I would never have done otherwise.

I would never have implemented an entire network stack (Ethernet all the way up to HTTP) had it not be required as part of a networks class. I would never have written my own SSL engine had it not been part of a security class. I would never have learned to write and optimize ARM assembly code otherwise. Same goes for dozens of other protocols, algorithms, languages, etc. Some of these projects carried huge weight on my first real-world resume because most people have never done that kind of stuff.

But what helped even more is that during college, I also worked on "real" software development. I made minor contributions to open-source projects. I wrote automation software as a CS department sysadmin, and I shared the code that I wrote with other people and got feedback on my work in based on real-world metrics and usefulness, not just academic grading.

If your college experience never challenged you in this same way, then perhaps you need to start looking for these experiences on your own. Open-source programming is the best way to get started in real-world software. Solving problems that have already been solved (e.g. implementing AES and RSA) is a great way to gain useful insight, experience, and resume cred.

share|improve this answer
show 2 more comments

Expect the unexpected (at times)! Programming in university and commercial/industry can be totally different but you will utilize principals/patterns theories you have learned. Apart from concentrating with your final year university assignments/exams whenever you have some spare time you could read-up on some technical articles/blogs and new technologies.

My honest opinion do not panic and stress over this as @perdian said you are already thinking about this so your preparing for the next big steps. Once you start working you will accumulate lots of other technical skills and having sound communication along with patience and tolerance helps :) and with time will be a Healthy Pragmatist (an Optimist with experience).

share|improve this answer
add comment

You can expect to meet a lot of annoying overconfident co-workers, clueless managers, and maybe if you're lucky enough, a smart fellow here and there.

Oh, and yes, your studying efforts are very commendable.

share|improve this answer
8  
+1 for demoralisation. –  billynomates May 10 '11 at 12:39
4  
@billynomates - really wasn't trying to demoralize the man, just wanted to be honest - people relations are by far more important than this or that skills (you pick up/lose those along the way anyhow). –  Jas May 10 '11 at 13:23
show 3 more comments

You're heading into the right direction just by asking the question, which means you actually care what's coming after the educational life ;-)

I would however don't worry too much about what you're going to find, but there are a few points worth mentioning:

  • Healthy pragmatism: While having a series of highly complex theoretical concepts that define how software development should be done, what things to do and so on, in reality there often is a more pragmatic approach to certain topics. You might want to give up a few things in order to get things done more quickly.
  • Communication: Just knowing how things should be done isn't enough, you'll also have to know how to communicate why that's important. "We need to do A and B because Professor X wrote a book about it" won't most likely do you any good. However being able to argument "We need to do A and B because we'll then have no problems with C and will also be a lot faster than using technique D" will be a lot better to convince a coworker or manager.

So, don't get too much into panic mode.

share|improve this answer
2  
I'm certainly calmer now that I have an idea what direction to head in :P I guess communication is something that I can only pick up in the work environment. So if I can't get an internship as another answer suggested, then perhaps it's something that I'll have to face when I start a job. I guess no matter how much I learn now, there'll be a lot to get used to in the beginning. Thanks for your advice :) –  mhorne May 10 '11 at 10:24
show 1 more comment

Get involved in an open-source project. That way you can point potential employers at patches you have contributed to actual, published software.

Put together a website with a few examples of small apps you have built yourself, preferably where you can also show the source.

share|improve this answer
1  
I would have to strongly disagree. From a legal point of view the employer cannot read other open source code because of copyright and intellectual technology. Instead its better to show what real world project you've completed. What system's you've created to help solve a real persons problem. Collection of personal projects you've completed in your own time. –  Chad May 10 '11 at 7:57
12  
"From a legal point of view the employer cannot read other open source code because of copyright and intellectual technology". Never heard of that before. Link to back that up? "Instead its better to show what real world project you've completed. " Open source is real world. –  Jim Blackler May 10 '11 at 9:08
2  
@Chad: Personal = I work on it in my own time. Open source = I made the source available to read and/or copy, learn from it, change, etc. Also, while I agree that it is important to show what you did yourself, it is also very important to show that you are capable to work with other people. –  Goran Jovic May 10 '11 at 13:04
5  
@Chad, Also your interpretation of copyright & IP laws is wrong. You may read any code which was made available, regardless of its licence or patent status (if it was already made available, like in open source). Legal restrictions apply only when you want to use it in your work, sell, lease, offer to others, etc.. Potential employers only want to read your code (or sometimes even only to see it running on your portfolio site) and I fairly doubt you'd want them to do anything else with it. –  Goran Jovic May 10 '11 at 13:14
show 3 more comments

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