COMS W3157 Advanced Programming (2024)

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

1/18
  • Course overview and logistics
    • Slides: OVERVIEW AND LOGISTICS
1/20
1/25
  • 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
Study on your own
1/27
  • 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.

2/1
  • 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
2/3
  • 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
2/8
  • Macros & Include guards - 01
  • Process address space - 02
    • How local variables are allocated on the stack
  • Pointer types - 04
2/10
  • 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
2/15
  • Review Heap memory allocation
  • Char arrays
  • Strings literals
  • strcpy(), strncpy(), strcat(), strncat()
  • Argv array
  • How to approach lab 2 part 2
2/17
  • Review Argv array & Lab 2 part 2
  • Exam 1 logistics & coverage
  • const keyword - 07
  • Function pointers - 07
  • Sample code: lectnote07.c
2/22
  • Complex declarations - 07
    • lectnote07.c
  • struct - 07
    • struct.c
  • linked list in C - 07
    • list1.c, list2.c
  • Lab3 linked list
    • two differences: (1) void *data (2) struct List
2/24
  • Exam 1, covering:
    • Labs 1 and 2
    • All lecture materials before struct
    • All ANN emails
    • Textbook sections on the topics covered in the lectures
3/1
  • Lab3 linked list (continued)
    • two differences: (1) void *data (2) struct List
  • Standard I/O, redirection, pipelines - 09
    • Pipeline demo
3/3
  • File I/O API in C - 09
    • ncat.c
  • Buffering on standard I/O - 09
  • Binary file I/O - 09
    • fcrop.c
3/8
  • Formatted I/O - 09
    • lectnote09.c
  • Lab 4 overview & demo
  • File permissions in UNIX - 11
    • Expressing perms in octal number
    • search permission in directories
    • setuid permission in executables
3/10
  • Numeric IDs in UNIX - 11
    • User ID, Group ID, Process ID, Port number
  • fork & exec
    • How processes are created in UNIX
      • fork-example.c
    • How shell programs work
      • shell.c
3/15, 3/17
  • Spring Break – No Class
3/22
  • Mid-semester TA Chat – No Class
3/24
  • Big endian vs. little endian

    • endian-demo.c
  • Netcat utility - 12

    • Demo of chat session using netcat
  • Remote mdb-lookup using netcat - 12

3/29
  • Lab 5 overview

  • Review Remote mdb-lookup using netcat - 12

  • How the Internet works - 12

    • Five Internet protocol layers
      • L1: Physical layer
      • L2: Link layer
      • L3: Internet layer
3/31
  • Five Internet protocol layers (continued)

    • L4: Transport layer
    • L5: Application layer
  • UNIX I/O using file descriptors - 11

  • Sockets API - 14

4/5
  • Sockets API: simple echo client & server example
    • tcp-echo-client.c,tcp-echo-server.c
4/7
  • Sockets API: simple echo client & server example (continued)

    • tcp-echo-client.c,tcp-echo-server.c
  • HTTP 1.0 - 14

  • Lab 6 overview

4/12
  • Sockets API: file sender & receiver example
    • tcp-sender.c,tcp-recver.c
4/14
  • 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
4/19

Beyond C: Bash and Python

  1. 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
  2. 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
4/21
  • Lab 7 demo
    • HTTP 1.0 vs HTTP 1.1
    • Dynamic web page
    • 3-tier architecture
4/26

In Memory Of C

  1. 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()
  2. 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
4/28
  • From C to C++

    • a.cpp
  • Course wrap-up

Upcoming Lectures & Exams

5/10
  • 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
COMS W3157 Advanced Programming (2024)

FAQs

How long does it take to learn advanced programming? ›

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
  1. Figure out why you want to learn to code.
  2. Choose which coding language you want to learn first.
  3. Take online courses.
  4. Watch video tutorials.
  5. Read books and ebooks.
  6. Use tools that make learning to code easier.
  7. Check out how other people code.
  8. Complete coding projects.
Jul 9, 2024

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.
Sep 12, 2023

What do advanced programmers do? ›

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 levelTime it'll take
Absolute beginnerAt least 3 months
Already a programmer1 - 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 TrainingMinimal AptitudeAverage Aptitude
16 weeks (480 hours)Novice HighIntermediate Low
24 weeks (720 hours)Intermediate Low/MidIntermediate Mid/High
44 weeks(1320 hours)Intermediate HighAdvanced Low
80-92 weeks (2400-2760 hours)Advanced HighSuperior

Top Articles
Sunrise Dispensary Macon
Artistbaksa
Dive Bars With Pool Tables Near Me
Gma Deals And Steals December 5 2022
T800 Kenworth Fuse Box Diagram
Solo Player Level 2K23
What Is The Value Of 53I 9
Zenuwbeknelling in de voorvoet (Mortons neuroom)
iPad 10 vs. iPad Air Buyer's Guide: Is the $250 Difference Worth It?
Strange World Showtimes Near Harkins Metrocenter 12
‘Sound of Freedom’ Is Now Streaming: Here’s Where to Stream the Controversial Crime Thriller Online for Free
Thompson Center Thunderhawk Parts
Spectrum Store Downey Photos
Does Publix Have Sephora Gift Cards
Hessaire Mini Split Remote Control Manual
Rules - LOTTOBONUS - Florida Lottery Bonus Play Drawings & Promotions
Kitchen Exhaust Cleaning Companies Clearwater
Regal Cinema Ticket Prices
Ofw Pinoy Channel Su
Crete Il Forum
Six Oaks Rv Park Mooresburg Tn
Layla Rides Codey
co*cker Spaniel For Sale Craigslist
Diabetes Care - Horizon Blue Cross Blue Shield of New Jersey
Aleksandr: Name Meaning, Origin, History, And Popularity
Vioc Credit Card Charge
Craigslist Eugene Motorcycles
Christian Horner: Red Bull team principal to remain in role after investigation into alleged inappropriate behaviour
Greet In Cheshire Crossword Clue
How to Learn Brazilian Jiu‐Jitsu: 16 Tips for Beginners
Coil Cleaning Lititz
Best Upscale Restaurants In Denver
How To Get Stone Can In Merge Mansion 2022
History :: Town Of Saugerties
Waylon Jennings - Songs, Children & Death
Bad Moms 123Movies
The Menu Showtimes Near Regal Edwards Ontario Mountain Village
Sam's Club Hiring Near Me
Part Of The Body With The Humerus And Radius Nyt
Hooda Math—Games, Features, and Benefits — Mashup Math
421 West 202Nd Street
Rubrankings Austin
Shaws Myaci
Ms Trigger Happy Twitter
Mpbn Schedule
Morse Road Bmv Hours
Stpeach Telegram
Pizza Mia Belvidere Nj Menu
Tinfoil Unable To Start Software 2022
Deciphering The &quot;sydneylint Leaked&quot; Conundrum
Latest Posts
Article information

Author: Sen. Emmett Berge

Last Updated:

Views: 6062

Rating: 5 / 5 (80 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Sen. Emmett Berge

Birthday: 1993-06-17

Address: 787 Elvis Divide, Port Brice, OH 24507-6802

Phone: +9779049645255

Job: Senior Healthcare Specialist

Hobby: Cycling, Model building, Kitesurfing, Origami, Lapidary, Dance, Basketball

Introduction: My name is Sen. Emmett Berge, I am a funny, vast, charming, courageous, enthusiastic, jolly, famous person who loves writing and wants to share my knowledge and understanding with you.