Complex, computer-based systems are increasingly pervasive in all aspects of modern society, including communications, health care, transportation, commerce, civil infrastructure, and military applications. Software is a primary element of these systems; it provides the connections among the diverse elements of a modern system and the interfaces to the system’s environment. In addition, software provides many features of modern systems (functionality, behavior, and quality attributes). Those of us charged with preparing the next generation of software engineers have the responsibility to prepare them for a world in which software is a critical element of complex systems.
System thinking is a cognitive process that is widely applied in fields such as applied mathematics, psychology, biology, game theory, and social network analysis. It provides the foundation for systems engineering and is increasingly applicable to software engineering. This presentation will focus on systems thinking, why understanding and applying it is important for software engineers, and how systems thinking can be introduced in software engineering courses.
Agile methods are increasingly being used in industry and studied in academia, but relatively little teaching of how to do agile right occurs at the undergraduate or graduate student level. Although many student teams may claim to be using an agile method on their project, an objective assessment is likely to note violations of fundamental agile practices. For example, I observed MSE student projects spanning multiple terms where, for the first year, no code was being written... yet one of the agile principles is that working software is the fundamental measure of progress. Applying what was learned in class on the project did not align with how agile works in this context. Many students find agile practices such as peer programming and collective code ownership (from Extreme Programming) personally uncomfortable. And changing the requirements for the project midway is a violation of academic norms! Exposing students to the agile paradigm can be a challenging experience for both the teacher and the student.
The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both . It manifests early design decisions, enables communication between stakeholders, and is a transferable abstraction of the system that can be applied to other systems with similar quality requirements. As such, software architecture constitutes a valuable tool for computer science and software engineering students as they head out to the build the software systems of the world. Not surprisingly, in 2016 software architect was listed as the second highest paying tech job in the US by Business Insider . However, educators struggle incorporating this topic into already full curricula, especially in undergraduate programs where students often do not have the maturity and experience to grasp the importance of the subject.
The goal of this one-day workshop is to bring together university faculty who are teaching or are interested in teaching software architecture. The first half of the workshop will be an “Introduction to Software Architecture.” The second half will be a combination of invited presentations from workshop attendees, identification of challenges and opportunities for teaching software architecture, and break-out sessions related to identified challenges and opportunities.
The workshop will be led by Grace A. Lewis, a principal researcher at the Carnegie Mellon Software Engineering Institute, who has been co-leading the SEI Software Engineering Educators workshop for the past six years. More information about these workshops is available at https://www.sei.cmu.edu/community/edworkshops/
DevOps and Rapid Deployment have quickly become established practice in large software companies. The goal of these practices is to bring smaller features to the end user faster, without sacrificing quality. They rely on a combination of choosing the right software architecture, deployment process and tool chain. While large companies have developed their current DevOps and rapid deployment methodology largely from scratch -- by training employees on the fly -- they have done this out of necessity. There is a very limited supply of experienced, knowledgeable deployment engineers to keep up the process. Similarly, small and medium sized enterprises and startups want developers trained in DevOps and Rapid Deployment principles to quickly make strides.
However, standard university and college curricula largely skip the idea of deployment and operations, and rarely expose students to a complete continuous deployment pipeline. The goal of this one day workshop is to bring together university faculty who are interested in teaching DevOps and Rapid Deployment to share ideas and materials. This workshop and its predecessor are outgrowths of a panel at the 2016 Conference on Software Engineering Education and Training where it became clear that a) there was a desire to incorporate the material presented at the panel into curricula, b) there was a lack of knowledge of DevOps and c) the materials (texts and tools) useful in teaching the material were unfamiliar to many faculty.
How It Works
The format of this full-day workshop will be partially an “Introduction to DevOps” and partially an in depth discussion. The first DevOps Educators Workshop consisted of presentations by faculty who had taught DevOps. After the presentations, there was a presentation of industrial needs and in depth discussions of topics related to instructional issues. A report on the first workshop can be found at https://github.com/devopseducator/2016workshop/blob/master/workshopSummary.pdf
 Bass, L.; Clements, P.; & Kazman, R. Software Architecture in Practice, Third Edition. Boston, MA: Addison-Wesley, 2012.
 Bort, J. “The 11 highest-paying tech jobs in America in 2016.” Business Insider. March 2016. http://www.businessinsider.com/11-highest-paying-tech-jobs-in-america-in-2016-2016-3.
The goal is to improve and share software engineering education and training practices by identifying the best examples in the field. Those elected to membership in Hall of Fame represent the highest achievement in their field, serving as models of what can be achieved and how in software engineering education and training. Click here for more information.