Old timer here ...<br><br>When I learnt programming (1967) , <br>I could choose between FORTRAN and (it was rumoured, Algol)<br>but nobody knew anything about Algol so it was FORTRAN.<br><br>The turn round time for a program was three weeks<br>
<br> week 1 - write code on paper forms - send to computer center to be turned into punched cards<br> week 2 - review punched cards, if ok send to machine<br> week 3 - results<br><br>The compiler helpfully stopped at the first syntax error which got you back to week 1 -<br>
so if you had say ten errors in your program it would take 30 weeks to get it running.<br><br>This is a pretty good environment - teaches you not to make mistakes and to think first.<br><br>By about 1970 I was at university and turn round times were down to 4 hours<br>
and you could punch your own cards - it was still FORTRAN <br><br>By 1974 I got access to a computer -- a honywell DDP516 - with a colossal 32 KB memory.<br>So the 474 pass FORTRAN compiler could compile a hundred line program in less than a week<br>
(or so ...)<br><br>Things improved - I went to CERN and used the CRAY1 this could compile 100K lines of<br>FORTRAN in 1 picosecond (ie about a zillion times slower than my mobile phone today)<br><br>Still Fortran.<br><br>
In 1974 (ish) I got to play with a DEC10 - Now I could write FORTRAN, Basic, assembler<br>and it had time-sharing (wow) turn round times of seconds. If I'd been In the USA I'd be Bill Gates,<br>but this was Edinburgh.<br>
<br>In 1976 I got a job programming a NORD10 in FORTRAN/Assembler and it was really fast<br>turn round times of seconds.<br><br>In 1980 ish I was still programming in FORTRAN - I forget the name of the machine<br>all files were in one directory, no full-screen editor, no revision control system,<br>
I wrote about 150K lines of FORTRAN for it.<br><br>1985 I joined Ericsson - wow a VAX11/750 - new languages to learn. Bye bye FORTRAN<br><br>I learnt (with various degrees of proficiency) Lisp, Prolog, awk, bash, smalltalk, TCL,<br>
and became proficient in Prolog (aggghhh - the beauty ....)<br><br>I also played with just about any language I could get my hands on (ML, forth, ...)<br><br>Then I (1986) got into my Erlang Phase (I couldn't really learn Erlang, 'cos it didn't exist,<br>
so I invented it) - it was really an outgrowth of Prolog+Smalltalk with a bit of error recovery<br>concurrency and distribution throw in.<br><br>Then I learnt (badly) C - But Mike Williams said my C was crap and looked like Fortran so he <br>
binned my C ... (why use malloc and free and pointers anyway ...)<br><br>I saw C++ coming and read the book - or at least tried to read the book - there's a dent<br>in the wall behind my piano, where the book hit the wall - Improvements to C should make things<br>
easier not more complicated, I thought.<br><br>Time passed.<br><br>I tried Java (not impressed, ok it's better than C++, but oh so verbose, I used to get<br>programmers "white fingers" when programming FORTRAN you have to write hundreds of lines<br>
to do the smallest thing - Java seemed similar - so verbose) - I also (later) tried<br>Python (ok), Ruby (ok), Lua(better), Javascript(I like :-)<br><br>It's actually taken me quite a long time to learn all these languages, and they didn't<br>
all come at once. I had a good 15 years of FORTRAN - long enough to get good at it,<br>10 years of Prolog, 20 years of Erlang etc.<br><br>I also had a long time to assimilate the new ideas - the ideas in programming come pretty slowly<br>
- once every twenty years or so somebody has a really good idea, programming<br>today hasn't improved much in the last 20 years - it was mess then and it's still a mess.<br><br>IDE's and revision control systems have just made matters worse - now you have all the<br>
old versions of the mess as well as the mess itself, and the IDE means you can't even see the mess.<br><br>The best IDE in the world is your BRAIN - it's a zillion times better than these<br>clicky things.<br><br>
What's this got to do with education?<br><br>Suppose you're starting off.<br><br>You can choose between twenty odd languages (all of them good for one reason or another)<br>what took me 40 years to learn, you must try to understand in 2-3 years, this is just not possible.<br>
<br>What languages should a beginner learn, what languages should a school teach?<br><br>Now we get to the paradox of choice - because there are so many alternatives it becomes<br>impossible to choose.<br><br>Old timers say "choose the language appropriate to the problem" when you know 20 odd<br>
languages (with varying degrees of proficiency) this is easy to say - but If you know<br>two languages Java and C then this isn't much help.<br><br>There are literally problems where the solution in a CLP language is a few lines<br>
and is thousands of lines in C.<br><br>What would I recommend learning?<br><br> - C <br> - Prolog<br> - Erlang (I'm biased)<br> - Smalltalk<br> - Javascript<br> - Hakell / ML /OCaml<br> - LISP/Scheme/Clojure<br>
<br>A couple of years should be enough (PER LANGUAGE).<br><br>Notice there is no quick fix here - if you want a quick fix go buy "learn PHP in ten minutes"<br>and spend the next twenty years googling for "how do I compute the length of a string"<br>
<br>The crazy think is we still are extremely bad at fitting things together - still the best<br>way of fitting things together is the unix pipe<br><br> find ... | grep | uniq | sort | ...<br><br>and the *fundamental* reason for this is that components should be separated<br>
by well-defined protocols in a universal intermediate language.<br><br>Fitting things together by message passing is the way to go - this is basis of<br>OO programming - but done badly in most programming languages.<br><br>
If ALL applications in the world were interfaced by (say) sockets + lisp S expressions<br>and had the semantics of the protocol written down in a formal notation - then we could<br>reuse things (more) easily.<br><br>Today there is an unhealthy concentration on language and efficiency and NOT on how things fit together and protocols - teach protocols and not languages.<br>
<br>And teach ALGORITHMS.<br><br>Cheers<br><br>/Joe<br><br>(The dates in the above are approximate)<br><br><br><br><br><br><br><br><br><br><br><div class="gmail_quote">On Thu, Jan 24, 2013 at 6:27 AM, Rustom Mody <span dir="ltr"><<a href="mailto:rustompmody@gmail.com" target="_blank">rustompmody@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, Jan 23, 2013 at 10:14 AM, Richard O'Keefe <span dir="ltr"><<a href="mailto:ok@cs.otago.ac.nz" target="_blank">ok@cs.otago.ac.nz</a>></span> wrote:<br>
</div><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div> </div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">And Rob Hagan at Monash had shown that<br>
you could teach students more COBOL with one semester<br>
of Scheme and one semester of COBOL than you could<br>
with three semesters of COBOL.<br>
</blockquote></div><div><br>Nice! One of the difficulties in being a teacher is that we know:<br>- Yes, facts are important.<br>- Learning them is more important<br>- The learning-curve more so still.<br><br>In established disciplines like music-education this is a commonplace.<br>
If we challenge the student too little, they lose interest; too much and wrong habits get fostered and set.<br><br><br></div><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
One problem is that Computer Science departments simply do not have<br>
the time to teach everything they need to teach. Students want to<br>
leave in 3 years with qualifications an employer will like, and<br>
employers want 'practical' languages in CVs. I have a colleague<br>
who cannot spell because he was taught to read using the Initial<br>
Teaching Alphabet, so I'm less convinced about the educational<br>
benefits of neat languages than I used to be.<br>
</blockquote></div></div><br>The problem in CS is that we do not agree (or even know) what is easy, what is hard and how to calibrate from easy to hard. How many established teachers know that concurrency can be easier than it is in C/Java?<br>
<br>In this respect I maintain a list of traditional CS-edu-mistakes at<br><a href="http://blog.languager.org/2011/02/cs-education-is-fat-and-weak-1.html" target="_blank">http://blog.languager.org/2011/02/cs-education-is-fat-and-weak-1.html</a><br>
and<br><a href="http://blog.languager.org/2011/02/cs-education-is-fat-and-weak-2.html" target="_blank">http://blog.languager.org/2011/02/cs-education-is-fat-and-weak-2.html</a><br><br>On the other hand I should mention that I just finished teaching a course on erlang.<br>
I found it very hard. I simply assumed that it is because I am too much of a noob to really 'get' it yet. [When one has taught programming for 25 years, its funny how often one hears a beginning student protest: "The compiler has a BUG!"]<br>
<br>However after seeing Simon's comments below, I feel a little mollified that perhaps I am a fool but not an utter fool :-)<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<div class="im">
On Wed, Jan 23, 2013 at 9:06 PM, Simon St.Laurent <span dir="ltr"><<a href="mailto:simonstl@simonstl.com" target="_blank">simonstl@simonstl.com</a>></span> wrote:<br><br>
I was delighted to find Erlang's shell, which made using this compiled
language much friendlier. I was amazed by its remote capabilities. But
then I was bluntly disappointed by the difficulty of using it as an
environment - even a trivial environment - for interactive applications.
It became clear quickly that the beauty of my examples would have to
be abstract, because there wasn't going to be much I could show without
endless preamble to distract readers from the basics.<br>
<br>
Erlang (or maybe it will be Elixir) has the power to be a language that
transforms computing. It has the right tools to solve common problems.<br>
<br>
However, it may take some extra work to make it easier for people to see that!</div><div><br><div>
<br><div class="im">
Thanks,<br>
-- <br>
Simon St.Laurent<br>
<a href="http://simonstl.com/" target="_blank">http://simonstl.com/</a><br></div></div>
<br></div></blockquote><br>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br>