If you have to learn just one programming language
blog.srinivasan.biz
blog.srinivasan.biz
This is a very bad sign right here for this article -- using hearsay and preconceived notions in place of facts. Smalltalk actually has one of the most efficient memory models for a high-level OO language, and beats Python and Ruby by a big margin. Gemstone is still one of the better VMs out there, and can run circles around Python and Ruby.
What Smalltalk doesn't have is mindshare. That's enough to reasonably eliminate it. Mindlessly parroting preconceived notions in contradiction to the facts is a very bad indicator for article quality.
That said, Leatherman-like multitools are pretty common among some people, though I'm not sure whether it's just so that they'd have a portable screwdriver, or because they actually need something like a Swiss army knife.
"I strongly recommend that you carry a multitool. There are dozens of species of these remarkable devices now, and for good reason. Do not show them off in a beltpack, because this marks you as a poorly-socialized geek. Keep your multitool hidden in the same discreet way that you would any other set of keys.
"That's because a multitool IS a set of keys. It's a set of possible creative interventions in your immediate material environment. That is why you want a multitool. They are empowering.
"A multitool changes your perceptions of the world. Since you lack your previous untooled learned-helplessness, you will slowly find yourself becoming more capable and more observant. If you have pocket-scissors, you will notice loose threads; if you have a small knife you will notice bad packaging; if you have a file you will notice flashing, metallic burrs, and bad joinery. If you have tweezers you can help injured children, while if you have a pen, you will take notes. Tools in your space, saving your time. A multitool is a design education.
"As a further important development, you will become known to your friends and colleagues as someone who is capable, useful and resourceful, rather than someone who is helpless, frustrated and visibly lacking in options. You should aspire to this better condition.
"Do not lug around an enormous toolchest or a full set of post-earthquake gear unless you are Stewart Brand..."
(the whole thing is well worth a read)
I think his reasons for carrying one a very similar to the reasons you might want a general-purpose, high-performance, relatively popular, high level and concise programming language in your back pocket. For those odd times when you need to consume an API, or decompose a high-dimensional matrix, or simulate traffic flow. You know, at a bar or something.
And of course, "do not lug around an enormous library of hand-rolled lisp macros unless you are Paul Graham."
Never really took off!?!? What planet is this guy living on? Most new Windows software by companies other than well-establish C++ workhouses + all indie work is being done in C# these days.
C# is more fun to work in with each release, as Microsoft courts programmers who can tell a closure from a hole in the ground. Unfortunately, it has a rather anemic community compared to many other languages.
But, yeah, C# is becoming more and more exciting with its new anonymous methods, lambda expressions, and more :)
But it isn't representative of hackers language preference for all languages. Github will almost certainly underrepresent both python and haskell, and bitbucket will overrepresent python.
github is winning though.
This is not, strictly speaking, true. In a best-case scenario, a just-in-time compiler has profiling information available that a static compiler won't have. In the right situations, Java JIT can produce performance on par with or slightly exceeding that of equivalent C code for this very reason.
Anyway, the LLVM and JVM are good examples of JIT optimization. Tracemonkey also has some good ideas, and GHC and SBCL's VMs also show how to write static compilers that do better than C. (LLVM is interesting in that it compiles C to run on the VM, and this C does better than gcc's statically-compiled C. When C is faster than C, it kind of calls into question the validity of the "faster than C" criterion ;)
Programs are generally constrained by just one thing: either CPU, network bandwidth, network latency, user latency, disk I/O and so forth. Why focus on the CPU? Is this hypothetical programmer really going to be writing another git or a program to fold protein molecules, or is he more likely to be writing glue, user interface or one-shot data manipulation programs?
Similarly, multi-threaded programming is hard. If this hypothetical programmer is only learning one language (and thus, by the admission of the article, not very good), why is this suddenly a requirement?
I think he needs to think some more. :-)
There was certainly a time when I pretty much thought the same thing, though. It's unfortunate.
Most developers that like dynamic languages do so because they can write less code, which is exactly what the blog author is saying.
1 - people who write web apps can choose language what they want to use.
2 - PG and others claim that language choice can determine the success of a project.
3 - if you don't like PHP or the LAMP paradigm, at this stage of web history there aren't any clear winners.
4 - switching languages mid-project is perceived as a potential project killer, or at least not very fun.
I wonder though; do we have any empirical data to support #2 and #4? That is, do we know how big a factor language choice is for project success, and do we know if switching languages is really all that hard? Reddit switched languages, from Lisp to Python, and it was not a fatal blow.
I'm wondering if the right answer to "What language should I use" is just "Who cares? Start coding."
My day job is PHP, and I'm determined that my personal projects are not going to be PHP. Unlike the OP I am not as, um, decisive in the face of paucity of evidence, so I have gone down a rathole of evalling other langs (Haskell, Erlang, now looking at Scala).
Also, it's too bad that Clojure is eliminated purely due to syntax. I find well-writte Clojure very easy to read after spending a bit of time with s-expressions. I think that some of its constructs (like loop and recur) are very elegant ways to describe a program. Also, recur, in tail position, is used to implement recursion without overflowing the stack so that's not really a problem for Clojure anymore.
It's a power you can use for lazy rather than good, and I'll admit the results of that are ugly.
But I find the persistent criticism confusing. Either people are confusing "looks ugly" with "hard to decode" or there's a lot more bad perl code out there than I think that is.
Or perhaps perl code is like fish. When it's good, it's good, but when it starts to go bad, it really goes.
(I believe Ward Cunningham has said that Smalltalk's tools are so good that you don't notice that you've made a mess until it's a huge mess.)
I'll disclaim that I agree with him: I too love Clojure/Haskell/Clean/Scala, but I also think his argument is terrible.
The interesting things that I noted about criteria is that there wasn't a direct mention of installed userbase: languages with a million users have a tendency to have tremendous resources available while ones with small userbases have a tendency to have support limited to a few high priests.
Also I noted that many of these questions are dealt with in a yes/no fashion when in fact it's a relative thing. So, for instance, F# may run on mono which gives it cross-platform support, but performance might not be as good, which was enough to eliminate it here. I would have been happier if F# was given partial credit here. I'm sure that observation is true of some of the other points the author makes. It would have been better to use a weighted matrix.
This is indeed a very limited worldview. (I wanted to write something more harsh, but then I told myself to stay polite).
In my opinion, if the constraint is to learn only one language (without specifying why), it should be general purpose language, which allows to produce both scripts and full gui programms, maybe something along the lines of C, C++, C# etc.
I'm incredibly productive in Python, but if I have to pick 'one', I'd rather work from first principles.
It's not like I couldn't make a node.js clone in C/C++ from scratch, if I had to.
It is irritating to me that it is so. Most modern lisps have less matched decoration and only slightly (1-2 levels more) nesting that algol-derivative languages.
As far as I can tell, the sole real point in the “lisp syntax sucks” camp is that prefix arithmetic is unfamiliar. Which may be true (although it is more regular), but how often do people really sit around writing a lot of arithmetic code? For the vast majority of dock-this-with-that programmers, lots of +-*/ arithmetic is rare.
With Lisp I've found this rarely the case. I've also found this with many Perl programs as well, and I've actually worked professionally with Perl.
Of course YMMV
Why not? You can understand haskell programs but not lisp programs?
Lisp should be much less dense by comparison.
It's a modern version of C with garbage collection.
This is a correct use of the word "criteria" as a plural word.
"Criteria #1 eliminates C and Fortran."
"Criteria #7 eliminates D."
These are incorrect uses of "criteria" as a singular word. One criterion, two criteria.
/English grammar pedantry
I hate being a grammar nazi -- but I find I can't help myself. Must have something to do with working in computer code a lot.
Your angry comment, on the other hand really was distracting. If you have a problem helping out people, even non-native speakers, then don't do it yourself.
Here's my revised method of picking:
* make a list of 5-10 languages that seem neat
* spend a few days on each one, learning the syntax and what it's useful for and what
libraries are available
* pick the one you like the bestI agree with the point that you really do need to learn several languages to become a good programmer, though. I just don't think it's possible to be as well-rounded and knowledgeable without doing so.
If you only had to have one power tool
If you only had to have one user
If you only had to read a single book
Perhaps the OP should look for a new line of work; perhaps one doesn't require so much... learning...