1.2 Learning C++ [notes.learn]

来源:互联网 发布:sql create 字段唯一 编辑:程序博客网 时间:2024/06/05 01:05
1.2 Learning C++ [notes.learn]
    The most important thing to do when learning C++ is to focus on concepts and not get lost in
languagetechnical details. The purpose of learning a programming language is to become a better
programmer; that is, to become more effective at designing and implementing new systems and at
maintaining old ones. For this, an appreciation of programming and design techniques is far more
important than an understanding of details; that understanding comes with time and practice.
    C++ supports a variety of programming styles. All are based on strong static type checking, and
most aim at achieving a high level of abstraction and a direct representation of the programmer’s
ideas. Each style can achieve its aims effectively while maintaining run-time and space efficiency.
A programmer coming from a different language (say C, Fortran, Smalltalk, Lisp, ML, Ada, Eiffel,
Pascal, or Modula2) should realize that to gain the benefits of C++, they must spend time learning
and internalizing programming styles and techniques suitable to C++. The same applies to programmers used to an earlier and less expressive version of C++.
    Thoughtlessly applying techniques effective in one language to another typically leads to awkward,
poorly performing, and hardtomaintain code. Such code is also most frustrating to write
because every line of code and every compiler error message reminds the programmer that the language used differs from ‘‘the old language.’’ You can write in the style of Fortran, C, Smalltalk,
etc., in any language, but doing so is neither pleasant nor economical in a language with a different
philosophy. Every language can be a fertile source of ideas of how to write C++ programs.
However, ideas must be transformed into something that fits with the general structure and type
system of C++ in order to be effective in the different context. Over the basic type system of a language, only Pyrrhic victories are possible.
    C++ supports a gradual approach to learning. How you approach learning a new programming
language depends on what you already know and what you aim to learn. There is no one approach
that suits everyone. My assumption is that you are learning C++ to become a better programmer
and designer. That is, I assume that your purpose in learning C++ is not simply to learn a new syntax
for doing things the way you used to, but to learn new and better ways of building systems.
This has to be done gradually because acquiring any significant new skill takes time and requires
practice. Consider how long it would take to learn a new natural language well or to learn to play a
new musical instrument well. Becoming a better system designer is easier and faster, but not as
much easier and faster as most people would like it to be.
    It follows that you will be using C++ – often for building real systems – before understanding
every language feature and technique. By supporting several programming paradigms (Chapter 2),
C++ supports productive programming at several levels of expertise. Each new style of programming
adds another tool to your toolbox, but each is effective on its own and each adds to your
effectiveness as a programmer. C++ is organized so that you can learn its concepts in a roughly linear
order and gain practical benefits along the way. This is important because it allows you to gain
benefits roughly in proportion to the effort expended.
    In the continuing debate on whether one needs to learn C before C++, I am firmly convinced
that it is best to go directly to C++. C++ is safer, more expressive, and reduces the need to focus on
lowlevel techniques. It is easier for you to learn the trickier parts of C that are needed to compensate
for its lack of higherlevel facilities after you have been exposed to the common subset of C
and C++ and to some of the higherlevel techniques supported directly in C++. Appendix B is a
guide for programmers going from C++ to C, say, to deal with legacy code.


原创粉丝点击