0% found this document useful (0 votes)
121 views

COS 217: Introduction To Programming Systems!: Jennifer Rexford!

This document provides an overview of COS 217: Introduction to Programming Systems taught by Jennifer Rexford. The goals of the course are to help students learn how to write large computer programs and understand what happens "under the hood" of computer systems. The course will use the C programming language rather than Java to better support these goals. Resources provided include lectures, precepts, a course website, discussion forum, and recommended books. Grading will be based on programming assignments, exams, and class participation. An introduction to the C programming language is also provided.

Uploaded by

mapf55
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
121 views

COS 217: Introduction To Programming Systems!: Jennifer Rexford!

This document provides an overview of COS 217: Introduction to Programming Systems taught by Jennifer Rexford. The goals of the course are to help students learn how to write large computer programs and understand what happens "under the hood" of computer systems. The course will use the C programming language rather than Java to better support these goals. Resources provided include lectures, precepts, a course website, discussion forum, and recommended books. Grading will be based on programming assignments, exams, and class participation. An introduction to the C programming language is also provided.

Uploaded by

mapf55
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 38

COS 217: Introduction to Programming Systems !

Jennifer Rexford !

Goals for Today"s Class!


" Course overview!
" Introductions! " Course goals! " Resources! " Grading! " Policies!

" Getting started with C!


" C programming language overview!
2

Introductions!
" Lectures!
" Jennifer Rexford (Professor)! " [email protected] !

" Preceptors!
" Christopher Moretti (Lead Preceptor)! " [email protected]! " Sibren Isaacman! " [email protected]!

Course Goal 1: Programming in the Large! " Help you learn how to write large # computer programs! " Specically:!
" Write modular code! " Write portable code! " Test and debug your code! " Improve your code$s performance (and when to do so)! " Use tools to support those activities!

Course Goal 2: Under the Hood!


" Help you learn what happens # under the hood of computer systems! " Two downward tours!
C Language! Application Program!

Assembly Language!

language! levels! tour!

Operating System!

service! levels! tour!

Machine Language!

Hardware!

" Goal 2 supports Goal 1!


" Reveals many examples of effective abstractions!
5

Course Goals: Why C Instead of Java?!


" A: C supports Goal 1 better!
" C is a lower-level language! " C provides more opportunities to create abstractions! " C has some aws! " C$s aws motivate discussions of software engineering principles!

" A: C supports Goal 2 better!


" C facilitates language levels tour! " C is closely related to assembly language! " C facilitates service levels tour! " Linux is written in C!
6

Course Goals: Why Linux?!


" A: Linux is good for education and research!
" Linux is open-source and well-specied!

" A: Linux is good for programming!


" Linux is a variant of Unix! " Unix has GNU, a rich open-source programming environment!

Course Goals: Summary!


" Help you to become a...!

Power Programmer!!!!
8

Resources: Lectures and Precepts!


" Lectures!
" Describe concepts at a high level! " Slides available online at course Web site!

" Precepts!
" Support lectures by describing concepts at a lower level! " Support your work on assignments!

" Note: Precepts begin on Monday (i.e., today)!


" P01: MW 1:30-2:20pm, in CS 102! " P02: TTh 1:30-2:20pm, in CS 102! " P03: TTh 7:30-8:20pm, in CS 102!
9

Resources: Website and Piazzza!


" Website!
" Access from http://www.cs.princeton.edu! " Academics Course Schedule COS 217!

" Discussion forum!


" Piazzza: http://www.piazzza.com! " Join or create your class now! " School: Princeton University! " Class: COS 217! " Fill in your Princeton e-mail address! " Click get started link in your email to activate! " Please use your real name when signing up!
10

Resources: Books!
" Required book!
" C Programming: A Modern Approach (Second Edition), King, 2008.! " Covers the C programming language and standard libraries!

" Highly recommended books!


" The Practice of Programming, Kernighan and Pike, 1999. ! " Covers programming in the large (required for COS 333)! " Computer Systems: A Programmer's Perspective (Second Edition), Bryant and O'Hallaron, 2010.! " Covers under the hood, key sections are on e-reserve! " First edition is sufcient! " Programming with GNU Software, Loukides and Oram, 1997.! " Covers tools!

" All books are on reserve in Engineering Library!


11

Resources: Manuals!
" Manuals (for reference only, available online)!
" IA32 Intel Architecture Software Developer's Manual, Volumes 1-3! " Tool Interface Standard & Executable and Linking Format! " Using as, the GNU Assembler !

" See also!


" Linux man command! " man is short for manual! " For more help, type man man!

12

Resources: Programming Environment!


" Option 1!
hats.princeton.edu! Friend Center 016! or 017 Computer!
SSH!

