Introduction to Nate Foster Spring 2018

Similar documents
Introduction to Prof. Clarkson Fall Today s music: Prelude from Final Fantasy VII by Nobuo Uematsu (remastered by Sean Schafianski)

Introduction to Prof. Clarkson Fall Today s music: Prelude from Final Fantasy VII by Nobuo Uematsu (remastered by Sean Schafianski)

Introduction to Prof. Clarkson Fall Today s music: Prelude from Final Fantasy VII by Nobuo Uematsu (remastered by Sean Schafianski)

Introduction to Prof. Clarkson Fall Today s music: Prelude from Final Fantasy VII by Nobuo Uematsu (remastered by Sean Schafianski)

CMSC 330: Organization of Programming Languages. Functional Programming with OCaml

CS 3110 Lecture 1 Course Overview

Introduction to OCaml

Victory Lap. Prof. Clarkson Fall Today s music: We are the Champions by Queen

Functions. Nate Foster Spring 2018

Lists. Prof. Clarkson Fall Today s music: "Blank Space" by Taylor Swift

CS457/557 Functional Languages

CS Introduction to Security. Prof. Clarkson Spring 2017

COSE212: Programming Languages. Lecture 0 Course Overview

Programming Languages and Techniques (CIS120)

CS/ENGRD 2110 Object-Oriented Programming and Data Structures Spring 2012 Thorsten Joachims

15-411/ Compiler Design

Welcome to. Instructor Marc Pomplun CS 470/670. Introduction to Artificial Intelligence 1/26/2016. Spring Selectivity in Complex Scenes

Welcome to CS 135 (Winter 2018)

Lecture 1: Overview

Functional Programming

Announcements. 1. Forms to return today after class:

Welcome to CS 135 (Fall 2018) Themes of the course. Lectures. cs135/

CS 11 Haskell track: lecture 1

TA hours and labs start today. First lab is out and due next Wednesday, 1/31. Getting started lab is also out

CS558 Programming Languages

WELCOME TO CS 16! Enrollment status: 117/ Problem Solving with Computers-I


Course Overview, Python Basics

Lecture 1. Course Overview, Python Basics

Hi! My name is Sorin. Programming Languages. Why study PL? (discussion) Why study PL? Course Goals. CSE : Fall 2017

Programming Languages

Compiler Design Spring 2018

Lecture 1. Course Overview, Python Basics

Introduction, Functions

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

Organization of Programming Languages (CSE452) Why are there so many programming languages? What makes a language successful?

What Is Computer Science? The Scientific Study of Computation. Expressing or Describing

CS Lecture 5: Pattern Matching. Prof. Clarkson Fall Today s music: Puff, the Magic Dragon by Peter, Paul & Mary

CS 6371: Advanced Programming Languages

CSC 172 Data Structures and Algorithms. Fall 2017 TuTh 3:25 pm 4:40 pm Aug 30- Dec 22 Hoyt Auditorium

Lecture 5 Abstract Data Types

(0) introduction to the course. how to learn a programming language. (0) course structure

COS 326 Functional programming: an elegant weapon for the modern age

CS 241 Data Organization using C

Mutable Data Types. Prof. Clarkson Fall A New Despair Mutability Strikes Back Return of Imperative Programming

61A LECTURE 1 FUNCTIONS, VALUES. Steven Tang and Eric Tzeng June 24, 2013

COMP-202 Unit 0: Course Details

! Broaden your language horizons! Different programming languages! Different language features and tradeoffs. ! Study how languages are implemented

To figure this out we need a more precise understanding of how ML works


Introduction to Computer Systems

BOSTON UNIVERSITY Metropolitan College MET CS342 Data Structures with Java Dr. V.Shtern (Fall 2011) Course Syllabus

Haskell in the Software Industry

Lecture 1. Course Overview Types & Expressions

CS558 Programming Languages


Introduction to Computer Systems

Languages and Compilers

CIS192: Python Programming

Welcome to Computer Organization and Design Logic

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

Introduction to the course and basic programming concepts

Programming Languages

CSC 326H1F, Fall Programming Languages. What languages do you know? Instructor: Ali Juma. A survey of counted loops: FORTRAN

CS270 Computer Organization Fall 2017

Outline. CIS 110: Introduction to Computer Programming. What is Computer Science? What is computer programming? What is computer science?

Lecture 1: Introduction, Types & Expressions

CS 240 Fall 2015 Section 004. Alvin Chao, Professor

CS 140 Programming with Objects

WELCOME TO CSE 100! Advanced Data Structures in C++

CS240: Programming in C

CS 241 Data Organization. August 21, 2018

