Applied Software Engineering II
|Title||Applied Software Engineering II (51221)|
|Instructor||Mark Shacklette (email@example.com)|
This course is an intermediate approach to applied software design and development methods for use in creating efficient, reusable, and modular software. This course is offered annually but content and focus change from year to year. Methods we investigate include: classes, inheritance, and polymorphism; design patterns; advanced programming techniques using microservices, event-driven architecture, Hybrid Transactional/Analytical Processing; software frameworks and container-based software development; and advanced techniques including multi-threading. A heavy focus is on design and creativity and what constitutes creative design.
TOPICS (Each year we will choose some of these for deep dives):
· Designing software to meet non-functional requirements for quality, security, reliability, scalability, extensibility, testability, supportability, fault tolerance and disaster recovery
· Architecture Governance—what is it and how do you do it?
· Vendor and Technology assessment techniques and documenting roadmaps
· What does “ideation to implementation” mean?
· Continuous Integration and Delivery
· Architecture Documentation: Conceptual and Solution Architecture Artifacts
· Software Development Life Cycle integrating Agile methodologies
· Alternative architecture/design approaches – object oriented, structured, functional, component based and corresponding tools
TECHNOLOGIES (Each year we will choose some of these for deep dives):
· Event-based design
· Microservices and RESTful APIs
· SQL and NoSQL databases
· Fast access and compute architectures including In-memory databases and data grids
· Hybrid Transactional/Analytical Processing (HTAP) technologies such as Hadoop, Spark, Storm
· Continuous/Container-based software design using Docker, Apache Mesos, and Cloud Foundry.
· Version control systems such as Subversion, GIThub, etc.
· Continuous Integration and Delivery using Junit and Bamboo
· Collaborative tools such as Crucible
Lectures: Students are responsible for all material presented in lectures. Class participation is highly encouraged.
Laboratories: Weekly labs are assigned. Students are responsible for all material covered at the problem sessions.
Student Presentations: Students will be required to present on a topic related to the course and their particular interests.
Exams: Some years may include exams on materials. This will depend on particular course content for that year.
Course Project: Some years may include a course project. This will depend on particular course content for that year.
The course grade will be based on labs, exams and a final project:
Final Project: 40%.
Contents and texts will vary year by year, but examples include:
· Building Microservices by Sam Newman (ISBN 978-1491950357)
· Designing Data-Intensive Applications by Martin Kleppmann (ISBN 978-1449373320)
· Advanced Analytics with Spark: Patterns for Learning from Data at Scale by Sandy Ryza, et. al. (ISBN: 978-1491912768)
· Next Generation Databases by Guy Harrison (ISBN 978-1484213308)
· Hadoop Application Architectures: Designing Real-World Big Data Applications by Mark Grover (ISBN 978-1491900086)
· Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble (ISBN 978-0321601919)
· Docker in Practice by Ian Miell (ISBN 978-1617292729)
Programming knowledge of Java. Knowledge of python and Scala are helpful but not required.
Tuesday 5:30-8:30 pm