Linux! GNU! Your! Pgm!


fez! fedora!

Lab TAs!

13

Resources: Programming Environment!


" Option 2!
hats.princeton.edu! Your PC/Mac/Linux! Computer! Linux! GNU! Your! Pgm!
fez! fedora!
14

SSH!

Resources: Programming Environment!


" Other options!
" Use your own PC/Mac/Linux computer; run GNU tools locally; run your programs locally! " Use your own PC/Mac/Linux computer; run a non-GNU development environment locally; run programs locally!

" Notes!
" Other options cannot be used for some assignments (esp. timing studies)! " Instructors cannot promise support of other options! " Strong recommendation: Use Option 1 or 2 for all assignments! " First precept provides setup instructions!
15

Grading!
" Seven programming assignments (50%)!
" Working code! " Clean, readable, maintainable code! " On time (penalties for late submission)! " Final assignment counts double (12.5%)!

" Exams (40%)!


" Midterm (15%)! " Final (25%)!

" Class participation (10%)!


" Lecture and precept attendance is mandatory!

16

Programming Assignments!
" Programming assignments!
1." 2." 3." 4." 5." 6." 7." A de-comment program! A string module! A symbol table module ! IA-32 assembly language programs! A buffer overrun attack! A heap manager module! A Unix shell !

" See course Schedule web page for due dates/times! " Advice: Start early to allow time for debugging (especially in the background while you are doing other things!)!

17

Why Debugging is Necessary!

18

Policies! Study the course Policies web page!!!!


" Especially the assignment collaboration policies!
" Violation involves trial by Committee on Discipline! " Typical penalty is suspension from University for 1 academic year!

" Some highlights:!


" Don$t view anyone else$s work during, before, or after the assignment time period! " Don$t allow anyone to view your work during, before, or after the assignment time period! " In your assignment readme le, acknowledge all resources used!

" Ask your preceptor for clarications if necessary!


19

Course Schedule!
" Very generally!
Weeks! 1-2! 3-6! 6! 7! 8-13! Under the Hood! Lectures! Intro to C (conceptual)! Pgmming in the Large! Precepts! Intro to Linux/GNU# Intro to C (mechanical)! Advanced C!

Midterm Exam ! Recess ! Assembly Language# Pgmming Assignments! Reading Period ! Final Exam !

" See course Schedule web page for details!


20

Any questions before we start? !

21

C vs. Java: History!


Not yet popular;! our compiler ! supports only! partially!
1978! K&R C! 1989! ANSI C89! ISO C90! C++! Java! 1999! ISO/ANSI C99!

We will use!
1960! BCPL! 1970! B! 1972! C!

LISP!

Smalltalk!

22

C vs. Java: Design Goals!


" Java design goals!
" Support object-oriented programming! " Allow same program runs on multiple operating systems ! " Support using computer networks ! " Execute code from remote sources securely! " Adopt the good parts of other languages!

" Implications for Java!


" Good for application-level programming! " High-level (insulates from assembly language, hardware)! " Portability over efciency! " Security over efciency! " Security over exibility!
23

C vs. Java: Design Goals!


" C design goals!
" Support structured programming! " Support development of the Unix OS and Unix tools! " As Unix became popular, so did C!

" Implications for C!


" Good for system-level programming! " Low-level! " Efciency over portability! " Efciency over security! " Flexibility over security!

24

C vs. Java: Design Goals!


" Differences in design goals explain many differences between the languages! " C$s design goal explains many of its eccentricities!
" We$ll see examples throughout the course!

25

C vs. Java: Overview!

" Dennis Ritchie on the nature of C:!


" C has always been a language that never attempts to tie a programmer down.! " C has always appealed to systems programmers who like the terse, concise manner in which powerful expressions can be coded. ! " C allowed programmers to (while sacricing portability) have direct access to many machine-level features that would otherwise require the use of assembly language.! " C is quirky, awed, and an enormous success. While accidents of history surely helped, it evidently satised a need for a system implementation language efcient enough to displace assembly language, yet sufciently abstract and uent to describe algorithms and interactions in a wide variety of environments.!
26

C vs. Java: Overview (cont.)!


" Bad things you can do in C that you can"t do in Java!
" Shoot yourself in the foot (safety)! " Shoot others in the foot (security)! " Ignore wounds (error handling)!

" Dangerous things you must do in C that you don"t in Java!


" Explicitly manage memory via malloc() and free()

" Good things you can do in C, but (more or less) must do in Java!
" Program using the object-oriented style!

" Good things you can"t do in C but can do in Java!


" Write completely portable code!
27

C vs. Java: Details!


