Skip to content

kaist-cp/cs220

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KAIST CS220: Programming Principles

Logistics

  • Instructor: Jeehoon Kang
  • Time: Mon & Wed 14:30-15:45 (2024 Fall)
  • Place
    • Rm. 1501, Bldg. E3-1. YOUR PHYSICAL ATTENDANCE IS REQUIRED unless announced otherwise.
    • Zoom room (if remote participation is absolutely necessary). Ask Jeehoon via email for the passcode.
  • Websites: https://github.com/kaist-cp/cs220, https://gg.kaist.ac.kr/course/20/
  • Announcements: in issue tracker
    • We assume you read each announcement within 24 hours.
    • We strongly recommend you to watch the repository.
  • TA: Janggun Lee (head), Sunho Park, Jaewoo Kim.
    • Office Hours: Fri 9:00-10:00, Rm. 4441, Bldg. E3-1. If you want to attend, please email the TAs by the day before and arrive by 9:15. See below for the office hour policy.
  • IMPORTANT: you should not expose your work to others. In particular, you should not fork the upstream and push there.

Course description

This course will equip you with the programming concepts needed to effectively communicate your ideas to computers. For a detailed overview, please refer to the introduction in the Google Slides presentation.

Outline

  • Part 1: CS101 Review using the Rust programming language
  • Part 2: Type and Correctness
  • Part 3: Reference and Ownership
  • Part 4: Function and Iterator
  • Part 5: Concurrency and Parallelism

Textbook

Prerequisites

  • It is strongly recommended that students have completed courses in:

    • Mathematics (MAS101): proposition statement and proof
    • Programming (CS101): basic programming skills

    A solid foundation in these areas is crucial for success in this course.

Schedule

  • Week 01: introduction
  • Week 02: part 1 (CS101 review)
  • Week 03: part 1 (CS101 review)
  • Week 04: part 1 (CS101 review)
  • Week 05: part 2 (type)
  • Week 06: part 2 (correctness)
  • Week 07: part 2 (type as automatic verification)
  • Week 08: mid-term exam
  • Week 09: part 3 (reference)
  • Week 10: part 3 (ownership)
  • Week 11: part 4 (function as a value)
  • Week 12: part 4 (combinator)
  • Week 13: part 5 (mutability)
  • Week 14: part 5 (concurrency)
  • Week 15: part 5 (parallelism)
  • Week 16: final exam

Tools

Ensure you are proficient with the following development tools:

  • Git: Essential for downloading homework templates and managing your development process. If you're new to Git, please complete this tutorial.

    • Follow these steps to set up your repository:

      • Clone the upstream repository directly without forking it:
        $ git clone --origin upstream https://github.com/kaist-cp/cs220.git
        $ cd cs220
        $ git remote -v
        upstream        https://github.com/kaist-cp/cs220.git (fetch)
        upstream        https://github.com/kaist-cp/cs220.git (push)
      • To receive updates from the upstream, fetch and merge upstream/main:
        $ git fetch upstream
        $ git merge upstream/main
    • For managing your development on a Git server, create a private repository:

      • Upgrade to a "PRO" GitHub account, available at no cost. See the documentation.
      • Go to https://github.com and create a new private repository named cs220. The repository should be initialized as empty.
      • Configure your repository as a remote:
        $ git remote add origin git@github.com:<github-id>/cs220.git
        $ git remote -v
        origin	 git@github.com:<github-id>/cs220.git (fetch)
        origin	 git@github.com:<github-id>/cs220.git (push)
        upstream https://github.com/kaist-cp/cs220.git (fetch)
        upstream https://github.com/kaist-cp/cs220.git (push)
      • Push your work to your repository:
        $ git push -u origin main
      • If you're accessing your repository for the first time, git may display an error due to insufficient permissions.
        • On a development server, copy the SSH public key mentioned in the error message and add it to your GitHub account.
        • In your own environment, you may need to generate an SSH key using ssh-keygen and retrieve the public key from ~/.ssh/id_rsa.pub. You should never share the private key located in ~/.ssh/id_rsa.
        • You can add SSH keys to your GitHub account here.
  • Rust: You will use Rust for homework. We chose Rust because its ownership type system greatly simplifies the development of large-scale system software.

    • cargo doc --open on your local will show you the documentation for each homework.
  • ChatGPT or other Large Language Models (LLMs) (optional): Useful for completing your homework.

    • In an AI-driven era, learning to effectively utilize AI in programming is crucial. Homework difficulty is adjusted assuming the use of ChatGPT 3.5 or an equivalent tool.
  • Visual Studio Code (optional): Recommended for developing your homework, although you may use any editor of your preference.

  • Single Sign On (SSO): Use the following SSO credentials to access gg and the development server:

  • Development Server:

    • IMPORTANT: Do not attempt to hack or overload the server. Please use it responsibly.
    • Create and connect to a workspace to use the terminal or VSCode (after installation).
    • We recommend using VSCode with the "Rust Analyzer" and "CodeLLDB" plugins.

