What is an excellent programmer?
Every profession has its own elites. So does programming. Programming concerns more things than codes. It
is an art other than techology. It takes practice to be an excellent programmer. An Excellent programmer
shoule have:
1. Proficient in one or two programming langauges
Without any doubts, programming languages are the core of computer science. You don't have to learn
many languages, one or two of them is enough. But you must good at it. Here I wanna say something
beyond this article: THERE IS NO such a language which is better or strong than others. They are all
the same following the same paradigm --- traditionally compile, assembly,linking and executing. Many
programmers waste a lot time arguing which is better. And many poor programmers blame the programming
language rahter than their programming skills. For programming, the true stuff are programming skills,
data structures, algorithms, design and debugging skills. Codes or programming languages are one
implementations. For a question, we can solve it in any language. Each language is deisgned to solve
a kind or a range of problems. The difference is whether this language suites this problem, but not
this is better than that or any one.
Among all of languages, C and Java are strongly recommended. With C, you can practice your programming
skills, algorithms, data structures and debugging skills a lot. When programming in C, you are forced
to consider many things like memory, like efficiency and like data structure which are good practice
of programming. Some other languages like Java is said to spare programmer from worrying about memory
efficiency and data structure. That might be true, but with a lot traps in it. Only can you avoid those
subtle traps after having a lot experiences of dealing with them. In addition, C has a close relationship
with Unix/Linux system. Through C, it is much easier for you to master Unix/Linux system. Because all unix's
system calls are standard C functions.
After enough with C, you should use Java. Java, however, spare you from being stuck with low-level
detailed things like memory or data structure. It is full OO and has a very good encapisulation of
those low-level stuffs. Programming in Java, you can practice OO, design, UML, design pattern and
software engineering a lot. Those things are extremely useful when you are building a software.
No matter what langauge you are mastering, try to abstract skills which is language independent. Try to
remember langauge is only one implementation.
2. Master one platform, including its commands, its mechanisms, system calls and kernel
Like programming langauges, all operating systems follows the same conventions, too, although they
have different names, different look and feels, different mechanisms different UI and different
implementations. All of them must manage resources including memory, CPU, BUS, hardwares, provide
I/O functions, provide services and provide shells for user to control the computer. By learning
one platform, you will understand all of those things. Again, when you are digging into one platform,
you should notice those platform independent features. That is our goal.
Among all systems, Unix/Linux are strongly recommended. It has a clear architecture and much easier
to learn than others.
3. Master OO, UML, Design Pattern and Sotfware Engineering
Any peice of application is a software, even your hello world toy. A great software is out of a great
architecture. A great architecture is out of a great design. A great design takes a great mind and
other excellent skills including OO, Design Patterns.
There is one thing to note: OO, UML, Design Pattern should be used in requirement phase, architecture
phase and design phase. They are software architecture tools. Once you have built them in design, then
you can implement it in any programming language. It is a big mistake that only OO confirming languages
can build applications in OO way. If the design is OO enough, we are able to implement it in C or assembly,
which makes it well OO.
4. Master sufficient and essential algorithms and programming tricks
Without any doubts, algorithms are soul of programming. A peice of software cannot function well by a bunch of
slow programs. But we must understand the trade-off and make the right decisions and do the right thing. In
a word, we try to make the best thing, not fastest. Faster is not always best.
Programming tricks includes programming styles, conventions. It concerns about clarity, readability,
extendibility, maintainability and others.
5. Master one or more areas of Computer Science, such as network, database, protocol, compiler,
data structure, drivers, OS, Internet, Web, algorithms or others.
All above three are concerned and necessary in every area and every applications, they are the common
skills. While these things are your specialized area. Every software are desinged to solve problems of
an area. SQL server of Microsoft are for database. MSN are for Instant Messaging across Internet. Gcc is
a compiler. Linux is an Operating system, and so forth. Any expert or specialists dig into one or
more of these areas. By less and better rule, you had better dig into only one of them, but make it good
enough.
In all, an excellent programmer must have a good comprehension and solid experiences on all topics discussed.
Do we, you might wonder, really need so many things when we are developing a peice of software? Absolutely, every
software must be consruted with programming languages, run on some platforms/Operating systems, solve a
particular area problems. The solution must be based on some algorithms. The codes must be organized in a OO way.
The software must be designed in OO way and comprise of Design patterns. The development of software must be
supervised by software engineering paradims.