Computer programmers provide valuable services across economic sectors, creating code for software and computer applications and programs. These professionals work in information technology, academia, government service, and medical fields -- with additional career opportunities as independent and contract workers.
Requirements for computer programming positions vary, but with advanced education and credentials, programming professionals increase their earning potential and career options. To expand their prospects, computer programmers can network through professional and career resources. Computer programmers should also consider how location factors into their job options.
What Does a Computer Programmer Do?
Computer programmers write and test code that allows computer applications and programs to function. They may translate designs from software developers and engineers into workable code. They may also update or expand the code of existing programs or test programs for errors, finding and resolving faulty lines of code.
According to the U.S. Bureau of Labor Statistics (BLS), employment for computer programmers in the U.S. will decrease by 7% between 2018 and 2028, largely due to the availability of remote workers from countries with lower wages.
Still, programmers with at least a bachelor's degree and knowledge of the latest programming tools should continue to qualify for lucrative positions in the industry. The BLS reports that computer programmers earned a median salary of around $82,280 in 2018, well above the national median salary. The highest 10% of earners, typically those with the most education and experience, earned more than $134,630 that same year.
Key Hard Skills
Computer programmers develop hard skills to thrive in their positions. Programming languages are necessary skills for computer programmers, and they benefit from knowing multiple languages. Languages vary in use and applicability, and with increased proficiency, programmers expand their career prospects.
- Linux: Linux is a free, open-source software operating system. Originally developed for personal computers, Linux now operates on more platforms than any other system. Computer programmers with expertise in Linux gain a competitive edge over other candidates.
- Java: Java is an all-purpose computer programming language, boasting a "write once, run anywhere" functionality. This means code written in Java can run on any device equipped with a Java virtual machine. The widespread use of the Java language makes it a critical competency for programmers.
- C++: First appearing in 1985, C++ helped lay the foundation for subsequent languages such as C#, D, and Java. Many programmers use C++ when designing software infrastructure and resource-constrained applications like desktop applications or e-commerce servers. Experts recommend that computer programming students learn C++ as one of their first languages.
- ASP.NET: Created by Microsoft, ASP.NET supports the development of dynamic webpages, or pages that display different content each time a user views them. ASP.NET allows programmers to build other dynamic web applications and web services, as well. Most modern programmers learn a newer variation of ASP.NET, known as ASP.NET Core.
- C#: C#, pronounced C-sharp, is a general-purpose, multi-paradigm programming language. Released in 2000, C# offers exceptional flexibility, allowing programmers to create dynamic webpages, applications, development tools, and compilers. Hailed as modern, simple, and powerful, C# represents one of the core languages computer programmers must know to qualify for most jobs in their field.
- SQL: SQL, or Structured Query Language, manages data within a relational database management system. Originally developed in 1974, SQL remains in use today in applications like Microsoft Access. While computer programmers can benefit from understanding and using SQL, the language mostly serves programmers specializing in database design and management.
- HTML: HTML, or Hypertext Markup Language, is one of the most common languages in web design. Internet browsers receive HTML documents from a server and turn them into multimedia webpages. Given the universality of HTML, computer programmers should strive to learn the language even before beginning an undergraduate program in computer science.
- PHP: PHP, a server-side scripting language, enables the creation of websites, intranets, internet applications, and social networks. Often embedded in HTML code and implemented using the C programming language, few programmers work exclusively with PHP. Still, its ubiquity makes it an invaluable secondary language for programming professionals.
- Visual Basic: Event-driven programming languages such as VB allow programs to respond to user actions, sensor outputs, or external messages. In 2008, Microsoft stopped supporting VB, though some software developers still use it. While potentially helpful in some environments, aspiring programmers should prioritize learning other languages over VB.
Additional languages that expand computer programming skills include Swift, Rust, and Ruby. Swift, the programming language for macOS, iOS, watchOS, and related services, allows programmers to create and share binary frameworks while designing safe, powerful code.
Rust offers a fast, memory-efficient language as an alternative to C++. Ruby is a safe, simple, open-source programming language. Programmers interested in learning about programming languages can find more information here.
Key Soft Skills
Soft skills often come naturally, allowing computer programmers to effectively and efficiently communicate with colleagues and solve problems. Computer programmers benefit from written and verbal communication skills, creativity and curiosity, and the ability to work both independently and in teams.
- Communication Skills: Computer programmers must be able to explain complex technical concepts to their colleagues and less-informed individuals in the field.
- Multitasking: Computer programmers often work on multiple tasks at once or on parts of a larger project. Programmers must organize their priorities, solve problems as they arise, and carry out multiple duties at once.
- Organizational Skills: Organizational skills include the ability to focus, allocate mental and physical energy to a task, and efficiently manage time and space.
- Attention to Detail: Attention to detail facilitates efficiency, quality, and proficiency. Computer programmers work with code, programming languages, and software operations.
The duties of computer programmers ensure efficient and effective software and operating system function. Computer programmers carry out a variety of tasks on a daily basis. Many work with programming languages, writing and editing code. Computer programmers also carry out system, software, and structure tests, correcting errors and troubleshooting problems as they arise. Additional computer programming responsibilities include upgrading systems, overseeing technical staff, and preparing reports to managers and supervisors.
Can Anyone Be a Computer Programmer?
Individuals can become computer programmers without formal training, but employers prefer programmers with associate or bachelor's degrees in computer science, information technology, or a related field.
Is It Hard to Become a Computer Programmer?
Becoming a computer programmer takes dedication and focus. Students can pursue degrees in computer science, information, technology, mathematics, or a comparable discipline to enter the field.
How Long Does It Take to Become a Computer Programmer?
To become a computer programmer, individuals complete associate or bachelor's degrees in 2-4 years. Students may benefit from certificate or diploma programs or find accelerated degree options.
What's the Difference Between a Computer Programmer and Software Developer?
Computer programmers write code using specific programming languages. Programmers understand algorithms and follow specifications as they generate code. Software developers plan and create software systems, taking into consideration various requirements and budgetary concerns.
What Do Entry-Level Computer Programmers Do?
Entry-level computer programmers write code and programs using languages such as C++ and Java. They update, correct, and expand existing programs, as well.
Computer Programmer Salary Information
According to the BLS, computer programmers earn an annual median salary just under $83,000. Computer systems design service providers employ the most programmers in the U.S., offering salaries of over $89,500. Software publishers and data processing service companies also provide high-paying options for computer programming professionals.
California and Texas, which feature the most computer developers in the country, are home to two metropolitan areas with the highest levels of employment in the field (Los Angeles and Dallas-Fort Worth). Computer programmers interested in positions in less urban areas might consider nonmetropolitan parts of northern New Mexico, Alaska, and northern West Virginia.
Computer programmers increase their earning potential as they gain experience in the field. According to PayScale, computer programmers with 5-9 years of job experience earn approximately $18,000 more each year than their entry-level counterparts.
Average Salary of Computer Programmers by Job Level
|Entry Level (0-12 Months)||$51,236|
|Early Career (1-4 Years)||$56,175|
|Midcareer (5-9 Years)||$69,578|
|Experienced (10-19 Years)||$77,697|
How to Become a Computer Programmer
Earn Your Degree
To become computer programmers, individuals must obtain a degree in computer science, information technology, mathematics, or a related discipline. Many employers hire entry-level computer programmers with associate degrees, but they often prefer candidates with bachelor's degrees. In some instances, computer programmers may need a master's.
Earning an undergraduate degree in a computer-related subject can take 2-4 years. Associate degrees integrate basic general education and computer coursework, while bachelor's programs cover advanced knowledge and skills through additional programming, mathematics, and engineering coursework. To get a master's degree in computer programming, learners need a bachelor's degree in a related field.
Getting an Associate Degree
An associate degree in computer science includes roughly 60 credit hours of coursework, which learners complete in two years. Students complete general education classes alongside basic courses in computer programming, software design, and programming languages. Additional degree options for aspiring computer programmers include computer information systems, information technology, and technology studies.
Careers for Computer Programming Associate Graduates
Web developers design and create websites, working with clients and supervisors to meet their needs and expectations. They write code, collaborate with graphic artists and designers, and oversee creative and technical aspects of website function and performance.
Median Annual Salary: $69,430
Getting a Bachelor's Degree
Bachelor's degrees in computer science, information technology, and related disciplines generally include 120 credit hours of coursework. Students complete bachelor's degrees in four years, and associate degrees take much less time. Bachelor's degree curricula integrate an array of classes in languages, programs, and applications alongside mathematics and engineering courses.
Careers for Computer Programming Bachelor's Graduates
Computer and Information Systems Managers
Computer and information systems managers oversee the computer-related activities of organizations and businesses. They assess technology needs, plan for installation and maintenance, and upgrade systems. These professionals work with computer systems analysts, developers, and specialists.
Median Annual Salary: $142,530
Computer Hardware Engineers
Computer hardware engineers create plans for computer equipment. They also test hardware and modify designs accordingly. They update computer hardware based on the organization's or business's needs, collaborating with software developers and engineers.
Median Annual Salary: $114,600
Computer Network Architects
Computer network architects plan and lay out data communication networks, taking into consideration organizational interests and information security needs. They upgrade hardware and software to support the networks they create, and they research new technologies for future support purposes.
Median Annual Salary: $109,020
Getting a Master's Degree
To earn a master's degree in computer science, individuals need a bachelor's degree in a related discipline. Master's programs often emphasize specific aspects of computer engineering, business, or technology, allowing students to gain expertise in a subset of the field that benefits them personally and professionally. Master's degrees can last 1-3 years, depending on whether learners complete coursework on an accelerated, part-time, or full-time schedule.
Careers for Computer Programming Master's Graduates
Computer and Information Research Scientist
Computer and information research scientists invent, design, and test computing technology. They also find innovative ways to apply existing technologies in business, science, medical, and comparable contexts.
Median Annual Salary: $118,370
Getting a Doctoral Degree
A doctorate in computer science leads to careers in academia and executive positions in corporate settings. To enter a doctoral program, students need at least an undergraduate degree, but usually a master's, in a related field. Coursework in computer-related doctoral programs builds technical expertise, research competencies, and project management skills. Computer science doctorates range in length, often depending on research and thesis requirements.
Careers for Computer Programming Doctoral Graduates
Software developers research, plan, develop, and test systems-level software for medical, industrial, military, and comparable computing applications. They set and analyze software requirements, applying computer science, engineering, and mathematical principles and techniques.
Median Annual Salary: $105,590
Lead Software Development Engineer
Lead software development engineers may work independently as consultants or in teams at corporations and organizations. These professionals oversee engineers, establishing deadlines and supervising tests and maintenance.
Median Annual Salary: $110,428
With experience, computer programming professionals build advanced knowledge and skills to move forward in the field and boost their earning potential. Computer science and information technology degrees may include opportunities for students to complete internships and gain valuable technical competencies. Entry-level positions provide a foundation for computer programmers to advance into mid-level roles in 1-4 years.
Computer programmers can also complete coding bootcamps, industry certifications, join fellow programmers in online networks, and engage in independent exercises to gain experience. By proactively learning programming languages such as Python, Ruby, and Perl, and by building an understanding of advanced programming concepts, computer programmers position themselves to advance in the field.
Beyond an academic degree and practical experience, computer programmers have opportunities to earn credentials in programming languages, information technology security, and specialized aspects of computer programming as a whole. Not all jobs require industry certifications, but they greatly boost career growth and earning potential.
Certification programs often include classes, study materials, and exams, all provided by the administering body. These credentials are not free, but their cost pays off in the end.
The IEEE Computer Society, affiliated with the Institute of Electrical and Electronics Engineers, offers professional certificates for computer programmers. Professionals can obtain these certificates in penetration testing, forensic investigation, and ethical hacking from the International Council of Electronics Commerce Consultants, or EC-Council, a leading professional organization among information technology and e-business professionals.
Types of Careers in Computer Programming
Computer programmers can pursue positions as support specialists, software engineers, systems analysts, and network architects, all of which depend on education and experience. Associate degrees allow programmers to pursue positions as web developers, while a bachelor's qualify them to work as systems managers and administrators.
Master's degrees in computer-related disciplines let professionals work as information technology researchers, and doctorates in the field allow them to work in academia, business, government, and other sectors at executive levels.
Computer programmers, according to the BLS, earn an annual median salary exceeding $84,000. Pay scales vary by location, position, and education, but increased experience and advanced credentials generally boost earning potential.
Where Can I Work as a Computer Programmer?
Job opportunities for computer programmers exist across economic sectors and geographic boundaries. Large organizations and companies employ these professionals, as do small startups. Computer programmers can also work as independent freelancers, taking jobs as they become available.
California, Texas, and New York feature the most jobs. Major metropolitan areas in each of these three states provide computer programmers with work opportunities in the technology, business, and government sectors.
Washington represents the highest-paying area for computer programmers, ranking as the fourth-highest-paying metropolitan area for programmers in the Seattle-Tacoma area. The District of Columbia, with extensive technology and governmental career opportunities, offers additional high-paying career options.
|States With the Highest Employment Level of Computer Programmers (Applications)||Number of Computer Programmers (Applications) Employed|
|Top Paying States for Computer Programmers (Applications)||Annual Mean Wage|
|District of Columbia||$105,200|
Companies and organizations offering computer systems design services and software publishing employ the highest number of computer programmers in the United States. Outside of the technology sector, computer programmers work in business and management operations for companies and enterprises, for state governments, and in educational settings.
The top-paying positions for computer programmers, however, exist in small- and large-scale entities providing travel arrangements and reservations, manufacturing, and financial services.
|Industries With the Highest Level of Employment for Computer Programmers (Applications)||Number of Computer Programmers (Applications) Employed|
|Computer Systems Design and Related Services||93,370|
|Management of Companies and Enterprises||9,910|
|State Government, Excluding Schools and Hospitals||6.640|
|Colleges, Universities, and Professional Schools||6,480|
|Top Paying Industries for Computer Programmers (Applications)||Annual Mean Wage|
|Travel Arrangement and Reservation Services||$112,480|
|Manufacturing and Reproducing Magnetic and Optical Media||$111,660|
|Securities, Commodity Contracts, and Other Financial Investments and Related Activities||$111,270|
|Natural Gas Distribution||$109,250|
Working as a Freelancer
Freelance computer programmers enjoy flexibility and choice with respect to jobs, tasks, and responsibilities. Programmers with specialized skills can sell their services to corporations, businesses, and organizations while keeping a schedule that best fits their needs. Working as a freelancer may allow for remote work, as well, depending on the job.
On the other hand, freelance work is unpredictable and usually excludes health insurance and other benefits. Services like Upwork and Fiverr link freelance computer professionals with potential employers, expanding their employment options.
Sunil Kowlgi is a startup founder and computer programmer with 13 years of software industry experience. He works in the video space and built Outklip, which helps people make quick, polished video tutorials and demos for YouTube. Prior to Outklip, Kowlgi worked for seven years as a software developer for National Instruments, a large technology company based in Austin, Texas.
Why did you decide to pursue computer programming?
I was introduced to computer programming at a class in sixth grade in the 1990s. The class was based on the Logo programming language, in which you write commands to draw things on a computer screen. I loved programming in Logo as I could create any shape or figure from my imagination. For the final project, I created an alien robot, and although the teacher only asked for the program, I also submitted a short story on the alien robot. The teacher gave me a good score on the computer program and gave me bonus points for the story. From that initial experience, it stuck with me that programming was a fun activity and a cool way to express your imagination.
I later took programming classes in high school and college, but I wasn't yet thinking of a career in computer programming. It was during a project in my senior year of college that I realized I enjoyed programming and was good at it. This project was different in that it was entirely self-directed -- I came up with the project proposal and wrote 1,000-1,500 lines of code by myself, and the project worked pretty well. The project was to emulate a software protocol called CAN, which is used for inter-device communication in automobiles.
For example, your car will sound an alarm when a door is open because a sensor in the door sends a CAN message to the car computer. After the project, I was sure that I wanted to have a programming job, and that's what I've done ever since.
What are the biggest challenges you have faced working in computer programming?
The biggest challenges I've encountered are related to complex code bases that are co-written by many software programmers. An example of a complex code base would be software code for the Chrome browser, which goes into the hundreds of thousands, if not millions, of lines of code.
When working on complex software, you rarely ever write code from scratch. Even when a company decides to make a brand new product, you start by reusing existing software code and modifying the code to meet product requirements. To modify code, you first need to comprehend it.
There are two challenges when it comes to comprehending an existing code base. The first challenge is that people writing software are focused on making the product work, while making the code comprehensible is usually an afterthought. But as time goes by and the software gets reused by others not familiar with the code, the comprehensibility of code starts to matter. If code is hard to understand, software programmers new to the code might end up introducing bugs. This failure to properly understand code before reusing it is one of the most common reasons for software bugs.
When working with a complex code base, you need documentation that describes the code architecture and how the code works. A challenge in most cases is the documentation is either stale, as it hasn't been updated as the software code is updated, or doesn't have all the information. When you don't have good documentation, it slows down your ability to understand and use the code correctly.
What are the most rewarding aspects?
When I see my software products help someone be successful in whatever they do, that is the most rewarding feeling. Users are making videos using my software for teaching others about cryptocurrency, the Spanish language, and math problem-solving skills, among others, and these videos have reached tens of thousands of their subscribers. It feels awesome to help users deliver great video content to their audience.
Was it challenging to find a job in the field?
When I graduated from college in the 2000s, there were plenty of software jobs available, and that is still the case even today. But it was a bit of a challenge to find jobs in a particular niche that I preferred, which had to do with writing device driver software (software that interfaces with electronics hardware).
I was lucky to come across an ad for a company called Kyocera Wireless that had openings for mobile phone software development, and landed a job there.
What did your career trajectory look like after earning your degree?
My first software job was at Kyocera Wireless as an entry-level software programmer, where I wrote software in C for mobile phones. This was a time before the iPhone came into the market. I worked there for two years and then took a break to get a master's in computer engineering at the University of Texas at Austin.
After my master's, I worked seven years as a software programmer at National Instruments in Austin. There, I worked on device driver software in C++ for microprocessors and circuit boards. The best part of working at National Instruments was being in the company of really smart programmers, from whom I learned a lot. That environment helped me develop the skills and confidence to do more ambitious things, like building a software startup.
How do you organize, plan and prioritize your work?
Coding is a lot like playing a game. You do some amount of planning upfront, then write some code and see the results. Then plan some more, write more code, and so on. It's a gradual process where you have to complete a level to get to the next level, and there are no cheat codes. You must develop code in steps, or it won't end up working right.
Before writing any code, I work things out on paper or whiteboard. Writing things down helps clarify my thinking. It's on paper where I come up with an outline of what I want to accomplish.
I draw diagrams to represent data, code execution sequences, and code architecture. Once I have figured out how I'm going to tackle a problem, I start coding the easiest parts first. I write the bare minimum code to generate a tangible result -- like a basic webpage that I can see and interact with -- and then I repeat cycles of plan and code through to completion.
Advice for newcomers to the profession?
Programming is a skill you learn by doing. Work on projects. They're the best way to learn. Textbooks are helpful after you've done some coding already; they're best for refining your understanding and improving your knowledge about programming.
To improve your skills, look for examples of code online, tweak them, and run to see results. Keep modifying code till you get the results you want. If you repeat this cycle of starting with examples and ending up with something cool, you're on your way to becoming a very effective programmer.
Continuing Education for Computer Programmers
Computer programmers need to stay current on programming trends and technological innovations. There is no licensing for computer programmers, but certificates such as those offered by the EC-Council expire after three years. Programmers must recertify by participating in the organization's continuing education program.
Programmers can pursue continuing education and professional development options through colleges and universities or professional organizations and associations. CompTIA, a leading organization for information technology professionals, offers a continuing education program, plus a variety of certification and training options.
Prospective computer programmers can gain insights into the field and requirements for computer-related positions through websites like TechBeacon, podcasts such as Core Intuition, and networking sites like Stack Overflow. Hackathons like the one sponsored by Major League Hacking each year offer still more chances for programmers to display, hone, and advance their knowledge and skills.
ACM Advancing Education
ACM's advancing education initiative offers continuing education programs for children and adults at all levels. The ACM Learning Center, under the guidance of the education board and advisory committee, hosts an array of learning resources including case studies, a distinguished speaker program, and online textbooks.
Computer Society Professional Education
Offered through the Institute of Electrical and Electronics Engineers, the computer society professional education program provides access to publications and a digital library, and it builds communities of like-minded students and professionals. Programmers can take courses and earn certifications in software development and engineering.
Founded as a collaboration between Harvard and MIT, edX works with institutional partners to offer college courses in computer programming, programming languages, and related topics to learners around the world.
Edhesive, dedicated to bringing STEM to school in an affordable, effective way, provides classes in coding, computer science principles, statistics, and related topics. Teachers enjoy access to training and support as they engage with the online curricula.
Massachusetts Institute of Technology OpenCourseWare
OpenCourseWare at MIT includes materials from 2,400 of the school's courses to expand knowledge and engage learners. OpenCourseWare offers introductory programming courses, language-specific courses, and advanced courses for programmers at all stages of their careers.
How Do I Find a Job in Computer Programming?
Future computer programmers can find positions through internships and other activities conducted during their education. Career services on university and college campuses help with job-placement, as well. Campuses may sponsor job fairs and bring employers to students directly.
Professional organizations also often provide career centers and job listings for aspiring and practicing computer programmers. Networking opportunities give computer programmers direct access to potential jobs. Annual conferences and online communication connect computer programmers to potential employers. At conferences, large companies and agencies may also set up interviews and provide information to attendees about job openings and hiring activities.
Professional Resources for Computer Programmers
Computer programmers can access a plethora of resources online, many gained through professional associations and organizations. Membership to a computer programming-related group builds networks of like-minded students, practitioners, and scholars in the field, allowing for collaboration and communication.
Publications, advocacy initiatives, job listings, and continuing education programs also give members access to the most current information in the field. Similarly, membership with a professional association or organization also boosts candidates' resumes, attesting to their abilities and presence in the larger computer programming community.
- Association for Computing Machinery ACM unites computing professionals, educators, and scholars from around the world, promoting leadership and high standards within the field. ACM affiliates with student and professional chapters, offering education opportunities, a learning center, public policy updates, and publication resources. Members of ACM gain access to the group's career and job center, one of the organization's 37 specialty groups, and hands-on volunteering opportunities.
- IEEE Computer SocietyDedicated to providing information and inspiration in computer science and engineering, the IEEE Computer Society houses an extensive digital library. It also provides educational programs and offers news and research updates through publications. Reachers, practitioners, students, and industry members of the IEEE Computer Society enjoy access to career resources and recognition, professional networking opportunities, and forums for collaboration and innovation.
- Association for Women in Computing The AWC, founded in 1978, advances the role of women in computing professions. Featuring chapters around the country and individual memberships, the AWC adheres to the code of ethics put forward by the Institute for Certification of Computer Professionals. Members receive professional networking, continuing education, and mentorship resources.
- Computing Research Association With more than 200 computing research organizations as members, the CRA works with the larger research community to promote change and innovation in the field and in society as a whole. CRA enhances computing research in industry, government, and education by providing data and policy updates, information on research initiatives, conferences and workshops, and career resources.
- International Association of Web ProfessionalsThe IWA establishes educational and certification standards for web professionals through 100 chapters representing more than 300,000 individuals around the world. Certificate programs include site designer, server administration, and database specialization. The IWA also provides industry updates for web professionals.