Software Architect In A Product Development Group
Job Title: Software Engineer
Type of Company: My company makes computer servers and software intended for medium and large companies.
Education: BS, Computer Science, University of Maryland Ph.D., Computer Science, Stanford
Previous Experience: I worked in software research groups at two large computer companies before taking a job at a small, innovative startup that was more focused on developing a product and getting it out the door. That startup was ultimately unsuccessful. I joined another startup that got acquired by my current employer (a large computer company).
Job Tasks: I work in the "architecture" group of a software product development team. That means that I don't spend a lot of my time actually programming. One part of my job is keeping track of public standards or specifications and deciding how our product will follow them so it works with software and hardware from other companies. When there's no standard for how to do something, I have to come up with something that I think will be easy for us to create and for our customers to use. I also work with others on decisions about the larger design of our software: what the "big picture" looks like, so to speak.
Another part of my job is giving advice to the other members of our team. When they have a difficult problem to solve, they may come to me for suggestions on how to approach it. I try to keep up-to-date on the tools that we have available so I can give good advice on what might be best for attacking a particular problem.
I do some programming, too. Usually, my programming is something experimental: exploring whether a certain approach that seems like a good idea will actually work in practice, for example. I also undertake some projects that may involve a lot of changes to the software, which don't fit well into the regular software development scheme used by our team.
Best and Worst Parts of the Job: The best part of my job is that I get to work on problems that are hard, but not impossible. So I have a steady stream of challenges that don't overwhelm me, and I get to work with a lot of bright people.
The worst part of my job is that there is always more work to do than people or time to do it, so some things that really ought to get done may not make the cut.
Job Tips: I think graduate school was essential for me to get the broad perspective that helps me feel confident about my decisions. It's hard to get that kind of breadth of perspective in the workplace.
It can be hard to leave a team you like for another opportunity, but you have to do it if you think it is the right choice for you.
Keep an open mind. It's easy to think that the next problem is just like the last problem, but if you do that, you can waste a lot of time going down the wrong path. This sounds like generic advice, I know, but in software -- and especially in debugging -- it can be very important.
Additional Thoughts: I think the most important thing you need in my field is curiosity. To have a successful career, you must learn new things all the time - new languages, new programming tools, new styles of working. If you're curious, those things come naturally rather than requiring an effort.