Firstly - a well thought out meditation. worth at least a double ++. One could make those criteria applicable to learning any computer programming language.
One thing that tends to be glossed over these days, in the great rush to provide more and more programmers and developers though, is a distinction between what I would call a "programming technicial" and a "computer scientist". There is a growing unmet demand for programmers who can cut code using whatever language is "flavour of the month" - at the moment that is Java, but it was Visual Basic, and before that Turbo Pascal, CICS Cobol, IBM 360 Assembler . . . the list goes on. There are a wide range of educational instutions, from traditional universities, technical colleges, and commercial training organisations that are willing to teach the technical skills in these languages, and give people a piece of paper saying they are a "Certified Professional Code-Cutter" in 3 months or 6 months or a year.
The same applies on the system administration and network support side. Look at all the "certifications" - in Netware, MCSE, Cisco; whatever people thing can give their product an edge, or provide an opportunity to sell training.
But many of these people end up as the "cannon fodder" of the industry. When technology passes them by, they are left with their technical skills in a now unwanted product. So, what skills and attributes do I believe should be part of a good computer scientist's makeup?
- A good general knowledge. Not just in computer and technology matters, but truly general. I have had to develop systems for radio communication engineers, lawyers, government and military agencies, land and property valuers, bus company operators, natural resource managers, finance and accounting types and the list goes on. You need to be able to understand their business, and to be able to speak at their level.
- An analytical approach to problem solving. A good grounding in mathematics often helps here, or other pure science areas - not that you need to understand the complexities of n-dimensional integration, or particle interaction in atomic nucleii - but the discipline of the scientific method, and its approach to problem solving and analysis is important.
- Good oral and written communication. More than just the high literary skills nysus mentioned. You have to be able to write reports, documentation, and other material that prople can understand. Sooner or later you will have to write proposals to convince people that what you have or want to do is the best approach. You need to be able to talk to people, either one to one or in a group situation, to clearly express your ideas without upsetting people. Listening skills are essential too - listening and understanding. Read up on body language and non-verbal communication.
- An understanding of algorithms. Read Knuth's books. (sorry, no reference available here) Despite being written in the late 1960's (and his code examples are in a very simple machine language) they still apply today.
None of these are Perl specific, of course. But in my view, a person with these traits, with skills in one or two programming languages, is in the long term far more valuable than a code cutter who only knows today's popular language.
Are you posting in the right place? Check out Where do I post X? to know for sure.
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
Want more info? How to link
or How to display code and escape characters
are good places to start.