This article provides an overview of the elements of C++; specifically, the 'C' portion of C++.
Note how section 2.2 describes tokens as the "minimal chunks of a program". The root goal of programming is solving problems using the 'chunks' of a programming language. Of course, the chunks must be appropriate for the type of problems to be solved. Generally, smaller chunks are applicable to many types of tasks, but involve more effort; larger chunks involve less effort, but are designed for more specific tasks.
Analysis and design
Phase 0: Make a plan
You must first decide what steps you're going to have in your process. It sounds simple (in fact, all of
this sounds simple) and yet people often don't make this decision
before they start coding. If your plan is "let's jump in and start
coding," fine. (Sometimes that's appropriate when you have a
well-understood problem). At least agree that this is the plan.
You
might also decide at this phase that some additional process structure
is necessary, but not the whole nine yards. Understandably enough, some
programmers like to work in "vacation mode" in which no structure is
imposed on the process of developing their work; "It will be done when
it's done". This can be appealing for awhile, but I've found that having
a few milestones along the way helps to focus and galvanize your
efforts around those milestones instead of being stuck with the single
goal of "finish the project". In addition, it divides the project into
more bite-sized pieces and makes it seem less threatening (plus the
milestones offer more opportunities for celebration).
When
I began to study story structure (so that I will someday write a novel)
I was initially resistant to the idea of structure, feeling that when I
wrote I simply let it flow onto the page. But I later realized that
when I write about computers the structure is clear enough so that I
don't think much about it. But I still structure my work, albeit only
semi-consciously in my head. So even if you think that your plan is to
just start coding, you still somehow go through the subsequent phases
while asking and answering certain questions.
The mission statement
Any
system you build, no matter how complicated, has a fundamental purpose,
the business that it's in, the basic need that it satisfies. If you can
look past the user interface, the hardware- or system-specific details,
the coding algorithms and the efficiency problems, you will eventually
find the core of its being, simple and straightforward. Like the
so-called high concept from a Hollywood movie, you can describe it in one or two sentences. This pure description is the starting point.
The high concept is quite important because it sets the tone for your project; it's a mission statement. You won't necessarily get it right the first time (you may be in a later phase of the project before it becomes completely clear), but keep trying until it feels right. For example, in an air-traffic control system you may start out with a high concept focused on the system that you're building: "The tower program keeps track of the aircraft". But consider what happens when you shrink the system to a very small airfield; perhaps there's only a human controller or none at all. A more useful model won't concern the solution you're creating as much as it describes the problem: "Aircraft arrive, unload, service and reload, and depart".