• Stars
    star
    483
  • Rank 91,050 (Top 2 %)
  • Language
    C++
  • License
    Other
  • Created over 10 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

open source software construction course

cs100 - open source software construction

This is a course on how to be a hacker. Being a hacker means a lot of things. It means:

  1. wanting to know how and why computers work

  2. being efficient / never repeating yourself

  3. using and contributing to open source software

  4. understanding the edge cases of your software

  5. using tools in creative and unexpected ways

  6. (occasionally) we combine all these together and break stuff

Hacking is a mindset. I can't force it on you---it's up to you to embrace it. For example, we'll be discussing many new tools in this course: a version control system called git, an editor called vim, debugging tools called gdb, valgrind, and cppcheck, and we'll be going into quite a bit more depth on how to use the bash shell and the Linux operating system. All of these tools are very weird. Using them will make you uncomfortable. At first. But these tools are powerful. Mastering these tools will make you a much more efficient programmer. Once you've mastered them, you'll never go back.

There are two main projects you will work on in this course:

  1. Your first four homework assignments walk you through the process of building your own unix shell. This is the biggest project you've undertaken so far. You'll be developing it as an open source project, and you will collaborate with each other at various points.

  2. Your last homework assignment is to contribute to the open source community by improving the documentation on a project of your choice. Many of the required readings for this course were written by former cs100 students. If you do a good job on this project, future cs100 students will be learning from you for years to come!

By the end of the course, you should be comfortable running your own open source projects and contributing to other people's projects.

instructors

position name office hours (WCH 110)
lecturer
teaching assistant

IMPORTANT: If you want to contact the instructors about the course, you should report an issue via github. We will talk about how to do this in class. This is a system similar to the piazza system you may already be familiar with, but it is more popular for open source software development.

course schedules

Our lectures will roughly follow this schedule. You should do the required readings before class. I will occasionally have unscheduled quizzes to ensure you are doing the reading.

week date reading topics
1 Daniel Lemire's how to learn efficiently (recommended; not required) introduction; using vim
1 ESR's all about unix version control with git
1 ESR's about common software licenses; the New Yorker's 30 year retrospective on the GNU manifesto version control with git
2 Paul Graham's what to do in college version control with git
2 Ian Malpass's advice to future software engineers; Linus Tolvalds gets interviewed on why he developed git version control with git
2 Lucas Xu's Makefile tutorial; Alexander Ortiz's how to write a README file; ESR's thoughts on unix documentation part I and part II syscalls: managing processes (fork,wait,exec,perror); quiz
3 the relevant sections of the syscalls tutorial syscalls: managing processes (fork,wait,exec,perror)
3 bitwise operators; macros syscalls: managing files (open,close,read,write)
3 the relevant sections of the syscalls tutorial syscalls: managing files (open,close,read,write)
4 William Coates' valgrind tutorial; debugging tools (gdb,valgrind,cppcheck)
4 Jeff Atwood's how to become a better programmer debugging tools (gdb,valgrind,cppcheck)
4 the relevant sections of the syscalls tutorial syscalls: managing directories (readdir,stat);quiz
5 Ycombinator's startup ideas we'd like to fund and Paul Graham's start up funding shell scripting: io redirection/piping
5 Patrick McKenzie on salary negotiation for programmers (it's long; you don't have to read it all) shell scripting: io redirection/piping
5 Shubhro Saha's why engineers should write; the economist's good writing style writing good documentation
6 syscalls: io redirection/piping (pipe,dup)
6 the relevant sections of the syscalls tutorial syscalls: io redirection/piping (pipe,dup)
6 ESR's classic Master Foo series shell scripting: control flow with if and for; quiz
7 regular expressions shell scripting: environment variables (export,PATH,HOME,EDITOR)
7 shell scripting: environment variables (export,PATH,HOME,EDITOR)
7 syscalls: signal handling (signal,sigaction)
8 syscalls: signal handling (signal,sigaction)
8 the relevant sections of the syscalls tutorial shell scripting: environment variables (export,PATH,HOME,EDITOR)
8 syscalls: environment variables (getenv,setenv); quiz
9
9
9 ESR's thoughts on flaws with unix; Poul-Henning Kamp's a generation lost in the bazaar the flaws of Unix and open source
10 case study: hacking the email system and the ioccc.org
10 case study: stuxnet and heartbleed
10 final quiz

If there's something you want to learn not on the schedule, let me know! We have a lot of flexibility in this course to learn fun things.

The assignments are due on the following days:

assignment due date
hw0
hw1
hw4 - topic
hw2
hw4 - draft
hw3
hw4 - final

