Did we need another programming language?
Succinct? APL. Durable? C. Fast? Assembler. Efficient? Get a better programmer.
Once upon a time I collected programming language proficiencies like my children now collect Pokemon. I was proficient in over forty before I lost interest. Snobol app with functions in C, Pascal and Assembly? Sure, been there, done that. The lessons I learned? Over 90% of the operations occur in the libraries. The programming language is just a convenient grammar for accessing the libraries. 90% of the performance lies in selecting the correct algorithm and applying it correctly. Poor programmers find the correct algorithm sometimes accidently, but the incidence is rare. 90% of the longevity involves "absurd limit theory". 90% of security involves checking your inputs. I learned some stuff about hardware problems too: 90% of the time it's the cables.
I taught programming for a while. It turns out you can't teach creativity and curiosity. Either you have them or you don't.
A bad programmer is as likely to produce good code as a poor photographer is to produce a good photo. These things happen by accident, but new powerful tools allow an amature photographer to take many hundreds of of photos, some few of which may be worth looking at. If you need good efficient code the first time and every time, you need good people to write it. The thing is, you're not going to spend a lot of time debugging a photo.
A good programmer starts with a basic understanding of Turing, of Wirth, and the other giants found in the pre-1978 communications of the ACM. He's one with the hardware - exploring the intricacies of its nature and exploring its limits through Assembly and machine code - but he's not mature until he accepts that it's a machine and the underlying machine will change with time. He doesn't do it because he sees some profit in it, but because he's CURIOUS. He sees the development of programming languages in a grand arc, from the partly mechanical machines of yesteryear to subjective interpreters of tomorrow. He knows that every extra step - every data structure that doesn't scale - every unchecked input is his ticket to a forgotten history. He's as passionate about perfection in his mythical creations as any great author.
All great young programmers can be difficult to deal with because they have control issues. Their creations must obey them. This is perhaps the source of their social problems: the machines become interesting because they can be made to do what you want if you command them properly. As a young programmer gains proficiency, he loses humanity until social skills become a debugging task that's NP hard. This can be worked around by associating him with the right geek girl. At least that's what worked for me.
Oh, and you user interface geeks that eat up 70% of the development budget? You're creatives. You don't count. Your work will be forgotten in the next version.
One last other thing I figured out: there are some primitive basics. The first thing I always look at when considering a new language: what are the libraries written in? What of the OS? The compiler, does it compile itself from code written in that language, and will it compile itself to a new hardware platform with appropriate assistance? Can it be cross-compiled to create an operating system for a new and different machine? Answer these questions and you'll know whether the language designers were serious about creating something real, or if their goal is a script accellerator. You'll be about where Kernighan an Ritchie were in 1978.
So... this new F# language? Not interested. When it's compiled with a compiler written in it that runs on an OS written in it and can cross-compile that to a new platform that will boot that OS, load that compiler and compile the necessary apps, maybe then.