Grading & Honor code

Cheating

IMPORTANT: READ CAREFULLY. THIS IS A SERIOUS MATTER.

  • Sign the KAIST CS Honor Code for this semester. Failure to do so may lead to expulsion from the course.

  • We will employ sophisticated tools to detect code plagiarism.

    • Search for "code plagiarism detector" on Google Images to understand how these tools can identify advanced forms of plagiarism. Do not attempt plagiarism in any form.

Programming assignments (40%)

  • All assignments will be announced at the start of the semester.
  • Submit your solutions to https://gg.kaist.ac.kr/course/20.
  • You are permitted to use ChatGPT or other LLMs.
  • For the concepts that don't come out in prerequisite courses, we tried to comment on the relevant resources in the assignment code. Please read them carefully.
  • How to submit your assignment:
    • To submit your solution, you should run submit.sh in scripts directory. In other words, you should run the following command:
      # Run this command at the root directory of this repository.
      $ ./scripts/submit.sh
    • After running the command above, in the target directory, you can find a assignment<NUMBER>.zip file (assignment09.zip for example). Submit this file to https://gg.kaist.ac.kr/course/20.
  • Read the documentation at https://kaist-cp.github.io/cs220/cs220/.
  • You can check your grade of each assignment by running the grading script.
    • You can run the grading script with the following command:
    $ ./scripts/grade.sh <assignment_number>
    
    # E.g. To grade `assignment09`, run the following command:
    $ ./scripts/grade.sh 9

Midterm and final exams (60%)

  • Dates & Times: Oct 23th (Wed), Dec 18th (Wed), 13:00-15:45 (or shorter, TBA)

  • Location: (the same as usual)

  • Physical attendance is required. If necessary, online participation via Zoom will be accommodated.

  • You are expected to bring your own laptop. Laptops can also be borrowed from the School of Computing Administration Team.

  • We will use Safe Exam Browser to prevent cheatings.

    • You should have your laptop configured with Safe Exam Browser before the exam.
    • TBA: Details will be announced later.

Attendance (?%)

  • A quiz must be completed on the Course Management website for each session (if any). Quizzes should be completed by the end of the day.

  • Failing to attend a significant number of sessions will result in an automatic grade of F.

Communication

Registration

Rules

  • Course-related announcements and information will be posted on the course website and the GitHub issue tracker. It is expected that you read all announcements within 24 hours of their posting. Watching the repository is highly recommended for automatic email notifications of new announcements.

  • Questions about course materials and assignments should be posted in the course repository's issue tracker.

    • Avoid sending emails to the instructor or TAs regarding course materials and assignments.
    • Research your question using Google, Stack Overflow, and ChatGPT before posting.
    • Describe your question in detail, including:
      • Environment (OS, Rust version, and other relevant program information).
      • Used commands and their results, with logs formatted in code. See this guide.
      • Any changes made to directories or files. For solution files, describe the modified code sections.
      • Your Google search results, including search terms and learned information.
    • Use a clear and descriptive title for your issue.
    • For further instructions, read this section on the course website.
    • The requirement to ask questions online first is twofold: It ensures clarity in your query and allows everyone to benefit from shared questions and answers.
  • Email inquiries should be reserved for confidential or personal matters. Questions not adhering to this guideline (e.g., course material queries via email) will not be addressed.

  • Office hours will not cover new questions. Check the issue tracker for similar questions before attending. If your question is not listed, post it as a new issue for discussion. Office hour discussions will focus on unresolved issues.

  • Emails to the instructor or head TA should start with "CS220" in the subject line, followed by a brief description. Include your name and student number in the email. Emails lacking this information (e.g., those without a student number) will not receive a response.

  • If attending remotely via Zoom (https://kaist.zoom.us/my/jeehoon.kang), set your Zoom name to <your student number> <your name> (e.g., 20071163 강지훈). Instructions for changing your Zoom name can be found here.

  • The course is conducted in English. However, you may ask questions in Korean, which will be translated into English.

Ignore

1830eaed90e5986c75320daaf131bd3730b8575e866c4e92935a690e7c2a0716