User:Blacken~enwikibooks/C++ Concepts and Programming/Foreword

= Foreword =

"We actually thought of selling [the C programming language] to the Soviets to set their computer science progress back 20 or more years. Imagine our surprise when AT&T and other US corporations actually began trying to use Unix and C! It has taken them 20 years to develop enough expertise to generate even marginally useful applications using this 1960's technological parody, but we are impressed with the tenacity (if not common sense) of the general Unix and C programmer. In any event, Brian, Dennis and I have been working exclusively in Pascal on the Apple Macintosh for the past few years and feel really guilty about the chaos, confusion and truly bad programming that have resulted from our silly prank so long ago."


 * -"Ken Thompson," Creators Admit Unix, C Hoax, The VOGON News Service

Good news. The above quote is from a UnixWorld conference that never happened. That's good news for me, at least--otherwise, I'd be out of a job.

Welcome to C++ Concepts and Programming, an instructional text from the Wikibooks project. CCP, as it will be referred to within the text, aims to be a guide to quickly learn one of the most widespread programming languages in use today (and, in the process, a second). We aim to teach, not by throwing facts and information at the wall and hoping it sticks, but instead by light humor and human-readable explanations. We will focus on pragmatic teaching, not on the memorization of rote facts and technical jargon that is not necessary to become productive in the C++ programming language.

C++ is what is known technically as a multi-paradigm imperative programming language. If the buzzwords in the previous sentence made you reach for a comfort object--be it a nice fluffy teddy bear or a bottle of Jack Daniels--you can relax. Breathe deeply, it'll help. That description of C++ not only means absolutely nothing to most users of the language outside of a computer science lecture hall, but it commits the egregious sin of telling you nothing about the language itself, nothing that will help you become proficient in its use or learned in its concepts and methods.

In other words: unless this book is your textbook for a computer science class and your professor wants you to know what a multi-paradigm imperative programming language is, you don't need to know it. I'm certainly not quizzing you.

(You will soon notice that the main text of this book tends to veer wildly at times, from aside to further aside to far afield. At least, it will veer wildly, unless some of the more responsible members of the Wikibooks community--for a description of Wikibooks, see the following section--properly chastise me and clean it up to better fit a textbook standard. Which means that this foreword is likely the first thing on the chopping block. Que sera, sera. I consider a bit of a diversion, especially a humorous one, to help keep information fresh and clear in the reader's mind. As is often said in programming circles, YMMV--your mileage may vary.)

C++ is an exciting programming language, one that offers you the choice of how to accomplish your goals. As a superset of C (explained in detail later), you are able to use whatever C++ extensions and improvements that you wish to use in a program and eschew the others. C++, by design, offers you a wide array of tools. You can pick and choose among them, selecting some and leaving others on the shelf, as you see fit. Other languages, such as Java, lock you into a certain way of programming, a paradigm from which it is exceedingly difficult, or even impossible, to break out of without resorting to tricks that make programming harder. With C++, you do things the way you want to. And that's a powerful thing.

Happy hacking.


 * Edward Ropple
 * "Blacken" on Wikipedia/Wikibooks
 * November 10, 2006

A Mention of Wikibooks
CCP is a book written as part of the Wikibooks project. The Wikibooks project is a collection of free books and annotated texts that are written in a collaborative fashion on the Wikibooks website (http://www.wikibooks.org), which is part of the Wikimedia Foundation. The site is a wiki and any user can edit material on the site without their contributions being subject to review before being accepted. The site's content is licensed under the GNU Free Documentation License, which makes the content freely accessible, with no limits on sharing it.

Wikibooks aims to be a place to build free, open-content textbooks for public use. There are books on everything from physics to organic chemistry to (obviously!) computer programming on the site, all in various stages of completion. These textbooks are legally bound to remain free and this has been added to that collection in hopes of being of use to its readers.

What This Book Is
CCP is designed to quickly bring the reader up to speed on the C++ programming language. By necessity, the reader will also become reasonably proficient with C, the predecessor language of C++, in order to progress to C++. It is aimed primarily at those who have never programmed before.

CCP attempts to teach using a version of C++ that adheres as closely to the C++ Standard as possible. Information is presented a simple step at a time, so as to allow the reader time to understand and digest it before moving on. In CCP we write about what we think is important and necessary for the reader to understand the language, avoiding trivia and information important, not in the process of writing software, but instead in the process of writing compilers. CCP is presented in a friendly, sometimes humorous, and non-threatening way to ease the reader into the world of computer programming.

What This Book Isn't
CCP is not intended to be a primer on computers and assumes a basic understanding of how computers work. Basic terminology, while often outlined in the Glossary, may not be explained in the text proper. CCP assumes understanding of concepts such as variables, as they apply to mathematics (not necessarily as they apply to computers).

This book is not an information dump of the data contained in any one programmer's head (or all of them). The C++ Standard documentation provides an excellent place to learn about things such as operator precedence--a table that no programmer really needs to know about beyond the basic "PEMDAS" set learned in arithmetic classes--and a book targeted at users new to the language is best off without it unless it seriously affects how a reader might write code as they learn.