Exploring this Job
It is a good idea to start early and get some hands-on experience programming a computer. You will also find countless books on programming in libraries and resources online; this is one field where the resources to teach yourself are highly accessible and available for all levels of competency. Joining a computer club and reading professional magazines are other ways to become more familiar with this career field. In addition, you should start exploring the Internet for information about computer-related careers. One excellent resource is https://www.computer.org/communities/student-activities/career.
Advanced students can put their design ideas and programming knowledge to work by designing and programming their own applications, such as simple games and utility programs. Visit Codeacademy (https://www.codecademy.com), edX (https://www.edx.org), Coursera (https://www.coursera.org), and Khan Academy (https://www.khanacademy.org), where you can learn how to code for free.
Attend computer science summer camps at colleges and universities to build your skills and meet people with the same interests.
Finally, talk to a computer programmer about his or her career. Ask your school counselor or computer science teacher to help arrange an interview.
Broadly speaking, there are two types of computer programmers. Systems programmers write the instructions, called programs or software, that control the entire computer system, including both the central processing unit and the equipment with which it communicates, such as terminals, printers, and disk drives. Application software is the software that is most familiar to computer users. Applications programmers write the software that is used to create word-processing, spreadsheets, and e-mail packages, commonly used in business; games, accounting, and reference software used by the average consumer; Web browsing applications; and subject- or skill-based software used in schools.
One popular career in this specialty is that of Internet applications programmer. These professionals write the computer programs that are used for Internet applications that allow people to surf the Internet, use search engines, purchase products online, play online video games, watch movies, listen to podcasts, communicate with friends on social networking sites, and perform many other tasks on the Internet. Another specialty is graphics programming. Graphics programmers write software programs that produce designs, illustrations, and animations that help business, industry, and schools.
Some job aspects of programming are the same, regardless of the specialty. A software designer or engineer will present the concept of what they are trying to achieve (such as a an online, multiplayer video game or a powerful new search engine) to the programmer and request that the programmer write the necessary code to accomplish their goal. Before actually writing code for part of a game, the programmer must analyze the designer or engineer's request and the desired results. The programmer must decide on how to approach it, and plan what the computer will have to do to produce these desired results. They must pay attention to minute details and instruct the computer in each step of the process. These instructions are coded in one of several programming languages, such as C/C++, Java, Python, or Assembly. Programmers may use computer-assisted software engineering tools, applications that combine compiling, code walk-through, code generation, test data generation, and debugging steps. These tools and environments handle the routine steps, allowing programmers to work faster and focus on writing the unique parts of the program.
When the program is completed, the programmer tests its working practicality. If it responds according to expectations, the programmer is finished. If the program does not respond as anticipated, it will have to be debugged—that is, examined for errors that must be eliminated.
Because of increased automation of programming, many programmers are now handling some tasks that were once in the software engineers' domain, such as identifying user needs and designing certain parts of computer programs, as well as other functions.