I’m currently a Software Engineer at Google. It’s a great job that I absolutely love. I’ll make the standard disclaimer here that anything I’ve written on this blog are my own opinions and not those of my employer.
My previous job was as a Web Developer at Sherwin-Williams. One of the girls that interned there emailed me today to interview me for one of her classes. I was happy to hear from her and decided to post my answers here to share with everyone else as well. The first five answers are just about my own background. Others will probably find questions six and onwards more interesting.
1.) How would you describe your typical day?
65% programming, 15% code reviews, 10% email, 10% meetings.
2.) What are the frustrations of your job?
Dealing with productivity losses – eg. slow builds, server restarts, insufficient system permissions, etc.
3.) What is your educational and career background?
BS Computer Science – Carnegie Mellon ’06
MBA – Carnegie Mellon ’06
Vanguard Group Technology Leadership Program – 7/06-1/07
Sherwin-Williams Web Developer – 1/07-7/08
4.) What are your career goals?
I’m aiming at becoming a Senior Software Engineer in the next 4-5 years.
5.) Where do you expect to be in 5 and 10 years in your career?
I generally don’t plan that far ahead. It’s too hard to do and I find it’s better to be open to any opportunity that comes along. But if I had to guess, I’d say I’d most likely be in either a Senior Engineering or Product Management position.
6.) What suggestions can you give a college student who is interested in your field as a career?
Do everything you can to position yourself for the internship you want. Learn things they don’t always teach in school that are essential in the industry such as getting really good with some type of IDE (Eclipse, IntelliJ), source control (CVS, SVN, Git), unit testing (jUnit & EasyMock), Linux essentials, and possibly a build system (Maven, Ant, Make). If you take the time to learn these things well you’ll find your course work all of a sudden gets a lot easier too.
Also, pay attention when algorithmic running time analysis is taught. A lot of people have trouble with it at first, but once you grasp it, it’s not too hard. If you want to be taken seriously then you’ve got to know when to use a linked list vs. hash table vs. binary tree and a lot of programmers don’t.
7.) What do you like/dislike most about what you do?
I love that I get to build something and see the tangible results at the end of the day/week/month. It’s very rewarding. It’s challenging and there’s always room to get better and learn something new. I love seeing the creative ways in which people can do the same thing in a better way.
One of the less fun things to do, which isn’t uncommon, is try to figure out how to use technology that’s poorly documented or not yet mature. I also probably wouldn’t mind getting to interact with a larger variety of people on a daily basis.
8.) Which part of the job is most challenging to you?
There’s such a multitude of technologies that goes into building any single system that there is always technology I’m unfamiliar with in something that I’m working with. Also, it used to be very frustrating to have to debug code. It’s getting to be less of an issue for me as I get better with writing tests and making incremental changes.
9.) How did you enter the field?
10.) How do most people get into this field?
It’d be hard without studying it for a number of years – likely in college. I found that when I went to college I was one of the few who hadn’t taken AP Computer Science in high school, which put me at a disadvantage. A lot of my classmates had been programming since before they were teenagers, so I was always working to play catchup, but was also always surrounded by smart people that I could learn from.
11.) What is the best educational preparation?
A university Computer Science program. If you want to be a developer, then know that an Information Systems program is better suited towards becoming a Business Analyst or Project Manager.
12.) What are the personal attributes that are essential for success in your field?
The people that are excel are the ones that really enjoy it. That’s by far the number one contributer to success because it takes a lot of time, energy, and practice to get really good. A good indicator of a job candidate’s ability is often whether they have any personal projects they’ve worked on outside of work.
13.) How much travel is required in you job?
None in my previous positions. A minimal amount in this job. Travel’s not strictly required for what I do, but sometimes face-to-face meetings are more effective, so it’s not completely uncommon.
14.) What can I do to expand my experiences to fit in your career area?
Find a personal project to work on that you’re interested in. It will give you an opportunity to learn some essential industry skills you wouldn’t in school. Or at least take a project course where you do one project you’re interested in the whole semester. The technologies you use don’t matter because it’s a job requirement that you can learn new technologies and no one is expected to know them all. What’s important are the skills and concepts. If you’ve used one tool in each area (IDE, source control, unit testing, build, etc.), then there’s a good chance you’ve had to learn the associated concepts and can pick up a different technology easily. A bigger project forces you to learn a lot of these things because it will be really tough if you don’t have a well thought out project structure, source control, and unit testing. It’s nice if you’ve used somebody else’s framework at least once before you’ve graduated (eg. do a web development project using WebWork and Hibernate).
15.) What training opportunities are available in an entry level job?
Depends on your company’s budget, but the formal training I’ve gone to has been of extremely poor quality and the managers that book it don’t always realize what training would most directly relate to your job. Sometimes colleauges will be asked to give presentation, which I find can be better since there’s a good chance it will be tailored towards your job. There’s so much free information on the internet that formal training is really not needed. Or see if your team has some type of a book budget and you can buy a couple of technical books (much cheaper than training, so managers will usually agree.) You just have to be dedicated to taking an hour or two out of your day or after work to continue learning.
16.) Why do people leave the field?
There’s always something new to learn. That’s why I love the job. But a lot of people don’t like the fact that they have to continue to improve themselves or they’ll fall behind.
17.) Have you noticed that it is necessary to change companies in order to advance?
No, but it can certainly speed up your rate of pay increases. If a company’s going to hire you away from your job, then they’ll expect to have to offer you a 10-15% pay increase in most cases. It’s hard to get a promotion by switching companies because you won’t have a lot of luck getting hired for something you haven’t done before. The most important thing for advancement is to take every opportunity to gradually take on new responsibility and perform well. Find some small initiative to lead so that you can demonstrate that you have the ability to manage a project and execute. It’s not too hard to find something that needs to get done that no one else wants to do. You’ll be appreciated for doing it. You’ll also be likely to succeed because the people around you will want the job to get done and won’t mind giving you advice. If you don’t get a promotion for doing it, you’ll have something meaningful to talk about in your next job interview.
18.) How many hours a week do you work on average?
In my current position, I’d say 45 is average on a good week. Sometimes it’s more during a crunch. I often work extra hours though because I love the work and am trying to implement some extra feature or refactoring. I never feel like it’s required and work short days fairly often too when I have something outside of work that I want to do.
19.) What do you wish you had known before choosing your career path?
I probably would have benefitted from sacrificing my grades a bit to put more time into finding better internships. When you go to a job interview they care alot more about what you did at your past job than anything else. I put a lot of effort in Freshman year to land an internship at Sherwin-Williams, which has benefited me ever since. It’s very hard for a Freshman to get an internship, but it’s also very doable if you make it a priority. Classes got harder the following years and I didn’t make it as big a priority, which I regret.