- Programmer/Analyst or Developer: given a set of requirements, or a problem to solve, write a program
- Programmer or Coder: given a solution for a problem, write a program to implement it
- Tester: given a new program/application, run a series of thorough tests (usually everything that "broke" previous versions)
- SysAdmin: maintain the hardware and software that the developers and/or customers need
- Security: implement and enforce procedures that restrict access to those people who should have it
- Network Engineer: maintain the wires and hardware that allow computers to communicate with each other
- Help Desk or Support: solve "simple" problems, interface with other support people for tougher problems. Often a "starter job" or one that you have while in school.
- Hardware Tech: "hands on" maintenance of the hardware
- Database Admin or DBA: specialized admin -- perform installation/support/maintenance of a database and the data stored within
Things to Consider
Generalist vs. Specialist
Large Company vs. Small Company
- In good times, a specialist usually makes more money
- In bad times, a generalist is more likely to keep job
- A specialist may need to learn a new specialty -- they need to "guess" what the next big thing will be
- Generalists are more likely to get paid to investigate (play with) new technology
Development, Production and Maintenance
- Large companies tend to have a separate group for each of the above job descriptions -- it may be hard to cross group boundaries without switching jobs
- In a small company it is easier to cross group boundaries but there may be less groups/areas to try
Education: College/University vs. Tech School vs. Self Study
- A Development environment usually has fewer or looser rules -- much innovation -- can be high pressure or low pressure
- A Production environment has more rules -- less room for innovation, and often involves modifying someone else's code -- usually a high pressure job
- A Maintenance environment is where you support older, legacy systems -- minor bug fixes, few changes -- a low pressure job
Note: You get out of school what you put into it. If the assignment is "boring" what can you do to make it more interesting? (Use it as a chance to learn a new language? Use it as a chance to learn a new platform?)
If there is no course on "Digital Imaging" and you are interested in learning more, can you do an independent study class/paper on the topic? This way you get the "formal" education of school and the "informal" education of self-study at the same time.
- College and Universities tend to prepare you to be a generalist.
- Tech schools tend to prepare you to be a specialist.
- Tech schools take less time then College/University.
- Self taught people tend to be specialists -- and are more likely to have "holes" in their knowledge.
- Self taught people can succeed, but they are the hardest hit in a bad market.
Science vs. Math
- Most computer science courses focus on math and logic, but do not do a good job of teaching "problem solving" especially debugging
- Engineering is supposed to be better at teaching "problem solving" but, in my experience, science majors tend to be better
- Few computer science programs require science classes, yet a science background and the scientific method (propose a hypothesis, develop a way to test that hypothesis, test and refine) is very important for troubleshooting and debugging
- Electrical Engineering people tend to go into networking
- MIS (Management Information Systems) programs tend to be light on computers, heavy on business and management
- Scripting vs. Programming: I love to write scripts but I hate to program. The major difference is where the requirements come from. A script is usually something that you write for yourself, so you know what you want from the finished product. Programming is developing a product based on someone else's requirements. These requirements are often poorly written, can change often, or are missing one (or more) very important detail.
I do not know if this is common in other fields, but in the field of computers, the same job description at two different companies may be completely different jobs and may have very different requirements and responsibilities. Some of the differences come from the size of the company, some come from the type of business the company is in (tech vs.. finance vs.. pharmaceutical) while others are "side effects" of the last person to fill the position.
As an example, here are the requirements or job functions of some of the Unix Systems Administration (or SysAdmin) jobs that I have had:
Some of these jobs required direct interaction with "clients" or "users" while other interactions were "indirect" -- working with a helpdesk. Some of the jobs required interacting with technical people while some of the jobs required interacting with non-technical people, and others required interacting with both technical and non-technical "users."
- UNIX admin, scripting, and PC/Mac hardware/software skills.
- UNIX admin, scripting, PC Admin, Hardware maintenance, Database Admin, Database programming, Spreadsheets / Graphing and Networking skills.
- UNIX admin and scripting skills along with working with a help desk to support thousands of users.
- basic UNIX admin skills (very boring, but I used it as an opportunity to learn more web skills).
- UNIX admin and scripting along with a variety of web skills.