Chapter 1
Before the Search
Before starting your job search, you need to prepare yourself. You shouldnt apply for jobs without knowing what kind of job you want. Just being a good coder isnt enough; you must understand what the market wants and how you can improve and package your own skills to make sure that the company with the job you want will want you.
Know Yourself
Stereotypes to the contrary, all programmers are not alike. Knowing what kind of programmer you are is crucial to finding the right kind of job. Although you can probably do many different kinds of programming tasks, you probably dont find them all equally engaging. Doing something you dont enjoy is fine on a short-term basis, but you need to be interested in and excited by what youre doing for it to sustain you over the long term. The best programmers are passionate about their work, and you cant truly be passionate about something thats only moderately interesting to you.
If youre not sure what you like or dislike, ask yourself some questions:
- Are you a systems programmer or an application developer? Systems programmers work on the code that keeps computer systems running: frameworks, tools, compilers, drivers, servers, and so on. Other programmers are their primary audience, so little interaction occurs with non-programmers and usually the job involves little or no user interface work. Application developers, on the other hand, work on the pieces that those non-programmers use to do their own work, and often more interaction occurs with non-technical people. Many programmers find interacting with non-technical people about technical topics to be frustrating; on the other hand, you may enjoy creating applications that are seen and used by an audience that extends beyond other programmers.
- Do you like coding user interfaces? User interface design also referred to as user experience (UX) or human computer interaction ( HCI ) is a role that draws on a diverse set of skills, including programming, graphic design, and psychology. This work is high profile because the user interface is the most visible part of any application. User interface design is particularly important in mobile application development, where the restrictions of the device require even greater creativity and innovation. If you have the necessary skills and enjoy this work, youre in elite company: Many programmers find it finicky, hard to do well, and easy to criticize, especially when you take internationalization and accessibility issues into account.
- Are you a good debugger? If you think finding problems in your own code is difficult, imagine what its like to fix problems with someone elses code. It requires strong analytical and problem-solving skills. Finding and fixing bugs can be extremely rewarding in its own right. You need to know if youd be happy doing primarily maintenance work. (Of course, you should always expect to maintain your own code all programmers need debugging skills.) In many cases, particularly in older companies, maintenance programming jobs involve working primarily with older technologies now considered outdated or no longer in fashion. Developing your experience and skills with older technologies may narrow the range of jobs that youre suited for, but because expertise in older technologies is hard to find, you may be highly sought after by the smaller number of companies dependent on older programs.
- Do you like testing? Testing also referred to as quality assurance or QA for short requires a combination of meticulous attention to detail to ensure that tests cover every conceivable use of a program and outside-the-box creativity to find bugs in the program by generating combinations of inputs that the programs developers never considered. Skilled testers are hard to find, and good programming skills are required to write tools and automated test cases.
- Are you an architect or a coder? Every coding job includes some kind of design aspect, but certain jobs lean more one way than the other. If you enjoy designing, particularly designing the large-scale structure of big projects, a position as a software architect might be more appealing than a coding-focused job. Although you need a good understanding of how to code to be an effective architect, architecture positions can involve a lot of meetings and interpersonal interactions and little or no coding. Unless you have formal training in software architecture, the usual route to becoming an architect is to code first and to then display an aptitude for designing and fitting together different pieces of a project.
The preceding questions deal with different kinds of programming, but you should also consider non-programming responsibilities that might interest you and the work environment that you prefer:
- Does management interest you? Some coders have a long-term goal to become a manager, but others shiver at the very thought. If management is your goal, you need to develop leadership skills and demonstrate that you can manage the human parts of the software development equation as well as the technical pieces. If management is not your goal, look for companies with good technical career paths, so youre not forced to manage people to be promoted. (You still need leadership skills to get promoted no matter which career path you choose, but leadership skills are separate from people management skills.)
- Do you want to work for a big company? There are advantages and disadvantages to working at big companies. For example, a large company may offer more job stability (although layoffs during downturns are common) and some kind of career path. It may also have a name brand that non-techies recognize. On the other hand, you may feel stifled by the bureaucracy, rigidness, and intracompany rivalry often found in bigger companies.
- Do you want to work for a small company? The pay may be less, but getting in on the ground floor at a new company can create opportunities for future advancement (and possibly substantial remuneration) as the company grows and succeeds. Also, the work environment at small companies is often more informal than at larger organizations. The downside, of course, is that most new ventures fail, and you may be out of a job within a year or two, most likely without the kind of severance package you might expect from a large company.
- Do you want to work on open source projects? The vast majority of programming jobs have historically involved proprietary, closed-source projects, which some programmers dont like. A shift has occurred in some companies in favor of more open software development, which provides opportunities for people to work on open-source projects and still be paid for that participation. If its important to you that your work project is open source, its best to seek out companies already involved in open source. Trying to champion open source in traditional software companies is often a frustrating and fruitless undertaking.
- Do you want long-term or short-term projects? Some programmers crave change, spending a few months at most on each project. If you like short-term projects and dont mind traveling, a gig with a consulting company might make more sense than a more conventional corporate job.
Realize that there are no universal answers to these questions, and no right or wrong way to answer them. The more truthful you are in answering them, the more likely youll find the kind of programming job you truly enjoy.
Know the Market
Knowing what youd like to do is great, but dont box yourself in too narrowly. You also need to understand the current job market and how it constrains your search for the ideal job, especially during an economic downturn like the one that burst the Internet bubble of the late 90s or the global real estate and banking meltdown of the late 2000s.
Next page