CompSci 100e1.1 Welcome! Program Design and Analysis II for Engineers CompSci 100E French 2231 M, W 2:50-4:05 Professor Jeff Forbes
CompSci 100e1.2 Newsweek Most Important People Hamid Karzai and Stanley McChrystal 2. Steven Chu and Lisa Jackson 3. Vladimir Putin 4. Steve Jobs 5. David Cameron 6. Daphne Koller 7. Republican Governors 8. Brian Roberts 9. Catherine Ashton 10. Sue Naegle
CompSci 100e1.3 Computer Science in a Nutshell?
CompSci 100e1.4 Computer Science in a Nutshell?
CompSci 100e1.5 Computer Science in a Nutshell? l What is Computer Science? l What are some of the subfields of CS? l What does a Computer Scientist do? Lots of scientists and engineers l What does a programmer do?
CompSci 100e1.6 What is Computer Science? What is it that distinguishes it from the separate subjects with which it is related? What is the linking thread which gathers these disparate branches into a single discipline? My answer to these questions is simple --- it is the art of programming a computer. It is the art of designing efficient and elegant methods of getting a computer to solve problems, theoretical or practical, small or large, simple or complex. C.A.R. (Tony) Hoare
CompSci 100e1.7 Programming != Computer Science l What is the nature of intelligence? How can one predict the performance of a complex system? What is the nature of human cognition? Does the natural world 'compute'? l It is the interplay between such fundamental challenges and the human condition that makes computer science so interesting. The results from even the most esoteric computer science research programs often have widespread practical impact. Computer security depends upon the innovations in mathematics. Your Google search for a friend depends on state-of-the-art distributed computing systems, algorithms, and artificial intelligence.
CompSci 100e1.8 Course Overview l Active Lectures, Labs, Quizzes, Programs Labs based on questions given out in previous week Hands-on practice with programming Discuss answers, answer new questions More opportunities for questions to be answered. Active Lectures based on readings, questions, programs In-class questions used to ensure understanding Programs Theory and practice of data structures and OO programming Fun, practical, tiring, … l Exams/Tests Semester: open book/note* Final: open book/note
CompSci 100e1.9 What’s this course really about? l Solving problems Understanding problem statements Designing solutions to the problems Implementing the problem solution in a program Understanding and testing the results Documenting and presenting our results l How will we do it? Written classwork and homework Programming projects Algorithmic Programming Testing
CompSci 100e1.10 Tradeoffs Simple, elegant, quick, efficient: what are our goals in programming? Don’t worry about getting it right the first time. How do we decide what tradeoffs are important? Tension between generality, simplicity, elegance, … Fast programs, small programs,. Runtime, space, your time, CPU time… Time vs. space Programming, design, algorithmic, data- structural
CompSci 100e1.11 Visualizing Text l Text Cloud aka Tag Cloud? Number of occurrences/emphasis indicated by size of word Great visual/statistic: mat=tagcloud mat=tagcloud What information is stored in the URL of the NYTimes site above?
CompSci 100e1.12 Problem Solving and Programming l How many words are in a file? What’s a word? What’s a file? How do we solve this: simply, quickly, …? What’s the best we can do? Constraints? l How many different/unique words are in a file? How is this related to previous task? l How many words do two files have in common? Spell-checking, stemming, Did you mean..? l How many codons does DNA have in common?
CompSci 100e1.13 Duke Contributions
CompSci 100e1.14 Languages l Machine languages. l Natural languages. l High-level programming languages. [ real newspaper headlines, compiled by Rich Pattis ] Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. - Donald Knuth n Kids Make Nutritious Snacks. n Red Tape Holds Up New Bridge. n Police Squad Helps Dog Bite Victim. n Local High School Dropouts Cut in Half. Pictures Natural language (English) Pseudo-code Specific high-level programming language Machine Language More easily expressed More precise © Sedgewick & Wayne
CompSci 100e1.15 Why Java? l Java features. Widely used. Widely available. Embraces full set of modern abstractions. Variety of automatic checks for mistakes in programs. l Java economy. Mars rover. Cell phones. Blu-ray Disc. Web servers. Medical devices. Supercomputing. …… James Gosling © Sedgewick & Wayne
CompSci 100e1.16 Why Java? l Java features. Widely used. Widely available. Embraces full set of modern abstractions. Variety of automatic checks for mistakes in programs. Buzzword-enabled “Java is a simple, object-oriented, distributed, interpreted, robust, secure, architecture-neutral, portable, high performance, multi-threaded, and dynamic language” l Caveat. No perfect language. l Our approach. Minimal subset of Java. Develop general programming skills that are applicable to: C, C++, C#, Perl, Python, Ruby, Matlab, Fortran, Fortress, … © Sedgewick & Wayne
CompSci 100e1.17 A Rich Subset of the Java Language Primitive Numeric Types != ==>=<= <>-- / + % - ++ * Integer.parseInt() Double.parseDouble() Parsing Math.max()Math.min() Math.pow()Math.sqrt() Math.PIMath.abs() Math.log() Math.sin() Math Library Math.exp() Math.cos()System.out.println() System.out.print() System.out.printf() System for if Flow Control while else ! || true Boolean && false ;, ( { Punctuation ) } a[i] new a.length Arrays matches()charAt() length() + String compareTo() "" booleanchar long int Built-In Types String double equals()toString() main()new public class Objects private static © Sedgewick & Wayne
CompSci 100e1.18 Programming in Java l Programming in Java. Create the program by typing it into a text editor, and save it as HelloWorld.java HelloWorld.java /******************************************* * Prints "Hello, World" * Everyone's first Java program. *******************************************/ public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } © Sedgewick & Wayne
CompSci 100e1.19 Programming in Java l Programming in Java. Create the program by typing it into a text editor, and save it as HelloWorld.java Compile it using Eclipse or by typing at the command-line: javac HelloWorld.java This creates a Java bytecode file named: HelloWorld.class command-line % javac HelloWorld.java (or click the Save button in Eclipse) © Sedgewick & Wayne
CompSci 100e1.20 Java Bytecode \0 \0 \0. \0 035 \n \0 006 \0 017 \t \0 020 \0 021 \b \0 022 \n \0 023 \ \ \ \ \0 003 ( ) V 001 \0 004 C o d e 001 \0 017 L i n e N u m b e r T a b l e 001 \0 004 m a i n 001 \0 026 ( [ L j a v a / l a n g / S t r i n g ; ) V 001 \0 \n S o u r c e F i l e 001 \0 017 H e l l o W o r l d. j a v a \f \0 007 \0 \b 007 \ \f \0 030 \ \0 \f H e l l o, W o r l d 007 \0 032 \f \0 033 \ \0 \n H e l l o W o r l d 001 \0 020 j a v a / l a n g / O b j e c t 001 \ j a v a / l a n g / S y s t e m \0 003 o u t 001 \0 025 L j a v a / i o / P r i n t S t r e a m ; 001 \ j a v a / i o / P r i n t S t r e a m 001 \0 007 p r i n t l n 001 \ ( L j a v a / l a n g / S t r i n g ; ) V \0 ! \0 005 \0 006 \0 \0 \0 \ \0 002 \0 001 \0 007 \0 \b \0 001 \0 \t \0 \0 \ \0 001 \0 001 \0 \0 \0 005 * 267 \ \0 \0 \ \0 \n \0 \0 \0 006 \0 001 \0 \0 \0 \f \0 \t \ \0 \f \0 001 \0 \t \0 \0 \0 % \0 002 \0 001 \ \0 \0 \t 262 \ \ \0 \0 \ \0 \n \0 \0 \0 \n \0 002 \0 \0 \0 017 \0 \b \ \0 001 \0 \r \0 \0 \0 002 \ HelloWorld.class © Sedgewick & Wayne
CompSci 100e1.21 Problem 1: Text Clouds l Text clouds: A simple yet powerful idea Visualization of most frequently occurring words within some body of text Color or font size indicates word frequency l What is involved with generating text clouds? Steps? Issues? See SimpleWordCount.java and SimpleCloudMaker.java
CompSci 100e1.22 Problem 2: Bad Cryptography l Given a list of numbers (e.g. [1,2,3]) l What is the maximum product you can obtain if you increment one value by one ?
CompSci 100e1.23 Problem 3: Shogi l Shogi, also known as Japanese Chess, is a two-player board game l A silver general can move one square diagonally or one square directly up, giving it five possibilities. l Given a start position ( s x, s y ), what are the minimal number of steps required to move to ( g x, g y ) What values of ( s x, s y ) and ( g x, g y ) are easy to deal with? What cases may be mirrors of each other? l Abstraction: What do we need to worry about and what can we safely ignore?
CompSci 100e1.24 Problem 4: Data processing l Scan a large (~ 10 7 bytes) file l Print the words together with counts of how often they occur l Need more specification? l How do you do it? l What is we only wanted the top k (say 20) words?
CompSci 100e1.25 Possible solutions 1. Use heavy duty data structures (Knuth) Hash tries implementation Randomized placement Lots o’ pointers Several pages 2. UNIX shell script (Doug Mclroy) tr -cs “[:alpha:]” “[\n*]” < FILE | \ sort | \ uniq -c | \ sort -n -r -k 1,1 3. See SimpleWordCount.java Which is better? K.I.S.?