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 currently working as an intern at a very large, non-software development company. The position I applied for wasn't specifically a development position, but the team that hired me wanted a CS major to help try to develop some internal projects for them. I've been here for four weeks and the initial bewilderment is starting to wear off. However, I'm the only CS major in the entire office -- no one on my team, in the building, or even in the neighboring locations has any background in software development. The best I've got is a database manager, and their department is too busy to support me with my projects. My teammates are helping me learn how they do their jobs (which is important for me to do my job), but there's no one to help my do my job i.e. development.

The projects they've given me are larger in scope than anything I've done in school. That, combined with the fact that I'm working alone, trying to develop applications from scratch with no form of guidance or even clearly defined goals, has me very worried about my ability to be successful. I barely know where I should be begin, and now I have probably less than two months remaining.

I feel like I should be learning the software development process, but right now it's like I'm feeling my way through the dark. This is especially troubling for me since I'm not very confident with my development skills in the first place. I've been researching and teaching myself, but I'm only getting bits and pieces. They have high expectations from me, but I'm unsure of my ability to deliver. Obviously, I need to sit down and talk with my managers about the position I'm in and I intend to do that as soon as possible (they're often travelling and out of the office).

How should I deal with this? This internship will be over before I know it, and I don't want to leave with nothing to show for my time here. They don't want that either, and they're always available to help me but without knowledge of programming there's only so much they can do. I'm afraid to tell them that I'm incapable of producing what they want. How should I relate this to them? I see the engineering interns getting help from other engineers, learning how to do their jobs, and I feel like I'm just sitting here biding my time. Any advice on how to rectify my situation would be greatly appreciated.

Update

I appreciate all the helpful feedback from everyone, it's helped put my mind at ease. The first thing I did was meet with my managers and supervisors. We discussed what was expected from my time here. They understand that I don't have that much time as an intern, and this helped put a scope on the type of framework we want to accomplish, which will allow future interns or employees to hopefully build off of what I leave. I also addressed my concerns regarding my capabilities with the allotted time, which they understood and expected.

I received a call from the database administrator at another location - my manager talked with his supervisor and they're going to support my project, which will now give me a resource to use so I'm not sitting around with no idea what I'm doing. That's only one half though. Out of all the possible projects, we narrowed it down to the two most important to work on. As for my other project, as someone mentioned I'm essentially the lead software architect which is a unique situation for an intern. If things go at least semi-successfully, I think I'll have gained a good deal of knowledge and experience that can help me with future employers. For now, I think I have some solid footing to start researching and developing my projects. Thanks again for the responses from everyone!

share|improve this question

We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.

79  
Most places expect interns to be people who don't know what they are doing, but that are willing to learn and gain whatever experience they can. An internship without a mentor sounds like they really just wanted a cheap or free developer, and they should not be expecting you to produce a finished product. Learn as much as you can about the whole experience, and then when your internship is over, move on. Ideally to a place where you can intern with actual software developers :) –  Rachel Jun 17 '13 at 13:53
8  
This does not seem to be specific for software engineering, so it might be better suited over at Workplace.SE –  Bart van Ingen Schenau Jun 17 '13 at 14:00
52  
"trying to develop applications from scratch with no form of guidance or even clearly defined goals" - perfect training for real-world software development! –  Alan B Jun 17 '13 at 14:02
7  
Welcome to the "stuff you don't learn in books" side of your education. This is just one of many enviroments you might find yourself in when you finish your eductaion. I found myself exactly in your position except that I did finish my degree and it was in MIS. –  hydroparadise Jun 17 '13 at 17:09
3  
@BartvanIngenSchenau There's a software development angle in the question, the OP is a lone developer in the company. That creates some unique challenges, and I think some of them may benefit from software development solutions. Perhaps the question is better suited for the Workplace, but if it's not 100% off topic here I don't think we should migrate it. If the community decides the question is off topic here (by closing it as such), I'll gladly migrate it. –  Yannis Rizos Jun 17 '13 at 18:24

8 Answers 8

up vote 119 down vote accepted

I've got some bad news for you bhamlin:

You aren't an intern. Rather, you are an unpaid/cheap employee.

An internship is a unpaid or low-paid position where you can practice your newly aquired skills in a safe, (usually) relaxed environment, and get a chance to observe 'real' professionals in your field doing 'real' work, while getting feedback on the pieces that they allow you to modify (usually under supervision and/or approval).

