Skip to content

Latest commit

 

History

History
62 lines (36 loc) · 3.45 KB

README.md

File metadata and controls

62 lines (36 loc) · 3.45 KB

Principles of Software Textbook

This is a living textbook meant to supplement and improve upon RPI's CSCI 2600,

otherwise known as Principles of Software.

The class is a study of important concepts in software design, implementation, and testing. Topics include specification, abstraction, design principles and patterns, testing, refactoring, software development processes, and GUI and event-driven programming. The course also introduces implementation and testing tools, including IDEs, version control systems, and other frameworks. The overarching goal of the course is for students to learn how to write correct and maintainable software.

Ideally, this book will also include a chapter on ethics in computing, more in-depth examples of Dafny, design pattern usage, and real-world applications. The motivation for this material comes from its necessity -

RPI's motto used to be "Knowledge and Thoroughness", an ideal that still sets RPI engineers apart from other technologists and programmers alike. In our specialties, we are often self-taught; most times, our knowledge and/or applicative need expands farther than a class can take us, so we must learn on our own. Principles of Software is a deeply important class for budding programmers, and the author believes these concepts must be more readily available and digestible than they currently are as of this writing.

Acknowledgements

The spirit of this textbook is based on the RCOS Handbook, the document on which another RPI class, Rensselaer Center for Open Source (RCOS), is based. Both documents are maintained and updated by CS Department Faculty as well as students, who have graciously edited this textbook via its open-source counterpart.

The content of this textbook is not original work; it is a compilation of a series of papers, slideshows, lectures, and book excerpts from leaders in the field of computer science. As such, the credit for the content in this book goes entirely to:

Dr. Ana Milanova of Rensselaer Polytechnic Institute,

Dr. David Goldschmidt of Rensselaer Polytechnic Institute,

Dr. Carlos Varela of Rensselaer Polytechnic Institute,

Dr. Michael Ernst of the University of Washington,

Dr. David Notkin of the University of Washington,

and Professor Thompson of Rensselaer Polytechnic Institute.

All resources, sources, quotes, and some extra ideas are dully cited in the Appendix.

This book would also not be possible without:

All of the Principles of Software's TAs and mentors for their contributions to student grading and course advice,

Dr. Barb Cutler and the Submitty team for making grading Principles of Software possible,

and Dr. Konstantin Kuzmin, who created the slide deck on which this book is largely based, and who oversaw the author in the creation of this publication.

If you should desire to learn more about any idea in this book, consult the Appendix or contact Alice Bibaud at [email protected].

Repository

If you find a problem or something that you'd like to dispute, please open an issue.

Developing

Check out CONTRIBUTING.md for the suggested ways to preview your changes locally. You can also directly make edits through GitHub, but it is strongly recommended you create and view them locally instead.

Deploying

The Textbook will be automatically deployed using GitHub Pages. The textbook can be located at https://nazime1.github.io/Principles-of-Software/#/textbook!