My best friend just started his internship a month ago. The problem is he is discouraged. He was a good A+ student at school, and he is feeling that he doesn't know anything at all. The issues he is working on, although they are on languages he feels comfortable in, seem so alien to him, he said. He's getting really discouraged, like he does not know the code base at all. I keep trying to tell him that it will just take time and that he is expected to have lots of questions. What should I tell him?
Keep telling him that. He just started a month ago. Knowing the language does not mean he will automatically comprehend a project that is most likely much more complex than anything from school. It takes a while to get familiar with an existing project's code, even for us pros. He needs to relax. If he has questions he should consult whatever project documentation he's got, or ask a mentor or more senior developer.
This is normal!! Everyone goes through it. He'll be fine if he stops panicking.
One of the hardest things I found in going from school to work was there was no instant feedback. No one gave me a grade after I finished something, in fact they barely gave me a "nod", it was hard to tell if I was even done! And instead of a final assessment of notes on a submission, I got an endless stream of erratic questions at irregular times from my coworkers/supervisors.
What I had to notice to stay sane, was that
- Being asked questions is a mark of distinction - the broader and more open ended the better - it means they trust you to give a good answer.
- There is no final grade - you'll be asked to change things constantly, that doesn't mean you failed, it's the nature of the beast. The goal is a good end product. That's easy to say, but hard to appreciate until you're in the middle of it.
- The best mark of achievement is being given a harder problem - if it seems like the work is increasing in ambiguousness and difficulty and your manager seems less and less interested in how you are doing, then you must be doing very well!
Nobody should expect an intern to know much more than just basic concepts. It is perfectly normal to feel overwhelmed but he is doing himself a disservice by not asking questions.
I would expect that if an intern working on my team was feeling overwhelmed that he would come to me for help. Although sometimes they don't. It can be a matter of inflated ego or pride, or perhaps just trying to impress, none of these things should matter to his charge.
EDIT: One more important note, I feel it is important for interns to be taught by other developers.
Did you ever hear the quote, "You retain 10% of what you read, 20% of what you hear, 50% of what you do, and 90% of what you TEACH".
Teaching others helps engrain complex design and concepts into the teachers mind.
The dirty little secret is no one completely understands the code base, if it's of normal complexity for a commercial product. College prepares you poorly for this because all their assignments are fully self-contained original projects. You have to learn how to figure out the smallest possible part of the code you need to understand in order to complete your task, and trust that the rest of the code is doing what it claims to be doing. Colleges could do this better by assigning projects like making a chrome extension or something, but really, learning this sort of thing is the whole purpose of internships.
School problems almost always avoid the messy issues you have to deal with in a real code base, so it would be surprising if he wasn't feeling discouraged. Real code bases are generally much more complex and far from perfect. Tell him to keep trying. In my experience, it usually takes a good year to feel comfortable with a new, complex code base.
You're supposed to be overwhelmed. I've never walked into a new job where there wasn't some kind of learning curve that left me feeling overwhelmed: even jobs where I was over qualified, there is that period of adjustment. Sometimes it lasts for days, sometimes it lasts for months. My current job is so constantly in flux that it lasted for years.
Work through it, master the tasks you are given. Don't be afraid to ask for help.
I can tell you what I leaned in college did not prepare me for "real world" software development. Granted theory comes in handy, but practically, probably counts for naught. Regardless, just go with the flow and learn as much as you possibly can.
Maybe this book will help come to grips with stuff:
Formal education in a trade or profession does nothing more than prepare you to begin learning how to actually do the work.
He will overcome the panic when he abandons the notion that he's supposed to already know how to do the work, and realizes that at this point he's really supposed to be learning how the work is actually done (in the "real world").
If your friend was the star programmer of the team instantly, then he would be an idiot for not getting paid for it.
Being hired as an intern is implicit recognition of the fact that you are not productive yet -- if you were, you would be hired for real money, or the company is ripping you off. So like everyone else, I'd say relax, and use this experience to learn. Not only should you learn what you need for this job, but if you see that you lack background (let's say, in mathematics, or in Unix skills, or whatever), then make a note of it and continue to backfill even after you leave this particular job.
Get used to it. After seven years in the industry I'm still a noob, and it's a rare day when I don't learn anything new (and often surprising) about both the languages and the applications. Regarding the questions, a good reference, a couple good tutorials, and How To Ask Questions The Smart Way can be really very useful.
I'd be tempted to ask him a couple of questions to try to get behind the problem:
What did he expect?
Does he now know any of the code base?
The first question is about what expectations did he have. How similar to school was he expecting it to be? How alien are the problems really?
The second is the question of what does he have now that he didn't when he started. This is where there may be something that he does know and should get that he has improved some and does know some of what is happening.