Re: What things should successful programmers-to-be learn right now?



[Coming back into this rather late; real life has an annoying habit of
getting in the way of usenet participation.]

In article <1122475287.499966.100830@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
Rob Thorpe <robert.thorpe@xxxxxxxxxxxx> wrote:
>wee wrote:
>> I do understand that I'm vaguely new to the industry.
>>
>> However, more to the point: In what industries are the languages used
>> that I listed above from Dave Vandervies' post? Perhaps an answer to
>> that would be more helpful to all of us than your unfortunately snide
>> comment.
>
>Dave's list is not targetted at learning programming languages it's
>targetted at learning about programming.

Exactly. The OP was asking what you need to learn to "have a shot at
a great career"; you need a lot more than just knowledge about one or
two tools for that, no matter what field you're working in.

More importantly, the list of languages I gave is only the last on a
list of things that it's important to know to be good at programming,
and it's probably the least important; if you can master the rest of
the list, you won't have much trouble learning how to work with any tool
that gets thrown your way.

The key point here is: You'll never become a good programmer by learning a
single tool, or by focusing on skills that directly apply to programming.
The way to become good at anything, and especially highly creative things
like computer programming, is to become good at *thinking* and then
learn how to focus those skills on the task at hand. The list of other
skills I gave is intended to reflect that, and the list of languages
is intended to avoid the "every problem looks like a nail" mindset.
But what you're really *learning* while you're studying these things,
and what you need to learn to be a good (rather than merely "adequately
competent") programmer, is something that's hard to quantify or describe
- it's treating all of the individual things as more than just a set of
unrelated factoids, and to do that requires a set of skills and a view
of the world that most people have to work on developing.


>Repeating Dave's list below:

[which I'm re-ordering a bit for my additional commentary]

>> At least one of:
>> Scheme
>> Haskell
>> SML
>> CAML
>
>These teach you about the power of higher-order programming, lists and
>sophisticated data structures.
>
>> At least one of:
>> Smalltalk
>> Java
>> Objective-C
>
>These teach you about dynamic all-encompassing object-orientation.
>
>> At least one of:
>> Perl
>> Python
>> sh+awk+sed
>
>These teach you about throw-away programming and text processing.

All of these, besides being useful skills on their own when they're
applied appropriately, also teach you (when taken collectively) to not
take a one-size-fits-all approach to solving problems; once you've gotten
your brain wrapped around two or three different programming paradigms,
you'll have had a lot of "This would be a lot easier in $other_language"
or "$other_task would have been a lot easier if I'd known this when
I was doing it" moments, and those are probably the most important
tool-specific things you'll ever learn.

You'll also, if you're like most people, have written your share of
"language X in language Y"-type code, and have figured out why that's
usually not a good idea and how to do it properly when it actually is,
by the time you've learned three or four completely different languages.


>> At least one of:
>> Forth
>> Prolog
>> Postscript
>
>These teach you about stacks.

More than stacks (what little I know about Prolog indicates that it's
not actually stack-based, though I could very well be wrong about that),
these will introduce you to a way of looking at things that is thoroughly
wierd compared to the world-view most programming languages are based on.

Even if you never actually use them (and there's a good chance you won't;
they tend to only be found in specialized environments that they fit
well), having managed to twist your mind up into a form that lets you
truly understand them is an extremely useful horizon-expanding exercise.


>> At least two of:
>> FORTRAN
>> C
>> C++
>
>These are very common languages that a programmer should know at least
>a little.

Yep. Even if specific tool-based knowledge isn't sufficient to make
a good programmer, you still need to know specific tools to actually
get anything done, and most real-world jobs will at least touch one of
these three.
(I almost added COBOL to that list, too, and it wouldn't be inappropriate
to do so.)

> C and Fortran are traditional structural programming
>languages.

Learning languages for reasons like that is less important for
structural/procedural than for most other paradigms; it's an important
skill to have, but it seems to be the one that most people understand
intuitively (and shows up in small pieces in a few of the others),
so it's likely to end up being reasonably well-developed even without
consciously focusing on it.

> C++ is an attempt to integrate many different paradigms
>together into one language.

....and is worth learning if only to see what a monstrosity you end up
with when you try that.


>Some of the above are in heavy commercial uses, some aren't, but much
>can be learnt from each of them that can be applied to other programs
>in other languages.

Yep, and even more so, the process of learning them will teach you
things that can be applied to other programs in other languages, and
to programming-in-general.


>The languages you learn every last detail of should be those that are
>commercially used. But it's very educational to learn the principles
>of many others.

Well, sort of. The languages you learn every last detail of should
be those that *you* use; but you won't know what those are until you
start using them (and they'll probably change over time anyways), and
learning the principles of a bunch of others makes it a lot easier to
pick up the ones you need when you need them.


dave

--
Dave Vandervies dj3vande@xxxxxxxxxxxxxxxxxxx
> Genghis Khan, Immanuel Kant.
In today's lesson, we learn that brute force is more productive than thinking.
--Chris Suslowicz and David P. Murphy in the scary devil monastery
.



Relevant Pages

  • Re: How come Ada isnt more popular?
    ... FP doubts the superiority of the style in general (they are bitching ... relevant mailing lists. ... All common programming languages are Turing ...
    (comp.lang.ada)
  • Re: EE Student, Edit, Proposal Masters, Help (concepts of functional programming, symbolic programmi
    ... A few comments on Symbolic and Functional Programming ... Symbolic programming languages fall under two categories, ... types, lists, expressions, primitives and variables. ... The assignment chain is not altered by evaluation. ...
    (sci.math.symbolic)
  • Re: Scheme as a religion
    ... I'm a newcomer to Scheme. ... I started programming early, on Apple's Hypercard because my family had ... brand new C# had a consistency that I found lacked in other languages ... instance you can have lists of functions, or list of list of functions, ...
    (comp.lang.scheme)
  • Re: Is Unicode character a vowel?
    ... Some years ago I became convinced that we are teaching programming all wrong. ... acquired some books on infant learning and language learning, ... English by saying "A noun is a name word, and names a person, place or thing. ... Not the height of foreign languages but weird enough to notice. ...
    (microsoft.public.vc.mfc)
  • Re: Lisp Ruby Scheme
    ... :>: Someone has stated that languages teach you to think inside ... :> teaches you that particular programming style. ... will probably make you a better Scheme or Lisp programmer. ... this is also part of the learning. ...
    (comp.lang.scheme)