What your company wanted, was not in fact, an intern, but rather a free/cheap source of software development. This is fairly common, in my opinion. I live in a college town, and at my last place of work, managers were often heard saying "Hey, the IT dept is too busy to do Project X, lets see if we can get some interns in from the University to write it for free/cheap!" We would grumble and groan and gnash our teeth to the heavens, but this was the reality of the place, and I could understand why the managers would suggest such a thing. Sadly, the results weren't great: the software delivered by the interns was never cohesive/scaleable/clean/etc (but to be honest, neither was the stuff the IT dept put out anyway...)

Its up to you what you do. My advice is to just develop whatever you can (sometimes pressure is a great motivator), BUT you should also plan to taking on a 'real' internship elsewhere when this one is over if possible.

So don't blame yourself, but what you walked into was NOT a real internship.

share|improve this answer
17  
@Ampt To me, most paid internships are basically saying "We'll pay you to learn with us, and at the end of this period if everything goes well we'd like to hire you". It gives the parties a longer period of time to evaluate each other, and if all goes well they also get to hire an employee that is educated on their system and that they know is a good fit for the company. If they get some new software cheaply in the process, that's an added bonus, but not an expectation. –  Rachel Jun 17 '13 at 14:09
7  
Internships are usually unpaid? That's news to me... –  M. Dudley Jun 17 '13 at 14:28
3  
That's a good point @Ampt. I've edited my answer to say "unpaid/cheap" now. Overall I think the answer still stands though; this place didn't really want an intern, they just didn't want to pay full price for IT services. –  Graham Jun 17 '13 at 14:39
7  
@bhamlin most people without a software background have literally no clue how much time or effort software projects will take to develop. No clue at all. This is unfortunately how it is. –  enderland Jun 17 '13 at 16:49
9  
If an internship is unpaid (or below some wage, maybe minimum if memory serves) it has to demonstrate appreciable benefit to the intern otherwise the business is in fact violating labor laws. This is a very important distinction, if this guy isn't getting paid he could sue the company stupid. (Or so say the laws of the US, can't speak to other countries) –  Jimmy Hoffa Jun 17 '13 at 20:06

As a CS major you have problem solving skills at your disposal. It's unclear what type of projects they want to develop. If I had to guess they probably want you to help automate some of the internal processes. I'd start by trying to get a big picture diagram of what processes are currently in place and the dependencies between departments for each of these processes.

Next, I'd look for some low hanging fruit that could be automated or at least streamlined.

Foolproof Way of Documenting Any Process

Ask these questions in the following order:

  1. What is the output? (Get as specific an answer as possible)
  2. What are the inputs?
  3. Are there enough inputs to create the output?

If the answer to number 3 is NO, then go get the missing pieces. This could be formulas or business rules or whatever.

If the output from step one is too complicated then break it down into manageable chunks and attack each chunk as a separate process.

Document what you have discovered. Identify potential single point of failures. Identify weaknesses or scarce dependencies.

I know it sounds overwhelming but you have the skill set. Just turn it into bite size chunks. If you can learn how to explain "geek stuff" using "non-geek speak" then you will be worth your weight in gold.

