This syllabus is best viewed as a website [see a previous semester's version](https://introcompsys.github.io/fall2023/)
In this course we will study the tools that we use as programmers and use them as a lens to study the computer system itself. We will begin with two fundamental tools: version control and the shell. We will focus on git and bash as popular examples of each. Sometimes understanding the tools requires understanding an aspect of the system, for example git uses cryptographic hashing which requires understanding number systems. Other times the tools helps us see how parts work: the shell is our interface to the operating system. We will survey the computer system across levels of abstraction from applications to hardware. Throughout, we will consider social conventions and practices within programming and the historical development of computer systems.
The goal is for you to learn and the grading is designed to as close as possible actually align to how much you have learned. So, the first thing to keep in mind, always is the course learning outcomes:
By the end of the semester, students will be able to:
- Apply common design patterns and abstractions to understand new code bases, programming tools, and components of systems.
- Apply appropriate programming workflows using context-relevant tools that enable adherance to best practices for effective code, developer time efficiency, and collaboration.
- Differentiate the different classes of tools used in computer science in terms of their features, roles, and how they interact and justify positions and preferences among popular tools
- Identify how information flows across levels of abstraction.
- Discuss implications of design choices across levels of abstraction
- Describe the social context in which essential components of computing systems were developed and explain the impact of that context on the systems.
- Differentiate between social conventions and technical requirements in programming contexts.
- Name: Dr. Sarah M Brown
- email: [email protected]
- github: brownsarahm
- Office hours: listed on communication page and GitHub Org member view
Dr. Sarah M Brown is an Assistant Professor of Computer Science, who does research on how social context changes machine learning. Dr. Brown earned a PhD in Electrical Engineering from Northeastern University, completed a postdoctoral fellowship at University of California Berkeley, and worked as a postdoctoral research associate at Brown University before joining URI. At Brown University, Dr. Brown taught the Data and Society course for the Master's in Data Science Program. You can learn more about me at my website or my research on my lab site.
You can call me Professor Brown or Dr. Brown, I use she/her pronouns.
The best way to contact me is e-mail or an issue on an assignment repo. For more details, see the Communication Section
The University of Rhode Island land acknowledgment is a statement written by members of the University community in close partnership with members of the Narragansett Tribe. For more information see [the university land acknowledgement page](https://www.uri.edu/about/land-acknowledgment/)
The University of Rhode Island occupies the traditional stomping ground of the Narragansett Nation and the Niantic People. We honor and respect the enduring and continuing relationship between the Indigenous people and this land by teaching and learning more about their history and present-day communities, and by becoming stewards of the land we, too, inhabit.