You will receive -10 pts for each hour (rounded up) that your assignment is late.

grades

We will not be using ilearn in this course. Instead, we will be using a course management system called gitlearn. This software was developed in part by previous cs100 students, and you will be able to earn considerable extra credit by contributing to it. We will be using this system as a case study in bash programming and the unix philosophy. For details, see the gitlearn repo.

cheating policy

Every assignment specifies different collaboration policies. Some assignments will be individual, and some will be in a group. Follow the specified policy exactly!

I take cheating seriously. When I catch students cheating, I give them an F in the class. Then I forward your case to the academic integrity board and recommend that you be expelled from UCR.

All of your code will be run through an automated cheating detector. It is very good. It understands C++ better than you do and can find instances of cheating much more sophisticated than just copy and pasting.

More Repositories

1

HLearn

Homomorphic machine learning
Haskell
1,607
star
2

subhask

Type safe interface for working in subcategories of Hask
Haskell
413
star
3

HerbiePlugin

GHC plugin that improves Haskell code's numerical stability
Haskell
191
star
4

ifcxt

constraint level if statements
Haskell
110
star
5

cmc-csci046

CMC's Data Structures and Algorithms Course Materials
TeX
52
star
6

typeparams

Lens-like interface for type level parameters; allows unboxed unboxed vectors and supercompilation
Haskell
41
star
7

cmc-csci143

big data course materials
TeX
40
star
8

cmc-csci040

Computing for the Web
HTML
37
star
9

hmm

hidden markov models in haskell
Haskell
34
star
10

cmc-csci145-math166

Data Mining
TeX
32
star
11

datasets

A collection of publicly available datasets
Scilab
26
star
12

simd

simple interface to ghc's simd vector support
Haskell
23
star
13

gitlearn

a course management system (similar to ilearn) based on git
Shell
22
star
14

parsed

a haskellified version of the classic sed unix tool
TeX
21
star
15

homoiconic

Constructs FAlgebras from typeclasses, making Haskell functions homoiconic
Haskell
18
star
16

deep-tda

TeX
17
star
17

typespeed

fork of the popular typespeed program designed for the UCR cs100 curriculum
C
16
star
18

cmc-csci181-deeplearning

deep learning course materials
Python
15
star
19

vector-heterogenous

Arbitrary size tuples in Haskell
Haskell
12
star
20

american-shit

primary and secondary sources documenting America's misdeads
11
star
21

geolocation

Image/text geolocation with tensorflow and the MvMF
Python
9
star
22

modulus-magnus-linguae

Python
8
star
23

ConstraintKinds

Implements common Haskell type classes using the constraint kinds pattern to allow constraints.
Haskell
7
star
24

vector-functorlazy

vectors supporting lazy fmap application; asymptotically faster in some cases
Haskell
7
star
25

metahtml

Python
5
star
26

chajda

Python
5
star
27

wiktionary_bli

TeX
4
star
28

cmc-csci181-languages

HTML
3
star
29

twitter_coronavirus

Python
2
star
30

rapache

a simple webserver built with bash commands
Shell
2
star
31

pagila-hw3

Shell
1
star
32

lab-timeit2

Python
1
star
33

lambda-server

Shell
1
star
34

pagila-hw2

Shell
1
star
35

binary_search

Python
1
star
36

korean

1
star
37

wardial

Python
1
star
38

lab-goodreads

1
star
39

multiskipgram

Python
1
star
40

mediabiasfactcheck

Python
1
star
41

reddit

Python
1
star
42

fake-news

Python
1
star
43

novichenko

Python
1
star
44

twitter_postgres2

Python
1
star
45

word_ladder

Python
1
star
46

2023spring-FinTechPracticum

1
star
47

pgrollup

easy creation of rollup tables in postgresql (compute count(*) queries in constant time)
PLpgSQL
1
star
48

NovichenkoBot

Python
1
star
49

2021fintech

Jupyter Notebook
1
star
50

sorting

Python
1
star
51

2020summer

TeX
1
star
52

cv

my curriculum vitae
TeX
1
star
53

search_engine

Python
1
star
54

Classification

Haskell
1
star
55

histogram

A Haskell package for easily creating histograms
Haskell
1
star
56

dominion

Haskell
1
star
57

haskell-lecture

Outline of material for an intro to haskell course
1
star
58

pagila-midterm

PLpgSQL
1
star
59

cmc-advising

1
star
60

containers

Python
1
star
61

glowing-wookie

Haskell
1
star
62

twitter_postgres

Python
1
star
63

2021summer

1
star
64

hperfstat

haskell bindings to linux's cpu hw counters (i.e. results of `perf stat`)
1
star