Unit: Welcome to CS50!
The aim of this course is to develop the foundation to tackle the design, implementation, and integration of a large software project working in small teams. Along the way, you learn to write code in Bash and C, on Linux servers. The challenge of the course is to quickly get you up to speed so there is sufficient time to get into the details of a complex software design project. The first part of the course serves to develop design, programming and other skills such as source-code management, testing, and debugging. The second part of the course is all about the project and team work.
The syllabus in a nutshell:
- Unix: shell, commands, shell programming;
- C: structure, arrays, pointers, dynamic memory, files;
- Programming tools: gcc (compiler), make (builds software from source code), gdb (debugger), git (source-code management), valgrind (memory-leak checker).
- Software development methodology: design, implementation, unit testing, integration, maintenance.
- Programming: building a search engine (crawler, indexer, query engine).
- Team project: it's a surprise!
The course includes six Unix and C programming assignments for the first part of the course; these assignments are to be done individually. The last part (about 3 weeks) is devoted to the team project. In the first part of the course you'll read and watch these units outside of class, and meet your team once a week to practice a group activity; in the last part of the course you'll meet your team during every class period.
About logistics: be sure to read the Logistics and systems information.
About engagement: you will learn more from this course if you are actively engaged, where engagement = preparation + participation. Read/watch these units and associated reading materials, practice at home, and participate in classroom activities. The Learning Fellows are here to help with classroom activities.
About the programming: There is a significant amount of programming in this course, requiring a considerable time commitment on the part of the student. You will need to be well organized to complete all the programming assignments and project. Start each lab early. It will be challenging, but we hope it will be fun!
About the project:
You will be assigned to a team of four students and given about two weeks to complete a large project requiring strong collaboration and a problem-solving mindset.
Each member is responsible for contributing to the overall system design, implementation, testing, integration, and documentation.
The goal of this activity is to help you develop the confidence, skills, and habits necessary to write large computer programs as part of a multi-person team.
You will become conversant in software engineering paradigms, such as source code control with git and other open-source tools that ease the software-development process.
In addition, you will develop vital skills in self-directed learning, problem solving, and communication.
The project concludes with a demo and a review of your design and implementation.
All members of the team get the same base grade, but we reserve the right to subtract points for members who do not contribute fully; there is a short evaluation form completed by all members at the end of the project.