The Trouble With Internships
Posted by Skrud at Wednesday, September 20th 2006 at 10:24am
Okay, this is the second to last time I blog about my job. I swear. The next time will be after it’s over.
In The Beginning…
When I started working here I roared through the training programs in one week instead of two. During the second week, I familiarized myself with Java’s Swing GUI library. I’ve never done any GUI programming before. By the end of the second week I was placed on a project that required me to focus a lot of energy and brainpower on designing a solution to a pretty complicated problem. The problem of course was compounded by the fact that my only window into the requirements was my supervisor, whom I had to interrogate in order to extract a precious few tiny nuggets of useful information.
Designing the architecture and framework were a very stimulating set of tasks. I was forced to call upon all the knowledge I learned in school and continously consult references on design patterns, methodology, best practices and anything else. I learned a ton of information and gained a lot of experience and I’m extremely proud of what I came up with. I think my superiors were pretty impressed, too.
The warning signs should have gone off in my head when I realized that, having been hired as a Java programmer, I didn’t have Java installed on my workstation. It took a week to get the form approved to download and install Java. And if I didn’t have Java, I certainly didn’t have any conceivable means of source control. It was even more of a hassle to get CVS set up. However they explained this to me by saying that I’m the only person that’s developing in our particular office. All the rest of the development is done – well, it’s classified. Apparently they have version control and Java over there.
I implemented my framework in Java, and in the process became extremely familiar with the Java standard library, which I had never really explored in depth. I’ve discovered some things that I really like about Java, namely the existence and organization of much of the library – and some things that I really hate. The implementation didn’t take long, but the bulk of my internship so far has been a cycle of designing -> implementing -> reviewing -> refactoring -> documenting. By now it’s a pretty robust and relatively well-designed piece of software.
For some reason, though, I’m the only person that works full time on this project. I think they expected me to finish this closer to the end of my contract, which is in December. If that’s the case, then I was a good four months ahead of schedule.
Lather, Rinse, Repeat.
That was three weeks ago. Since then it seems like they’ve been scrambling to try and find things for me to do, most of which involved simple, menial, quick little tweaks to the framework. I learned how to use Aspect Oriented Programming with AspectJ for a particular library, which was interesting and fun but didn’t even take me an entire work day. Granted, I still need more experience and practice with it, but in order to do that they need to give me more things to do that require me to apply it.
On the one hand I appreciate that they’re willing to listen to me and let me experiment with things like AspectJ, and leave it to me to provide a case for using it and show that it has benefits to programmers and productivity.
But now I’m out of things to do again. These past few weeks have basically consisted of me tracking down my supervisor (not necessarily an easy task) and demanding that he give me something to do. Invariably I’m awarded some easy, mind-numbing task – or a set of them – that won’t take me more than a couple of hours, after which I return to the hunt for my supervisor and demand more work. Repeat ad nauseum.
Generation Gap
Worst of all is that fact that I don’t feel like I belong here. That’s not to say I don’t like the people – there are a friendly bunch of relatively new employees that I enjoy hanging out with, and in general the people are friendly and nice – but that there’s no one that shares a common interest with me or even a passion for programming.
Most people, it seems, have decided that once they’ve graduated from university, they no longer need to learn anything. These are day-coders, people who know how to program only because it’s part of their jobs, not because it’s something they love to do. As a result, if someone started working here say, 8 years ago, then the last 8 years of improvements in software methodologies, processes and techniques are completely over their heads.
The biggest result of this problem is communication. Case in point: Design Patterns. Design Patterns alone aren’t necessarily anything new, fascinating or unique. They’re a set of idioms that people have been using in their software in order to solve certain common issues and problems. Design Patterns were around for a long, long time before they were called “Design Patterns”. But the biggest benefit of design patterns is precisely the fact that they give a name to the common design techniques that are used everywhere. Design Patterns are a vocabulary. In theory, one developer should be able to say to another “that’s just a Facade,” and the other developer will instantly understand the layout of the source code. You could name your classes something like “ReadyThingyState” and “BrokenThingyState” and a developer who knows the design patterns vocabular will instantly understand that you’re using the State Pattern.
Unfortunately, that’s not the case. There’s only one other developer here that I’ve found who’s aware of anything that’s been used after the 1970’s – but he’s not working on my project.
Future Employment?
Needless to say, this entire experience has made me seriously reconsider the prospect of graduate studies. I’m beginning to worry that the entire software industry is littered with monotony and day coders. For my own sanity, I need to find a niche where I can retain my passion for software engineering and design, and be around people with similar passions.
My naïveté tells me that I might be able to find such a niche at Google. Joel Spolsky would have us believe that his company, Fog Creek, is a place like that. In fact, he’s scolded and railed against the way most companies conduct internships, describing more or less a utopia for passionate software engineers. (Unfortunately one needs “permanent legal right to work in the U.S.” before even applying for an internship there). Microsoft also has a reputation for treating its developers well, however there are mixed reports about that.
Maybe I’ll be happy at a small start up, with a concentrated group of passionate people.
Or maybe academia is the way to go for me.






What made you think academia is somehow different from the work force? You should know by now that while there are professors that are truly motivated by their work and some also by teaching (though there are more of the former than the latter), there are still a lot that simply publish drivel to keep the minimum requirements of their tenure.
The one reason why academia in general seems more passionate about what they do is that the pay is lower. You basically take a pay cut in return for being left alone to work on whatever you want with whoever you can get to work with you as long as it’s new.
A Paul Graham quote (that guy is so quotable it’s ridiculous) would be appropriate here:
“The difference between design and research seems to be a question of new versus good. Design doesn’t have to be new, but it has to be good. Research doesn’t have to be good, but it has to be new.”
So hopefully you’ll be able to find a niche where you can do both something new and good but if you’re looking to make something good out of something already out there (or already being worked on by other researchers) academia might not be the place you want to be.
I think it’s just that most, if not all, of the grad students I’ve met are passionate and interested in what it is they’re researching.
I’d definitely like to do something both new and good.
The bio-tech research industry has been really good to me so far:
I get to go to (optional) seminars conducted by my peers and industry leaders as part of my job
I get to teach those seminars
The industry is young and on the bleeding edge, so I’ve got to be learning new stuff all the time; you also get to work on giant/new hardware (like 500 cpu clusters, CRAY fpga-servers, etc.).
Because I was working for a publicly-funded organization, I get to release all my work under the GNU license as soon as the paper the work is for is published.
I’m helping to fucking cure cancer.
Why not start your own company and pick as your employees only those individuals that demonstrate the kind of passionate “for-life coder” approach that you crave? If you work for The Man ™, you run the risk of the company changing (management gets refactored), new, less motivated employees rotating in, etc.
I’m sure that with SOEN + Work experience under your belt, you could dupe some silly venture capitalists into funding your “Web 2.17-rc1 cum World Domination” software startup.