CS21: INTRODUCTION TO COMPUTER SCIENCE. Prof. Mathieson Fall 2017 Swarthmore College

Spring 2018 El Camino College E. Ambrosio. Course Syllabus

Functional Languages. CSE 307 Principles of Programming Languages Stony Brook University

CS Lecture 6: Map and Fold. Prof. Clarkson Fall Today s music: Selections from the soundtrack to 2001: A Space Odyssey

Introduction to Computing using C++ Biomedical applications WELCOME TO CIS 1.5. Introduction to the course. Course structure

Marketing Whitepaper: 8 Steps To Increasing Your Sales With Marketing

Programming Languages and Techniques (CIS120)

ECE Object-Oriented Programming using C++ and Java

Database Concepts. CS 377: Database Systems

Hash Tables. Nate Foster Spring 2018

Hi! My name is Sorin. Programming Languages. Why study PL? (discussion) Why study PL? Course Goals. CSE 130 : Fall 2014

CS 553: Algorithmic Language Compilers (PLDI) Graduate Students and Super Undergraduates... Logistics. Plan for Today

(1) It is your responsibility to drop the class; failure to drop the class in a timely manner could result in a W or F on your record.

Chapter 4C Homework Functions III Individual Assignment 30 Points Questions 6 Points Script 24 Points

WELCOME TO CS 24! Enrollment status: 105/105, Read the syllabus. Know what s required. Know how to get help. Problem Solving with Computers-II

Hi! My name is Sorin. Programming Languages. Why study PL? (discussion) Why study PL? Course Goals. CSE 130 : Fall 2013

Programming Languages and Techniques (CIS120)

Closures. Mooly Sagiv. Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming

Computer Science 210: Data Structures

Welcome to CS 241 Systems Programming at Illinois

CSE 332: Data Abstractions. Ruth Anderson Spring 2014 Lecture 1

Stop coding Pascal. Saturday, April 6, 13

CS 4349 Lecture August 21st, 2017

WELCOME TO CS 16! Problem Solving with Computers-I

Note: This is a miniassignment and the grading is automated. If you do not submit it correctly, you will receive at most half credit.

} Evaluate the following expressions: 1. int x = 5 / 2 + 2; 2. int x = / 2; 3. int x = 5 / ; 4. double x = 5 / 2.

CSC 261/461 Database Systems. Fall 2017 MW 12:30 pm 1:45 pm CSB 601

To figure this out we need a more precise understanding of how ML works

Transcription:

Introduction to 3110 Nate Foster Spring 2018

Welcome! Programming isn t hard Programming well is very hard High variance among professionals productivity: 10x or more Studying functional programming will make you a better programmer, but it requires an open mind

What is a functional language? A functional language: defines computations as mathematical functions avoids mutable state State: the information maintained by a computation Mutable: can be changed (antonym: immutable)

Functional vs. imperative Functional languages: Higher level of abstraction Easier to develop robust software Immutable state: easier to reason about software Imperative languages: Lower level of abstraction Harder to develop robust software Mutable state: harder to reason about software You don t have to believe me now. If you master a functional language, you will. J

Imperative programming Commands specify how to compute by destructively changing state: x = x+1; a[i] = 42; p.next = p.next.next; Functions/methods have side effects: int wheels(vehicle v) { v.size++; return v.numwheels; }

Mutability The fantasy of mutability: It's easy to reason about! The machine does this, then that... The reality of mutability: Machines are good at complicated manipulation of state Humans are not good at understanding it! Mutability breaks referential transparency: ability to replace an expression with its value without affecting the rest of the computation mutability is not well-suited to writing correct code!

Functional programming Expressions specify what to compute Variables never change value Functions never have side effects The reality of immutability: No need to think about state Powerful ways to build correct programs

Why study functional programming? 1. Functional languages teach you that programming transcends programming in a language (assuming you you have only programmed in imperative languages) 2. Functional languages predict the future 3. (Functional languages are sometimes used in industry) 4. Functional languages are elegant

Why study functional programming? 1. Functional languages teach you that programming transcends programming in a language (assuming you you have only programmed in imperative languages) 2. Functional languages predict the future 3. (Functional languages are sometimes used in industry) 4. Functional languages are elegant

Analogy: studying a foreign language Learn about another culture; incorporate aspects into your own life Shed preconceptions and prejudices about others Understand your native language better

Alan J. Perlis A language that doesn't affect the way you think about programming is not worth knowing. 1922-1990 First recipient of the Turing Award for his influence in the area of advanced programming techniques and compiler construction 11

Why study functional programming? 1. Functional languages teach you that programming transcends programming in a language (assuming you you have only programmed in imperative languages) 2. Functional languages predict the future 3. (Functional languages are sometimes used in industry) 4. Functional languages are elegant

