Chapters 1 & 2 Programming and Programs
Bjarne Stroustrup
www.stroustrup.com/Programming
Abstract
Today, well outline the aims for this course and present a rough course plan. Well introduce the basic notion of programming and give examples of areas in which software is critical to our civilization. Finally, well present the simplest possible C++ program and outline how it can be made into running code.
Stroustrup/Programming 2
Overview
Course aims and outline Programming Hello, world! Compilation
Stroustrup/Programming
This is a course
In Programming For beginners
who want to become professionals
i.e., people who can produce systems that others will use Though not (necessarily) geniuses Though do need sleep occasionally, and take a normal course load
who are assumed to be bright
who are willing to work hard
Using the C++ programming language
Stroustrup/Programming
Not!
A Washout course
if you can get into the science/engineering parts of a university, you can handle this course
The C++ programming language who want to become language lawyers
A course in
For students
We try not to get bogged down in technical obscurities
who are assumed to be a bit dim and fairly lazy
We try not to spoon feed
Using
Some untested software development methodologies and a lot of unnecessarily long words
Stroustrup/Programming 5
The Aims
Teach/learn
Fundamental programming concepts Key useful techniques Basic Standard C++ facilities Write small colloquial C++ programs Read much larger programs Learn the basics of many other languages by yourself Proceed with an advanced C++ programming course
After the course, youll be able to
After the course, you will not (yet) be
An expert programmer A C++ language expert An expert user of advanced libraries
Stroustrup/Programming 6
The Means
Lectures
Attend every one Read a chapter ahead (about one per lecture) Read the chapter again after each lecture Feedback is welcome (typos, suggestions, etc.)
Notes/Chapters
Stroustrup/Programming
The Means (Cont.)
Work
Review questions in chapters Review Terms in Chapters Drills
Always do the drills Always do the drills before the exercises
Exercises Course specific
Projects
Thats where the most fun and the best learning takes place
Quizzes Exams
Stroustrup/Programming
Cooperate on Learning
Except for the work you hand in as individual contributions, we strongly encourage you to collaborate and help each other If in doubt if a collaboration is legitimate: ask!
Dont claim to have written code that you copied from others Dont give anyone else your code (to hand in for a grade) When you rely on the work of others, explicitly list all of your sources i.e. give credit to those who did the work
Dont study alone when you dont have to
Form study groups Do help each other (without plagiarizing)
Go to your TA's office hours
Go prepared with questions The only stupid questions are the ones you wanted to ask but didnt
Stroustrup/Programming 9
Why C++ ?
You cant learn to program without a programming language The purpose of a programming language is to allow you to express your ideas in code C++ is the language that most directly allows you to express ideas from the largest number of application areas C++ is the most widely used language in engineering areas
http://www.research.att.com/~bs/applications.html
Stroustrup/Programming
10
Why C++ ?
C++ is precisely and comprehensively defined by an ISO standard
And that standard is almost universally accepted
C++ is available on almost all kinds of computers Programming concepts that you learn using C++ can be used fairly directly in other languages
Including C, Java, C#, and (less directly) Fortran
Stroustrup/Programming
11
Rough course outline
Part I: The basics
Types, variables, strings, console I/O, computations, errors, vectors functions, source files, classes File I/O, I/O streams Graphical output Graphical User Interface Free store, pointers, and arrays Lists, maps, sorting and searching, vectors, templates The STL Software ideals and history Text processing, numerics, embedded systems programming, testing, C, etc.
Stroustrup/Programming 12
Part II: Input and Output
Part III: Data structures and algorithms
Part IV: Broadening the view
Rough course outline (Cont.)
Throughout
Program design and development techniques C++ language features Background and related fields, topics, and languages
Note: Appendices
C++ language summary C++ standard library summary Index (extensive) Glossary (short)
Stroustrup/Programming
13
Promises
Detail: We will try to explain every construct used in this course in sufficient detail for real understanding
There is no magic
Utility: We will try to explain only useful concepts, constructs, and techniques
We will not try to explain every obscure detail
Completeness: The concepts, constructs, and techniques can be used in combination to construct useful programs
There are, of course, many useful concepts, constructs, and techniques beyond what is taught here
Stroustrup/Programming
14
More Promises
Realism: the concepts, constructs, and techniques can be used to build industrial strength programs
i.e., they have been used to
Simplicity: The examples used are among the simplest realistic ones that illustrate the concepts, constructs, and techniques
Your exercises and projects will provide more complex examples
Scalability: The concepts, constructs, and techniques can be used to construct large, reliable, and efficient programs
i.e., they have been used to
Stroustrup/Programming
15
Feedback request
Please mail questions and constructive comments to your_teacher@your_institution Your feedback will be most appreciated
On style, contents, detail, examples, clarity, conceptual problems, exercises, missing information, depth, etc.
Book support website (www.stroustrup.com/Programming) Local course support website
Stroustrup/Programming
16
Why programming?
Our civilization runs on software
Most engineering activities involve software
Note: most programs do not run on things that look like a PC
a screen, a keyboard, a box under the table
Stroustrup/Programming
17
Ships
Design Construction Management
Monitoring Engine Hull design Pumps
18
Stroustrup/Programming
Aircraft
Communication Control Display
Signal processing Gadget control Monitoring
Stroustrup/Programming
19
Phones
Voice quality User interfaces Billing Mobility
Stroustrup/Programming
Switching Reliability Provisioning Images
20
Energy
Control Monitoring Analysis Design
Communications Visualization Manufacturing
Stroustrup/Programming
21
PC/workstation
Theres a lot more to computing than games, word processing, browsing, and spreadsheets!
Stroustrup/Programming
22
Where is C++ Used?
Just about everywhere
Mars rovers, animation, graphics, Photoshop, GUI, OS, compilers, slides, chip design, chip manufacturing, semiconductor tools, etc. See www.research.att/~bs/applications.html
Stroustrup/Programming 23
A first program just the guts
// int main() { cout << "Hello, world!\n"; // main() is where a C++ program starts // output the 13 characters Hello, world! // followed by a new line // return a value indicating success
return 0;
}
// quotes delimit a string literal // NOTE: smart quotes will cause compiler problems. // so make sure your quotes are of the style " " // \n is a notation for a new line
Stroustrup/Programming
24
A first program complete
// a first program: #include "../../std_lib_facilities.h" // get the library facilities needed for now int main() { cout << "Hello, world!\n"; return 0; } // note the semicolons; they terminate statements // curly brackets { } group statements into a block // main( ) is a function that takes no arguments ( ) // and returns an int (integer value) to indicate success or failure
Stroustrup/Programming 25
// main() is where a C++ program starts // output the 13 characters Hello, world! // followed by a new line // return a value indicating success
A second program
// modified for Windows console mode: #include "../../std_lib_facilities.h" // get the facilities for this course int main() { cout << "Hello, world\n"; // main() is where a C++ program starts // output the 13 characters hello, world! // followed by a new line // wait for a keystroke // return a value indicating success
keep_window_open(); return 0;
}
// without keep_window_open() the output window will be closed immediately // before you have a chance to read the output (on Visual C++ 2003)
Stroustrup/Programming
26
Hello, world!
Hello world is a very important program
Its purpose is to help you get used to your tools
Compiler Program development environment Program execution environment After you get it to work, please make a few mistakes to see how the tools respond; for example
Type in the program carefully
Forget the header Forget to terminate the string Misspell return (e.g. retrun) Forget a semicolon Forget { or }
Stroustrup/Programming 27
Hello world
Its almost all boiler plate
Only cout << "Hello, world!\n" directly does anything Most of our code, and most of the systems we use simply exist to make some other code elegant and/or efficient real world non-software analogies abound
Thats normal
Boiler plate, that is, notation, libraries, and other support is what makes our code simple, comprehensible, trustworthy, and efficient.
Would you rather write 1,000,000 lines of machine code?
This implies that we should not just get things done; we should take great care that things are done elegantly, correctly, and in ways that ease the creation of more/other software:
Style Matters!
Stroustrup/Programming 28
Compilation and linking
C++ source code C++ compiler Object code Executable program linker
You write C++ source code
Library Object code
Source code is (in principle) human readable Object code is simple enough for a computer to understand E.g. input/output libraries, operating system code, and windowing code E.g. a .exe file on windows or an a.out file on Unix
Stroustrup/Programming 29
The compiler translates what you wrote into object code (sometimes called machine code)
The linker links your code to system code needed to execute
The result is an executable program
So what is programming?
Conventional definitions
Telling a very fast moron exactly what to do A plan for solving a problem on a computer Specifying the order of a program execution
But modern programs often involve millions of lines of code And manipulation of data is central
Definition from another domain (academia)
A program is an organized and directed accumulation of resources to accomplish specific objectives
Good, but no mention of actually doing anything
The definition well use
Specifying the structure and behavior of a program, and testing that the program performs its task correctly and with acceptable performance
Never forget to check that it works
Software == one or more programs
Stroustrup/Programming 30
Programming
Programming is fundamentally simple
Just state what the machine is to do We want the machine to do complex things
So why is programming hard?
And computers are nitpicking, unforgiving, dumb beasts
The world is more complex than wed like to believe
So we dont always know the implications of what we want
When you can program a task, you understand it When you program, you spend significant time trying to understand the task you want to automate If you are just practical, you produce non-scalable unmaintainable hacks If you are just theoretical, you produce toys
Stroustrup/Programming 31
Programming is understanding
Programming is part practical, part theory
The next lecture
Will talk about types, values, variables, declarations, simple input and output, very simple computations, and type safety.
Stroustrup/Programming
32