Considering the glacial place at which the industry adopts new languages and paradigms and the trend for weaker languages to tend towards Lisp in terms of features over time, I dunno ... it may be the last interesting production language he learns in his lifetime (Lisp is 50 years old after all and many people are still just now really discovering it).
For me the only other trending language that seems to offer dramatically new ideas for production oriented projects is Haskell. And quite of few of its great ideas have been folded into Clojure.
Who is this "industry" you speak of and why are you limited to what it dictates you use?
But seriously, I know what you mean. Certain, enterprisey shops will always prefer things like Java because they have this perception that it's a "save" language because it is established, meaning they'll always be able to find someone to bang on their Java code. These places, in terms of the technology they use, are largely uninteresting in this context, however. If something comes along and is better, start using it and spreading the word, and help lessen the influence of the legacy on new projects. Eventually Java, etc programmers will be in high demand to maintain old, legacy projects and to help fix the Y2.1K bug or something of the sort.
It depends. If he writes and supports all of his own programs and has success doing so it very well could be. Computers don't care, just as long as it compiles down or uses standardized interfaces.
If he plans to live a lot longer, hire a lot of employees, or collaborate with others on code, then your statement could be valid.
If you really put your mind to it, sure, you could avoid learning any new programming languages. Hell, many people still make a very healthy living working with COBOL.
But if you really enjoy being a software developer and want to be the best at what you do, I don't think you'll ever stop learning new languages.
As humans move from a type 0 to a type 1 civilization [borrowing terminology from Michio Kaku], English is becoming the global language. It's certainly possible to never learn another language after English and be well off in a global economy.
Advantages of English [paraphrased from "ESB" on antimoon]:
-Germanic base has been mixed with the Roman vocabulary, giving it the best of both worlds
-English is succinct. Sentenced translated from English into other languages take up at least 30% more space. English words are concise and so are its sentences.
-Absence of sophisticated grammar systems. A noun can be easily turned into an adjective or a verb and vice versa. [ LISPy, eh? ]
-It's spoken by the most influential and powerful countries on earth. This is not accidental, but perhaps an important underlying cause for their success.
Just as English is dominating and will far outlive anyone's lifespan, the same could happen with a programming language as our languages continue to mature. Python is incredibly close to Psuedocode and LISP\LISP-variants are extremely flexible. It could be quite possible to get by without learning a new language until you either A) die or B) a paradigm shift occurs.
The features you listed apply to other languages much better than they do to English (except the bit about influential countries.) Chinese has a richer vocabulary, is more succinct and has a much less sophisticated grammatic system than English. If you want to get rid of the daunting logosyllabic way of writing, go Korean. Almost the same advantages, with one of the most beautiful and simple alphabets in the world. If you want an even easier language, Bhasa (Indonesian) is probably your choice. Don't forget there's Esperanto, too. Arguably much better suited as a 'world' (or at least pan-Euro-American) language.
In fact, English sucks as a `common' language from a lot of perspectives: it's got a very peculiar grammar. In fact, linguists concentrating their efforts on English has crippled a lot of research, and people are realizing (have been for a while, outside of the Anglo-Saxon area) that the paradigms that worked for English are pretty misplaced for other languages.
English is an almost isolating language with a lot of inflection-based traits, a weird and very specific tense system, remnants of case that confuse the hell out of people, a fiendishly difficult preposition-system to replace case (including weirdness such as preposition stranding and long-distance dependencies,) very rich and productive idiomatic mechanisms and one roller coaster of an orthography (mostly due to its uncompromisingly inconsistent way of adoption of vocabulary.)
Don't get me wrong, I'm not hating on English. All languages are beautiful (except Volapük.) I'm just sick and tired of people with, very often, little to no linguistic authority making claims about the language's viability or suitability to be a language spoken world wide. As a linguist, you hear that all the time, and you just get tired of it :-(
The only bit that matters - the reason I (an expat from an ex-socialist country living in western Europe, but not England) am talking to you over the Internet in English - is the cultural (and primarily militaristic!) dominance of the Anglo-Saxons and their descendants (i.e. Britain, America, Australia.) In fact, it's probably mostly due to Britain's vast empire in post-medieval times.
Exactly, English isn't perfect, yet it's still a great example of how something that's "good enough" can become dominant. I'm not saying it should be dominant, but that it is and will inevitably continue to be (there are more students taking SATs in China in ENGLISH than in the US+Britain). Also I would argue it's not just due to Britain's empire, but Rome's and Germanic tribes creating a long evolutionary path up to American web pages.
Regardless LISP variants are still closer to all spoken languages you mentioned than other programming languages. The main difference why the linguistic languages don't look like LISP variants is that languages can only be processed sequentially\linerarly one sound\word\morpheme at a time, this restriction isn't strictly required for a programming language that is primarily absorbed visuo-spatially. LISP is more similar to ALL spoken languages, so there is a lot of evolutionary indicators pointing to the possibility of long term [ > avg human lifespan ] dominance by a LISP implementation.
"Good enough" is a curious notion. I'm an advocate of "good enough" is good enough, but sometimes it can be quite tricky to decide when something is good enough. And if. Sometimes, you figure it out down the road; and you'll be in deep trouble if you find out it wasn't!
Anyhow, there have been many "good enough" languages — mostly, it depends on cultural factors. Latin is still present in today's traditional sciences (biology, medicine,) French is the language in arts and cuisine, Italian is dominant in music theory, Greek infests philosophy and logics, as does German, which also has a strong foothold in engineering and mathematics. And what do we learn from that? There is no one language. There cannot be one. At least, we haven't figured out a way.
Over time, dominant languages rise and fade. That's why I loved Firefly for incorporating Chinese :-D English will fade (most probably.) Also most probably, it will stay in the computing sector, just like Italian did in the music sector.
> there are more students taking SATs in China in ENGLISH than in the US+Britain
Yeah, that's like saying more Indians write Java code than Americans. What does it mean? Java is "good enough?" For some tasks, but not for all.
That Rome to WWW line of yours is quite eurocentric. Can't put my finger on it, but "American web pages" look different in Asia than they do in the West. The cultural values of ancient Rome had no real influence there — except you mean to imply Babbage influenced C#.
My knowledge of LISP doesn't go beyond programming-book examples. I somehow never got into it — I blame Haskell!. But you're certainly mistaken that language recognition is sequential. For all we know, it most likely isn't. And for Chinese, for example, it really definitely isn't. Reading a Chinese poem is reading backwards, across, down, and up at the same time in order to get the full meaning.
I don't get how LISP is closer to natural languages than to programming languages?
Anyhow, my take on the situation of the OP: if he stays in the sector he's in and doesn't move out before retirement, he's found his last language. Otherwise, different tasks and developments are going to force him to adapt. There is no one best language. We've been trying to find it for thousands of years, and it's been rather fruitless so far.
Especially when you consider that language isn't just spoken words. It's a whole way of thinking. A big part of the culture itself. That's not going to just die off because English speakers are too lazy to learn any other languages.
English is and will be the de facto language of globalization. All of the world's elites speak it in every country. People will speak their local language, AND English. I think this is a given. http://www.youtube.com/watch?v=6ftF8sXzoWk
English will certainly outlast Chinese. The constitution of India is written in English and India will soon far eclipse China in terms of population. I think it's a given, is assumed by most people, and not overly worth arguing
> But you're certainly mistaken that language recognition is sequential.
The initial input and output of [spoken] language is sequential by definition and structure of the ear and voicebox. I simply meant that you can not speak two words or hear two words at the same time in the manner that you can see two words at the same time. You can see indentation in a text document\program, but you have to add extra syntax in spoken language to convey this.
Internal language recognition\parsing is incredibly LISP like. I'll try to add a more detailed explanation of what I mean by this in the future when I have more time.
[ basically when the human brain processes information, there are limited resources, right. The working memory buffer for the human brain can only hold 5-7 "chunks" at the same time. You have to resort to the phenomena of "chunking" to process more information. You should find this article very interesting: http://en.wikipedia.org/wiki/Chunking_(psychology) So basically we use "operators" to chunk things together. We could have a "phrase" operator that chunks a noun, verb, and object together. What's great or genius is that this "phrase", or function, is ALSO a chunk. and you can combine those chunks together in the same manner even if they are functions. This is like LISP: functions are data and data are functions. This is the "big deal" about LISP. It's similar to in the human brain, where everything is a "chunk". As long as you have processed sub-ideas into a chunk and have given a name for that chunk, you can start wielding bigger ideas. ]
[ Spoken languages are all GOOD and reflective of human thought. Anyone is GOOD ENOUGH. The differences between spoken languages are small. The differences between LISP programming languages and non-LISP programming languages are vast. LISP is to thought as Python is to English. LISP is the most similar to an evolutionarily evolved structure (human thought). Therefore a LISP implementation could also share high survivability. And could survive longer than a human lifespan. ]
> What's great or genius is that this "phrase", or function, is ALSO a chunk. and you can combine those chunks together in the same manner even if they are functions. This is like LISP: functions are data and data are functions.
These two sentences have no apparent relation, except that you said they did. Spoken language sentences do not evaluate each other and none of them are apparently functions. Also, spoken languages don't have punctuation…
I think (s)he's saying that human languages have composable, tree-like structures. There's nothing Lisp-specific about that, though. Prolog would work just as well, or ML (human languages may be statically typed), Joy, etc.
Also, I'm an amateur linguist at best, but the recursive structures in human languages generally don't get more than a couple levels deep - the linguistic stack seems to get smashed pretty easily.
> but the recursive structures in human languages generally don't get more than a couple levels deep - the linguistic stack seems to get smashed pretty easily.
> Spoken language sentences do not evaluate each other and none of them are apparently functions
I tried to clarify the proper analogy at the end. LISP is not directly analogous to spoken language (the surface level), LISP is directly analogous to human thought (that interprets language internally). This was really the topic for an article and not a comment rant, sorry.
That's a conjecture at best. Chinese has so far outlasted any language still actively spoken on the planet. In fact, the Chinese writing system is the oldest continually used writing system. The cultural heritage behind this is huge.
And while you're certainly right that India has had a lot of English influence, you shouldn't forget the recent colonization history of India. It's still part of the Commonwealth, in fact. And when I say 'recent' I mean that in terms of some couple of centuries. I have no means of predicting the political state of the world in another couple of centuries. Do you? Thus, I'd be careful to make claims such as "X is going to outlast Y," except you've got very good reason to do so.
> You can see indentation in a text document\program, but you have to add extra syntax in spoken language to convey this.
You're forgetting prosody and gestures, which are an integral part of spoken language. Also, natural language has 'pragmatics,' a process of eliciting and cancelling implicatures and presuppositions. Natural language is anything but linear or sequential. In fact there's usually several layers of information-transfer going on at once.
> Internal language recognition\parsing is incredibly LISP like.
Nope, it isn't. First of all, we have no idea what's going on internally. Neurolinguistics and neuropsychology aren't far enough yet, and at this point, it's just guess work. But what we do know, is that LISP and natural languages live in entirely different complexity classes of language. LISP is context free - and natural language isn't. Probably, it's not quite context sensitive yet, but probably somewhere in between (there's dozens of disjoint sets of language complexity classes between those two.) LISP cannot create, for example, cross-serial dependencies, like they occur in swiss German and Danish are in a complexity class not provided for by LISP-like grammars.
I know about "chunking." In fact, I'm doing research in a related subject (computational semantics and formalisms for representing meaning.) It would all be well and good: you have chunks and operators, and then you write the grammar, and voilá, you've got your NL parser. Just that it's not that easy. Anaphora resolution, world knowledge and linguistic knowledge, pragmatics, weird syntactical phenomena (say, pied piping, etc.) have made this infinitely harder. If all you want to parse is "Hey, give me a hot dog," we've been here for the past 30 or 40 years. That's not hard. If you want to parse the English Wikipedia, it's impossible. You can only approximate.
The differences between spoken languages are vast. The differences between functional and imperative languages (because that's what you're referring to, I think) are minuscule in comparison. I can learn the functional paradigm and pick up any functional language within weeks, probably less (for example, I can read and write Erlang, OCaml, ML and LISP, even though I only really know Haskell and Lua.) In order to learn a new language (even a closely related one, like say from English to Swedish) you'd take at least a year in order to even be able to understand basic conversation or news. It's mostly the vocabulary, but also the speed and the multiple layers of information transfer that I alluded to earlier that make this a lot harder.
It sounds like you've given the topic some thought, but your ideas seem (to me!) all too reminiscent of the optimism computer scientists had in the 50s to 70s or so. People thought computer systems comprehending natural language were just a stone's throw away, because, hey we had all the basic machinery! Well, they weren't. It seems language is a lot more complicated than we all initially thought.
> I have no means of predicting the political state of the world in another couple of centuries. Do you?
We can look at futurists who claim they do. We can look at big trends that have occurred since the Big Bang. And the "futurists" all say we are "globalizing" and becoming more "interconnected". Transforming from provincal economies and governments to world governments and super-national economic trading blocks. And that everyone in the world is learning English. All the world's elites speak English. And the other member's of their community, when they see that the elites know English, force their children to learn English because they want them to grow up to be like the current elite. In Indonesia, there is currently growing concern that their local language is dying off as parents overencourage their kids to learn English from a young age.
> You're forgetting prosody and gestures
Which are also not present when written down. Natural language has to have a verbose enough in syntax to be compressed to the intersection of bandwidth features present in both Oral and Written. Without suffering too high of information loss. In other words yes prosody and gestures are important, by they are supplementary to the core feature set. The syntax also has to be verbose enough to not loose too much information when transferred back and forth between paper and speech. This is not an important requirement for programming, which can exploit its single medium more extensively.
> The differences between spoken languages are vast.
The differences in brain anatomy between those speaking different languages is not. [ A function could contain infinitely many points. Yet it is possible for all these points to all have exactly the same derivative. And once you have modeled the derivative, you have a certain degree of predictive confidence in all future positions of the function. LISP is similar to an underlying derivative of a function generating programming languages, while still being usable as a language itself. ]
>and voilá, you've got your NL parser.
>computer systems comprehending natural language were just a stone's throw away
I completely agree is it nearly impossible to write an authoritative model of processing system of the brain from top-down conjecture. Because semantic association is defined by its relation to other chunks, we will NEVER have a perfect database of these relations, unless we map the human brain. That's why we have computational neuroscience, and are simulating cortical columns on neuron emulators, which will be able to map long before we would armchair philosophize it due to the complexity. I assure you I can very skeptical\pessimistic of "intelligent design".
I think what we can agree on in relation to the OP is that when he says LISP is the last language he'll ever learn it's kind of cheating the question he imposes on himself because it's flexible enough tool to morph into any language depending on the problem domain. And a specie's flexibility and capacity for adaptation is the best measure of survivability.
[ please hit me up via email if you want to drop links to journal articles so I'm not as ignorant to your field of research ]
[ Also please check out this article: http://www.google.com/hostednews/afp/article/ALeqM5jz3FEk2KJ... "Wired youth forget how to write in China and Japan" . English by evolutionarily choosing alphabet over characters has proven more adaptable and survivable ]
>I wouldn't be drawing diagrams of synapses and how the chemical signals flow
I actually think that's a pretty good analogy for what programmers do. You program the give function to accepted the variables nominative (you), accussative(hot dog), and dative(me). Now lets say you want to create multiple functions (give, send, take) that are operators on nominative, accussative, dative and want to reuse code easily. Or you want to use your "give" function to define what a "gift" is. No problem in LISP.
Well yes ... LISP is like a language framework, with which you can evolve your own languages suitable for problem domains.
But I just don't get the correlation between its direct representation as syntax trees and being more natural to people (which the parent was arguing).
A language can have hooks for evolving into what you want, it's just incredibly hard to do it without a LISP syntax. But natural language ain't easy to parse either.
My argument was actually that things modeled after genetically evolved structures share in the advantages of increased genetic fitness inherent in that design. i.e. Survivability and future-proofness. [i.e. the OP may indeed not need to ever learn another language before he dies] It was not an argument that genetically evolved structures are easy to grok.
What do you mean by "Chinese"? There are thousands of what are called "dialects" but in reality they are totally different languages with different grammars and so on. They do share a common script but that doesn't tell much about the spoken language (since it applies to all of them afaik).
English is currently hot, just as e.g. French was before it, but I'd expect that to start changing within the next, say 20 years. I'd expect the US to lose more and more relevance while China is gaining. Something could screw that up, you can never predict the future with any accuracy but I would give these events a higher probability than English becoming the global language.
> Because, you see, as soon as I saw Java, I knew I hated it. I have never written even a single line of Java code, not for money, and definitely not for fun. I think that I already knew, deep down, that it would change me, as a coder. For the worse.
That's just like how I've never been to Argentina, but I saw a picture of it in a magazine and knew for sure that I would hate the country. I had a feeling deep down.
Argentina is in no way a good comparison to Java. Argentina is a beautiful country.
A better comparison (without the sarcasm) would be that you heard someone talk about how fun it is to visit Niger, Chechnya, or Iraq, and you just knew you'd have no fun there. I'd say the same thing happens with Visual Basic, Php and - of course - Java... In that particular order.
Except Java has a poor reputation (on the "fun to program in" scale) and not much in the way of intellectual growth for a programmer (in terms of new, effective paradigms for coding). This is a generalization of the opinions I've read about it, in addition to my own experience.
It's like hearing all your friends saying how much they hated Argentina, and how you would too. They might be wrong, or not, but you still trust them because they think the same way as you.
Java as a language is quite boring. Java as an ecosystem is interesting; its tooling, libraries, and business-centric culture are worthy of respect and some thought, even for us rubyistas. Some of the most generic software has been written in Java. In the flexibility vs expressivity spectrum, many Java libraries pick flexibility and it is neat to see how that is accomplished.
This is exactly the kind of cultish triumphalism that put me off Common Lisp. The inability of many lispers to see lisp, like all languages, as a collection of design tradeoffs instead of the one true way just clashed too sharply with reality for my tastes.
It's certainly true that lisp has been an important testbed for many concepts that have later made their way into the programming mainstream, but I suspect that many of the traits that make a good research language may actually be undesirable in a production language.
I hacked a lot of CL back in 2002-2003 and I've dabbled in Clojure lately. Clojure has a lot of promise but I'm waiting for some of the rough edges to get smoothed out (stacktraces in particular).
I agree about Clojure's rough edges. I'm a beginner, and when something goes wrong it is very opaque to me what happened. That said, I do enjoy the language--especially the baked-in data structures.
As Lisp is very good at adopting paradigms from other languages - the only design tradeoff that I've consistently heard is the syntax - and this usually from people too blind to realize their syntax is hardly better.
So what do you see as a fundamental design tradeoff for Lisps?
people too blind to realize their syntax is hardly better
That's exactly the kind of categorical statement I'm so tired of hearing from lispers. Other syntaxes score better on every metric (terseness, readability, expressiveness) except flexibility. Lisp makes the same design tradeoffs the other dynamic languages do but bets the farm on macros. Over 40 years of historical evidence suggests that most programmers do not find the power of macros adequate compensation for a syntax they find highly unpalatable. It takes a special kind of arrogance to dismiss all of these people as blind.
Except syntaxes die. Syntaxes tend to encode what is possible to describe in a particular language. Eventually people decide what a language expresses is not adequate, they write a new language w/ new syntax to describe a new thing. Lisp adopts the new thing with little in the way of syntactical change.
How do you account for that?
* Over 40 years of historical evidence suggests that most programmers do
not find the power of macros adequate compensation for a syntax they
find highly unpalatable. It takes a special kind of arrogance to dismiss
all of these people as blind.
No 40 years of historical evidence suggest that your syntax will die. C and C++ have survived because of their intimate nature w/ popular operating systems. Lisp has survived because it can evolve. How can you not chuckle that C and C++ are just now getting lambdas and closures?
I had guessed this was about clojure before I followed the link, somehow, I think because in part, I feel the same way. Is this common? Anyone else feel like clojure is, or is on the path to becoming, the perfect language?
I won't say I'll never need anything else or will stop learning new languages, but it feels...complete. I still use C for algorithmically simple, memory- and time-sensitive tasks, and I still use perl and awk for line-oriented text munging, but I feel like all the other languages I used to use for less specific tasks have fallen by the wayside. Java, C++, Python, Ruby...I don't really have a reason to touch these anymore. Am I the only one?
(all this aside, I swear, one of these days I am going to get my f*ing head around type systems and get a workable understanding of haskell and scala)
You don't need to fully understand Scala's type system to write working code in it. The features like Higher Kindred seem intimidating, but you only have to deal with them as a library implementer (and in many cases the syntactic sugar e.g., %> helps gloss over a lot of it).
Unlike with Haskell, type classes ("Higher-Kindred types" in Scala) are just one way to have a certain kind of polymorphism, you also have a more traditional type of polymorphism through traits and sub-classing.
It's probably not the last language that he will ever learn. If he's going to build a major project in Clojure, then he's going to need learn about Java.
That Paul Graham quote
- “Programming languages are not merely technologies, but habits of mind as well.”
Reminds me of an excellent Dijkstra quote, from A Discipline of Programming
- "A most important, but also a most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use."
It seems a natural extension that computing languages affect our logical thought patterns.
In college, I took a class on intelligence testing (I gave a lot of IQ tests that semester). The prof told me that his experience was that computer programmers score noticeably higher on the Verbal IQ scale, moreso than on the Performance IQ scale (these are the two scales the WAIS is divided into).
I am old enough (late 50s) that settling down on just one programming language would not be a bad strategy if I was not a consultant. Maybe.
Over the last several years, I have been hoping to mostly just use Ruby for future work, but in the last 5 years almost half of my consulting jobs used a Lisp language (Common Lisp or Clojure) and the rest mostly Ruby, with some Java.
The Clojure language and libraries are very nice, and I am sure that problems with the development experience like poor stack traces (good work already in progress), etc. will get ironed out soon.
If you are an entrepreneur with your own product or web services based company, then pick one great language and use it until a better great language comes along.
For those of us who enjoy consulting, we will mostly use what best fits customers' needs.
strongly recommend not stopping with clojure. Find other languages outside your comfort zone, that require you to learn about different technologies and different ways of thinking.
You should know at least one language with a strong type system that's closely modelled on the hardware environment. (eg C or Java)
Databases and SQL.
OS-level tracing/debugging languages like Dtrace or SystemTap.
Like many, I've been meaning to learn [some kind of] LISP since I first heard of it. I use OS X, though, and it seems Apple has decided that Java is on its way out. Should I be worried about Java-related incompatibilities or hassles in the future if I start writing a lot of Clojure code?
flag. Not something that I generally do, but (a) clojure won't be in any spellchecker, and (b) your snark adds nothing to the discussion. If you wanted to say "and that language was clojure", you could have left it at that.
My mentor (Art Mellor – scumpa.com) at Cayman Systems gave me two pieces of advice that have stayed with me to this day:
• When you start your company, start it by doing consulting. (See, he already knew I’d caught the Bug.) Get paid to learn the space and develop for your customers, using their expertise and funding, and then turn all that into a product.