" Remaining slides provide some details!
" Suggestion: Use for future reference!

" Slides covered briey now, as time allows!

28

C vs. Java: Details (cont.)!


Java !
Hello.java: hello.c: #include <stdio.h> int main(void) { printf("Hello, world\n"); return 0; } % gcc217 hello.c % ls a.out hello.c % % a.out Hello, world % public class Hello { public static void main(String[] args) { System.out.println( "Hello, world"); } } % javac Hello.java % ls Hello.class Hello.java % % java Hello Hello, world %

C !

Overall# Program# Structure!

Building!

Running!

29

C vs. Java: Details (cont.)!


Java !
Character type! char Integral types! byte short int long float double boolean // no equivalent final int MAX = 1000; // 16-bit unicode // // // // 8 bits 16 bits 32 bits 64 bits (unsigned) (unsigned) (unsigned) (unsigned) float double long double /* no equivalent */ /* use integral type */ void* #define MAX 1000 const int MAX = 1000; enum {MAX = 1000};
30

C !
char /* 8 bits */ char short int long

Floating point types! Logical type! Generic pointer type! Constants!

// 32 bits // 64 bits

C vs. Java: Details (cont.)!


Java !
Arrays! Array bound checking! Pointer type! int [] a = new int [10]; float [][] b = new float [5][20]; // run-time check // Object reference is an // implicit pointer class Mine { int x; float y; }

C !
int a[10]; float b[5][20]; /* no run-time check */ int *p; struct Mine { int x; float y; }

Record type!

31

C vs. Java: Details (cont.)!


Java !
Strings! String s1 = "Hello"; String s2 = new String("hello");

C !
char *s1 = "Hello"; char s2[6]; strcpy(s2, "hello"); #include <string.h> strcat(s1, s2); &&, ||, ! =, !=, >, <, >=, <= +, -, *, /, %, unary >>, <<, &, |, ^ =, *=, /=, +=, -=, <<=, >>=, =, ^=, |=, %=

String s1 + s2 concatenation! s1 += s2 Logical ops! Arithmetic ops! Bitwise ops! Assignment ops! &&, ||, ! Relational ops! =, !=, >, <, >=, <= +, -, *, /, %, unary >>, <<, >>>, &, |, ^ =, *=, /=, +=, -=, <<=, >>=, >>>=, =, ^=, |=, %=

32

C vs. Java: Details (cont.)!


Java !
if stmt! if (i < 0) statement1; else statement2; switch (i) { case 1: ... break; case 2: ... break; default: ... } // no equivalent

C !
if (i < 0) statement1; else statement2; switch (i) { case 1: ... break; case 2: ... break; default: ... } goto SomeLabel;
33

switch stmt!

goto stmt!

C vs. Java: Details (cont.)!


Java !
for stmt! for (int i=0; i<10; i++) statement; while (i < 0) statement; do { do-while stmt! statement; } while (i < 0) continue; continue SomeLabel; break; break SomeLabel;

C !
int i; for (i=0; i<10; i++) statement; while (i < 0) statement; do { statement; } while (i < 0); continue; /* no equivalent */ break; /* no equivalent */
34

while stmt!

continue stmt! labeled continue stmt! break stmt! labeled break stmt!

C vs. Java: Details (cont.)!


Java !
return stmt! return 5; return; { Compound stmt (alias block)! } Exceptions! Comments! Method / function call! statement1; statement2; } return 5; return; { statement1; statement2;

C !

throw, try-catch-finally /* no equivalent */ /* comment */ // another kind f(x, y, z); someObject.f(x, y, z); SomeClass.f(x, y, z); /* comment */

f(x, y, z);

35

Example C Program!
#include <stdio.h> #include <stdlib.h> const double KMETERS_PER_MILE = 1.609; int main(void) { int miles; double kmeters; printf("miles: "); if (scanf("%d", &miles) != 1) { fprintf(stderr, "Error: Expect a number.\n"); exit(EXIT_FAILURE); } kmeters = miles * KMETERS_PER_MILE; printf("%d miles is %f kilometers.\n", miles, kmeters); return 0; }
36

Conclusions!
" Getting started with C!
" C was designed for system programming! " Different design goals from of Java! " Explains many of C$s eccentricities! " Knowing Java gives you a head start at learning C! " C is not object-oriented, but many aspects are similar!

" Getting started in the course!


" Check out course Web site soon! " Study Policies page! " First assignment! " Establish a reasonable computing environment soon! " Instructions given in rst precept!
37

Getting Started!
" Check out course Web site soon!
" Study Policies page! " First assignment is available!

" Establish a reasonable computing environment soon!


" Instructions given in rst precept!

38

You might also like