fabio de francesco wrote:
I have a couple of years of experience with C++. I started studying
C++ syntax, then I read the B.Stroustrup's book, and eventually I went
through the N.Josuttis' book on how to program with the C++ Standard
Library.
I am not a professional programmer however I would like to gain more
knowledge of the language to get what could be considered the skills
you'd expect from a professional developer ( I also know Unix
programming and some Ix86 32-bit Assembly programming too ).
My questions are about what to do in order to get the above-mentioned
skills. I've heard of commonly used libraries (e.g., Boost and ACE)
and I know of libraries (Trolltech QT) for GUI developing.
1) Do really exist some libraries that can be considered commonly used
libraries? If yes, which they are and what they are intended for?
Usually, if anything could be considered "commonly used", it would be
a system library for programming the platform you're on. For example,
Windows API library, POSIX (although it's not really a library, just
standard interfaces), pthreads (if applicable, and it often is), Motif
(or Tcl/Tk), OpenGL. The list is by no means complete. Just a scratch
on the surface, really.
It helps to know where the language is headed. For example, many parts
of the Boost library can end up adopted as standard library extensions
in the near future.
2) Do you think I'd better start on learning how to use some of them?
(What I intended to ask is if you think a good developer should master
the most used of them, given the fact that He/She will be probably
asked to program with these libraries when/if working in a
professional context).
You can't be using all of them at once, I'm afraid, unless you yourself
are programming something like Qt. And also, depending on the context
(professional one) you may never really be using any of them because
the orgranisation could have chosen to either use a popular cross-platform
variation (like Qt, etc.) or has implemented their own. Get a feeling of
what's out there and learn them as you encounter the need.
3) What else a good C++ programmer is expected to know in addition to
all of the above, altogether with strong mathematics, common
algorithms and data structures, and some computer networks knowledge?
It's a misconception that it is necessary to know mathematics very well
to be a good programmer. Algos and data structures, no doubt. But if
you are involved in creating a database or a communications system, what
mathematics, really? Minimal, at best.
Networks? I don't think so. You can program all your life and become
very good at what you do without knowing anything about networks.
We're crossing the line of topicality here, so it would probably be
better to continue this discussion in comp.software-eng, where it really
belongs, but...
As to your question, good common sense and ability to estimate the amount
of work needed for a particular task is just as important as in any other
occupation. Work ethics, respect for your colleagues, i.e. ability to
work well in a group. As it turns out, while programming is considered
art by many (or at least by some), programmers rarely work alone.
Every little bit of knowledge helps. In order to be a good programmer in
a professional context it is often better to know the non-programming
aspects of the domain. E.g. being a physicist helps if you develop some
scientific software to support an experiment in physics. Being a chemist
probably helps if you develop software to control production of drugs.
You get the idea, I am sure.
Knowing when to stop is good too, so I better wrap up... ;-)
Good luck!
Victor