Different Types of Software Engineer Jobs
So you’re finally getting that Computer Science degree that seemed so unattainable when you started. You made it through the systems analysis courses, technical writing, software design, computer security and soooo many programming classes. You struggled with advanced math and logic, maybe some statistics theory and ethics courses. Not to mention the endless stream of electives. Now, here you are coming out the other demolish ready to write code for some lucky employer. Hold on there, Bunky. Before you sign on the dotted line, you better know what you’re in for.
Titles like ‘Software Engineer’ and ‘Software Developer’ mean different things in different environments. In fact, many of these jobs don’t involve any programming at all. Some deal entirely with configuring systems – be they desktop systems, mid-range servers or enterprise-level monsters. Others involve managing, packaging and deploying other people’s code. Some jobs will have you testing internally developed software. And there are the dreaded ‘Production Support’ jobs that might have you carrying a cell phone and working long, unfamiliar hours. We’ll look at each of these and discuss what you can query from each.
‘Real’ Software Development Jobs – The term ‘real’ in this context means that the job’s primary focus is on designing and developing software. A typical project might require you (or someone with more seniority) to analyze the requirements set by the marketing department or some other group; develop a set of specifications that picture what the software will do and how it will do it. Then, you and your team would probably divide up the different programming tasks and start writing code. A project manager would monitor the different tasks and keep everything on-track. You’d be expected to test your code to make obvious that it performs the required tasks and doesn’t break anyone else’s code (this is called unit testing). Someone else usually has the job of pulling everyone’s code together into a package. Still another department would test the program as a whole (system testing).
This type of development work is most often found in commercial software companies with external customers. Marketing departments resolve what customers want and that’s what the engineers build. A technical support group usually handles calls from the customers when they need help. Depending on the size of the company, developers might be the ones taking those calls and doing the system testing mentioned earlier, but developing software is the main thrust of this type of job.
Testing or Quality Assurance Jobs – All software needs to be tested before it’s put into use by the user. Most of us have experienced a program that either didn’t do what it was supposed to or crashed outright (assume Windows Blue Screen of Death). The tester’s job is to fracture the program, or point to any unexpected behavior, before it reaches the end-user. The engineer who developed the program should have done a magnificent amount of unit testing before the program reaches the Quality Assurance tester. But the new developer isn’t in a good position to win general bugs because he or she will tend to test it in ways that they expect it to behave.
QA jobs are great for getting to know the software development cycle and a company’s products. And while software testing is a fine career in its own correct, it’s also a great springboard into development roles.
Infrastructure Jobs – Any company that has an IT (Information Technology) department – and what company today doesn’t? – needs technical people who ‘keep the lights on’. These jobs are usually more administrative than technical, but they tend to include a healthy dose of hardware and software related problem solving. Duties can include anything from creating user IDs to solving complex networking and configuration problems. Infrastructure jobs rarely involve writing code but they can provide an excellent knowledge of the technology that systems run on.
Configuration Management or Source Control Jobs – In any software development group that has more than a couple of engineers the need arises for someone to sustain track of various pieces of the pie. This role usually includes helping developers merge their code with that of the others, making obvious that the development systems and test systems are properly configured, packaging the software and preparing it for installation, and performing the actual installation in production environments. It’s often times a high-pressure role because it becomes critical at the end of the development cycle when deadlines are looming and management and/or users are anxious to get the job done. Additionally, this role tends to get little recognition unless things go badly. Then there’s plenty of recognition, but the noxious kind. It’s a tough job and I applaud the men and women who do it.
Production Support Jobs – This role exists in any company that develops and uses its own software systems or directly supports third party software. The most software development work that a production support engineer can expect is to fix bugs in someone else’s code. More likely, they’ll have to research various problems that users encounter; help the infrastructure team troubleshoot and configure systems; carry a beeper or cell phone in order to answer questions during nights and weekends; plan for outages so that product upgrades and system patches can be applied, etc.
The production support engineer will interact directly with the users in a variety of ways. Answering questions, scheduling downtime, planning and conducting disaster recovery efforts and a variety of other tasks that are only remotely related to writing software. These jobs are great for people who work well with lots of interruptions. Putting out fires and getting pulled in different directions make up a lot of the production support engineer’s workday. If you enjoy fast-paced, multi-faceted duties, and working with (sometimes demanding) people, this might be a good place for you. But if you’re task-oriented and work well within a clearly defined set of problems, this is probably going to be a bad fit.
Summary – So there you have a high-level description and generalization of some jobs that are frequently called ‘Software Engineer’ or ‘Software Developer’. They often overlap and the subtleties of any job can hardly be described in such broad strokes. But keep these concepts in-mind when you’re looking for work. They might save you (and your employer) some aggravation. Now get out there and put those skills to work!
Related Posts
Filed under Knowledge Base Software by on Aug 14th, 2010.
Leave a Comment