What Is Software Engineering?
What is software engineering?
Bjarne Stroustrup, the creator of the C++ programming language, once said that "our civilization runs on software." This statement is impressively backed by reality, in which software controls a huge variety of devices, from cell phones and music players, to smart appliances such as microwave ovens and laundry machines, to personal computers that many people use at work and large mainframe computers that operate in governmental organizations. In fact, it is hard to imagine an area of human activity that does not rely at least partially on software, including professional work, home activities, and entertainment.
Using a basic definition, software means computer programs and their associated documentation. Computer programs, in turn, consist of algorithms (or procedures) applied to various types of data. Software engineering emerged in the late 1960s as a new engineering discipline concerned with all aspects pertaining to software production. It encompasses concepts, principles, theories, techniques and tools that can be used for developing high-quality professional software. First introduced at the 1968 NATO Software Engineering Conference in Garmisch, Germany, software engineering emphasizes a systematic, disciplined approach to software development and evolution and typically applies to the construction of large software systems (or products) in which teams of numerous software engineers are involved.
High-quality software is characterized by:
- High dependability (including safety, security and reliability)
A software product is said to have a life-cycle, or undergo a software process, which in software engineering terms consists essentially of two parts: development and evolution. Both involve traditional engineering phases, software development consisting primarily of concept creation, requirements specification, design, implementation, integration, testing, and deployment. On the other hand, software evolution involves operation and maintenance as well as some limited development activities aimed at improving the software.
Applications of software engineering
Software engineering applications are practically unlimited. In fact, software engineering has grown so fast in the last several decades that it has become tightly connected with all other areas of computer science (e.g., artificial intelligence, parallel processing, computer graphics, human-computer interaction, database management systems, and many others) as well as with some areas outside the traditional computer domain (such as cognitive sciences and visual arts).
Challenges in software engineering
Current challenges in software engineering research and development include:
- Dealing with the increased complexity of software required in new applications
- The diversity of software systems that need to communicate/operate with each other
- The need to develop trustworthy software
- Increased market demands for a quick turnaround from concept to deployment and operation
- The quest for increased efficiency in component-based reuse and automatic code generation
Studying software engineering
Students who want to focus on software engineering are expected to gain and integrate knowledge from various subject areas including computer programming, data structures, algorithms, numerical methods, statistics, design patterns, human-computer interaction, computer graphics, information visualization, database systems, web development, software project management, and software engineering.
Our department offers the following courses related to software engineering:
- CS 326 Programming Languages
- CS 330 Design Patterns
- CS 420/CS 620 Human-Computer Interaction
- CS 425 Software Engineering
- CS 457/657 Database Management Systems
- CS 426 Senior Projects
- CS 480 Computer Graphics
- CS 709B Advanced Software Project Management and Development
- CS 791M Topics in Human-Computer Interaction
- CS 791Z Graduate Topics in Software Engineering
Employment/internship opportunities in software engineering
Software engineers are in high demand nationally and abroad. The list of companies hiring software engineers is practically endless. While most jobs are in industry, research labs also hire skilled software engineers, either for research in software engineering itself or for supporting software development in research environments. Furthermore, skilled software engineers are also hired by start-up companies, or are well prepared to start their own software development companies.
Notably, under the umbrella of software engineering several specialized professions exist besides software engineer itself, including computer programmer, analyst, designer, developer, tester, consultant, and others.
The CSE Department at UNR has numerous examples of alumni who are working as software engineers for various companies in the US and abroad, including in major companies such as Google, Apple, Microsoft, and Amazon. Examples include:
- Jeff Stuart, currently with Google Zurich - Switzerland
- Andy Dittrich, a software engineer at Youtube-Google, CA
- Sam Talaie and Brian Westphal, senior developers with Apple
- John Kenyon and Marcel Levy, employed by Amazon.com
- Bilal and Burcu Nemutlu, senior software engineers with Microsoft
- Cody White, graphics software engineer at Imagination Technologies
- Victor Ivanov, chief of engineering for Federated Media, a start-up company in the Bay area
Alumni with software engineering specialization working in research environments include:
- Jim King, currently a member of the Blue Brain project at the École Polytechnique Fédérale de Lausanne-Switzerland
- Joe Mahsman, a software engineer with the Desert Research Institute Nevada.
Major local industry organizations such as General Electric, IGT, Bally, Hamilton Robotics, Intuit, PC Doctor and other are heavily hiring our students as interns and our alumni as full-time software engineers. A short excerpt from the large list of the latter includes:
- Denver Lui - GE
- Bob Larmore, Steve Martens - IGT
- Cory Fleming, Thais Jordan - Bally
- Dawn Haddan, Zach Norcross - Intuit
- Alex Redei, Gareth Ferneyhough - Hamilton Robotics
- Hector Urtubia - PC Doctor
- Navid Fallah - LoadI
Students who had been involved in software engineering research and development in the Software Engineering Laboratory (SOELA) have been successful in acquiring employment as software developers, software project managers, or researchers in software engineering. Among them are:
- Sermsak Buntha (MS in CS 2004, PhD in CSE 2009), Commander and Chief of Programming for Royal Thai Navy's Center of Information Technology
- Muhanna Muhanna (MS in CS 2007, PhD in CSE 2011), Assistant Professor with the Department of Computer Graphics at Princess Sumaya University of Technology, Jordan
Furthermore, other SOELA alumni are continuing their studies at the PhD level:
- Steve Komarov (BS in CS 2011) is a Ph.D. student in computer science at Harvard University
- Nic Herndon (BS in CS 2006 and MS in CS 2008) is a Ph.D. student in Computing and information sciences at Kansas State University
- Olusegun Akinwale (MS in CS 2007) is a Ph.D. student in computer science at the University of Texas at Dallas