my generation was almost completely self taught in programming, and learned the hard way only if we had a research topic that required original types of simulations. there was canned stuff you could read a manual and get it to work. i had one Fortran course as a freshman, and never heard another drop about programming right through grad school. we'd give hints to each other about how to handle the mundane aspects of scientific programming, like, ahem, how to get input from the user and how to handle the copious output from simulations. otherwise we were on our own. our first "bible" was in the mid 80's, Numerical Recipes, which was a cookbook of routines to be used inside our simulations, and for the first time (near the end of grad school) i learned there were better ways to evaluate polynomials than common sense would dictate. it was cookbook recipes, but it opened our eyes. you could walk past the offices of "simulators" and the big yellow book would be on every shelf.
my thesis adviser, as far as i know, and god bless him, has never done a stitch of programming, he was the earlier generation. i did my first astro simulations on a HP 85:
http://www.hp.com/hpinfo/abouthp/histnfacts/museum/personalsystems/0029/index.html
which had a little green screen, a keyboard, and a thermal printer all built into one, running Basic. i switched to Fortran as soon as i had access to the VAXs. plenty of people in my generation still do no programming. i often did it for my friends until they realized they had to learn.
Now a science/engineering student takes a real programming class where they learn some of the standard techniques, plus some of the "big ideas" of programming. but when i joke with my students about how thats going, aren't objects fun, isnt code design fun, they look at me like i am crazy. i wonder if my gen appreciates the CS stuff more because we slogged thru swamp like utter fools.
> What you say about lack of expression, reminds me of my Fortran
> instructor who made us meticulously document each variable, each loop,
> each subroutine, etc.
documentation is part of it. but before Fortran90 there was no way to create interesting data structures. hell, i didnt even know what that meant. Abstract Data Type: HUH????? WHA????
but i can show you simulations where the core of the work, the heavy multiplying and dividing, is done within ten lines of code, mercifully right next to each other. the rest of the heavy breathing is structuring the big picture: what kinds of inputs does the simulation need, do some have defaults, if some take certain values should other values be constrained, and so forth. the ratio of LOC (ratio of i/o, decisions, to number crunching) can easily be 10:1, 100:1 or more, depending on complexity of simulation setup. and for this kind of work, Fortran is not your friend. C was fun to learn, got me into ADTs and all that good stuff. but it was high level scripting languages that opened my eyes. last week i created some cooky data structure that i think i can use for a lot of my front ends to simulations.
the thing i learned the clearest from the CS stuff: code as if there DEFINITELY are mistakes in your code. my life is now so much easier, knowing there is no perfect code. i've been burned enough i now plan contingencies into my code and i am slowly making it to coding heaven. just another 40 years to go.
> My problem was that I got introduced to structured programming in the
> cold war, military mind top-down school, with card readers as input.
i can still "smell" the punch card machines i used a freshman in college. and the sound of the old line printers spitting out reams of stuff. and the glorious sound of the card readers. and who had the tallest stack of cards.
by the way, if you want an ugly language, try hacking Mathematica (MMA). typical of these kinds of systems, you can do breathtaking things with three lines of code, and you can go stark raving mad writing 50 lines of code. if you look at the documentation for MMA you'll see the examples are all two and three lines long. so much for boy geniuses.
and by the way, you should play with Mathematica, you'll love it.
Les
p.s. top of my summer reading list: learning about functional languages intended for parallel processing.