Last Updated: January 9, 2020
Those interested in pursuing software engineer careers can expect growing job opportunities. Software engineers design software programs and often participate in the details of their development. In a world that places increasing importance on applications and web development, employment options for software engineers remain robust in a variety of industries. For aspiring software engineers, that can mean diverse career opportunities.
This page provides an overview of software engineering, including detailed information on expected skills, career paths including job opportunities by educational level, potential work environments, occupational and salary data, and professional organizations for software engineers.
What Does a Software Engineer Do?
Computer software engineers apply engineering principles and systematic methods to develop programs and operating data for computers. If you have ever asked yourself, "What does a software engineer do?" note that daily tasks vary widely. Professionals confer with system programmers, analysts, and other engineers to extract pertinent information for designing systems, projecting capabilities, and determining performance interfaces. Computer software engineers also analyze user needs, provide consultation services to discuss design elements, and coordinate software installation. Designing software systems requires professionals to consider mathematical models and scientific analysis to project outcomes.
The demand for high-performing computer software engineers continues to grow. According to projections from the Bureau of Labor Statistics (BLS), job growth should increase by 21% through 2028, much faster than the national average. Computer software engineers can find employment in almost any industry. In fact, over half a million new computer and information technology jobs are projected to be added to the workforce. Furthermore, as software engineering is synonymous with innovation, new programming tools lead to inexplicable dilemmas that demand professionals with cutting-edge knowledge and skills to solve them.
Key Hard Skills
Hard skills refers to practical, teachable competencies that an employee must develop to qualify for a particular position. Examples of hard skills for software engineers include learning to code with programming languages such as Java, SQL, and Python.
- Java: This programming language produces software on multiple platforms without the need for recompilation. The code runs on nearly all operating systems including Mac OS or Windows. Java uses syntax from C and C++ programming. Browser-operated programs facilitate GUI and object interaction from users.
- SQL: Also known as Structured Query Language, SQL queries, updates, modifies, deletes, and inserts data. To achieve this, SQL uses a set number of commands. This computer language is standard for the manipulation of data and relational database management. Professionals use SQL to manage structured data where relationships between variables and entities exist.
- C++: Regarded as an object-oriented, general purpose programming language, C++ uses both low and high-level language. Given that virtually all computers contain C++, computer software engineers must understand this language. C++ encompases most C programs without switching the source code line. C++ primarily manipulates text, numbers, and other computer-capable tasks.
- C#: Initially developed for Microsoft, this highly expressive program language is more simple in comparison to other languages, yet it includes components of C++ and Java. Generic types and methods provide additional safety and increased performance. C# also allows professionals to define iteration behavior, while supporting encapsulation, polymorphism, and inheritance.
- Python: This high-level programing language contains dynamic semantics, structures, typing, and binding that connect existing components; however, the Python syntax is easy to learn with no compilation stage involved, reducing program maintenance and enhancing productivity. Python also supports module and package use, which allows engineers to use the language for varying projects.
Programming languages comprise a software engineer's bread and butter, with nearly as many options to explore as there are job possibilities. Examples include Ruby, an object-oriented language that works in blocks; Rust, which integrates with other languages for application development; PHP, a web development script that integrates with HTML; and Swift, which can program apps for all Apple products. Learn more about programming languages here.
Key Soft Skills
While hard skills like knowledge of programming languages are essential, software engineers must also consider which soft skills they may need to qualify for the position they seek. Soft skills include individual preferences and personality traits that demonstrate how an employee performs their duties and fits into a team.
- Communication: Whether reporting progress to a supervisor, explaining a product to a client, or coordinating with team members to work on the same product, software engineers must be adept at communicating via email, phone, and in-person meetings.
- Multitasking: Software development can require engineers to split attention across different modules of the same project, or switch easily between projects when working on a deadline or meeting team needs.
- Organization: To handle multiple projects through their various stages and keep track of details, software engineers must demonstrate a certain level of organization. Busy supervisors oversee entire teams and need to access information efficiently at a client's request.
- Attention to Detail: Concentration plays a critical role for software engineers. They must troubleshoot coding issues and bugs as they arise, and keep track of a host of complex details surrounding multiple ongoing projects.
Depending on the particular position, the daily responsibilities of a software engineer can vary. Software engineers may confer with clients or executives to begin the development of a project, designing programs to meet those expectations. They assemble charts and diagrams for visual representation of the software, writing code themselves in addition to supervising a team of programmers. They also run tests and fix issues that may occur with the programs they have designed.
Can Anyone Be a Software Engineer?
Software engineers typically hold a bachelor's degree or higher in computer engineering, software engineering, or computer science. Some employers require work experience.
Is It Hard to Become a Software Engineer?
The BLS projects that the need for software developers will increase by 21% from 2018-2028, far faster than the national average for all occupations. Software engineers and software developers can look forward to plentiful opportunities.
How Long Does It Take to Become a Software Engineer?
Most software engineers hold a bachelor's degree, which can take four years to obtain. Employers may seek software engineers with some experience as developers, or in other coding capacities.
What's the Difference Between a Software Engineer and Software Developer?
While the positions share similarities and often work in tandem, software engineers analyze and design full software systems, while software developers lead and carry out the creation of the software itself. Engineers, however, often participate in software development.
What Do Entry-Level Software Engineers Do?
Entry-level software engineers may take on a variety of roles. Working with a team, they may focus on the back end of a piece of software and build the specific flow of code, or on the front end to ensure that the user interface stays consistent. They may also focus on quality assurance testing.
Software Engineer Salary Information
Salaries for software engineers can vary based on the industry, location, and the employee's years of experience. PayScale reports an average salary of $84,414 for software engineers. With significant experience, salaries can grow rapidly, with the average rising to $92,000 for those with 5-9 years of experience.
While the BLS does not distinguish between software engineers and developers, the reports for these occupations nonetheless shed light on particularly lucrative industries and states in the field. Software developers earn an annual mean wage of $108,080.
Washington ranked highest in the nation for software developer salaries, with an annual mean wage of $131,790. Unsurprisingly, Silicon Valley's home state of California ranks next on the list, with an annual mean wage of $127,950 as of May 2018. New York follows next in the rankings, followed closely by Virginia and the District of Columbia.
Average Salary of Software Engineers by Job Level
|Entry Level (0-12 Months)||$73,764|
|Early Career (1-4 Years)||$81,107|
|Midcareer (5-9 Years)||$91,731|
|Experienced (10-19 Years)||$101,835|
How to Become a Software Engineer
Earn Your Degree
Typically, employers seek software engineers who hold a bachelor's degree in software engineering, computer engineering, or computer science. Employers look for software engineers with practical knowledge, and may also seek some work experience and demonstrated coding knowledge.
Aspiring software engineers take courses such as programming languages, database management, programming concepts, data structures and algorithms, software architecture, and discrete mathematics. Some programs require a final capstone project in software engineering, which may encompass a practical task such as the design of a full program, and which students may complete as part of a group.
Getting an Associate Degree
An associate degree can introduce students to the fields of computer science and software engineering. Courses may include network concepts and operating systems, computer logic and programming, and web programming. Students can typically complete an associate degree in two years of study.
With an associate degree, students can prepare for several career paths or apply the credits they have earned to a bachelor's degree program.
Careers for Software Engineering Associate Graduates
Web developers design and construct websites to fit the needs of their clients. They may create site-specific applications, code the site's functions, and collaborate with other departments to integrate content and graphics.
Median Annual Salary: $69,430
Getting a Bachelor's Degree
With a bachelor's degree, software engineers and computer scientists gain a wealth of opportunities in the field. Depending on the chosen major and specialization, students may take courses in programming languages, software security, engineering statistics, and discrete mathematics -- plus general education requirements. In general, a bachelor's degree takes four years to complete.
Computer and Information Systems Managers
Also known as IT managers, these high-level professionals determine the technology needs of an organization. Job duties include securing data, researching solutions, analyzing costs, and making recommendations to company leadership.
Median Annual Salary: $142,530
Computer Hardware Engineers
Responsible for hands-on technology, computer hardware engineers design and develop tangible computer parts such as processors, memory, and routers. They run tests, troubleshoot, and oversee the manufacturing process.
Median Annual Salary: $114,600
Getting a Master's Degree
With a graduate degree, software engineers and computer scientists gain a wealth of opportunities in the field. Depending on the chosen major and specialization, students may take courses in programming languages, software security, engineering statistics, and discrete mathematics -- plus general education requirements. In general, a bachelor's degree takes four years to complete.
Computer and Information Research Scientist
Computer and information research scientists develop entirely new tools for computer scientists. They research complex problems and identify computer-related solutions, invent programming languages, and analyze areas for improvement.
Median Annual Salary: $118,370
Getting a Doctoral Degree
Students who pursue a doctorate in an area of computer science like software engineering may graduate with improved career opportunities and higher potential salaries. A doctoral degree can take 4-5 years to complete, with coursework including principles of computer science, data mining, and advanced statistics with technology applications. Most Ph.D. programs require a culminating dissertation or project of an equivalent scope.
Employed across a variety of industries, software developers design and develop software programs and web applications using coding languages like Java, C++, and SQL.
Median Annual Salary: $105,590
Lead Software Development Engineer
Lead software development engineers design, create, and test software for their companies, often overseeing a team of developers. They may also manage the project as a whole by setting timelines.
Median Annual Salary: $110,428
Employers consider previous work experience an important factor during the hiring process. Software engineers who can demonstrate practical knowledge may gain a significant advantage in hiring for positions of their choice. Software engineers can seek mentorships through internships, as companies of all sizes seek interns in the field. Students may also elect to use academic work, such as a final project or capstone, to demonstrate experience.
Professional organizations often feature internship opportunities and offer student membership levels. The Institute of Electrical and Electronics Engineers (IEEE) offers networking opportunities, training, publications, and scholarships for students and young professionals. Similarly, student members of the Association for Computing Machinery can access volunteer opportunities along with an online learning center, student newsletter, and career news.
Software engineers can often boost their resume to the top of the pile by obtaining credentials in cybersecurity, programming, or development. CIW web development professional certification combines user-interface programming with back-end design, giving certificate holders a broad skill set recognized by employers like Cisco, Raytheon, and Hewlett Packard. The credential requires three exams, each of which carries a fee.
As a certified secure software lifecycle professional (CSSLP), software engineers can prove their acumen with best practices in cybersecurity. The certification requires an exam that evaluates eight areas of cybersecurity. Other available certifications include Microsoft programming and platform development.
Types of Careers in Software Engineering
Software engineering graduates can benefit from a wealth of job opportunities. Industry and location factor into salary potential along with experience and education. PayScale reports an annual salary of $84,000 for software engineers.
By completing a degree, software engineers can enhance their job prospects, widen the field of available positions, and potentially qualify for higher salaries. Those with an associate degree may pursue jobs in web development, while bachelor's level positions include computer and information systems management and computer systems analysis. With a master's degree, software engineers may seek roles as computer and information research scientists, and a doctorate can qualify them to work as professors or lead engineers.
Where Can I Work as a Software Engineer?
With strong demand across a variety of industries and corporation types, software engineers often enjoy an extensive selection of job choices. Software engineers may find work in large corporations, small startups, or as independent freelancers. While many work in computer systems design and related services, other popular industries include finance, software publishing, and manufacturing.
Location plays an important part in job availability and earning potential for any career, including software engineering. Known for innovative technological hubs in Silicon Valley and San Francisco, California employs the highest number of software engineers in the country, with the BLS reporting 148,550 working in the state as of May 2018. Texas ranks next with about half as many, followed by Washington state and New York.
Software engineers in Washington earned the highest salaries in the country during the same time frame, with an annual mean wage of $131,790.
|States With the Highest Employment Level of Software Engineers (Applications)||Number of Software Developers (Applications) Employed|
|Top-Paying States for Software Engineers (Applications)||Top-Paying States for Software Engineers (Applications)|
|District of Columbia||$112,510|
Software engineers can work in companies of all sizes. Large companies typically employ large teams and offer greater opportunities for collaboration, where software engineers may work on a small component of a big project. They may manage teams of developers. In a smaller setting, the role of a software engineer may blend more fully with that of a developer. Some software engineers may work remotely, with flexible hours and minimal in-person interaction with team members.
|Industries With the Highest Level of Employment for Software Engineers (Applications)||Number of Software Developers (Applications) Employed|
|Computer Systems Design and Related Services||320,220|
|Management of Companies and Enterprises||47,140|
|Other Information Services||35,070|
|Data Processing, Hosting, and Related Services||33,920|
|Top-Paying Industries for Software Developers (Applications)||Annual Mean Wage|
|Computer and Peripheral Equipment Manufacturing||$130,460|
|Cable and Other Subscription Programming||$125,510|
|Securities, Commodity Contracts, and Other Financial Investments and Related Activities||$125,050|
|Aerospace Product and Parts Manufacturing||$123,450|
Kiersten Nelthorpe is a software engineer specializing in backend API design and databases. She earned her bachelor's degree in Computer Science from Brigham Young University in Utah. After starting out at Microsoft in the Seattle area, Kiersten now works as a Senior Software Engineer at Imagine Learning, an education technology company. Most of her corporate experience has been programming in C#/.Net, but Python is her language of choice when coding for fun.
Why did you decide to pursue Software Engineering?
I was actually an oboist studying classical music performance in college when I started thinking about pursuing a different career. While I enjoyed being a musician, I also enjoyed a lot of other things too. What I really wanted was a career that I enjoyed, but also allowed me to pursue other passions and hobbies at the same time.
My dad spent many years as a mechanical engineer, so I figured engineering would be a good, stable career to look into. As I scanned the list of engineering disciplines, "software engineer" kind of jumped out as something that sounded interesting to me. Except, I literally knew nothing about it. I had never coded before (except for some minor HTML tweaking to customize my MySpace page back in the day). Nevertheless, I signed up for the introductory programming course at my university the next semester and had so much fun that I switched my major to computer science.
What are the biggest challenges of working as a Software Engineer?
For such an analytical and logic-oriented job, the emotional ups and downs can actually be exhausting at times. Optimizing a query or solving a particularly difficult bug can momentarily make you feel like the smartest person in the world. But on the other hand, getting stuck trying to understand why the code isn't doing what it "should" be doing or having a customer discover a bug right after releasing new code can really bring that self-confidence right back down.
The need to transfer, process, and store huge amounts of data always seems to be growing faster than what the hardware and technology can keep up with. So new technologies to deal with huge amounts of data are being created and refined at an astonishing pace. Keeping up with what options are available and staying educated on when to use them can take a lot of effort.
The most rewarding aspects?
Being a software engineer means that I get to solve puzzles every single day. It's both challenging and interesting because no two days at work will be exactly alike. That also means that I am constantly learning! I work with really smart people who come up with all sorts of unique solutions to the problems that we are solving. We have lots of opportunities to review each other's code, which helps all of us learn and grow.
I also love that my career in software engineering has allowed for a lot of flexibility as a parent. I have two young children, and I can get my work done earlier or later in the day depending on what is going on at home. I can also occasionally work from home if needed (though I will admit that it's usually easier to focus in the office).
Was it challenging to find a job in the field?
No! There are currently more open software engineer positions than there are people qualified to fill them. So most companies are competing for employees, rather than the other way around.
When I was in my senior year of college, I was nervous about finding a job as quickly as possible, even though I didn't need to be. So I applied to over 100 companies and ended up having to turn down interviews. The result of that was having multiple job offers all over the country so I could pick wherever I wanted to live after graduating.
What kind of job settings have you worked in?
When I was still a student in college, I worked as a part-time programmer for my university's School of Education. All of the programmers were students, and our manager didn't actually have any technical background. It was cool because he knew exactly what software tools needed to be built, but the student programmers had full freedom to make the technical decisions and decide how those things would be built. It gave us a lot of experience being self-directed in problem-solving, technical design and task management.
Ever since I graduated, I have worked on corporate engineering teams for software product companies. In one company, every engineer had their own office and a lot of communication between employees was done through chat. Now, I work in an open workspace where everyone's desk is out in a big open room. It's actually nice to be able to just turn around and ask a quick question to another engineering team.
What did your career trajectory look like after you graduated?
After I graduated from Brigham Young University with my bachelor's degree in Computer Science, I went to work for Microsoft in Washington as a Software Engineer. I was actually flying back to Utah every single weekend to visit my then-boyfriend. (And racking up some fancy status with Delta airlines!) When he proposed, I moved back to Utah and started working at Imagine Learning, an education technology company. There, I was promoted to a Senior Software Engineer.
Ever since starting my career in software engineering, I have been coding and testing my code. But as I gained more experience, I got more involved in planning the architecture of the software products and the systems used by engineering teams.
How do you organize, plan, and prioritize your work?
Every engineering team that I have worked on, even as a student, has used a variation of the Scrum methodology for planning and prioritizing work. Project managers define tasks that need to be completed, whether those are for new software features, maintenance, or fixing bugs. The engineering team chooses which tasks they will commit to finishing in a specified timeframe (usually two weeks) and estimates how long each task will take.
Every day, the team comes together briefly for a "standup" meeting where we each report on what we did the day before, what we will be doing today, and whether or not we are blocked on a task. As soon as a task is completed, the engineer picks up something new to work on from the backlog. Using Scrum allows the engineers to choose which tasks they will work on while also ensuring that the right things are getting done.
Advice for newcomers to the profession?
If you are considering a software career, don't be intimidated by all of the different languages! Once you learn one programming language, it's fairly easy to learn other languages because they usually share the same basic concepts. Often, a software engineer will become very proficient with one particular language over time and that makes it easier to narrow down all of the potential jobs available.
If you enjoy programming and decide to pursue it, work on some example projects on your own. These can come from tutorials or just things that interest you (like making a specific kind of calculator or transforming data in text files). Then upload your projects to a Github repository. Potential employers like to see examples of your code!
What are some of the best ways you gained experience outside of primary education?
After I had taken enough programming classes to work on real-life projects, I got a software internship every single summer until I graduated. During school, my first technical job was in IT at my university's data center. After that, I found a student job as a programmer and then that experience led to getting a programming job off campus with a small software company. I ensured that I was always working in relevant positions to gain experience in software engineering.
What direction do you see your career path trending in?
From where I am at now, there are typically two paths for a software engineering career to take:
- I can continue to gain more technical knowledge and experience and become a software architect or specialize in a discipline like machine learning, big data, or cyber security (among many others).
- Some software engineers decide to move into management and lead engineering teams, departments, or even become CTOs.
For now, I see myself pursuing the first option and doing a deep dive into big data since I have already been working on the big data problems these last few years.
Continuing Education for Software Engineers
States do not require software engineers to hold certifications or complete continuing education hours. However, obtaining additional credentials and pursuing continuing education can enhance career advancement opportunities. In a rapidly evolving field, continuing education ensures that software engineers remain up to date on cutting-edge advances. Candidates can pursue continuing education through organizations such as Devslopes, Coursera, and Udemy, described in the table below.
Software engineers can find a wealth of information through resources like Core Intuition Podcasts, a software development series; TechBeacon, a website full of information for software engineers; and the Yalantis blog, featuring industry-related articles on technology, marketing, and design. Software engineers may also want to practice their skills with game-based practice resources like codewars.
An online event for tech professionals, hack.summit( ) is a free blockchain conference that encourages networking and mentorship. Pluralsight also offers an annual live conference, in addition to a full catalog of online courses for software engineers. Another popular course platform, Construx, offers courses for teams or individuals both online and in person, along with other resources such as coaching, organizational assessments, and a podcast.
Devslopes subscribers can access more than 500 hours of content covering application development for various platforms, web development, and back-end coding.
With courses across many disciplines, Udemy offers software development programs to prepare software engineers for certifications like Amazon Web Services and cybersecurity. Udemy also offers courses in Linux, ethical network hacking, and data structures and algorithms.
Udacity students benefit from one-on-one career advice and mentorship as they complete courses in programming and development. Available courses include front end, back end, Java, cloud, C++, blockchain, and iOS. Other available subjects of interest to software professionals include artificial intelligence, business, and data science.
Partnering with renowned universities and companies around the world, Coursera offers online courses and full degrees in computer science. Examples include Java programming and software engineering fundamentals offered by Duke University, and Python data structures offered by the University of Michigan.
IEEE eLearning Library
Offering education across disciplines that include aerospace, bioengineering, and robotics, the IEEE e-learning library features courses for software engineers. Examples include software construction, software quality, and enterprise blockchain for grid modernization.
How Do I Find a Job in Software Engineering?
Graduates can take advantage of many resources to help them find a job in software engineering. Many new software engineers get their start by working with professors, internship supervisors, and other mentors. Students should also take advantage of any career services their college or university may offer.
Online programs sometimes provide career assistance. Students who take courses through Udacity work with a career coach. Graduates can also search for job opportunities through websites like WPhired, which lists Wordpress jobs around the world; Toptal, where freelance software engineers and developers can seek employment; and Stack Overflow, where programmers can network and look for jobs.
Through conferences, job boards, and member forums, professional organizations also provide access to job opportunities.
Professional Resources for Software Engineers
In a field that changes quickly, software engineers can benefit immensely from participation in professional organizations. Most organizations offer multiple ways for members to stay up to date on current trends and changes in the field through newsletters, publications, and events.
Professional organizations also provide career advancement assistance, including job boards and mentorship programs. One of the best ways to network with colleagues in the field, professional organizations offer a host of helpful online forums, local meetings, and annual conferences.
- The Institution of Engineering and Technology Dedicated to uniting engineers across disciplines, the IET provides members with career assistance through mentorship and job management tools, professional development courses, and connection to local community networks.
- Institute of Electrical and Electronics Engineers With a mission centered around the benefits technology can provide to society, the IEEE provides a membership database searchable by career level. Benefits include chapter membership by career level, continuing education opportunities, online and in-person networking, discounts, and opportunities for humanitarian work.
- Computing Research Association Connecting computer research organizations such as university departments and professional organizations, CRA provides public education on the industry; works with lawmakers; and offers events, publications, and other resources for computer engineers.
- Association for Computing Machinery Dedicated to promoting communication among computer science educators, researchers, and professionals, ACM offers membership benefits including a job center; networking opportunities; annual conferences; a digital library; and a learning center featuring books, webinars, and videos.
- Association for Women in Computing cWith a mission centered around the advancement of women in the field, AWC offers networking, mentorship opportunities, continuing education, and events such as monthly local chapter meetings.