share|improve this answer
1  
The members of my team have been showing me the processes, so I have an idea of the inputs and outputs and what they want. I have an idea of how I want to solve the problems, it's just breaking it into pieces and putting it all together that's giving me problems (especially using technologies I'm not as skilled in, like databases). Luckily I can explain "geek" to "non-geek" pretty well. I guess at this point I should start bringing my coding issues to stack overflow to see if my solutions are feasible. Thanks for your input. –  bhamlin Jun 17 '13 at 15:39
    
As far as the database stuff goes I recommend a book called Database Design For Mere Mortals by Michael Hernandez. This book is outstanding. –  Cape Cod Gunny Jun 17 '13 at 19:48
1  
+1 for the "Foolproof Way of Documenting Any Process." I wish I'd had that posted prominently in my cube when I was first hired for a system-analysis job. –  dodgethesteamroller Jun 17 '13 at 20:54
1  
@bhamlin: I suggest you do your best to reduce the expectations for what you are about to deliver. Also, break it down to extremely small problems, something you think you can do in a day (so that it's done for a week ;) and preferably, things that are useful as is, not just modules, that won't work without the core. This way, if you fail, your work will still be useful. Also, IMO, this experience is probably going to be very useful and stimulating (albeit not financially), yet will ultimately make a depressing memory. –  K.Steff Jun 17 '13 at 21:45
  1. Seek clarification on the internship's goals - why were you assigned so many projects?
  2. Clarify to management that within the allotted time, you cannot complete the requested projects
  3. Prepare an analysis of how to best use your time. For example, suggest working solely on one project and dropping the others.

Your time would best help your company if you worked solely on one small project. Make sure to keep it well documented. Focus on creating useful documentation of architecture, project goals, project progress, and source code.

share|improve this answer

I had two internships like that, and enjoyed them immensely. There are significant bright sides that you seem to be missing:

  • At this moment you are enjoying the kind of creative freedom that programmers working on large teams of programmers can only dream about. Everything from language choice, to source control, to editors, to software architecture is completely up to you. Trust me, you miss that when it's gone.
  • Working with people who don't know much about software is a significant part of the software development process. School conditions you to expect well-defined assignments from people with a lot of experience teaching software development. Even in teams of programmers, your assignments are never that clear cut. Learning to deal with it now will give you an edge.
  • Acquiring domain knowledge without the benefit of mentors is a significant part of the software development process. Once every year or two, I get an assignment like, "Become our subject matter expert on X technology." Someone has to be the first one at a company to learn a new technology. You will get more interesting assignments if you can show that person can be you.
  • From your point of view, it feels like a lot of pressure, but you should know that their expectations of you are really quite low. They know it's more difficult for you without a proper mentor. Just do your best and you'll be fine.

That being said, tackling your first large project can be overwhelming. The following may help:

  • Try not to think about the whole project at once. Think about what you need to do right now.
  • Get a list of features that need to be done, and get them to put it in priority order. That way if you don't finish the entire app, the most important features will still be there.
  • Break the first feature down into smaller and smaller tasks, until you get down to tasks you can finish in a day or two. Don't be afraid to make them sound stupidly simple. My first task on brand new projects is always to get hello world working and checked into source control. Especially if it's a new language, or one I haven't used in a while, that tells me my build environment and tools are set up properly.
  • Get your progress reviewed frequently. Don't try to dump a finished product on them at the end of the summer. Show them at least once per week what you have so far.
  • Spend some effort up front to try to find existing projects and components that can meet your needs. It's much easier to customize an existing system than to do one from scratch. A lot of companies need similar kinds of internal apps. This is one I wish I had known about for myself. One of my internship projects basically reinvented (poorly) a CRM.

So, relax, do your best, and learn as much as you can, whether it's about software or not.

share|improve this answer

Here's my take on this whole situation: They are asking for more than you can reasonably accomplish, not giving you any feedback or guidance, and generally making your job not so pleasant. But there is a silver lining to this cloud You're learning something.

Particularly, you're learning the sort of environment you DON'T want to work in when you get your degree. You're also learning how to deal with a project that is too large for you to feasibly accomplish. Both of these are important pieces of knowledge to hold on to, as no one is going to give you a job that they think is below your ability. They will always ask for more than what you can give, and it's your job to work with them to manage expectations and deliver something that they want.

On to what you can do in the here and now. I would start by keeping a journal of everything that you do in each and every day. This gives you accountability. Even a simple end of day "this is what I worked on today" will give you something to fall back on when they don't get what they want and come looking for answers.

I would also talk to your immediate superior and see if there is any way to break down one of these larger projects. If you don't feel comfortable doing the whole thing, maybe they'll just have you do research and the architecture for the project, and maybe have another intern later implement it. Just be clear what you think you can reasonably accomplish in the time you have left in the internship, and make that your goal. That way you are still delivering something relevant to your employer at the end of the day.

Finally, see if you can join the engineering interns. I'm going to assume that these interns are also developing software, and I see no reason why what you're doing and what they're doing are so far separated that you can't learn from each other. I work with electrical engineers, software engineers, computer engineers and computer scientists alike on my projects, and each person brings their own strengths to the team. Identify where your strengths lie in development, and try to make a case for why those abilities would lend themselves well to the engineering team.

share|improve this answer
6  
My parents told me that I should accept an offer if I receive one at the end of the summer, but I tried explaining to them that this job may not help advance my career as a software developer. They don't want to listen to me and think any job I get is a blessing but I feel I have a right to decline, especially if this isn't a good work environment for me. I like the idea of keeping a journal though, I carry a notebook everyday so I'll start documenting what I'm doing so it doesn't appear I'm doing nothing. I appreciate your help. –  bhamlin Jun 17 '13 at 15:34
1  
No problem bhamlin. When I started this internship I felt like I was in the same position. My manager adopts a very hands off approach to the engineering team, letting us structure our day as we please (we also follow the agile development model which supports this) and coming from classes where I had almost daily requirements for projects, it was very different. I found that keeping a log kept me accountable as well as providing documentation that I was at least doing SOMETHING. It also helps me maintain momentum day to day and week to week. –  Ampt Jun 17 '13 at 15:37
7  
@MLowry I think that's bad advice. Staying at a workplace you hate will wear you down, physically and especially psychologically. You'll go into a depression, hate every moment and regret that decision every day. Why go through that ? It would make sense to do it for 6 months if the financial side would be extraordinary. But it probably isn't, given that he's at the absolute start of his career. –  Radu Murzea Jun 17 '13 at 17:57
2  
+1 for "You're learning something." This work environment is sadly not some anomaly. Lots of companies who aren't specifically in the IT biz struggle with what to do with IT resources, so the lessons you'll learn here (vague requirements, bad deadlines) will be valuable later on when trying to spot problematic environments. –  Graham Jun 17 '13 at 19:14
2  
+1 for "keep a journal". Get into that habit for the rest of your career! When a project is going good, nobody asks questions. When it goes bad, they want to nitpick every darn thing you do/did. A journal covers your hide very well. (better than a status report). –  TimG Jun 17 '13 at 20:28

Talk to Your Internship Advisor

All of the answers I've seen so far seem to focus on the employer, which is important.

However, you must have been set up with this internship through a program or office at your school. I can't imagine that you'd be the first student they've had that has run into this kind of situation. They should be able to guide you in a certain direction.

Even if they cannot help you now (which I find difficult to believe), then you will be helping the next student that finds him or herself in this situation, which is something that cannot be underestimated.

share|improve this answer
    
+1 because this should be the first thing an intern should do once they are encountering seemingly insurmountable difficulties. –  verybadalloc Jun 21 '13 at 0:39

I was in a similar position last year, where I had to develop everything from ground up and had no one else with any development experience. I did finish the project they gave me but I wouldn't call it a polished application or even a maintainable one(since the only person that knows how it works is me and no one at the company has looked at the code.)

Here are some things I did and would do if I was in that situation. Some of these have already been mentioned in the previous answers

Figure out:

  • What do they want the product to do (inputs and outputs, the bare minimum)
  • What are your limitations? (i.e which programs can/cannot you use?)

This will give you a picture in your head about how the product should look. Draw this out on a piece of paper and show it to your manager/supervisor. See what they say about it. If they don't like it ask them what they want changed, change it and repeat the process. If they like it, do the bare minimum amount of coding and create a simple demo.

Show the demo to them (ask them if this is what they have in mind), this will show them your progress and help you understand what they want.

Whenever you need coding help, read manuals/tutorials, google search and finally post on stack overflow for help.

Don't get hung up on small details. You will waste a lot of time if you do this.

Code in small chunks, each chunk being a major functionality for the application.

Comment your code. If they are planning to pass this on to another intern or an employee it will be a huge help to them.

Keep communicating with your manager/supervisor about the project and your progress on it.

And don't worry if you cant finish the project, you are an intern and you did the best you can. They are at fault for hiring someone who is under experienced for such a project.

TL;DR

  • Communicate with your manager every step

  • Code the major functionality

  • Get help from Google and stack exchange

  • Dont worry if you cant finish

share|improve this answer

The other answers here are very good, read them over and over and really try to figure them out. If you do that then, with a more than average effort, you'll be able to emerge "alive" on the other side of your internship. Given your situation, it will be tougher than you expected, but it can be worth it.

This is crucial because, when you'll apply for a position to another company1, one of the key questions will be:

I see here you did an internship at the company X. How was it ? Why did you leave ?

If you can then show them that you handled your difficult situation in a professional manner, this will count A LOT, employers are usually very impressed with something like this.

Even if it kind of sucks, you can make it a valueable experience from which you have the opportunity to learn what your classmates never will...

1 = I hope you will, 'cause staying there will be a career suicide (sooner or later... probably sooner)

share|improve this answer
1  
This is an easy question to answer. "I enjoyed working at X and I learned a lot during my internship. However, they are not a software development company. So I don't think I would grow my engineering skills that well by staying there. I would rather be working with other software developers and have projects that are more collaborative." –  selbie Jun 18 '13 at 1:22

protected by maple_shaft Jun 17 '13 at 23:24

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

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