Spring 2022
TR 4:10pm-5:25pm, 417 International Affairs Building (first two weeks on Zoom)
- CourseWorks open to whole Columbia first few weeks – search on Vergil
Three synchronous and in-person exams for all sections
- Thursday, Feb 24, 4:10pm: Midterm exam #1
- Thursday, Apr 14, 4:10pm: Midterm exam #2
- Tuesday, May 10, 4:20pm: Final exam
(Exams can be switched to online format if necessary.)
All students in all sections MUST take the exams at those times.There are no make-up or alternate exams.If you cannot make any of those exams, please take the course next semester.
Instructor: Jae Woo Lee
Office hours:
Course essentials
All of the above and many more resources can be found on the3157 Resources site.
Syllabus
Unit 1: C programming basics
- UNIX CLI basics
- Compiling & linking
- Makefile
- Git
- Binary number
- Data types
- Expressions & statements
- Storage class
- Process address space
Unit 2: Pointers and arrays
- Pointers
- Arrays
- Pointers vs. arrays
Unit 3: Function pointers and structs
- Function pointers
- Struct
- Linked list
Unit 4: File I/O
- Standard I/O
- Redirection
- File I/O
Unit 5: UNIX processes, shell, TCP/IP
- UNIX overview
- Creating processes using fork & exec
- Introduction to TCP/IP networking
Unit 6: Sockets API and HTTP
- Endianness
- Sockets API
- HTTP 1.0
Unit 7: Web-based software architecture
- HTTP 1.0 vs. HTTP 1.1
- 3-tier architecture
Past Lectures
- Course overview and logistics
- Slides: OVERVIEW AND LOGISTICS
- Compiling & linking
- Lecture note 01
main.c
, myadd.c
, myadd.h
- Compiling & linking, a two-step process
- Function declarations
- #include <stdio.h> - how this is NOT including library code
- Independent compilation of .o files
- Compiling & linking (continued)
main.c
, myadd.c
, myadd.h
- Using header file to prevent linking problem
- Makefile - 01
- Integer data types - 02
- Binary numbers - 02
Note that 01 and 02 refer to Lecture note 01and Lecture note 02.
- Binary numbers (continued)
- 0x7FFFFFFF, 0x80000000, 0xFFFFFFFF
- Integer literals
- Differences between
0
, '\0'
, and '0'
- Expressions & statements - 02
- Assignment as expression
++x
and x++
- Comparison and loginal operators
- Bitwise operators
- Picking out (i+1)th right-most bit
- Lab workflow and submission process
- Expressions & statements (continued)
- Bitwise operators
Review
Picking out (i+1)th right-most bit- Turning on (i+1)th right-most bit
- Turning off (i+1)th right-most bit
- loops
- Storage class - 02
- Macros & Include guards - 01
- Process address space - 02
- How local variables are allocated on the stack
- Pointer types - 04
- Pointer types (continued)
- NULL pointer - 04
- Array basics - 05
sizeof
operator - 05- Grand Unified Theory (GUT) of arrays and pointers - 05
- Heap memory allocation - 05
Review
Heap memory allocation- Char arrays
- Strings literals
strcpy()
, strncpy()
, strcat()
, strncat()
- Argv array
- How to approach lab 2 part 2
Review
Argv array & Lab 2 part 2Exam 1
logistics & coverageconst
keyword - 07- Function pointers - 07
- Sample code: lectnote07.c
- Complex declarations - 07
struct
- 07- linked list in C - 07
- Lab3 linked list
- two differences: (1)
void *data
(2) struct List
Exam 1
, covering:- Labs 1 and 2
- All lecture materials before
struct
- All
ANN
emails - Textbook sections on the topics covered in the lectures
- Lab3 linked list (continued)
- two differences: (1)
void *data
(2) struct List
- Standard I/O, redirection, pipelines - 09
- File I/O API in C - 09
- Buffering on standard I/O - 09
- Binary file I/O - 09
- Formatted I/O - 09
- Lab 4 overview & demo
- File permissions in UNIX - 11
- Expressing perms in octal number
- search permission in directories
- setuid permission in executables
- Numeric IDs in UNIX - 11
- User ID, Group ID, Process ID, Port number
- fork & exec
- How processes are created in UNIX
- How shell programs work
- Mid-semester TA Chat – No Class
- Sockets API: simple echo client & server example
- tcp-echo-client.c,tcp-echo-server.c
- Sockets API: file sender & receiver example
- tcp-sender.c,tcp-recver.c
Exam 2
- Coverage:
- Labs 1, 2, 3, 4, 5
- Lectures up to and including
4/7
- All
ANN
emails - Textbook sections on the topics covered in the lectures
Beyond C: Bash and Python
- Shell Scripting by Kent John Hall (TA)
- Compiled executable vs. shebang script vs. sourced script
- Shell language features
- Variables
- Comparators
- Control flow
- Functions
- Trap handlers
- Command substitution
- How Python Actually Works by Michael Jan (TA)
- What’s a beautiful, high-level language like PYTHON doing herein this low-level nitty-gritty systems programming course?Attend this lecture to find out…
- C knowledge required, Python knowledge not required
- Lab 7 demo
- HTTP 1.0 vs HTTP 1.1
- Dynamic web page
- 3-tier architecture
In Memory Of C
- free()ing the Mystery of malloc() by Hans Montero (TA)
- Invalid free revisted: what’s at the beginning of malloc’d chunks?
- Free chunk management algorithms, memory fragmentation
- GNU implementation of malloc() & free()
- Valgrind: Unlocking the Gates of Death by Ivy Basseches (TA)
- What is Valgrind?
- Dynamic Binary Instrumentation (DBI) frameworks
- Shadow value tools
- Behind the scenes: how does Valgrind execute a program?
- Tracking heap and stack (de)allocation with Valgrind
From C to C++
Course wrap-up
Upcoming Lectures & Exams
Exam 3
(aka Final Exam)- Coverage:
- Labs 1, 2, 3, 4, 5, 6, 7
- All lectures except guest lectures
- All
ANN
emails - Textbook sections on the topics covered in the lectures
Assignments & Exams
- HW0 Part A due Tue 1/18
- HW0 Part B due Thu 1/20
- Lab 1 due Sat 2/5
- Lab 2 due Sat 2/19
- Midterm exam #1: Thursday, Feb 24, 4:10pm
- Lab 3 due Sun 3/6
- Lab 4 due Thu 3/24
- Lab 5 due Mon 4/4
- Midterm exam #2: Thursday, Apr 14, 4:10pm
- Lab 6 due Sat 4/23
- Lab 7 due Tue 5/3
- Final exam: Tuesday, May 10, 4:20pm
FAQs
On average, it takes most learners between three and four months to learn programming. This range can extend to six months or even a full year for those who don't have a background working with advanced mathematics. Of course, this estimate depends on several factors.
How do I start advanced coding? ›
How to Start Coding
- Figure out why you want to learn to code.
- Choose which coding language you want to learn first.
- Take online courses.
- Watch video tutorials.
- Read books and ebooks.
- Use tools that make learning to code easier.
- Check out how other people code.
- Complete coding projects.
What is advanced software programming? ›
The Advanced Program in Software Development offers a mix of instruction in software development and software management skills, including software languages, technology management, systems analysis, databases and data analysis.
What is advanced web programming? ›
A course that takes the principles learned in Visual Basics and applies them to the environment of the web.
How many hours a day to learn coding? ›
As a realistic starting point, we typically recommend spending anywhere between five and 15 hours per week on coding if you're looking to make a career-change, fast — but remember, everyone is different. Curious how people like you make it work and find time to learn how to code?
Can I master programming in 3 months? ›
For most people, three months is enough time to pick up some basic coding skills and start working on simple projects. However, if you're learning to code, three months is unlikely to be enough time to become fluent. In general, experts say that you can become relatively comfortable with coding in about six months.
Can beginner coders make money? ›
Although the average salary for an entry-level programmer may be appealing, beginners must be realistic about their current market value. Websites like Upwork suggest a median rate of around $20 per hour for software development tasks, but entry-level rates may need to be lower to attract your first clients.
Can I learn coding on my own? ›
However, with the right mindset and dedication, almost anyone can learn to code. Before you start, you should have a plan and understand what's involved. You will need to set aside time to study and practice, so if your schedule is already packed, you may need to wait until you have enough free time.
What should a beginner coder start with? ›
Start with easy-to-use tools and programming languages like Python or JavaScript. Then, try making a simple project to get the hang of basic coding stuff like variables, loops, and functions. Going step by step and having clear goals will help you get better at coding.
What counts as advanced programming? ›
What advanced programming skills do you use in system development...
- Algorithms and Data Structures.
- Object-Oriented Programming.
- Functional Programming.
- Debugging and Testing.
- Version Control and Collaboration.
- Frameworks and Libraries.
- Here's what else to consider.
Programming for data analysis
search through large datasets and data types. find patterns and spot trends within data. build statistical models. create dashboards.
What is the first advanced programming language? ›
The first high-level programming language was Plankalkül, created by Konrad Zuse between 1942 and 1945. The first high-level language to have an associated compiler was created by Corrado Böhm in 1951, for his PhD thesis.
What is the difference between a web developer and a coder? ›
Programming involves creating applications using languages such as Python, Java, or C, while web development involves creating websites and web applications using HTML, CSS, and JavaScript. Both fields offer lucrative career opportunities and require keeping up with the latest trends and technologies.
What is the difference between coding and web programming? ›
If coding is like writing in a different language, programming is having a greater mastery of that language and understanding how to use it to communicate effectively. Programming “involves not only writing code but also planning, designing, testing, and maintaining complex software systems,” says Mclintic.
What is www programming? ›
Web programming is the process of creating web pages. During this process, the programmer is in charge of shaping the site according to the demands and needs of the company.
How long does it take to fully learn coding? ›
Associate degrees in computer science and similar fields usually require two years of study. If you go the self-taught route, you may spend between six and 12 months learning to code. If you are concerned about how hard it is to learn coding, you may want to choose a structured program over teaching yourself.
How many years does it take to get good at programming? ›
It may take six months to a year to become a skilled coder in your chosen languages. The hardest part is to get started and keep going, even when you face obstacles. Coding consistently on different projects will help you build problem-solving skills.
How long does it take to learn advanced C++? ›
Is C++ hard to learn?
Programming level | Time it'll take |
---|
Absolute beginner | At least 3 months |
Already a programmer | 1 - 3 months |
Building mastery in C++ | 2 years - forever |
Feb 8, 2021
How long does it take to become advanced in a language? ›
Group IV Languages:
Length of Training | Minimal Aptitude | Average Aptitude |
---|
16 weeks (480 hours) | Novice High | Intermediate Low |
24 weeks (720 hours) | Intermediate Low/Mid | Intermediate Mid/High |
44 weeks(1320 hours) | Intermediate High | Advanced Low |
80-92 weeks (2400-2760 hours) | Advanced High | Superior |