Computing That Serves

Software Development Track


The Software Development track prepares students to become professional software engineers.  Students learn the concepts and techniques required to successfully design and implement complex software systems.  The courses in this track emphasize understanding of computer systems, their operation, and performance, as well as core software engineering principles including requirements definition, user experience design, quality assurance, and project management.

Complete the following 3 courses:
CS 345: Operating Systems Design
CS 360: Internet Programming
CS 428: Software Engineering
Complete at least 2 of the following courses:
CS 256: Designing the User Experience
CS 330: Concepts of Programming Languages
CS 431: Algorithmic Languages and Compilers
CS 452: Database Modeling Concepts
CS 453: Fundamentals of Information Retrieval
CS 456: Introduction to User Interface Software
CS 460: Computer Communications and Networking
CS 462: Large-Scale Distributed System Design
CS 465: Computer Security
CS 484: Parallel Processing
CS 486: Verification and Validation 

Career Opportunities

Much of the world is driven by software, and those who know how to create it are in high demand.  Virtually all companies and organizations depend on software to run their businesses and meet their objectives.  Many companies have in-house software development organizations that create the software they need.  Other organizations purchase commercial software products from external vendors such as Apple, Microsoft, and Google rather than develop their own.  Either way, those who know how to create software and how to manage the software development process are needed to get the job done.

The following sections describe software development roles that are found in many software development organizations.  Some of these roles are available to new graduates, while others require more experience.  The Software Development Track provides good preparation for all of these roles.  The list of companies interested in hiring graduates with software development skills is too long to enumerate.  Some of the companies that have actively recruited and hired BYU CS graduates in recent years include: Microsoft, Amazon, Apple, Google, Goldman Sachs, Chief Architect, Epic Systems, and the LDS Church.

Software Developer/Engineer

Software developers create software products. They are responsible for product definition, design, implementation, and testing. Their work is typically done in a team environment, and requires a high level of coordination with software architects, product managers, software testers, and technical writers. Software developers must have expertise in the wide variety of technologies that are involved in building modern software products, and are often tasked with researching emerging technologies. Experienced software developers may choose to take on team leadership roles.

Software Developer/Engineer "In Test"

While creating complex software products is challenging, so is testing them to ensure that they work correctly. Given the enormity of the task, it is essential to automate as much of the testing process as possible. Software developers "in test" are responsible for creating automated testing frameworks, and for designing and implementing test cases and scenarios to ensure the correct operation of a software product. In effect, they create programs that test other programs. They also have responsibility for the overall quality of a software product. This role has much in common with the Software Developer/Engineer role.

Software Development Manager / Software Test Manager

Software development managers organize and lead teams of software developers/engineers. They are responsible for establishing team vision, and creating a work environment that allows achievement of team objectives. Development managers identify work tasks that need to be done, assign tasks to team members, and track progress toward completion. They also work to identify and resolve issues that threaten project success, and work closely with project managers to report team progress and coordinate with other parts of the project organization. Development managers are often former software developers who opted to follow a management track. Software test managers play largely the same role as software development managers, except their focus is on testing rather than product development. Some managers have responsibility for both product development and testing.

Software Architect

Software architects provide technical leadership on software development projects. They make high-level design choices, including decomposition of the software into major sub-systems, and the definition of interfaces and dependencies between sub-systems. Architects also make major technology choices and establish technical standards, including coding standards, tools, and platforms. Architect roles are typically filled by experienced and savvy software developers who wish to take on a technical leadership role. Architects must be effective communicators, as their duties require frequent interaction with both technical and non-technical project stakeholders.

Software Project Manager

Software projects are complex undertakings, and require cooperation among many highly-specialized resources such as developers, testers, user experience designers, technical writers, and marketing and legal teams. Software project managers are responsible for coordinating the activities of all project participants in order to guide the project to successful completion. Specific responsibilities include project scoping, cost estimation, risk analysis, communication and coordination among project stakeholders, and issue resolution.

Software Product Manager

Software product managers are responsible for ensuring the business success of one or more software products. They are responsible for understanding customer needs, and defining product features that meet those needs. They write product requirements, and develop product feature and version road maps. They work with engineering, marketing, sales, and finance to develop a successful business case for their products. Product managers are also responsible for explaining and promoting their products to internal and external audiences.

Sales Engineer

Sales engineer is a hybrid sales and engineering role. Customers who are contemplating purchase of a complex software product often need help understanding how to best use the product in their particular environment. Additionally, software systems often need to be tailored in order to meet a particular customer's needs. A sales engineer provides a customer with technical expertise and consulting, addresses their concerns, and helps them decide to purchase the product. Sales engineers often develop custom code to tailor the product to a customer's needs. This can be a good role for those who are people-oriented and also enjoy working with technology.

Technology Evangelist

A technology evangelist is a person who builds a critical mass of support for a given technology. An evangelist promotes the use of a particular product or technology through talks, articles, blogging, user demonstrations, recorded demonstrations, or the creation of sample projects. The word evangelism is taken from the context of religious evangelism due to the similarity of relaying information about a particular set of beliefs with the intention of converting the recipient. [See Wikipedia, "Technology evangelist"]


Security Focus: CS 484 (Parallel Processing), CS 453 (Fundamentals of Information Retrieval) and IT 567 (Cyber Security and Penetration Testing)

Description here

Programming Languages Focus: CS 330 (Concepts of Programming Languages), CS 431 (Algorithmic Languages and Compilers) and CS 452 (Database Modeling Concepts)