Functional languages predict the future Garbage collection Java [1995], LISP [1958] Generics Java 5 [2004], ML [1990] Higher-order functions C#3.0 [2007], Java 8 [2014], LISP [1958] Type inference C++11 [2011], Java 7 [2011] and 8, ML [1990] What's next?

Why study functional programming? 1. Functional languages teach you that programming transcends programming in a language (assuming you you have only programmed in imperative languages) 2. Functional languages predict the future 3. (Functional languages are sometimes used in industry) 4. Functional languages are elegant

Functional languages in the real world Java 8 F#, C# 3.0, LINQ Scala Haskell Erlang OCaml https://ocaml.org/learn/companies.html...but Cornell CS (et al.) require functional programming for your education, not to get you a job

Albert Einstein "Education is what remains after one has forgotten everything one learned in school." 1879-1955

Why study functional programming? 1. Functional languages teach you that programming transcends programming in a language (assuming you you have only programmed in imperative languages) 2. Functional languages predict the future 3. (Functional languages are sometimes used in industry) 4. Functional languages are elegant

Elegant

Elegant Beautiful

Do aesthetics matter? YES! Who reads code? Machines Humans Elegant code is easier to read and maintain Elegant code might (not) be easier to write

OCaml A pretty good language for writing beautiful programs O = Objective, Caml=not important ML is a family of languages; originally the meta-language for a tool

OCaml is awesome because of Immutable programming Variable s values cannot destructively be changed; makes reasoning about program easier! Algebraic datatypes and pattern matching Makes definition and manipulation of complex data structures easy to express First-class functions Functions can be passed around like ordinary values Static type-checking Reduce number of run-time errors Automatic type inference No burden to write down types of every single variable Parametric polymorphism Enables construction of abstractions that work across many data types Garbage collection Automated memory management eliminates many run-time errors Modules Advanced system for structuring large systems

A GLIMPSE OF OCAML...

Languages are tools

Languages are tools There's no universally perfect tool There's no universally perfect language OCaml is good for this course because: good mix of functional & imperative features relatively easy to reason about meaning of programs But OCaml isn't perfect (see above) there will be features you miss from language X there will be annoyances based on your expectations keep an open mind, try to have fun

LOGISTICS

Course website http://cs3110.org Full syllabus (required reading) Lecture slides & notes Sometimes posted night before, but if not, it s because I m still tweaking them Supplement, do not replace, attendance Labs: practical problems for you to study and talk about in recitations

Course staff Instructor: Nate Foster PhD 2009 UPenn Research: programming languages & networking Call me Nate in this course, or Dr. Foster if you re not into the whole brevity thing. TAs and consultants: 35 at last count Grad TAs: Alan Cheng, Dietrich Geisler, Harrison Goldstein, Richa Despanda Head Consultant: Irene Yoon

Course meetings Lectures: TR 10:10-11:00 am Attendance is semi-mandatory, measured by i>clicker Go buy an i>clicker and bring it on Tuesday Laptop use only in designated area Recitations: mostly MW Attendance is semi-mandatory, measured by TAs TR sections are effectively MW delayed one day You need to attend your registered section Laptops encouraged for working problems Office hours: coverage nearly every day

Piazza Last fall: 2700+ posts

http://discourse.cs3110.org

Discourse Requests from me to you: Take questions of broad interest to Discourse or to office hours Take questions of interest only to you to office hours Treat Discourse as virtual study group, not instructor hotline Answer one another s questions: bonus! Be brave: eschew anonymity Read webpage on asking technical questions

Email To contact me, send email to cs3110-profs-l@cornell.edu If it s something we can handle in person after the next lecture, I probably won t reply Assume replies may take up to a day

Academic integrity You are bound by the Cornell Code of Academic Integrity, the CS Department Code of Academic Integrity, and the CS 1110 Explanation of Academic Integrity All linked from course website You are responsible for understanding them I use MOSS to detect plagiarism; it works If you have a question about what is or is not allowed, please ask If you fear you have committed a violation, tell me before grading commences

Your TODO list for tonight 1. read material on website linked for today: syllabus, tips for success, asking technical questions 2. buy an i>clicker 3. login to CMS 4. login to Piazza 5. install software: instructions linked on website 6. try doing the lab linked for today; bring any questions you have to recitation tomorrow

Upcoming events [Monday pm] Drop by my office in the afternoon if you need something immediately [today] Office hours start; check calendar on course website for times; consulting hours always in Rhodes 405 [Monday] Recitations begin (none today); bring laptop [Tuesday am] bring i>clicker why are you still here? Get to work! J