- Data Structures and Algorithm Analysis -
We study data structures so that we can learn to write more efficient programs.
But why must programs be efficient when new computers are faster every year?
The reason is that our ambitions grow with our capabilities. Instead of rendering
efficiency needs obsolete, the modern revolution in computing power and storage
capability merely raises the efficiency stakes as we attempt more complex tasks
- An Introduction to the Imperative Part of C++ -
These lecture notes are designed for an introductory course on programming, using the imperative core of C++, and given to MSc (Computing Science) students at Imperial College London at the very beginning of their course. The students attend an intensive series of lectures and laboratory sessions over two weeks, carrying out lab work using the GNU g++ compiler on PCs running a flavor of UNIX. Since the course is intended for graduates from disciplines other than Computer Science, very little previous programming experience is assumed.
- Beginning C: From Novice to Professional - Welcome to Beginning C: From Novice to Professional, Fourth Edition. With this book you canbecome a competent C programmer. In many ways, C is an ideal language with which to learnprogramming. C is a very compact language, so there isn’t a lot of syntax to learn before you can write real applications. In spite of its conciseness and ease, it’s also an extremely powerful language that’s still widely used by professionals. The power of C is such that it is used for programming at all levels,from device drivers and operating system components to large-scale applications.
- Advanced C and C++ Compiling -
- The ultimate goal of all the art related to building executables is to establish as much control as possible over the process of program execution. In order to truly understand the purpose and meaning of certain parts of the executable structure, it is of the utmost importance to gain the full understanding of what happens during the execution of a program, as the interplay between the
operating system kernel and the information embedded inside
the executable play the most significant roles. This is particularly true in the initial phases of execution, when it is too early for runtime impacts (such as user settings, various runtime events, etc.) which normally happen.
- ANSI C Simply (currently not available)- Essentials of C, assumes no previous knowledge. The text has been revised to
the current ANSI C standard. Beginner readers are advised to start on a subset
of the complete language: this approach is taken here and, where appropriate, a
'Big Picture' section takes the reader to more advanced topics.
- C++ GUI Programming with Qt 3 - Straight from Trolltech, this book covers all you need to build industrial-strength applications with Qt 3.2.x and C++--applications that run natively on Windows, Linux/Unix, Mac OS X, and embedded Linux with no source code changes! The book teaches solid Qt programming practices; it is not a rehash of the documentation. You'll find start-to-finish coverage packed with examples, plus a CD with the Qt 3.2 toolset and Borland C++ compilers--including a non-commercial Qt 3.2 for Windows available nowhere else! Direct Link to PDF download. Read my review of this book on Slashdot
- C++ Reference Guide - extensive guide on using Standard Template Library. You might have to register with InformIT to get full access.
- ZooLib Cookbook - ZooLib is a cross-platform application framework. What it allows you to do is to write a single set of C++ sources and compile for different operating systems and microprocessors to produce native executable applications with very little need for platform-specific client code. This is of great benefit to a developer, as it allows you to support your application on a variety of platforms without a lot of extra work developing parallel codebases. It also allows you to spend the bulk of your time developing on whatever platform you enjoy the most while delivering for the platforms your users need, even if they're not the same.
- C++ in Action - My work at Microsoft gave me the unique experience of working on large software projects and applying and developing state of the art design and programming methodologies. Of course, there are plenty of books on the market that talk about design, programming paradigms, languages, etc. Unfortunately most of them are either written in a dry academic style and are quite obsolete, or they are hastily put together to catch the latest vogue. There is a glut of books teaching programming in C, C++ and, more recently, in Java. They teach the language, all right, but rarely do they teach programming.
- Optimizing C++ - Optimizing C++ provides working programmers and those who intend to be working programmers with a practical, real-world approach to program optimization. Many of the optimization techniques presented are derived from my reading of academic journals that are, sadly, little known in the programming community. Optimizing C++ book also draws on my nearly 30 years of experience as a programmer in diverse fields of application, during which I have become increasingly concerned about the amount of effort spent in reinventing optimization techniques rather than applying those already developed.
- Who's Afraid of C++? - Whether you are using this book on your own or in school, there are many good reasons to learn how to program. You may have a problem that hasn't been solved by commercial software; you may want a better understanding of how commercial programs function so you can figure out how to get around their shortcomings and peculiarities; or perhaps you're just curious about how computers perform their seemingly magical feats. Whatever the initial reason, I hope you come to appreciate the great creative possibilities opened up by this most ubiquitous of modern inventions.
- Teach Yourself C++ in 21 Days - Computer languages have undergone dramatic evolution since the first electronic computers were built to assist in telemetry calculations during World War II. Early on, programmers worked with the most primitive computer instructions: machine language. These instructions were represented by long strings of ones and zeroes. Soon, assemblers were invented to map machine instructions to human-readable and -manageable mnemonics, such as ADD and MOV.
In time, higher-level languages evolved, such as BASIC and COBOL. These languages let people work with something approximating words and sentences, such as Let I = 100. These instructions were translated back into machine language by interpreters and compilers. An interpreter translates a program as it reads it, turning the program instructions, or code, directly into actions. A compiler translates the code into an intermediary form. This step is called compiling, and produces an object file. The compiler then invokes a linker, which turns the object file into an executable program.
Because interpreters read the code as it is written and execute the code on the spot, interpreters are easy for the programmer to work with. Compilers, however, introduce the extra steps of compiling and linking the code, which is inconvenient. Compilers produce a program that is very fast each time it is run. However, the time-consuming task of translating the source code into machine language has already been accomplished.
Another advantage of many compiled languages like C++ is that you can distribute the executable program to people who don't have the compiler. With an interpretive language, you must have the language to run the program.
- Programming in C:
UNIX System Calls and Subroutines using C
- In order to use Solaris and most other Unix Systems you will need to
be familiar with the Common Desktop Environment (CDE). Before embarking
on learning C with briefly introduce the main features of the CDE.
Most major Unix vendors now provide the CDE as standard. Consequently,
most users of the X Window system will now be exposed to the CDE.
Indeed, continuing trends in the development of Motif and CDE will
probably lead to a convergence of these technologies in the near
future. This section highlights the key features of the CDE from a
Recipes in C (and in Fortran 77 and Fortran 90)
- The new and greatly expanded second edition of the highly popular
Numerical Recipes in C features over 100 new routines and upgraded
versions of the original routines. The book remains the most practical,
comprehensive handbook of scientific computing available today.
- How to Think
Like a Computer Scientist (C++)
- The goal of this book is to teach you to think like a computer
scientist. I like the way computer scientists think because they
combine some of the best features of Mathematics, Engineering, and
Natural Science. Like mathematicians, computer scientists use formal
languages to denote ideas (specifically computations). Like engineers,
they design things, assembling components into systems and evaluating
tradeoffs among alternatives. Like scientists, they observe the
behavior of complex systems, form hypotheses, and test predictions.
The single most important skill for a computer scientist is
problem-solving. By that I mean the ability to formulate problems,
think creatively about solutions, and express a solution clearly and
accurately. As it turns out, the process of learning to program is an
excellent opportunity to practice problem-solving skills. That's why
this chapter is called "The way of the program."
Of course, the other goal of this book is to prepare you for the
Computer Science AP Exam. We may not take the most direct approach to
that goal, though. For example, there are not many exercises in this
book that are similar to the AP questions. On the other hand, if you
understand the concepts in this book, along with the details of
programming in C++, you will have all the tools you need to do well on
the exam. See also Python
- Writing Bug-Free C
- This book describes an alternate class methodology that provides
complete data hiding and fault-tolerant run-time type checking of
objects in C programs. With it, you will produce code that contains
The class methodology helps to prevent bugs by making it easier to
write C code. It does this by eliminating data structures (class
declarations) from include files, which makes a project easier to
understand (because there is not as much global information), which
makes it easier to write C code, which helps to eliminate bugs. This
class methodology, which uses private class declarations, is different
from C++, which uses public class declarations.
The class methodology helps detect bugs by providing for both
compile-time and run-time type checking of pointers (handles) to class
objects. This run-time type checking catches a lot of bugs for you
since invalid object handles (the cause of a lot of bugs) are
automatically detected and reported.
We have all, at some point in our programming careers, spent several
hours or days tracking down a particularly obscure bug in our code.
Have you ever stepped back and wondered how following a different
programming methodology might have prevented such a bug from occurring
or have automatically detected it? Or have you tracked down the same
type of bug several times?
- The C Book
- This is not a tutorial introduction to programming. The book is
designed for programmers who already have some experience of using a
modern high-level procedural programming language. As we explain later,
C isn't really appropriate for complete beginners—though many have
managed to use it—so the book will assume that its readers have already
done battle with the notions of statements, variables, conditional
execution, arrays, procedures (or subroutines) and so on. Instead of
wasting your time by ploughing through tedious descriptions of how to
add two numbers together and explaining that the symbol for
multiplication is *, the book concentrates on the things that are
special to C. In particular, it's the way that C is used which is
Structures and Algorithms with Object-Oriented Design Patterns in C++
- This book was motivated by my experience in teaching the course
E&CE 250: Algorithms and Data Structures in the Computer
Engineering program at the University of Waterloo. I have observed that
the advent of object-oriented methods and the emergence of
object-oriented design patterns has lead to a profound change in the
pedagogy of data structures and algorithms. The successful application
of these techniques gives rise to a kind of cognitive unification:
Ideas that are disparate and apparently unrelated seem to come together
when the appropriate design patterns and abstractions are used.
- C++ FAQ Lite
- frequently asked questions
- Thinking in C++, 2nd Edition - 2 volumes of Bruce Eckel's book, one of the easiest to read and most definitive titles for C++
- A Beginner’s C++ When it comes to introducing the budding programmer to a new language or object-oriented methods, C++ is a great place to start. Its structure and syntax have dictated countless sister languages and it still remains the building block for most native applications in use on desktops, mobile devices, and game consoles. “A Beginner’s C++” walks the reader through the very basics, through the essentials of computer hardware through the way C++ addresses fundamental programming concepts. It is structured to be the equivalent of a two-semester long computer science course and meets its objective well.
- C# School First Edition C# is a powerful language with the efficiency and power of object oriented concepts. This free book download is a good start for beginners. Book has 14 lessons plus 2 special chapters explaining the language through diagrams, flowcharts and program window snapshots. The book discusses C# and .NET in 3 progressive levels – beginners with fundamentals of C#, .NET and Object Oriented concepts; and then in depth into Object Oriented Concepts. The third stage has some real time project details already performed by one of its author.