How Heraclitus would Design a Programming Language
CowboyRobot writes "Developer of Smalltalk Alan Kay has an interview on ACM Queue where he describes the history of computing and his approach to designing languages. Kay has an impressive resume (PARC, ARPAnet, Atari, Apple, Alan Turing Award winner) and has an endless supply of memorable quotes: 'Perl is another example of filling a tiny, short-term need, and then being a real problem in the longer term,' 'Once you have something that grows faster than education grows, you're always going to get a pop culture,' 'most undergraduate degrees in computer science these days are basically Java vocational training,' 'All creativity is an extended form of a joke,' and 'nobody really knows how to design a good language.'"
You wear wraparound sunglasses, even indoors. You wish your mother would let you ride a motorbike. You tell your friends you're pulling in $50,000 a year and $2,000 a month "playing the stock market" but in reality you're only bringing in half that and your dividends from MSFT havn't been good in years. Your non computing friends all turn to you for help; you only charge $30 an hour. Your collegues talk about you behind your back. Your workplace nickname is likely to be "The Asshole". Unlike the Linux fanboys, you actually try to pick up dates in bars but women laugh at you.
ou think you're so cool you hurt. You have mirrors on every wall in your "loft apartment", which is really a grimy little apartment next to a guy who plays Guns 'n Roses at 3am. All of your furniture is from Ikea. You sometimes think that changing your name to "Steve" would be "pretty cool". When you go to bars you only drink Miller Lite. No body ever asks you for help with their computers because they know you don't know anything but OS X, even if you do tell them you "run Unix" now. Your friends openly laugh at you.
You regularly give $10 bills to homeless guys because you have too much money. Computers baffle you, but you enjoy looking at pictures of naked women. You don't know what Linux is, but you continually bugged the IT guy at work about your computer he installed Linspire on your machine.
You shop at GAP. You probably used to use a Mac. When you saw the multiracial image used as a desktop picture and heard that this operating system came from the same country as Nelson Mandella, you knew it was for you. You meet with your friends in fair-trade coffee houses and talk about the eventual overthrow of evil corporations such as Microsoft and Starbucks. Like the Linspire user, you have very little real knowlege when it comes to computers but you would never use your computer to look at pictures of women degrading themselves.
You've been "into computers" for ohh, one or two years now and fancy yourself as "a bit of a hacker". Wouldn't know C from C++, or even Perl for that matter. Older Gentoy users may be building their homes from matchsticks. You've explained to all your friends that your matchstick house will have an "optimised floorplan". They've tried to tell you that your house violates every known building code and law in your area, but you've ignored them so far because you can't read those complicated regulatory documents.
Much like the Gentoy user but you'd also be into sadomasochistic sex if you could get it. You're not just building a house from matchsticks, you're planing to grow the trees to make the matchsticks. You've cleared some land but don't know what to do next because you havn't read the books you've got, so you've posted to alt.arborists.newbie asking for help. It's been three days so far and no one has replied. You remain hopeful.
Hello Gentlemen,
I'm a first year programming student at an Ivy League school and I've
just finished my Visual Basic classes. This term I'll be moving onto
C++. However I've noticed some issues with C++ that I'd like to
discuss with the rest of the programming community. Please do not
think of me as being technically ignorant. In addition to VB, I am
very skilled at HTML programming, one of the most challenging
languages out there!
C++ is based on a concept known as Object Oriented Programming. In
this style of programming (also known as OOPS in the coding community)
a programmer builds "objects" or "glasses" out of his code, and then
manipulates these "glasses". Since I'm assuming that you, dear reader,
are as skilled at programming as I am, I'll skip further explanation
of these "glasses".
Please allow me to make a brief aside here and discuss the origins C++
for a moment. My research shows that this language is one of the
oldest languages in existence, pre-dating even assembly! It was
created in the early 70s when AT&T began looking for a new language to
write BSD, its Unix Operation System (later on, other companies would
"borrow" the BSD source code to build both Solaris and Linux!)
Interestingly, the name C++ is a pun by the creator of the language.
When the first beta was released, it was remarked that the language
would be graded as a C+, because of how hideously complex and unwieldy
it was. The extra plus was tacked on during a later release when some
of these issues were fixed. The language would still be graded a C,
but it was the highest C possible! Truly a clever name for this
language.
Back to the topic on hand, I feel that C++ - despite its flaws - has
been a very valuable tool to the world of computers. Unfortunately
its starting to show its age, and I feel that it should be
retired, as COBOL, ADA and Smalltalk seem to have been. Recently I've
become acquainted with another language that's quite recently been
developed. Its one that promises to greatly simplify programming. This
new language is called C.
Although syntactically borrowing a great deal from its predecessor
C++, C greatly simplifies things (thus its name, which hints at its
simpler nature by striping off the clunky double-pluses.) Its biggest
strength is that it abandons an OOPS-style of programming. No more
awkward "objects" or "glasses". Instead C uses what are called
structs. Vaguely similar to a C++ "glass", a struct does away with
anachronisms like inheritance, namespaces and the whole
private/public/protected/friend access issues of its variables and
routines. By freeing the programmer from the requirement to juggle all
these issues, the coder can focus on implementing his algorithm and
rapidly developing his application.
While C lacks the speed and robustness of C++, I think these are petty
issues. Given the speed of modern computers, the relative sluggishness
of C shouldn't be an issue. Robustness and stability will occur as C
becomes more pervasive amongst the programming community and it
becomes more fine-tuned. Eventually C should have stability rivaling
that of C++.
I'm hoping to see C adopted as the de facto standard of programming.
Based on what I've learned of this language, the future seems very
bright indeed for C! Eventually, many years from now, perhaps we'll
even see an operating system coded in this language.
Thank you for your time. Your feedback is greatly appreciated.
> The itching wasn't so bad, but the burning drove me nuts.
Sounds like Hera shared more than her clitus.
Sheesh, evil *and* a jerk. -- Jade
nobody really knows how to design a good language.'
Kernigan and richies C language being an exception.
Notwithstanding the grammar mistake--I hope editors will have corrected it before I finish writing this comment--it is not "How [Would] Heraclitus ... Design a Programming Language" but rather "What Programming Language Would Heraclitus Design." On the other hand if you are wondering how should you desing and implement a programming language, I would suggest targetting Parrot which makes implementing compilers 1000 times easier than ever before, not to even mention future interoperability and e.g. access to the entire CPAN from the level of your own brand new language, effectively solving the most important problem of new languages: there are no libraries so people don't write anything, and people don't write anything so there are no libraries. Good luck.
Sincerely,
Pan Tarhei Hosé, PhD.
"Homo sum et cogito ergo odi profanum vulgus et libido."
I'd disagree that there aren't people who can design decent languages. The problem is that they can't market them, and that developers continue to go back to the brain-dead syntax of C as if looking like C was an aspiration for a language.
Languages like Ada, Eiffel etc (which yes I have used commercially) are brilliant from a language perspective, especially for large projects. The trouble is developers would prefer to write something in 5 characters than 30 characters in a mistaken belief that they are being more productive and that typing is the longest task they undertake.
When you get into more "esoteric" areas like goal driven programming or agents then the languages become better, because the people using them are more aware of the purpose of the language and aren't constrained by a belief that it has to look like C.
C# and Java are great example of languages that took on that syntax and many of the constructs as its easier to get a language accepted when it looks like C than when a developer has to learn a new syntax that will in the long run be better.
The problem isn't language designers its us developers, we don't want to spend a week learning a new syntax for a loop, we want to use what we used before. In other words we are luddites.
Smalltalk was okay, but I prefered Eiffel, Java and C# are both by comparison rubbish, but they have better GUI libraries and marketing departments.
An Eye for an Eye will make the whole world blind - Gandhi
Perl is a very powerful language to write small tools in the UNIX philosophy. It works very well. It requires some level of competence in the user, but so does every advanced tool. And it is not a general-purpose language.
Frankly, without Perl my work would be far harder.
I also like Eiffel. Guess I am one of those scary people that actually use different tools for different tasks and do not spam the world with simplistic, general and irrelevant statements. about
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
nobody really knows how to design a good language
s/good/universal/
PHP is good for web programming
Perl is good for system scripting
Java is good for object manipulation
C++ is good for GUI
ADA is good for secure stuff
Regexp is good for substitutions
ARM/Assembly is excellent for embedded apps (depending on your platform)...
Trolling using another account since 2005.
Waka waka bang star tick tick hash,
Caret quote back-tick dollar dollar dash,
Bang star equal at dollar under-score,
Percent star waka waka tilde number four,
Ampersand bracket bracket dot dot slash,
Pipes curly-bracket bang comma comma CRASH.
Also: Isn't it odd that perl is the one language that hardly ever makes it past the slashdot lameness filter?
~Wx
sig?
That gui is nothing more or less than Computer Associates "CA UniCenter TNG", which is a systems management thingummybobber. I remember going to a demo for it in 1998 (or was it earlier?).
^laughed my ass off
but still funny
It was in Dobbs' Lightning that I first read Tux Sneezed, which I still think is a rip-roaring good yarn. The scene where Atlanta Hope sees Niklaus Wirth and it's her old *ahem* "boyfriend" with the gaunt cheeks, and he said "I am Bob Dobbs", man, that's writing. The 103-page long speech afterwards, explaining the importance of strong typing and showing why all the anti-Heracletians are destroying civilization by destroying strong typing, certainly is persuasive, especially to me who's got three (going on four) contracts, each of which share the same include files. "Without strong typing there can be no civilization."
Her nonfiction book, "Antitrust: The Unknown Ideal for the New Heracletian" is, I think, a distinct letdown, but the Dobbs' Lightning bumper stickers sure give people the creeps.
I met Atlanta Hope at the time of the IEEE Committee Riots. I was in the thick of it (you have no idea how bizarre civil war gets when one side uses nerf weapons as a large part of its arsenal), and met Atlanta herself where the last stand was being made. She grabbed my right arm and howled something like "War is the Health of the State! Conflict is the creator of all things!"
Seeing as how she was on a heavy Heraclitus wavelength, I quoted with great passion, "Men should fight for the Laws as they would for the walls of the city!" That won her, and I was Atlanta's personal lieutenant for the rest of the battle.
(Epilogue: Heraclitus -- He was apt to say odd things. Once he even wrote that "Religious ceremonies are unholy." A strange duck.)
yes or the most refined troll this week
I would suggest targetting Parrot [slashdot.org] which makes implementing compilers 1000 times easier than ever before,
In light of more than half a century of dynamic language history, that's just astounding hubris. By comparison with systems like Lisp and Dylan, for example, the Parrot system is still enormously complex, limited, and cumbersome from the programmer's point of view. And compared to Smalltalk, Perl/Parrot isn't even in the same league when it comes to programming environments, browsers, and other tools (in fact, very little really is).
Kay's example of Perl as a language that reinvents the wheel poorly is as appropriate today with Parrot as it was for earlier versions of Perl. The fact that Perl is useful in practice (I use it all the time) because it has lots of libraries and ports doesn't change the fact that its foundations are poorly thought out.
But Perl! Ah, Perl! Such a bundle of contradictions! It violated every rule I held dear about language theory, and was a better language for it. Perl doesn't try to be a theoretically perfect language for any particular theory of linguistic perfection. It has principles, but it is not a slave to those principles. It has a degree of consistency, but never a foolish consistency.
No language on Earth has made me rethink my concepts of "what makes a good language" more than Perl.
proof, n. A demonstration that a conclusion is implied by certain premises and axioms.
I kindof get the impression Kay hasn't looked at modern lisp as much as historic lisp - for starters, lisp has had structured data for, well, decades (no, lisp doesn't just do symbols and lists, okay?), and while us lispers applying lessons from compsci type theory piecemeal to practical lisp drives the static-typing bigots/purists into insane flamewars, the existence-proof of the applicability of such lessons that availability of type-inferencing lisp compilers such as CMUCL and SBCL shows that Kay's comments about lisp and types are again, while not exactly wrong, are mostly applicable to the lisp of yore (and with, lisp, we're really talking _yore_, compared to almost any still-used language around today except FORTRAN), not ANSI Common Lisp.
So I don't particularly like his pigoenholing of lisp - he says there were three working extensible languages, and smalltalk was one of them, kindof not mentioning however, that lisp _wrote the book_ on extensible languages. Every good lisp program extends the vocabulary of the lisp language into the problem domain (a characteristic shared with good Forth).
I confidently predict something vaguely recognisable as "Lisp" will outlast pretty much every other computer language on the planet. You see, new dynamic languages have a choice when they get to a certain point (a choice e.g. python is now facing) - do they add the remaining features of lisp and thereby "risk" being classed as a reinvented dialect of lisp, or refuse those features, maintain their independent identity, but forever cripple their language compared to lisp?
That GUI was a standard GL demo on every Silicon Graphics workstation. It is called "buttonfly" and it's basically a 3d file manager. Nothing special about it.
I'd disagree that there aren't people who can design decent languages. The problem is that they can't market them,
No, the problem is that the people who know a lot about languages know little about application domains, and the people who know a lot about application domains know little about how to design languages (or at least don't spend much time on it).
That's why languages like MATLAB dominate scientific computing and languages like Perl, PHP, and Java dominate web computing, and why languages like CAML, Haskell, Lisp, and Smalltalk have never ended up being good general purpose languages.
The problem isn't language designers its us developers, we don't want to spend a week learning a new syntax for a loop, we want to use what we used before. In other words we are luddites.
Programmers contribute to the problem. But while many people have syntactic hangups, even more of them just "don't get" a different approach to programming at all.
But I think that's as much as a function of the fact that a developer today is standing on the shoulders of giants more than ever.
To quote Isaac Newton, "If I have been able to see farther, it is only because I have stood on the shoulders of giants."
Frankly, we've hit a point where there's a lot less "science" in Computer Science, or rather, the need for such training in many programming jobs.
There's nothing wrong with a well rounded education but for some people they don't have the time or inclination to take on full engineering curriculums (as I did).
While I don't mind have gotten a rounded education in light of where tech careers have gone, it's too bad I didn't follow my father... construction. Given his real estate holdings, I doubt I will reach his station in life (economically) if I stay on a pure tech track... highly unlikely.
So if CS degrees are nowadays more about vocational training, so what. A tech degree of any kind, no matter how full of yourself you are, is not going to take you where it once might. That's reality. For all the noise we hear about a focus on math & science, it seems to me to be rendered somewhat moot since some Big Wig Biz guy is going to offshore such work anyway. So I ask, what's the point?
Don't get me wrong, a good foundation in math is good, we just don't all need to become math majors...
If you manage to learn and apply algebra, you can at least solve some practical math problems. But considering some of the stories of people who can't deal with fractions, well, obviously we're failing somewhere in the math department.
Anyway, just rambling now...
-M
What about the VMS fanboy, we wear cardigans, hush puppies, tweed hats and smoke pipes. We don't normally "shop" but when the leather elbow patches can no longer hang on or the felt is just too floppy, we vist the church op-shop. We always have a pencil and pad in our pocket and a small cylindrical slide rule for a quick estimate. Tuesday trivia night is our social highlight of week and the hot chocolate and lamingtons are wonderfull. We have wives but have grown to realise sex is really just another sports activity and would much rather play with the train set in the shed.
Whoever modded the PP a Troll needs to learn how to laugh at themselves.
Viva-la-difference
Disclaimer: I know jack-shit about VMS or French spelling.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
Best satire on the uninitiated CS newbies I have read. It is obvious that the author has a grunge with these newbies' existence in the Ivory League schools --- himself probably being a staff or senior there, or has encountered such persons during conference or at the workplace. A very lucid probe of the post-tech-bubble-era game-playing wanting-to-make-it-big-without-the-out-of-date-the ories young-CS-punk mindset.
In any case, do write more!
Perl fills a 'tiny short-term need'? Is that why Morgan Stanley, RyanAir, Amazon, Ticketmaster and even increasingly Google to name but a few are using it for real, business-critical applications?
I'm so sick of all this anti-Perl talk. I write powerful applications in Perl and they are definetly not 'write only'. If anyone writes a 'write only' program in any language then it is the programmer who is at fault. Perl assumes a bit of intelligence on the programmer's side, rather than adopting Java's policy of bondage. And contrary to what a previous comment said, Perl is a general purpose language (with excellent built-in data structures and regular expressions, and a convenient and expressive syntax).
This guy might have an impressive [sic] resume, but he is badly showing his ignorance about Perl.
I strongly disagree. Not all of us are a bunch lazy idiots as you imply. If I didn't want to spend a week learning a new syntax for a loop I wouldn't have finished reading a second Perl 6 book yesterday, now would I? I have already spent man-months learning the language that is not even fully designed yet, so I would appreciate if you kindly exclude me--and most of Slashdotters--from your hasty generalization, for even though I would tend to agree with you that most of people in general are incompetent idiots, I believe that Slashdot community is a rare exception to this sad rule, or otherwise we wouldn't be so enthusiastically discussing the possibility of designing a Heraclitean programming language with its roots in the philosophy of ancient Greece--which nota bene would be an interesting addition to postmodern languages we already have. But even though I disagree with your premiss, I fully agree with your conclusion that Java and C# are rubbish, that of course is undeniable. But this conclusion by itself is quite useless unless we answer the question why they are the way they are. Why does the competence of your proverbial marketing department is nearly without exception reversely proportional to the technical advantages of the technology in question? When we answer this question, a lot of other answers will become clear.
Sincerely,
Pan Tarhei Hosé, PhD.
"Homo sum et cogito ergo odi profanum vulgus et libido."
the one the little girl was playing like with a video game (first geeky girl I saw... frightening)...
I find scary that:
1. You talk of her as if she wasn't a fiction character.
2. In Jurassic Park, with all those dinosaurs around, you found the little girl frightening.
Nelson Mandela isn't from the Congo.
Thanks,
--
Matt
ClutterMe.com - easiest site creation on the Net. Just click and type.
PHP is good for web programming
Java is good for object manipulation
C++ is good for GUI
ADA is good for secure stuff
Regexp is good for substitutions
ARM/Assembly is excellent for embedded apps
Perl: All of the above.
Which is why for years people have been writing CGI, QA and Admin scripts in Smalltalk.
Sanity is the trademark of a weak mind. -- Mark Harrold
The comment that computers have improved 50,000 times and benchmark performance has improved only 50 times agreed with my experience. When we had feeble machines, we had to be efficient or our stuff wouldn't work. Now, we just write any old thing that works no matter how bloated.
There is one place where you will find people who can program efficiently C. These would be the people who program things like DSPs and micro-controllers and even the humble PIC. Our college produces such people and they are in high demand. If you want a playground where new and innovative ideas about programming will be welcomed, it would be the embedded world. Given that you can produce any architecture that you want on an FPGA the hardware shouldn't be a barrier to good design.
I am curious about the Burroughs machine mentioned in the interview. Can anyone give me an overview of it?
How Heraclitus would Design a Programming Language
Err.... I don't know... It's all greek to me!
Mod parent funny!
The guy's name was Heraklitos, for Zeus' sake. He was Greek, not Roman.
Yoohoo, moderators!
complaining that young people today just don't understand anything, and that music they listen to, well, in my day.....
Yes, Mr. Kay puts forward some great ideas but the whole tone strikes me as whining. Smalltalk was great and as he says there are many new and interesting ideas out there now, why doesn't he implement them in an accessible way and drop the attitude that intellectual lighweights have ruined programming.
development.lombardi.com
They're the greatest... and so rare.
You have got it so backwards, I don't even know where to start! For starters, C++ is NOT older than C - it's C's f***ing descendant! C was invented in the 1980s by the Borland corporation (it was invented as Turbo C), which was competing with Microsoft's QBASIC. C++ was created by Microsoft as an attack on Borland - perhaps you've heard of Visual C++?? Have you *ever* heard of Turbo C++? But you probably haven't, cos you're such a screwed up newbie.
n -the-leg patent.
Oh, and BTW - an *operating system* in C? Jesus, where have you *BEEN*! Don't you know that almost all the OS's existing today - Windows, SCO/Linux, even MacOS - have been written in C?? And that's why there's so many bugs in all of them - because C is practically *impossible* to write good code in. That's why Apple is now switching over to Objective C, which is kinda like Apple C++. I've heard that Windows XP was written in Visual C++. And SCO/Linux was going to be ported to Java, until Microsoft paid Sun off to kill the deal and IBM sued SCO for violating their big-company-with-major-trademarks-shoots-itself-i
Thankfully, the field is being revolutionised by people like Richard Stallman, who wrote gcc (the GNU C compiler), gvim and gnome, among many other open source programs. Finally, an advanced programming language like Perl can be used FOR FREE. Without a shadow of a doubt, Perl is the language of the future, even though it's still pretty young and all.
(And no, HTML is NOT a language. Go a learn a REAL programming language like Javascript, n00b).
This guy needs to chill out a bit. The whole article is one long rant about how he believes nothing progressed the way it should have.
There is even a point where he writes, " I don't spend time complaining about this stuff"... quite funny considering he's just told us "There should be a half-life on software so old software just melts away over 10 or 15 years."
He even calls users stupid, he uses the word "unsophisticated" to describe the masses! A bit pretentious if you ask me!
On page 3, the last six paragraphs are basically him repeating over and over "Java sucks... Java sucks... Java sucks...".
Then he lays into C++... "well-meant idea went wrong"...
Does Alan Kay see anything of merit in today's world?
A "write-only language"...
In Soviet Washington the swamp drains you.
Java is good for object manipulation
Java is not good for anything.
The reason Perl is so popular is because it is SOOO easy to throw something together in no time at all that can access databases, websites, and so forth, without all of the messy class coding of the other languages. Would I want to write something huge in perl? Heck no. Because Perl is made for scripting and not for large projects. Same thing for PHP and and all of those languages he likens to Egyptian pyramids made from brute force.
Also, I don't know about him, but I know that at Purdue the CS degree requires the authoring of a compiler, some study of programming language theory, some classes about Database Theory (I can't remember the last time a vocational class taught tuple calculus and normalization), as well as some high level algorithm knowledge. I would consider at least that degree program a step above just some Java vocational classes, and his comment only highlights how egotistical he really is.
Just because he's really smart doesn't give him the excuse to be a real jackass.
How the hell is this on topic?
Damn, I already moderated this topic. Now I'll have to log in with my sock puppet to comment.
Methinks I sense another cranky curmudgeon?
I guess the explosive success and consequent social revolution of the affordable computer over the last three decades still hasn't convinced some people that C "works". However I have to agree, after spending well over half of those three decades figuring out what "works", I don't want to spend a week learning how to suck eggs.
The revolution is over. Evolution is now firmly entrenched.
"esoteric" - Sending modem strings to Mars.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
What? Are you spyin' on me from over the street?
When you go to bars you only drink Miller Lite.
Urgh ... assuming a Mac user drinks beer it should be at least Beck's.
It was a satire. Read the other responses before hitting "submit". And drink a couple of cups of coffee, I think you need it.
Herakleitos would design a non-deterministic programming language. It would be entirely unlike him if he built one that did the same thing every time.
Alan did grep stuff popularizing OOPs and laptops (dynabook) in 1970s in Xerox PARC. But little of note in the 25 years after that. Does that justify perpetual geek worship?
LISP had it first, LISP did it better, and LISP is all you need. Let's look at why LISP is so good that it has to be mentioned ad nauseam whenever a language discussion comes up.
1 -- LISP is simple and elegant. LISP has a pure functional design, without any of that procedural/imperative/OO junk that people use to actually write software that does stuff. LISPs purity and simplicity keep it in the lab, where languages belong.
2 -- LISP is old. You name it, LISP implemented it way back when. Things like visual form designers, refactoring IDEs, regular expressions and the like don't count -- those aren't real language features, just modern rubbish that helps people do boring jobs.
3 -- LISP is highly intuitive. I've used LISP for 70 years, man and boy, and that's why I realise just how intuitive LISP is. Starting off, some people find LISP a bit daunting, and they keep wanting to write 'a + b' instead of '(add a b)' just because it's "shorter" and "clearer". In fact, though, it only takes a few short years of practise with purely functional languages to find LISP completely intuitive.
4 -- LISP is used by real professionals -- computer scientists, AI researchers from the 1980s, and Douglas Hofstatder. The post-LISP languages are used by hired help -- engineers and whatnot. I'm sorry to have to say it, but it's true. If you want to get _paid_ for programming, sure, use C# or PHP or something like that; _gentlemen_ will continue to use LISP.
Well, I hope that's finished the 'debate' (if indeed there can be debate about what is self-evident). LISP is better, and that's that. Remember, it's not what you can _do_ with a language that matters; its how much you can _say_ about it.
Incidentally, this post is a JOKE. LISP has exactly the strengths and weaknesses you would expect from a pure functional language. I just think it's weird that people always jump up and go 'LISP IS BETTER OH YES IT IS' when a language discussion comes round.
Whence? Hence. Whither? Thither.
Respond to satire with even better satire, and what do you get? A bunch of idiots explaining to *you* what satire is.
Either that or, best. troll. ever?
Beauty is in the eye of the beerholder.
I prefer not to type 30 characters when I can type 5 chars, chiefly because of RSI, or rsi, because using the shift key can make your fingers stretch too far. Having fewer lines of code is also a boon, even with a folding editor, since the scroll-wheel gives you rsi faster than anything else out there. You can make the text smaller to get more on screen, but past the optimum size my eyes start to hurt. Plus, more characters means more chance for errors.
I accept you should spend more time designing than coding, but often you (well maybe just me) tend to spend 80% of your time, tinkering with 20% (or less) of the code trying to get it to work, especially when trying to use poorly documented interfaces.
Does that mean he passed the Turing test?
What does any of this have to do with Heraclitus? Are programmers setting themselves on fire in frustration? Have they been listening to Britney instead of the logos? If this is something to do with "all things constantly change" then Heraclitus doesn't really say that - although it is mistakenly attributed to him by later authors
"by that I mean people who don't sit on slashdot all day wondering why everyone else isn't building robots" DECS
Insightful? Did you read the post? Or where you simply dazzled by the Ph.D., some big words, and the ass kissing? Obviously someone's PHB has been let out of his cage and given moderator points.
Pan Tarhei Hosé? Panty Hose? And how do you become a Ph.D. and not learn how to avoid run on sentences. Now maybe I'm just a little more critical of my sources than your average Slashdot reader, but when someone with the MeatWorld name of Panty Hose makes a statement, I tend to be a little bit skeptical. And Dr. Pan Tarhei Hose doesn't smell right.
Get a clue people. Read before you moderate. Lets use some of those critical thinking skills we claim to have.
--Cam
All jocks think about is sports. All nerds think about is sex.
"You have got it so backwards, I don't even know where to start! For starters," - Sorry but I am incapable of reading your whole post, I keep falling of my chair crying with laughter.
Are you aware of the fact, that you are the straight-man for the talented comic in the GP post?
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
LISP is, in fact, not a purely functional language.
LISP is everything but (setq anyone ?)
nt = no text, laddie.
On the contrary, I found that my CS education (bachelors, masters [Cornell University]) was very much NOT about vocational training. In fact, I can probably count on one hand the number of times that I've needed something for my job that I learned mechanically how to do in school. Learning a programming language on your own was par for the course. Classes were about theory.
Of course, I graduated way back in 2001, so I'm sure the landscape has changed-- or maybe just in crappy cs schools.
Wer mit Ungeheuern kämpft, mag zusehn, dass er nicht dabei zum Ungeheuer wird. --Nietzsche
Ah, like English. Or, for that matter, everything else ever invented or discovered, accidentally or otherwise. Fire burns down houses. Wheels are attached to cars that run people over and pollute the environment. Light bulbs enable light pollution.
The quote is another example of stating something obvious in a way that seems profound.
-----------------------
You are what you think.
Forget everything you know about programming and think "if I want to tell a computer how to do something, what is an efficient way to do that?" C++ and Java will NOT be what you come up with.
"An eye for an eye makes the whole world blind." - Ghandi.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
Yes, we are so much more elegant and well-designed. We don't do any work but we know you're doing it wrong. We CAN dismiss 30 years of craftsmanship and progress as pooky-doo. If we weren't smarter, we wouldn't have summers off, would we? Oh, and by the way the monkey wrench is soooooo obsolete. We should all use rubber strap wrenches. But no one's made the perfect rubber strap wrench. Of course, I came waaaayyy closer than anyone else. So you'd better pay me to design a better one. That's right, HP Labs is doing another Java, so you'd better get behind me because it will make Java and C# look like flimsy made-for-TV marketing tools. Kneel before the majesty of my genius!
he probably had what Johnny Cash called "ring of fire"
So what are the lessions to be learned from languages written in the past?
- API/Libraries are important, more important than the language itself, no matter how good your language is, if you don't have a bunch of libaries ready to use the common man will solve his problems faster and better in another language. (Perl/CPAN)
- good syntax is important, do/end are no fun, {}'s are easier to read to the common man (C)
- interoperability with other languages is important (C-libraries exported to scripting languages)
At least for me that seems to be the points that make a language successfull, while not necesarrily beatifull. Most of the powerfull, but mostly failed languages, of the past (Smalltalk, Lisp) seem to either ignore most or all of these points, worse they come with their own VM, their own development environment and such, so unless you do it their way you are mostly (hard to write or ship a few ten-line long script, hard/impossible into a native-binary, etc.).
you said clit !!!
Pascal was written by computer scientists as a teaching language and to demonstrate concepts. C and Perl were written by programmers who wanted to do stuff.
Some of my personal experience of languages:
C: great, I can do low-level stuff, but have to re-invent the wheel too often.
C++: Bjarne Stroustrop thought there were too many C programmers and decided to write a more complicated language that would still be used on a large scale but ensure fewer programmers could earn more money. I never bothered to learn templates and I don't like MSVC++'s way of designing GUIs.
Java: great, I can do OO stuff and small GUIs are a snap, but how many dots did that statement have? Tell me again, how many classes do I have to use and inherit for standard i/o and file i/o? The download is how big?
Perl: My favourite, but tell me again, what is a 'bless'ing? The only problem is that the target machine needs Perl, lots of power and all the modules you use.
Object Pascal: the Delphi IDE has some great features and GUIs are easy, but why are there no line numbers? Why do you have to tell the compiler everything twice?
is that you?
"Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp."
The GNU awk (which, unlike other awks, has sockets and fixed-length fields (if you don't know why fixed-length fields are important, go back to your ivory tower now please)) is superb for any process that has single input and output streams.
If you have multiple inputs that can't be serialized, or output to multiple files or sockets, you'd probably be better off with perl or python.
But within the limitations stated, GNU awk absolutely rules - concise, elegant syntax (with the exception of the string concatentation operator, which is the space - a stupid idea) and very very rapid development.
I frequently write single-line gawk commands to replace entire programs...
The parent's point was that Parrot does not make implementing compilers easier. It makes it needlessly complicated. You do realize that you can actually output Scheme/LISP code from a compiler and get a sophisticated runtime with GC for free, right? Outputting Scheme/LISP code is trivial in comparison with almost anything else.
(Of course, you might not even need to write a standalone compiler which outputs Scheme/LISP code as such... you would probably just implement a macro which parses the language you want and expands into the appropriate Scheme/LISP program.)
*sigh* I'm sick of listeing to these old academics whine about the real world.
I mean, doesn't this say it all:
Once you have something that grows faster than education grows, youre always going to get a pop culture.
Oh yeah, because pop culture is bad. We don't want something to expand so fast we lose our academic control over it.
Oh, looky here! ---> . That's the world's tiniest violine playing...
Or:
One could actually argue--as I sometimes do--that the success of commercial personal computing and operating systems has actually led to a considerable retrogression in many, many respects.
Whiskey Tango Foxtrot? So it would have been better if all these lusers (those not in academia) had never got their hands on computers? Or was U.C.L.A. supposed to supply them to us?
I dont spend time complaining about this stuff, because...
Uh, right.
I have worked in the computer business as system technician, programmer, CTO, and product manager for about 15 years--have even been on some panels in academic seminars in connection with RDF and the Semantic Web. The reason these guys (and I do believe generalizations are in order) disagree with how things are done in the industry is simply because they don't understand it. It's really that simple. They are different areas of expertise.
Computer science research has its own goals. Scalability, design-for-change, open interfaces, those kinds of things are what it's all about. In the private sector on the other hand, one thing rules: cash flow. Cash flow makes the world go 'round, and it will take precedence over scalability, modular design, and documented interfaces eleven days per week. It's not stupidity, it's really very rational. Cash flow is not about economy in the simplest sense: it would be cheaper for me to buy a one-year public transport ticket instead of buying one every month, but I don't have that ammount of cash lying around, so it's still better (in a completely rational sense) for me to get the more expensive monthly solution rather than take a loan or whatnot. That is the reason why quick fixes are sometimes the smartest way of doing things. Something else is almost always smarter than the "best" design. (Insert "cost of last 10%" rant here.)
This is especially true about all small and medium-sized Internet companies that--recently burst bubbles notwithstanding--have created a huge new economy. They are employing millions of people around the world (directly or indirectly) and have introduced computer usage to pretty much every individual in the developed world.
This did not happen because everyone was stupid and did everything backwards, and it's not "unfortunate."
It also didn't happen because the academic institutions made it happen. Academia did not turn HTML into a de facto standard. In fact, if HTML had been as complex as RDF, and treated as strictly, there's a good chance the Web had never happened. The sloppyness of implementation that is a headache to most Web developers today may very well have been one reason why the Web grew so quickly. And there is still a good chance that RDF will never make it into the mainstream, it depends on how anal the developers of it plan to be. (Although even if it doesn't, it will probably still be used at 10 huge corporations around the world that are big enough to have their own in-house academic institutions.)
Keep teaching us about scalability, and if you want to listen we will explain something about what makes mainstream businesses able to pay for systems development at all.
That's quite a trick. I thought it was necessary to use a computer language to write code, but apparently, according to you, one can also write code "in" an executable.
:-)
Shop as usual. And avoid panic buying.
Well, I was trying to be funny, but obviously it didn't come off too well. But shush, don't tell anyone: I really love the ubercomplex discussions going on.
One could actually argue--as I sometimes do--that the success of commercial personal computing and operating systems has actually led to a considerable retrogression in many, many respects.
Whiskey Tango Foxtrot? So it would have been better if all these lusers (those not in academia) had never got their hands on computers? Or was U.C.L.A. supposed to supply them to us?
What? You didn't get the memo did you? It clearly states that computers were to remain nothing more than an intellectual venture and not meant for any practical use.
I agree with you fully on this one. God forbid we waste technology in the persuit of leasure activities. I wonder what old man Kay does in his leasure time? Perhaps he makes his own thread from raw cotton by hand.
Dedicated Cthulhu Cultist since 4523 BC.
Golf much? 'Cuz if ya did I'll love to bash you over the head with a 9 Iron.
Take your fancy app, go to a fresh system, run a default install of perl, turn off internet access... I bet you a million bucks you used some crap lib, that needs another crap lib, that needs another crap lib.
Fcuk Perl, One crap lib on top of another, All the apps out there are akin to Frankstein monsters with cancerous growths expounding into siamees twinage!
And Fcuk CPAN for not letting us make a decent fcukin off line bundle I have to use a God Forsaken hack I pulled from a Sys Admin mag...
No sir, you are an diet coke drinking slob and blind to your own toolset.
Wield your one hammer you Norse god you because everything is a nail to you.
Depends on your value system.
Do you value a string of moderate commercial successes, two or three major commercial successes, or one or two major theoretical or scientific breakthroughs?
Do musicians generate more great work as time goes on?
Do programmers become more open minded and experimental in old age?
-Stu
So, if people suggest that the Vietnam and the cold war were unfortunate events, and things shouldn't have progressed down that path, you'd say they're in need of chilling out?
Different domain, same principal. It's called social critique. It's a means of gaining some insight.
-Stu
I don't know why you're bitching at Perl when it lets you code in the style you want.
1) with IO::Handle object:
use IO::Handle;
autoflush STDOUT 1; # or alternately: $io->autoflush(1);
2) with English variable names:
use English;
$OUTPUT_AUTOFLUSH = 1;
3) the terse way:
$| = 1; # because ++ doesn't mean jack in this context
...when you pry my cold dead fingers off it, youngster!
Rubber strap wrenches make lousy hammers, but a good monkey wrench (like my excellent 100+ year old combination wrench) serves as hammer, crowbar, wrench, and LART.
Perl makes a good LART too, come to think of it.
lisp in perl
You never heard of:
1) PAR
2) perlapp
3) perl2exe
Because these packaging tools handle all the library "bullshit" you're talking about. Which of course isn't something exclusive to Perl. Many times have I had to go looking for libs when compiling some good old fashioned C program (or sometimes they curse at me: h0h0 d00d ur gtk iz 2 old! u sux0r!).
Shortsightedness is not really the virtue you are painting it to be.
Buy the monthly right now, then eat beans and rice however many months it takes to save for a yearly. Then buy the yearly, and use the money you would have spent on monthlies to make other cost-cutting investments (and a nice steak dinner reward, of course).
For example, in my previous home I cut my water and sewer bills by 80% and my electric bill by 40% by investing in slightly more expensive appliances. Payback ended up being less than two years, because the cost of electricity and water has gone up faster than expected.
The unwillingness to take a hit now (those rice and beans meals) for a payoff later is the downfall of many businesses. Optimizing investments is not as simple as you make it out to be, and cash flow is a simplistic meter that does not apply to all business situations.
Substituting high liquidity for high efficiency is still over-generalizing; as people often say when discussing computer languages, every problem is unique and may require a unique solution. Every business likewise.
ADA is good for secure stuff
Actually, Ada [sic] is for big, complicated software systems that you want to be able to maintain.
The "[sic]" goes on the bit you've reproduced that you know is incorrected, not the corrected version.
You know, when you set out to make fun of something, it helps if you actually know something about what you're making fun of. I don't have the time to give your posting a full-scale line-by-line fisking, so I'll just hit the high points here:
...
... in 1985.
... some people find LISP a bit daunting, and they keep wanting to write 'a + b' instead of '(add a b)' just because it's "shorter" and "clearer".
You name it, LISP implemented it way back when. Things like visual form designers, refactoring IDEs, regular expressions and the like don't count
They don't count because Lisp did implement them "way back when". LOOPS (a Xerox PARC OO system, one of the predecessors of CLOS) had a visual forms designer and a refactoring IDE
I've used LISP for 70 years...
Close, but no cigar. Lisp was invented in the late 1950's, so it's a little over 45 years old today.
I find "(+ a b c d e)" shorter and clearer than "a + b + c + d + e", myself.
LISP has exactly the strengths and weaknesses you would expect from a pure functional language.
One of the reasons Lisp is still around is that it isn't a pure-anything language. Check out those SETQs in the original LISP 1.5 manual.
Lisp invented conditional execution (Fortran at the time had only computed GOTO when Lisp introduced COND), and over the years it has absorbed structured programming, IDEs, and object-oriented programming, usually by helping to invent or extend them.
I just think it's weird that people always jump up and go 'LISP IS BETTER OH YES IT IS' when a language discussion comes round.
Yes, Grasshopper, it is good that you are learning to Question Authority. But, you should also Listen to Authority's Response, and if it turns out that Authority is Indeed Correct, you are obliged to Admit It.
To a Lisp hacker, XML is S-expressions in drag.
some folks'll never design a lang
and then again, some folks'll
like heraclitus
the slack-jawed yokel......
well, there's always room for one...
This article has an interesting comparison between C, C++, Java, Perl, Python, Rexx, and Tcl.
I went to a major public University in the Midwest (with a huge National Merit Scholar program) in 1997. I left in 1999 because I couldn't hack it. Why? Because it was virtually 100% theory. It was absolutely not "Java Vocational Training". The overwhelming majority of what they forced CS majors to take simply to get a BS in CS had zilch to do with "vocational (read: practical) training".
Examples:
* FOUR (yes, count 'em, FOUR) levels of Calc.
* Engineering Math
* Discrete Math
* Linear Algebra
* Circuit Design
All of this crap to get a BS in CS-- the degree considered "the standard" degree expected by clueless HR managers (the sorts who think "Linux", "Red Hat", "Unix" and "Solaris" are completely different skill sets, since they're different buzzwords on their little checklists) for aspiring Unix sysadmins or generic Perl/PHP/Oracle/PostgreSQL/MySQL/Java hackers.
We spent more time discussing what Knuth was theorizing about creating optimizing belly-button-lint compilers using Ada or Algol in 1967 than about anything practical/vocational.
Although I was a National Merit Scholar and had an SAT score of 1540 (800 Verbal/740 Math), I couldn't hack it, since (A) Math has given me nightmares ever since one particularly awful Calc teacher in HS, and (B) in 20 years of coding, I've never had a need for any math higher than Trig, and Trig only once.
Put simply, it was so mind-numbingly theoretical, I couldn't stand it. I couldn barely even keep awake while listening to these men with thick Indian, Chinese and Russian accents babbling on about highly theoretical concepts I'd never use in my job in a billion years. Vocational? No, it was pure theory. It was pure, unadulterated, Knuth-worshipping, Algol-laced, IBM-hulking-giant, pseudocode-based theory.
And at this school, you had to take so much flippin' math and theoretical gibberish to get a BS in CS, you automatically qualified as a Math minor. You simply had to go down to the office and fill out a form to get a Math minor.
To this day, I have nightmares (literally) about Calculus. And now this joker trivializes the unfulfilling and impractical experience I had in college as "Java vocational training"?
Maybe it is today... but it sure as hell wasn't when I tried to make my degree back in '97...
Honey, I shrunk the Cygwin
Of course, as a CTO, I was the one arguing for the long-term investment in design, and against the quick fixes, with just the arguments you use now. you have to do that. But you also have to understand something about the general dynamics, and that things don't happen the way they do because people are dumb.
;-)
Also, in case someone thinks I'm opposed to academia in general, I am currently studying for a degree in philosophy, and it doesn't get more academic than that (especially considering the etymology of the word).
That's like saying the modern interstate highway system is poor because it provides little speed improvement for a horse and buggy.
More likely answer: the benchmark is old and invalid on modern architectures (highways not cobblestone) designed for modern applications (cars not buggies).
There's always co-design between architecture and applications. Over the past quarter-century, that benchmark was either insignificant or holding back optimizations for contemporary problems and applications.
A very long list of credentials and achievements, but I didn't have an overall good impression of Alan Keys.
"In his Turing award lecture this past October at OOSPLA 2004, he told the audience (paraphrased): "you owe it to yourself and your profession to seriously learn Lisp"."
RMS recommended the same thing.
Sounds like someone is out of touch with modern computing and is content to rest on his laurels and talk about how everything was better in the Good Old Days (TM).
It is too bad because if he actually understood the needs of modern software development, he might be able to do something more than continue to flog the dead horse of smalltalk.
A matrix multiply in Common Lisp looks like this:
(defun matrix-multiply (a b)
(assert (= (array-dimension a 1)
(array-dimension b 0)))
(let ((c (make-array (list (array-dimension a 0)
(array-dimension b 1)))))
(loop for i below (array-dimension a 0) do
(loop for j below (array-dimension b 1) do
(setf (aref c i j)
(loop for k below (array-dimension a 1)
sum (* (aref a i k)
(aref b k j))))))
c))
You are trying to tease smug lisp weenies by saying that their language is a pure functional language. That doesn't have enough truth in it to sting or to amuse.
Funny, but true. The only bad thing about programming is all the typing. That's one of the reasons Perl is popular. Although APL is much more compact (your matrix multiply would be on one line).
OK, I'll bite. I don't remember any GUIs in the 60s... what were they?
"Yes, Grasshopper, it is good that you are learning to Question Authority. But, you should also Listen to Authority's Response, and if it turns out that Authority is Indeed Correct, you are obliged to Admit It."
Lisp is nice, Slate is better.
Yet, no Lisp flavor has a feature that comes close to CPAN in saving time and money, and ensuring reusability of code and knowledge. ;-) The power of the language lies in the pragmatics, more than the semantics. That's why semantically deprived languages such as VB can still thrive.
I find "(+ a b c d e)" shorter and clearer than "a + b + c + d + e", myself.
That, of course, simply proves the point of the original post. People generally know infix notation, and would find the above unintelligible.
Didn't come off too well? Perhaps you didn't mean to craft the ideal troll, cleverly using the subject line and first sentence to sucker people into completely missing the actual content of your message, but you did it, and you should revel in the results! I hereby declare you King of the Trolls for today!
I've used LISP for 70 years...
Close, but no cigar. Lisp was invented in the late 1950's, so it's a little over 45 years old today.
That is tragic.
I knew there would be some hurt responses from the kind of people who can get stung deeply over someone else's disrespectful attitude to Lisp.
But the above is truly, deeply, tragically tragic.
Did I say it was tragic? I'll say it again.
In all my years of reading
Whence? Hence. Whither? Thither.
I really liked the end of the interview and copied it to read again a few times. But felt a bit disappointed in that Kay is boosting Squeak and Lisp, dissing Perl, and yet seems to promote many ideas that are becoming mantra by perl people.
Given that the interior of Perl is (at least used to, I don't know about now or Parrot) ugly, scary stuff, I would have liked to hear Kay's take on what Larry Wall and some other pretty bright people are trying to do with perl and parrot now, and whether he thinks their philosophies are great or slumbering. Might be a flame war to end all flame wars, but relatively untutored (well Niklaus Wirth's book was my beginning at a young age and according to Kay I've probably been damaged by it) I was excited to see all the ideas that were being stolen and discussed from other languages for Perl 6. Late typing, rebuilding the language from inside at a "meta" level, these all sound great. I'm also interested time and again with Haskell and perhaps it is because I subconsciously have an urge for cleanliness like the 1/2 page of Lisp.
Would parrot written in Lisp be better? I've liked Perl and the libraries of course, but if I could do without them I wonder if Kay would recommend Squeak, something like Erlang (?), or what. The talk of the ancient computer that had 1000 times better "lost" technology than today was intriguing but there was too little about it, and it seemed to talk almost about the Cell processor there.
I feel a great amount of warmth and wisdom from Kay and it is probably too much to ask him to light the way, but if he is going to go shooting down most of the world, even people who are seriously wanting something better and trying to build it, I think he has some responsibility to address it, or at least to mention how Squeak can solve all our problems. Well I guess I have a week of surfing to find my own answers. When I looked at Squeak the last couple of times a while ago I had to turn away from it (down the dark path?) but at the very least I'd like to be intelligent about my choices.
To me perl and the people at perlmonks.org are interested in a language that assists creativity and the wild Larry juggernaught and the wizards involved in Perl 6 deserve more than Kay handed out. I hope this is not his last parting shot but the first of many challenging, wonderful discussions by Kay about how we can get to the next level.
I don't know how it is elsewhere, but here (in the netherlands), we are taught to use and understand all kinds of programming languages, the usual c/c++/java, scripting languages and functional/logical ones, haskell and prolog, and even a 100 hours assignment about powerpc asm.
This is either a bad joke or a troll.
Lisp is not functional. It is multi-paradigm, or as I like to call it, zero-paradigm.
You can write using a functional, declarative, object oriented, imperative or any other paradigm in Lisp. It gives no preference to any of these styles. Nobody stops you from writing spaghetti code in Lisp even. It has labels and gotos too.
'a + b' is just as functional as (+ a b) is btw. It is prefix notation you seem too be critisizing. Your example isn't even a good one. For simple expressions like these it is really just convention and habit. Prefix is problematic for complex mathematical formulas. An infix package is available for CL to solve that problem.
Infix however has problems with operator preference. For C, you need to have the whole operator preference table in your head to decode things like these: (*a[i]++ >> --i). With prefix the order of evaluation is much more obvious.
The main reason for prefix in Lisp is that it greatly simplifies the AST of the code. Simple ASTs allow one to treat code as data and thereby extend and adapt the language to the problem domain.
FILLER
Humorless sig goes here.
Hehe. And the funny thing is how people make fun of schools like DeVry and ITT. But in both you first learn the practical aspects (AS), and then if you want to move on to the theoretical(BS)? You can do so easily. Then after that you can get your MS in either a traditional school, or some other field of endevour (MBA). Maybe what you all need is a good dose of humility?
Question: What is the super-strong being made of a cross between a half-man, half-god mythological character and a fictional part of a woman's body?
--
"Outlook not so good." That magic 8-ball knows everything! I'll ask about Exchange Server next.
The Eiffel language has some very good design decisions, but the IDE was all right-clicky this, and drag that, and so on. If memory serves correctly, you set a watch on a variable by dragging it's textual name to a "watch" button. Retarded with a capital "tard." Also, I tried to find a way to compile from a makefile and command-line, being the junkie that I am, but couldn't and eventually gave up.
Of course, I've always been required to use C/C++ (and assembly lately) in my job, never had a chance to even suggest an alternate choice of languages, and this seems to go back to the point of an earlier poster: we don't use something other can C/C++ on our projects because "nobody" else is using it on their projects.
-paul
Pistol caliber is like religion: everyone has their favourite, and theirs is the only right choice.
To quote Isaac Newton, "If I have been able to see farther, it is only because I have stood on the shoulders of giants."
Often misquoted. Really, he was griping that he wasn't able to extend his vision to subatomic particles, relativity, and the Grand Unification Theory. The actual quote was "If I haven't been able to see farther, it's only because giants were standing on my shoulders"
:-)
I was tempted to let all this go -with no strong opinion on compilers and all that- until I read that "But they forgot that you have to be more sophisticated and have more perspective to understand Shakespeare." This set me off. Wrong! The best thing about Shakespeare is not that you have to be sophisticated to understand it, but that every time you read Shakespeare (with more perspective, but not necessarily sophistication), you understand MORE. If it's done well, you always understand Shakespeare. You can just understand more or less of it. Sometimes sophistication helps, sometimes it gets in the way. Shakespeare was frequently bawdy, filthy, down-to-earth, and a number of other things, but often FUNNY. And often not in any particularly sophisticated way. It just gets better when you read more of it, with new perspectives. This kind of snobbery is what gives Shakespeare a bad name. And the parallels to computer languages seem, at least to me, to be obvious. Theatre and computers should also be accessible. A rich experience can include a "non-elegant" experience.
me. If you RTFA you'll see that unless you were there in the 60's at PARC and other places - Dr. Kay has not only seen way more than you're average slashdotter (pardon the gross generalization I really don't know you that well), unless of course you received a Phd in 1969 and have continually headed some of the brightest technology think tanks in the U.S. I believe Dr. Kay's thoughts are fairly accurate (not that I know what I'm talking about either) and just prove the point that all programmers know - it's always about tradeoffs. Listen to what he says, and if you want to be a better programmer learn more about the history of computer languages.
"The difference between stupidity and genius is that genius has its limits." -- Albert Einstein
but the prefix form also allows things like:
(apply #'+ some-list-of-numbers) ; apply + to an arbitrary list of numbers
or
(apply #'< some-list-of-numbers) ; is list sorted?
fyi #'+ is how we refer to the function '+'
With infix notation you'd have to hack up some ugly loop..
its [It's, abbreviation of "it is"] amazing how freaking [fucking] terrible grammar nazi's [correct spelling: grammar Nazis; correct word: purists] are at being correct here on slashdot [Slashdot]. One would think they'd pass secondary English courses before they'd make a public attempt [incorrect tense], but nOOooOo [no]...
Three cheers for the anti-grammar nazi Threni! [again, Nazi means "Nationalsozialistische" ("National Socialist") historically referring to NSDAP and has nothing to do with purism or linguistics]
Now, lets [let's, abbreviation of "let us"] police our ranks and make sure we only do this to people who are attempting to do it to others. After all, this IS [typographical error, capitalisation instead of italics] informal writing for the most part....until someone opens the can of worms by "correcting" someone else's post desings [designs] their [one's] post. [hard to parse]
And geeze [Jesus,] people...perl [Perl] solves real needs for sysadmins [should be e.g. solves problems of, et al.]. Better than freaking [fucking] python [Python--though that is a good point nonetheless] or some crap, and can do things that are awkward in any shell. [sidenote: Perl, awk, shell--good pun] And, as others have pointed out, there are all the mods [modes? modifications?] that are available... only an academic could say perl is "a real problem in the long term." [your usage of "academic" seem to imply pejorative semantics]
Yes, you can write it legibly, but as I discovered that's not the problem. The real problem with Perl is that (a) its nonlinearities make it very nearly impossible to predict and intercept all failure modes of a (sub)program, and (b) it not merely fails to support, but actively subverts hard interfaces. In practise what this means is: you can never cleanly wall off a piece of Perl code and say "this is known to be correct and will fail informatively if misused". There is always some novel way for it to blow up, which will bite you in the ass when your program complexity rises above n (where n is actually quite small).
Well, I seem to have mixed up two different comments from cogitolv. It was a different comment that cited a web page with the misspelled versions of Heraclitus and Pythagoras: http://n4bz.org/gsr/gsr7.htm. Sorry.
Of course, making spelling errors when correcting someone else's spelling is a good way to attract lots of meta-pedantic flames.
Don't blame me; I'm never given mod points.
It started with great excitement. FORTRAN, LISP, BASIC, ALGOL, PASCAL,
PL/1, FORTH, COBOL. The economic underpinnings were clear enough, and
had three aspects:
1)The early versions of these languages left plenty of room for
improvement. That is to say, a new improved language offered cost
savings to the ultimate users of IT services.
2)The early versions of these languages were relatively simple. It
hadn't cost too much money to develop the language that far. Those
who wanted to start from scratch on a new language had to justify a
relatively modest expense to duplicate what had already been
achieved, and could point to the prospect of large savings to come
under point 1.
3)Compared to today the languages were not widely
deployed. Businessmen did not have to think in terms of duplicate
staffing, with one team skilled in the old language to maintain the
legacy code base, while another team skilled in the new language
work on duplicating the code base, and one day moving on to writing
new code that will eventually save money.
As the years rolled by languages got better. The benefits of new
computer languages were hit by diminishing returns. The threshold
cost, the money you must spend to get the new language competitive
with the old language, rose and rose. The installed base grew, and
with it the costs of change.
A theoretical solution to these problems was the programmable
programming language. Rather than start from scratch, reprogram the
old language. Under the name "extensible programming languages" this
idea had failed serveral times. Sticking points included:
1)Extension mechanism not powerful enough (C #define)
2)Extension mechanism too complicated(ALGOL68C,PROLOG)
3)Base language too simple(FORTH)
There is a three-way pull. The simpler the base language, the easier
it becomes to make a powerful extension mechanism without it becoming
too complicated.
By 1990 it was becoming clear that the CL macro system made CL into
the first fully practical programmable programming language. This
revolutionised the economics of programming language design. Compare
making a new language feature available by starting from scratch with
programming it into a programmable programming language. The advantage
of starting from scratch is that you can get the syntax "just so". If
you want the cost saving of using a programmable programming language,
you have to accept the syntax of the base language, and some mild
constraints on the syntax of your added feature. But there are
savagely diminishing returns in fiddling with syntax. That last 10% of
getting the syntax just so saves what? 1% of programming cost,
perhaps, if you are lucky and the new syntax really is an improvement.
With a programmable programming language the "new feature" is simply a
file a macro-definitions. All your legacy code still runs in the "new
language". Your programmers simply have to learn the extra bit. No
starting over.
A fully practical programmable programming language destroys the
economic rational for programming language design. The point of a
computer programming language is to save money. The point of a new
language is to save more money. There is no point in trying to save
money the expensive way, rather than the cheap way.
Very few persons have understood this. Programmers in other languages
haven't. I don't think many CL programmers have realised either. CL is
politics, not art. I think the reaction of most Lispers, to realising
that not only has Lisp won, but specifically CL has won, is to say "Oh
shit, if we had realised that we were going to be stuck with it for
all eternity, we would have done a better job of designing it."
Tough. The era of computer language design ended 13 years ago. Sorry
you missed it.
Now you are probably aware that computer language desig
And it's all good. We need people like Alan Kay, because better languages are good for businesses, too. And we need the businesses, because stuff kept locked up where only the academics can admire the beauty of the Perfect Solution doesn't do the rest of us a bit of good...
...because it's not just "foreach n in X loop", it's "declare type Array_Bounds is Integer range 1 .. 5; begin for I in Array_Bounds'Range loop [...] end loop; end;".
A proper type system is worth a heck of a lot more than a few characters saved typing!
Some good information I googled up on the system he talks about:0 0.htm
http://byte.csc.lsu.edu/~durresi/7080/reading/B50
Try these, in order:
1. Learning Perl
2. Effective Perl Programming
3. Programming Perl (hard to read, but good reference)
You might also have a look at the Perl Cookbook too, when you get past stage 1.
Following older slashdot postings about Dr. Kay's Squeak language I decided not to download it because it is not GPL'ed.
I hope Guido van Rossum and Larry Wall eagerly absorb Alan Kay's ideas (especially "write a language in itself") and move the ideas out into the accessible world of GPL'd free documentation, and programs.
The non-GPL publication universe is a get rich quick lime pit.
It has memory management, quite a sensible sort actually. First, you can manually deallocate things (like "free"). Second, you can take complete control of the memory allocation of a type via "storage pools" - allowing tricks like mark-and-release or garbage collection. Third, it's clever enough to free the storage for everything of a particular type, when that type goes out of scope. All of which makes a lot more sense than C's rather brute-force "malloc" and "free".
Also, Ada leaves C in the dust for bit-flipping. You can specify layout of data down to the byte-order and bit-width, the exact modulus of modular integers, the exact delta of fixed-point numbers, etc etc.
Personally I think the reasons Ada didn't catch on much more are down to an early lack of good compilers, and a stagnant library (no standard way to access sockets? Is this the 1980s?).
$sum += $_ foreach @list_of_numbers;
@sorted_list = sort @unsorted_list;
I'm not saying prefix isn't useful, just that the point in the first post was that it is not, to a vast majority of would-be users, clearer.
Btw, '$_' is perl's anaphoric pronoun. ;-)
Oh, looky here! ---> . That's the world's tiniest violine playing...
It is spelled "violin." Philistine!
lol I should have run the spell checker. My universal defense is that English is my second language. ;-)
:-D
Or maybe I meant:
Main Entry: violine
: a moderate to strong violet
Well, in the case above, it's actually cataphoric. (Appears before its referent.) :-D
The day you win an Alan Turing award is the day that I'll pay any attention to you. Besides his work on Smalltalk, Kay was one of the inverters of the window paradigm at Xerx PARC. I'm sure that you wrote your snide self serving remarks in an environemnt based on his work. You are a sad little fart who is dropping his pants and wagging is small little penis in order to make fun of adults. Go and masterbate on some IRC channel and leave Slashdot to people who actually have some functioning brain cells.
The day you win an Alan Turing award is the day that I'll pay any attention to you.
:-)
:-)
Or perhaps right now is that day.
You are a sad little fart who is dropping his pants and wagging is small little penis in order to make fun of adults.
And you are obviously not one of those adults.
Go and masterbate on some IRC channel and leave Slashdot to people who actually have some functioning brain cells.
It's "masturbate."
Have a nice day!
I'm not sure we live in the same "real world".
I agree with you on the point that some people who take an "academic" view tend to ignore the harsh economic reality of the real world. I have also learned from personal experience that the "best deisgn" is worthless if it isn't based on time/resources/cost factors.
On the other hand, up to 90% of my time is spent on helping companies recover from these "quick fixes" that turned out to be neither quick nor a fix. I should be happy: I get paid well for this, but my clients are not as enthusiastic. I have seen many quick fix solutions and with one or two exceptions none of them have solved the problem on time and budget.
In almost any other business, the people responsible for buying or delivering these solutions would be fired immediately for incompetence. But we are allowed to make the same mistakes over and over again without taking the slightest hint from our academic friends...
I hear you, and as I said below, as a CTO, it was my job to argue against the quick fixes.
However:
But we are allowed to make the same mistakes over and over again without taking the slightest hint from our academic friends...
The funny thing is, a not insignificant portion of the people in the industry are compuscience majors. They know all these things. After a few years you start to suspect that things don't happen the way they do because people are stupid or ignorant, but because the day-to-day priorities are the way they are.
Yet, no Lisp flavor has a feature that comes close to CPAN in saving
http://www.cliki.net/asdf-install
is a package, going that way. But You are insofar right, the community of Lispers is not that large to
produce tons of halfbaked code...
Martin
Actually, I was just playing off your comments about Kay. It was a joke. :-)
It seems that he values only the first of these qualities. So what if your favorite language can describe an interpreter for itself. Can it also describe system calls and threading primitives? Programs still have to run on silicon CPUs in operating system environments. There are no processors available that could grind S-expressions natively. It takes some translation to do that. If you know it might be otherwise, why not step down from your high horse and give some insights, instead of making witty remarks about the unwashed masses?
Late binding and dynamic typing are good if you are doing little programs, or you've got that air of impeccability around you. Us mere mortals would rather thank the compiler for finding stupid mistakes at the translation time.
Yes, admit it: the world is full of stupid people, and it is run by them. If there is a tool that fits the job, even if it doesn't require a science degree to operate, it shouldn't be frowned upon.
My exception safety is -fno-exceptions.
Kant...stop...self...must..post...stupid...comment
"God fights on the side with the best artillery." - Napoleon, Marshal of France - speaking truth to power
Lispers is not that large to
produce tons of halfbaked code...
Ouch, sour grapes. There is actually some decent perl code out there. And if you have to access an old FoxPro database because there is actually some real business need with a time limit involved, you will cry happy tears at finding an old v. 0.01 procedure-oriented library to do it.
All this said, I am a big fan of Prolog, and liked what I saw of Scheme, and I certainly hope that those languages are used more and that the communities grow.
PHP good for web programming? Sure, if you like using a dog's breakfast for a "language". PHP seems like an after-thought and there are no standards. It seems like it's a conglomeration of every bad programming construct it could find (as is the documentation, or should that be, IRC-logs-dressed-up-as-documentation?)
You can do all that stuff, but I'm not the manual, go read it. Don't forget Ada was amongst other things designed for programming on the bare metal, for embedded (military) apps.
Focusing on the programming language is a misplaced optimization effort.
The correct focus is the whole development process from specifications to debug to evolution (all successful large software projects evolve to that from small simple successful software projects) and includes the human management aspect.
Only the open source development process is even coming close to getting this right. See IBM's relationship with open source to see the right path, and see HP management practices to see how to screw up the process.
Big deal. So Alan Kay thinks the languages we're all using are crap, that our computer science degrees aren't as good as his generation's, that we focus too much on practical skills rather than lofty theory, that the way HE and his generation did things is the One True Way... Yawn. Wake me up when something interesting happens.
By the way, if Heraclitus was around today, he sure wouldn't be doing something practical and pedestrian like computer programming; he'd probably be panhandling in the park, surrounded by NYU students. FYI.
Farewell! It's been a fine buncha years!
... but then when we compiled it, it optimized itself out of existence.
Excellent, one less person to compete with me for jobs that require intelligence. Enjoy your visual basic/java, at least until you are instructed by the industry gurus that the next best thing (read: something one increment closer to LISP) has arrived and that you are now considered redundant.
I realise you are incapable of recognising this but...
C:
myfunc(a, b)
LISP:
(myfunc a b)
Can you count the paranthesis for me? Surely even you can do that. Oh, but you want to talk about operators like +, cause they arent real functions... Oh wait, yes they are.. C just has a special syntax for them. Yep, just another special case. Enough special cases, and you end up with Perl. Now whose syntax looks stupid?
I think these references are from back when he was only Lieutenant Obvious, though.
I too have felt the cold finger of injustice.
In other words, C isn't really a language. It's a core upon which a language can be built. C plus the standard library plus posix is a language. And even that relies heavily on the preprocessor to mutate your code to match local implementation quirks.
> > Lisps awkward syntax (yes, yes, I know "it's not awkward, it's minmal!") will probably prevent it
> Coming from someone who advocates Perl-related technologies, that is a ridiculous statement. Perl is a stellar example of how even the worst syntax can't keep a language from being used.
Insightful? You both completely fail to get the point. Lisp has NO syntaxt! That's the entire point! It is a syntax-less language, where you write a parse tree directly. Perl 5 has the most complex syntax than only Perl 6 will beat. Most of other languages have more syntax than Lisp but less than Perl. Perl and Lisp are two extrema. Your argument is as insightful as this:
- Go is better because it has simpler rules!
- I disagree. The stock market is better because the rules are more complex!
- This is not true! Go has simpler rules!
- Not true! The stock marker has more complex rules!
- No!
- Yes!
- Nonononononononono!
- Lalalalalalalalalalalala!
Now you see why you both look like idiots to anyone who actually understands the most fundamental concepts of programming languages you are foolishly trying to argue about?
If the great-grandparent post had correctly spelled Ubuntu that would be a sensible reply. However, Umbongo has much closer ties to the Congo than to RSA.
People with degrees in CompSci are probably not as common here (Sweden) as where you are, but I have still worked with a lot of people who have a solid education in the fundamentals of computer science. Unfortunately, most of them have not have had a single chance to apply this knowledge since they left the university. Managers, sales people and clients usually have little or no knowledge about what the CompSci people can do, and therefore their skills are hardly ever needed.
Our main problem is that there is no reason why a client should pay a consultant with a degree in CompSci to do a job, when they can get the same work done for a fraction of that cost if they hire a self-taught independent contractor or turn to a "code factory" in Lithuania or India. We can never compete on a market where the only commodity is "quick fix solutions".
One thing I see happening right now is that both clients and the providers are getting aware of this situation and moving towards a more segmented market. On on hand you have the "skilled craftsmen" who can provide the quick solutions and repairs along with a solid experience with the tools neded to create these solutions. On the other hand you have the people with a more abstract or strategic approach to systems development, who can make sure that the contructed solutions satisfy customer needs and are efficient and easy to maintain. The CompSci people should not even bother with the first category, because they are overqualified in one sense and usually not specialized enough to be efficient in another. In a more strategic role, though, I really think that we can use our academic backgrounds to deliver value to our customers and that they are willing to pay for it.
a real scientist it that a real scientist is using yesterday's computers to solve tomorrow's problems and a computer scientist is using tomorrow's
let the recursion continue ...
etc.> he probably had what Johnny Cash called "ring of fire"
Actually, I think Johnny was singing about eating p*ssy:
Sheesh, evil *and* a jerk. -- Jade
Let's think of a "real-world" situation...
/etc/hosts and it will look something like this:
:^) .
/etc/shadow files with it (on running systems) occasionally too.
/etc/hosts >/var/named/zone1
/var/named/zone1. Any strange lines (such as hosts with multiple aliases) will be converted into comments with the leading string "bogon" so you can find them easily.
/etc/hosts >/var/named/inverse1
/\w*/ I guess) and the record separator is newline ("\n" on *nix boxes). Both FS and RS can be easily redefined, and awk is far more capable than perl for this particular operation (according to Larry Wall, anyway) though perl has its own specialities where it is better than awk.
OK, let's suppose I've got a system running host tables for IP address lookup, and I want to convert it to using DNS on BIND.
The host table will be in
10.1.1.1 nicebox
10.1.1.2 naughtybox
10.1.1.32 uglybox
10.1.1.45 fancybox
But let's pretend it has 654 entries in it, otherwise this is too trivial of a problem, you'd just use a text editor
We want to translate this to a BIND zone file for use by the named daemon... so it needs to end up looking more like this:
nicebox IN A 10.1.1.1
naughtybox IN A 10.1.1.2
uglybox IN A 10.1.1.32
fancybox IN A 10.1.1.45
The BIND format has a few other things that the hosts file doesn't, like SOA records and $TTLs, but those things are all in a couple of lines at the top of the file, so we'll add those later by hand. The place where awk is going to massively speed up the job is the bulk reformatting - remember, I said this file has 600 and some lines. I frequently use gawk on files with many thousands of lines; I've re-written 500+ line
Here we go!
awk '(NF=2){print $2 " IN A " $1;next}{print "#bogon " $0}'
That will do 90% of your formatting for you and write the result to
Pop into your favorite text editor, add SOA + NS records (and hand-format any bogons) and you are done.
But you'll also need an inverse zone file... so we'll do that too:
awk '(NF=2){print $1 " IN PTR " $2;next}{print "#bogon " $0}'
Awk is optimized for reading files (notice how there are no OPEN or CLOSE statements needed here) and splitting them into fields on a regex. By default, the field separator is whitespace ( something like
All gawk programs are composed of one or more "rules" of the form:
pattern {action}
The pattern is typically a regex. The default pattern matches all input lines. The default action is print. The default thing to print is the input record, unmodified. There are few enough operators, functions and commands that the average programmer can memorize them all in two weeks or so - the language does not draw its strength from having a bazillion reserved words, instead it has a simple and (mostly) elegant grammar.
The $1 variable contains the content of the first field, $2 the second, etc ad infinitum. $0 is the entire record, unmodified. NF is the number of fields in the current record, NR is the number of records read so far. The command "next" says stop processing and get the next input record (i.e. skip the rest of the program). Semicolons or newlines end rules, but there is a continuation character that allows multi-lined rules if needed.
These example programs contain two rules each. If a program is going to have lots and lots of rules, or it is going to be used more than once, you should write it in a file instead of doing it on the command line.
When I've actually done this particular conversion, I've used much more complex code than this - because I'm too lazy to hand-edit much, so I generate the SOA in a BEGIN rule and manage edge cases like comments and multi-homed hosts in the code. But I wanted thi
#!/bin/sh
8 807&cid=11628006
... "
... "
... "
lines=1000
columns=2
pipes=100
s hebang="#!/bin/sh"
awkcmd="awk '{print \$2 \" \" \$1}'"
plcmd="perl -anle 'print \"@F[1,0]\"'"
cat << END
awk vs perl benchmark
See: http://developers.slashdot.org/comments.pl?sid=13
Copyright (c) 2005 Anonymous Coward. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Input: $lines lines, $columns columns; filtered by $pipes filters.
END
echo -n "Preparing input in $0.in
for l in $(seq 1 $lines)
do echo $(for c in $(seq 1 $columns); do echo line$l/column$c; done)
done > $0.in
echo Done
echo -n "Preparing awk pipes $0.awk.sh
(echo "$shebang"; echo cat \
$(for p in $(seq 1 $pipes); do echo "| $awkcmd"; done)
) > $0.awk.sh
echo Done
echo -n "Preparing Perl pipes $0.pl.sh
(echo "$shebang"; echo cat \
$(for p in $(seq 1 $pipes); do echo "| $plcmd"; done)
) > $0.pl.sh
echo Done
echo -e "\nBenchmarking awk pipes:"
time cat $0.in | sh $0.awk.sh | wc -l
echo -e "\nBenchmarking Perl pipes:"
time cat $0.in | sh $0.pl.sh | wc -l
There should be no space in "s hebang" and in the URL.
Oh no! You're going to beat me out for all those high-payiing LISP jobs! What will I do!?!?
Ahh, Lisp. So elegant. So deeply loved by it's admirers. So entirely unused outside academia.
I won't argue the merits of Lisp, because (while Lisp fans probably disagree) I think the merits of a language are largely in the eye of the beholder. But I would be curious to hear a Lisp advocates explaination for why it isn't more popular. And don't tell me the rest of the world isn't smart enough, or I'll want to know why the smartest people in the world, using the best language, have not made a bigger impact.
I've written Lisp. It's fun, it's interesting. But when I (and a lot of other people) want to get stuff done, we don't choose Lisp. Most of the people I know who do choose to write in Lisp, aren't trying to make a ship date. They're trying to think about a problem in the abstract (not that there is anything wrong with that, but I'm trying to make a ship date)
One little factual error in your ideas about Lisp is that it's no longer used much in ivory-tower academia. The typed functional languages like ML and Haskell are much more prevalent, and Scheme (which is surprisingly different from Lisp) is the only Lisp-like language used for teaching.
The major uses for Lisp today seem to be in things like scientific application development, some financial applications, and things requiring seriously complex algorithms, like airplane travel routing systems.
BTW, have you ever wondered why you're so angry at Lisp? Does the condescension you're complaining about bug you because you secretly believe it's valid? Really, there's nothing to be afraid of. I recommending reading SICP (google for it) and opening your mind a little. It'll help your programming career.
I wasn't trying to make light of war. I deliberately picked an exagerrated set of events to juxtapose a very small, local social critique (language wars) to an international and important social critique, both of which start from just a few voices. Progress occurs through critique and dissent. It's all politics, it's just a matter of what community you're dealing with.
-Stu
BTW, have you ever wondered why you're so angry at Lisp?
I'm not angry at LISP at all! I'm angry at LISP *advocates*, not some inanimate programming language.
Does the condescension you're complaining about bug you because you secretly believe it's valid?
I have far too much self-esteeem for a tactic like that to work on me. Try something else.
Really, there's nothing to be afraid of. I recommending reading SICP (google for it) and opening your mind a little. It'll help your programming career.
I'm not afraid at all. I think elitism sucks. And I have never met a LISP advocate that wasn't an elitist, holier-than-thou, condescending asshole. (The same goes for OpenBSD jackasses.) They deserve to be mocked for it since we all know that our fate is to be food for worms and bacteria and their stupid little programming language won't mean jack shit then.
Furthermore, if I wanted to help my programming career, then I'd learn C++. Why would you reccommend LISP over C++ if your goal is to help me in my programming career?
I don't make the rules. I just make fun of them.
For the same kinds of reasons that they teach languages like Scheme in universities. What I personally recommend is learning more about the basic principles of programming, which is why I mentioned SICP.
But if you learn a language like Lisp or Scheme properly, you'll be exposed to many of the ideas covered in books like SICP, so learning the language isn't a bad substitute for studying the underlying concepts.
The reason I would recommend doing that over learning C++ is that it provides a foundation for understanding any programming language - it'll be easier to learn and understand C++ afterwards. This has been studied in universities - students who go through the more theoretical introduction to CS concepts using Scheme do better on subsequent courses in Java and C++ than students who start out learning the latter languages (I can dig up references if you care).
The foundational ideas I'm talking about help you to design better programs, even when you're using mainstream languages. To give you some idea of what I'm referring to, I recommend reading The Role of the Study of Programming Languages in the Education of a Programmer (PDF).
One problem Lisp advocates face is, how do you explain to someone that learning Lisp will teach them important things about programming that they don't yet understand? People don't want to believe that, so they respond negatively, and things devolve from there because both sides are human.
My personal experience is that I spent almost 20 years programming in languages like C, C++, Java, and various scripting languages. I developed some successful commercial products in C and C++. But when I read SICP a few years ago, I was intrigued enough to learn more about Scheme, and later some of the more functional languages like ML and OCaml. I only wish I had known about these languages, and the ideas behind them, a long time ago.
The reason I would recommend doing that over learning C++ is that it provides a foundation for understanding any programming language - it'll be easier to learn and understand C++ afterwards. This has been studied in universities - students who go through the more theoretical introduction to CS concepts using Scheme do better on subsequent courses in Java and C++ than students who start out learning the latter languages (I can dig up references if you care).
I want to care, but I feel very skeptical about such studies. Why? Because LISP advocates are such flaming, fucking assholes. They think they're better than everyone else (when they're really just bacteria food like everyone is), so everything they say and write is suspect. Likewise, most LISP advocates congregate and are spawned in MIT, and most of their evangelism comes from there as well. Are these references going to point to studies created by LISP evangelists? If so, then how do I know that such studies were not designed with an agenda (namely, to spread the gospel of LISP to the world)?
One problem Lisp advocates face is, how do you explain to someone that learning Lisp will teach them important things about programming that they don't yet understand? People don't want to believe that, so they respond negatively, and things devolve from there because both sides are human.
I think this is the misconception that LISP evangelists have about me: they think that I am resistant to LISP because I'm an ignorant dipshit who just isn't as smart and awesome as LISP evanglists are. They think that I respond negatively becuase of my ignorant dipshittedness. I repeat: I will not use LISP because its adherents are elitist assholes. I do not respond negatively because "I don't want to believe that LISP will teach me important things," but because I want to spite LISP evangelists who deserve it many times over. If LISP was really as awesome as LISP evangelists claim it to be, then it would not require the mountains upon montains of condescending bullshit that spews incessently from the lofty towers of MIT. It's awesomeness should be self-evident if it really is so great. Instead, we have to hear constantly about how "elegant" LISP is and how stupid everyone else is for not recognizing this "Eternal Truth."
Do you understand what I'm trying to communicate to you? The elitism of LISP's evangelism is counter-productive! Until LISP evangelists learn to be more humble they will continue to be confined in their ivory tower.
My personal experience is that I spent almost 20 years programming in languages like C, C++, Java, and various scripting languages. I developed some successful commercial products in C and C++. But when I read SICP a few years ago, I was intrigued enough to learn more about Scheme, and later some of the more functional languages like ML and OCaml. I only wish I had known about these languages, and the ideas behind them, a long time ago.
You're the nicest LISP advocate I've met so far (though you did attempt to exploit my non-existent lack of self-esteem, which I forgive). What you write here about SICP is interesting enough to make curious, but not informative enough to make me attempt to embark upon it. I've heard many LISP jackasses claim that LISP is "a different way of thinking about programming" that isn't "immediately intuitive." If it is so fundamentally different, then how did it help your programming in C? It seems clear to me that LISP evangelists are very jealous and bitter that C won and LISP lost, so I'm confused that "the LISP way of thinking" would be helpful to "the C way of thinking." Aren't they competitors?
I don't make the rules. I just make fun of them.
Thanks. Perhaps it's because I'm not a pure Lisp advocate. In the Lisp family of languages, I far prefer Scheme, which is different enough from Lisp that many pure Lisp advocates like to complain that "Scheme is not a Lisp". Re my question about why Lisp advocacy bugs you, I seriously wanted to know if somewhere underneath it all you didn't wonder what the fuss was about, whether there might be some basis for it (although I'm not defending assholism).
There are some answers, admittedly anecdotal, about how these ideas can help your programming, in C in the mex.pdf paper that I linked to in my previous post. Some of it might not be entirely clear because it talks about exploiting things like continuations.
Here's how I would describe it: when you program in C and most ordinary languages, you're using a mental model that's driven by the design and limitations of real computers. Languages like Lisp, Scheme, and the functional languages like ML and Haskell use models that come from study of fundamental principles of programming and computing. These principles are much more general than any single programming language - a specific programming language like C is just a special case of these principles.
The academic languages are more closely modeled on these principles, so learning those languages tends to teach you at least some of the principles. It's really these principles that are the big deal - languages like Lisp/Scheme/ML/Haskell are just embodiments of them. Learning these principles allows you to understand C and other languages on a different level, and can lead you to think about problems in different ways, and to solutions that you might not have thought of otherwise. Once you've learned some of these general principles, it's easier to learn other languages. It's much easier to apply generalized knowledge to a specific case, than it is to generalize from a specific case (like C).
To take a concrete example, in C, functions normally return to their caller, because C only uses a single call stack per thread. However, there are times that it's useful for a function not to return to its caller, which is why setjmp & longjmp exist. But using setjmp and longjmp to do anything useful isn't the easiest thing in the world, because they're very low-level. By contrast, in some languages like Scheme and SML, there's a feature which allows you to manipulate the flow of control of a program more safely and easily, via the call/cc function. Here's a description and example of this in C terms. This is just a very specific implementation of the general concept of continuations, in C.
The linked example shows that if you know how, you can do this kind of thing in C. But most C programmers wouldn't necessarily think to solve a problem that way, because it's not an obvious solution in C. If you're familiar with these concepts from elsewhere, though, and you find somewhere where they could be useful in a C program, then it just becomes a question of how you can implement it in C. There's usually a way, and often it's well worth it. Again, that mex.pdf paper describes some examples.
Ideas from computer science and the academic languages have had a big impact on the mainstream languages: garbage collection, lexical closures, regular expressions, SQL, and many other things were developed in an academic context and eventually became mainstream. But the problem with this is that getting exposed to these features on a piecemeal basis doesn't give you the full picture of how they fit
... respond to you in e-mail? I want to take this relationship to the next level.
(Yes, I'm trying to be funny, but I am serious about wanting your e-mail address so I may respond to you.)
I don't make the rules. I just make fun of them.