The Python Paradox, by Paul Graham
GnuVince writes "Paul Graham has posted a new article to his website that he called "The Python Paradox" which refines the statements he made in "Great Hackers" about Python programmers being better hackers than Java programmers. He basically says that since Python is not the kind of language that lands you a job like Java, those who learn it seek more than simply financial benefits, they seek better tools. Very interesting read."
System.out.println("First Post");
I know that those who seek my python are indeed, seeking better tools..not merely financial benefits. And they are not disappointed.
Oh yeah. Feelin' 15 today.
Naiive logic; you're forgetting the fact that financial incentive is one of the strongest motivators.
Python is not the kind of language that lands you a job like Java
Because otherwise, the business world would be that much less bass-ackwards.
By reading this you acknowledge that you have read it.
...a civil discussion will ensue.
Ironically, the word ironically is often used incorrectly.
"aiiii get them off my back!#@$#!"
;)
was what PG was thinking when he wrote that article.
say "one" little thing about java and the "java duuudes" just go nuts..
he probably hates the language but obviously wrote that to stop the steady stream of hate mail from the rabid duuude-troops...
feel bad for him
anime+manga together at last.. in real time.
Right on. I wish employers/customers would take a look at the verity of your programming skills and not the number of years programming in one language. So what if you have 10 years of programming VB. Even if you have to program a VB app if you see a person with 3 years experience in VB and 7 Years in a buch of other languages it shows that this guy know how to program and is flexible to work around problems. Unlike possibly the 10 year VB guy who knows all the prebuilt widgets but something outside those widgets becomes impossible for him. I can't even count the number of times I helped people program on languages that I never used before (and they were soposed to be the experts) (I even helped out the Microsoft Guy in the 2003 Linux world expo in .Net) It is because I know a lot of languages and I can use concepts from the different ones and relate it to different languages. I also hate it when a customer tells you that they need an application written in this language to do this. My view is use the correct language for the job and I hate being forced to use a language that is not well optimized for the job. It is like someone telling someone when they build a house that they have to use this screwdriver and only this screwdriver to build a house. Someone who is truly a professional knows the different tools available and will use them when needed.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
Boxing Equipment Reviews
I like Python because I can figure out what's going on. If you know C, then it is not hard to trace what happens at the lowest levels since the C-Python is written in a remarkably clean C and very well documented. So it's a simple, powerful, easy to read language where you have some assurance of being able to track down most problems. My experience with Java was quite the opposite - every Java book I read always had mysterious claims about threads, JVM, synchronization, garbage collection that seemed like some sort of "insider knowledge" and I was expected to just believe it. So I think it's not just about the language itself as much as it is about the implementation; for me at least.
We used to script most of our processes (digital chip design) with Perl. In reality, only a few people really bothered automating boring tasks. At one point I started writing everything in Python because of all the good reasons (readability, easy to learn and MUCH easier to maintain later on) and gradually spread the gospel. As very nice side effect is that my collegues are much more likely to get their hands dirty themselves and write scripts with it's useful. Anyway, as for the article: I think a language shouldn't only be beautiful in the way it allows one to express intent, but also or even much more so in the way it looks esthetically. This is one of the biggest problems I have with Lisp (after reading Paul Graham's other articles, I bought this ANSI Common Lisp Book and printed out out 'On Lisp'). It's a fascinating language, but it looks to incredibly dense. Sigh.
I''ll be willing to buy his theory that python hackers are better than java hackers...
I think the main reason I write so much stuff in Python and pretty much nothing in Java is simple: Open source and comprehensive standard library.
When I did have to write something in Java - well, better hope you have the right API. Oh, and what's the difference between the 3587324 different XML parsing packages? Oh and download Java Super Micro PDA Library! Only available for Solaris and Windows!
The promise of "write-once-run-anywhere" was pretty much dead. Not that I was even going for portability - I just wanted it to run on Linux. And I wanted to do it without having to download Beans, Java DynamicManagement, Java Metadata, ad nauseum.
Python, on the other hand, simply works. Sure, it doesn't have a standard GUI toolkit (although wxPython is pretty much the de facto standard now...), but it does everything I need it to do. With a clean, nice syntax, no less.
Oh, and I still don't get how Java doesn't let you write a freakin routine to get the permissions on a file without resorting to writing a C function. Sure, it's not "portable", but just do what Perl and Python have done - on platforms with no permissions, return a sane default value. Don't just NOT include the function at all...
Anyway, forgive my rant. Python - good standard library. Java - tons of confusing frameworks and platforms, etc, etc.
...but it's being eaten...by some...Linux or something...
"...simply financial benefits..."
Are there people who still haven't noticed that there is and has been a huge financial crisis in this business for a long time now?
It's not exactly like most developers line up their ferraries. Bills needs to be paid, financial stuff is NOT secondary in any way.
Consider what happened around the year '00, when the supply of COBOL programmers was much lower than the demand for COBOL programmers. Did the quality per hired programmer go up? Are you kidding me?
When your favorite tool is LISP, every problem looks like a set of parentheses.
You can put Java on your resume to get the job, and then use Python to glue components together!
All kidding aside, I am currently working on a pretty complex java project. I've written various small programs as utilities, and these programs would have been better off as scripts accessing some of the java classes I had already written.
The downside of java -- in this circumstance --- was having to deal with classpath and compiling cycles and whatnot. What I really wanted was to write the program/script easily, have it leverage what I had already done, and not bloat the resulting .jar files with little utility programs that would be better off as scripts.
I learned Python a little too late for this project, but you can bet your ass Jython will be embedded in my next.
As has been implied, this should be broadened to all sorts of concepts... databases (PostGRE in addition to mySQL in addition to oracle), OSes (Windows nnnn in addition to UNIX in addition to Macs), etc. Heaven knows when I'll find time for being a better rounded programmer, but it should be a goal for all programming professionals. I'm sure this isn't the first time someone's given such advice.
-Rob
Marriage doesn't have to suck!
The Army reading list
Interestingly enough, knowing Python did get me a job... My company works a lot with Java too, but my job specifically deals with about 90% Python, and 10% Java... I never thought there was a use for it when I learned it in University...
Too bad I'm maintaining code with two letter variable names all the time though, and now it's soured the language for me as well... heh.
If somebody learns BASIC or FORTRAN - since there's no longer any job market for them - they're better programmers as well.
Don't really see how you can compare a scripting language with an OO development language. The choice between the two would seem to be driven by what it is your trying to do. Seems strange that Java is touted as a scripting language when this was never really intended to this. M
"[2] When Google advertises Java programming jobs, they cleverly require Python experience."
Even though Paul deleted it, you can still see lots of revfference to it, thanks to Google
We're both obscure AND poorly-paid!
- Despite popular opinion, I am not perfect.
I personally think that flame wars concerning which programming language is better are pretty useless. Honestly, I think of all the different languages as a big tool box or set of wrenchs. I'd be stupid to argue that a 5mm allen key is better than a 1/2 inch wrench. I'd also be pretty foolish to think that an adjustable wrench is a valid replacement for many wrenchs of different sizes.
My advice to programmers: Use the right tool for the job, don't force the job to comply with what you consider to be the best tool.
Who says Python is not good for getting jobs? I know at least 2 places in New York City where you should send your resume, if you are a good Python hacker: http://www.wirelessgeneration.com/ and http://www.divmod.org/ (also .com).
Simpy
whether or not Java programmers are better than Python programmers. Anyone who labels themselves a programmer specifically of one type of language is likely to suck all around.
The immense number of system and third party libraries is what keeps most Java developers coding Java. The close second is Java developer's tools. Until there is an IDE for Python that's as extensive, capable and sophisticated as Eclipse I'm going to stay with Java. Most Java development is in the enterprise server side space and the sheer amount of tools that Java offers is just mind boggling.
Also us, enterprise developers tend to work in environments that are much more conservative from the technology standpoint (banking, insurance, brokerage). As far as I'm concerned it's a big win for us that we got Cobol elbowed out with Java. Trying to push the language of the month at those executives will cause us more harm than good.
I know that Python has some very nice features (I read the tutorial) but it's hardly the sort of paradigm shift that merits ditching Java and rewriting everything because of some neat syntax flavoring. Besides Java is hardly a frozen language and we have some exciting stuff coming down the pipe here. JDK 1.5 will introduce shared VM model which may make java compeling on the desktop, more elaborate iterators, annotations (my favourie in 1.5), and generics (although without primitive types support they are kinda lame).
Java is now frequently used in CS research as well. It looks almost certain that the next milestone in CS evolution will come in the form of Aspect Oriented Programming and AspectJ has been the leading implementation.
Sometimes it feels that Paul G. just has an ax to grind into the collective Java community but I wonder how closely did he actually look at Java before dismissing it?
Your pizza just the way you ought to have it.
Python is not the kind of language that lands you a job like Java
And boy am I glad of that! I've seen it suggested Java is a bit like Playskool(TM) programming, and I agree. Java? No thanks. My trial of Java made me feel a bit like a destitute banging my head against a wall for hours... except banging my head against a wall would have been more productive
Python... a decent procedural language. TCL/TK my choice for getting [the front end of] a job done. VB: No way, although it barely gets the job done it is better than Java. I am an real programmer, I want to get something done in the minimum amount of time to get the job done to a high standard... something like TCL/TK for my GUI controls etc and a proper language/backend (some custom C++, some other languages regarded as 'obscure' because intelligence, rather than script-kiddieness, is needed to use them) that gets the job done quickly, something I can program quickly and easily (rather than obstuficating myself into some bizarre bastardisation, like spending tens of hours doing manipulating some _basic_ n-dimensional arrays through a series of loops, error checks, non-transparent processes).
Java is nothing to look up to, but in the end the script-kiddie language, the language which makes us think like a computer and work to the lowest common denominator, appears in dominance.
I'm a Python programmer. I never learned Java because I heard so many people complain about how many books and reference materials they need just to get things done.
What I don't understand is why I even need Java? Jython let's me do pretty much everything Java can do, in a language that is a lot simpler that "fits in my head", not fits in a huge bookshelf. Sure I still need to know a bit about Java classes and such, but it's a lot less work than my friends who program in Java have to do. I feel sometimes like I'm watching people hike up to the top of a mountain every day, while I just take a 4x4 and get to the same place, but get there faster and with a lot less sweat and effort.
Can anyone who codes both in Python and Java educate me?
Ruby on Rails Screencast
Did whoever moderated this "interesting" bother to read the last 4 paragraphs?
n 1960, a researcher interviewed 1500 business-school students and
classified them in two categories: those who were in it for the
money - 1245 of them - and those who were going to use the degree to do
something they cared deeply about - the other 255 people. Twenty years
later, the researcher checked on the graduates and found that 101 of
them were millionaires?and all but one of those millionaires came from
the 255 people who had pursued what they loved to do!
Research on more than 400,000 Americans over the past 40 years
indicates that pursuing your passions - even in small doses, here and
there each day - helps you make the most of your current capabilities
and encourages you to develop new ones.
Dyslexics have more fnu.
What the user experiences is what makes great software. PHP and ActionScript smoke Python or Perl for writing beautiful software that human beings will enjoy!
HenryJamesFeltus.com
I like python because it allows you to modify the behavior of the language constructs. It gives you hooks into what happens when you say 'print myvariable' or what goes on when you retrieve 'mydict[ "something" ]'.
Much like operator overloading in C++, this allows you to write in the language of the problem, rather than the language of the language. So, if you're dealing with dates you can overload the minus operator to calculate the time between two dates when they are subtracted. Or if you are dealing with complex numbers your operators do the right thing when you add a complex and a real.
Similarly, in Python you can create a database search object that behaves like an associative array. So, customer_id_search[ 10 ] goes to the database, retrieves the record for customer_id 10 and returns a DAO to be manipulated.
Iterators and many other constructs help you in writing clear, concise, MAINTAINABLE, extensible and reusable code by allowing you to code clearly in the language of the problem you are trying to solve.
Python Rules, Perl Sucks.
09F911029D74E35BD84156C5635688C0
Jesus loves you, I think you suck
which is to say: comparisons like that are insidiously pointless, and what the fuck?
of course, i'm an experienced java programmer and but a novice python programmer, so i must be wrong about all that.
You want people who choose to program on their own, because they love doing it. That much is correct. If he'd stopped there, and said "You want to look for people who love what they do, and didn't just learn a language to get a job", he'd have been fine.
Of course, that wouldn't be Graham. Applying the "My language is better than yours" line is pure language bigotry. Why is someone who chooses to program in their own time using Python smarter than someone who chooses C, or Java?
Graham is little more than an elitist nutball who feels the need to prop himself up by explaining why everyone else is so much dumber than he is. It's rather ironic that all of his "This is the smart group" proclamations seem to apply to himself, no?
First we hear is't a huge disadvantage when a programmer doesn't know the business-side of software development. And now it's the other way around.
I'm confused.
Me
I use Perl, Python, Ruby, Lisp, Scheme...
Out of those, Python is probably the least Lisp-like, and the worst designed (well, okay, yes, Perl's design is *much* worst, but it can be massaged into doing lots of cool stuff).
Yet PG brings it up all the time when he talks about Lisp. To me Lisp and Python are like night and day. How do you create anonymous functions and pass them as variables in Python? You can't, only "lambda *expressions*" which is a strange and arbitrary distinction. In Lisp, creating functions on the fly is the norm. Python doesn't have macros, or even blocks like smalltalk or Ruby, which again is one of the best things about Lisp, allowing you abstract and refactor the flow of code itself. In Python, you have arbitrary but fixed structures bolted on, like comprehensions, or tuples. In Lisp, you can create new constructs on the fly, using the same syntax as everything else.
In my opinion Python is like the Java of the open source world: tons of people use it, they think it's great because it's a lot better than whatever they used last year (C++, Perl, etc), and they don't realize (or care) there are better languages that can help them work faster.
Maybe Paul should adjust his spiel to simply say: the more obscure a language a person has mastered, the more likely he is a smart self-motivated programmer.
But even that isn't true all the time...
This article had no basis for its argument other than the opinion that Python programmers are smarter because they seek the language out (and the language rocks!). This whole argument belittles the fact that there are some amazingly talented Java programmers out there. There are great things going on in the world of Jakarta.apache.org and things like Hibernate and Spring rock! Hey aspect oriented programming was formalized by Java people. Java is heavy handed, and for projects that don't require a week or more of design and analysis prep, Java is usually a dumb idea. It is weak in the thick client area, as well. But hey, Java is cool with me. Let the language meet the need, and if you think something is cumbersome, I bet youre using it for the wrong purpose.
What's the deal with this 'more readable' stuff? Python look just as readable as any language to me. We'll less readable actually - 'cause I never used it ;)
"Because it is not as strong a language or development platform as Java"
Oh, bullshit.
09F911029D74E35BD84156C5635688C0
Jesus loves you, I think you suck
Paul's Python summation is brilliant. As a Perl programmer who is embracing Python programming (for interest in *learning a better tool*...), I found his article to be the single most useful document on the internet about getting started with Python. Comparing structures to other languages helped greatly.
By looking at the article I was able to quickly gauge the amount that I need to learn to learn basic Python... needless to say, it will not be a very far stretch. I am sure that I have a lot to learn, but this easily cut weeks of trial and error off of my learning curve. I can't thank him enough. I am excited.
CVB(Neil P. Davis)
free ipod and free gmail!
I'm not a programmer, I'm just an engineer who can do impressions when he has to. This language is relatively simple and organized and, with the growing number of math and scientific libraries available, it's becoming more and more a regular tool in my arsenal.
I guess the point I'm making is that this language has a strong appeal to people like myself who are just looking to use it to solve problems and/or make problem solving tools. I don't know anything about Java, but maybe the reason that the author feels that Python has the better hackers is because Python, by virtue of it's simplicity and no-nonsense syntax, tends to attract your more "problem solver" type person.
Just a thought.
A goal is a dream with a deadline
And Heck yes
HenryJamesFeltus.com
He writes the kind of insightful programmer's stuff, a la Joel on Software.
Pardon me while I go build a better mouse trap, pontificate on how much better it is and what a great mouse catcher I am, and then put it in my hamster's cage to prove it.
Hey aspect oriented programming was formalized by Java people.
I thought it was formalized (at least in the 'widescale' that was the 1960s) by Smalltalk people?
Cumbersome::Dictionary.examples(1)=Java
And there in lies the greatest paradox. If companies employed people who knew python, everyone would learn it!!
What he's really advocating is use of unknown programming languages. Thats fine, but maitainability might become an issue simply because it is hard to find the people that code in it.
No-ones been hurt by sticking with the mainstream.
Java has a standard class for seing file permissions. I'm not sure what that whole thing about writing a C routine was about... was this several years ago?
I'm not sure why you would complain about the XMl choices. You have a lot of options but since when is that bad? If you need to keep it simple there is JDOM. What are you doing for XML work in Python that's so much easier to use?
The other poster already made the point of how extensive the Java API's are - currently the most comprehensive standard library around for any language.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Hmm...let's see.
Both languages have a virtual machine.
Both languages can use JIT compilers for improved efficiency.
Both languages support OO development.
Both languages have large standard libraries.
Both are turing complete.
Even their performance is similar.
Please explain how this is an inappropriate comparison.
*sigh* back to work...
When I'm looking to hire a programmer, I'm looking for one thing. Adaptability.
In my job, I've used C++, Objective-C, COM, C#, Lisp and Python. The theme here is utility. I try to use the best, most natural language for the task at hand. I don't need to work beside evangalists, I want people who see programming languages as what they are ... components in a toolbox. You choose the one appropriate for the job.
this is the stupidest thing i've ever read
He is the guy who started his own startup shortly after he complained in public that nobody is willing to pay more than 500 000$/year for programmer/consultant.
Then he sold his company for 50 million.
Dyslexics have more fnu.
So far, anyway. Both languages are of course moving targets. But they share, along with Ruby (and Icon, and Joy, and J, and Lisp, and Smalltalk) the fact that they're created by, and used by, people who really care about programming. And those tend to be the ones who do it well. I program in these languages and I'm crap
That's exactly the kind of issue that Groovy addresses, a cool scripting language that runs in the VM.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Anyway, something like that. Here is the closest he comes to a paradox:
First, employers are always looking for people who go above and beyond the bare-minimum, including people who like what they're doing enough to do it even when they aren't paid. That doesn't constitute a paradox. Second, as soon as people widely believe that it is a good standard for hiring programmers (meaning it really is the language to learn to get a job), people will start learning it merely to get a job, so I'm not sure his statement really even makes sense.
So, while I'm not saying anything about his statement that python programmers are better (since I'm not a very good programmer in any sense, and wouldn't know to argue), describing it as a "paradox" seems like pseudo-intellectual camouflage for a "Python RULES!" article.
I think my job defies most of the argument, and many major software arguments in general.
I'm paid to write open source software in Python and C++.
Kinda funny huh?
Still stuck with Mentor or something like that? ;-) If you would be using Cadence DFII you would be using their variant of Lisp (SKILL)... Yes, that was one of the best design decisions that Cadence guys made.
Paul B.
I think the quality of the product / service you write with the tool is more important than the choice of tool. And no need to cut down others for it. I can use the same brushes as Rembrant but that doesn't make me a flemish painter of the hightest order.
[reposted because my original parent got modded into oblivion]
;-)
I like python because it allows you to modify the behavior of the language constructs. It gives you hooks into what happens when you say 'print myvariable' or what goes on when you retrieve 'mydict[ "something" ]'.
Much like operator overloading in C++, this allows you to write in the language of the problem, rather than the language of the language. So, if you're dealing with dates you can overload the minus operator to calculate the time between two dates when they are subtracted. Or if you are dealing with complex numbers your operators do the right thing when you add a complex and a real.
Similarly, in Python you can create a database search object that behaves like an associative array. So, customer_id_search[ 10 ] goes to the database, retrieves the record for customer_id 10 and returns a DAO to be manipulated.
Iterators and many other constructs help you in writing clear, concise, MAINTAINABLE, extensible and reusable code by allowing you to code clearly in the language of the problem you are trying to solve.
Python Rules, Perl Sucks.
tcA thgirypoC muinnelliM latigiD eht detaloiv tsuj evah uoY
09F911029D74E35BD84156C5635688C0
Jesus loves you, I think you suck
Amazingly, even if you haven't used it, Python will be probably more readable to you than any other language out there.
My english is sow-sow. Sowhat?
Could you post the source of the above post?
A Language does not make a great hacker or ignorantone..
Its the training/skills inthinking, math, logic. philosophy, and etc..
Don't Tread on OpenSource
I personally find the main claim, that Python programmers are just naturally the smartest people on earth, to be rather offensive.
I consider myself a pretty good programmer. I otherwise fit the criteria he lists in that I do a lot of programming for fun, and like to explore new languages...
but not Python. And you know why? It sounds petty and stupid, but I just hate the whitespace indenting. I have always thought that perfect code readability relied on the felxibility to format certain sections of code differently than others, and the need to have indenting control grouping of statements has always been way too rigid for my tastes.
So there you go, that's why one Java programmer is not into Python at all (not even Jython).
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Typically a senior software engineering resume doesn't enumerate languages, but if I see significant exprience in Python, Scheme, as well as C++, it's probably a good resume!
Best Buy can have you arrested
<Logan> Although I'm fighting for it, my boss thinks the customer wants it done in C++ or, even worse, Java. :P
;-)
<Logan> But I told him it'd quadruple the cost.
<PenguinOfDoom> Logan: What does the customer care, anyway?
<Logan> PenguinOfDoom: That's what I said. It's like dictating what brand of toothpaste your plumber brushes his teeth with.
(Disclaimer: no, I'm not either of these guys
It's rare that you're presented with a knob whose only two positions are Make History and Flee Your Glorious Destiny.
Better algorithms and coding practices give the largest contribution to good results.
These are a function of the programmer.
The tool is pretty much secondary, as long as an appropriate one is selected. To be honest there are a lot of good programming languages. I personally like python, but I use it because it's easy not because I'm any good at programming.
ahhh, Slashdot, the place where "Oh, bullshit" is an insightful comment.
Not trolling here, but this opinion piece is stupid. Hell, just look at that quote above. "He couldn't be a first rate hacker since he obviously chose NT voluntarily." According to the author, there's no way to succeed if you choose to build on NT.
Knowing Python doesn't make you a "first rate hacker". Any decent programmer can pick up a language like python in a day or two. A good hacker (i.e. a programmer that a company would want to hire) is someone who can take their previous experience and apply that to the problem at hand, using the tools available. Saying "...but I know Python" is the same as saying "...but I know Assembly" when you have a bunch of C++ code to write.
"The market alone cannot provide sufficient constraints on corporation's penchant to cause harm." -- Joel Bakan
Python is not the kind of language that lands you a job
Right -- just ask Bram Cohen at Valve...
But anyway, if people can get jobs by having VB on their resume, why not Python?
- sm
I agree, but I think that this is compatible with his (Paul Graham) statements. Great programmers will recognize situations where one language will be better than another. 'Regular' programmers will just bash square pegs through round holes...or give up on the problem entirely.
So, following this hypothesis, the tools for the Brainfuck programming language should be best of all? I've -never- seen a BF job posting.
Its the type-checking stupid.
I love Python. But I've shot myself in the foot enough times, with dynamic typing, to realize that strong typing is better for many things including code that must be correct and fully debugged.
" ahhh, Slashdot, the place where "Oh, bullshit" is an insightful comment."
Oh, bullshit.
The value added to an organization from a good hacker, doesn't come from the number of lines of code per day, of number of functions implemented per day, but from the design and programming leaps he or she can add .
If you know Python, it's either because you had time to learn it out of curiousity, or because you needed to learn it for work or school. In either case, your value in terms of innovation has not changed. Maybe your ability to deliver those innovations quickly has, but that still doesn't make or break your value to a business. Is the fact that you learned it for fun a difference? Sure it is, but the same applies to people who learned Java for fun.
If your like me, and you do know Python, and it makes you smile every time you write something, and your employer accepts it because things are getting done, then great. But a number of people feel the same way about Java.
Is the average Pythoneer better than the average Java hacker? It's a meaningless question.
People are in their decision making, relying on what is clearly prejudiced thinking to cover up for their lack of ability to judge human character directly.
If programmers want to become managers, they need to learn something about people. Until then, they will be flying in the dark, relying on tokens like Stanford degrees and Lisp knowledge as proxies for the ability they really need to do their job.
I'll be willing to buy your theory that lisp hackers are better then python hackers... ..so long as you admit that perl hackers are the best of all! =)
Not quite. Probably closer to the truth is that Perl hackers are the better hackers, because Perl provides vastly more scope for very flexible hacking. I doubt that there's another language quite as flexible. That's not the same thing as saying that it's the best language though (there is no such thing of course), nor that its users are the best programmers.
Horses for courses. Perl is one of the (many) languages I use, and it's unbeatable for a large range of applications. I don't use it for everything though. It seems to be especially bad for engineeering large systems that need to be maintained by people other than the original developers. Maybe that stems from the easy-going culture of most Perl programmers.
I think the real statement here is that persons motivated to learn a language/technology beyond the minimum required for their job are bound to be your most knowledgeable. And in this industry, knowledge often translates into productivity.
I don't think Python is specifically relevant. In a world of massive Python work, the same self motivated people are the ones who would likely have bothered to learn Java.
Now, Python is "esoteric." Esoteric?!? Them's fightin' words! Python is for everybody, and one of the easiest languages to learn.
As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
I know religious wars are traditional here on Slashdot, but saying that Python is better than Java, or that Java is better than Python, well, it's like saying Audis are better than BMW's. It's a matter of personal taste, and no more than that.
Name me ONE TASK that Python (or Java) can do that the other can't. There isn't one. Tell me which one is faster! On modern equipment, you won't notice any difference for most tasks. You'd have to find something massively computationally intensive to get any sort of reasonable comparison, and even then it would be tough.
In the end, it comes down to this: what is your personal coding style? What sort of syntax are you most comfortable with? If you come from a scripting background, you'll probably like Python better. If you're coming from a C background and love those curly brackets and semicolons, you'll dig Java (that's my personal preference, by the way, I'm uncomfortable with using indentation to manage blocks, for example). Maybe something in one library or the other is attractive to you. Maybe you just want to use Open Source.
It's all just a matter of taste.
Having said that, the original article was dead wrong about one other thing. The idea that Python attracts "smarter coders" because they're doing it for the love of it is misguided. The reason is, there are smart coders writing for the love of both languages; Java only gets more idiots because there's money in it. So the author SHOULD have said "If you use Python, you'll get far fewer applicants, so it'll be easier to filter out the hacks".
Farewell! It's been a fine buncha years!
I think more people who are java programmers should be trying Python for smaller programs, cause I was able to pump small programs out much faster than with Java.
I think this point is interesting. Paul Graham makes a big deal about why he doesn't think much of Java, and it all seems to go back to the big/small issue. For example, in his essay on how he put together the Yahoo stores using Lisp, he mentioned that interpreted languages (or at least languages that can be both interpreted and compiled like Lisp) are better because they let you do things incrementally, as opposed to languages such as C/Java/etc, which force you to do the whole project all at once(I'm generalizing his statements here, but that seemed to be the gist of it).
My point is this: Graham seems to really like the "small is better" approach, for which interpreted languages really shine. For larger projects, Java/C++/etc. would (might?) be more appropriate, but for Graham's projects and ideas, not really relevant.
Every once in a while, Graham comes out with something that seems to get Java users up in arms, but it's entirely possible he's operating from point-of-view that involves projects that Java wasn't really designed for to begin with.
Just a curiousity I thought I'd note.
--Erik
This is like the anti-argument. Not only does java come with a whole host of standard functions, including a gui, adding additional frameworks is easy, like C and java. The difference, I think, is that there simply a lot more of them for java.
If you are upset about adding additional libraries to your code to extend its functionality without re-inventing the wheel you either:
- never write code that has a significant amount of functionality
- enjoy writing code for things that have already been implemented by better coder(s)
There are a lot of reasons for writing in a scripting language, but I don't think you highlighted any of them. If you find using java confusing, then maybe you are using it for the wrong things.
I find Java zealots a very curious bunch, and theirs is a hard mentality to understand. The typical arguments from the Java crowd:
* The libraries are great!
So are the Perl, Python and Ruby libraries. In fact, if we were to base the quality of a language based on the available libraries, Perl would be the greatest language on Earth.
* The libraries are second to none!
And you know this because you looked? Or do you just parrot what Sun and other Java zealots have told you? I have yet to see someone point to a specific library and point out, "see, here Java's library is better than the Python equivalent because...".
* The tools are great!
I have two responses to this. First, since when do we base the quality of the language based on the surrounding toolset? Yes, they're nice to have, but they don't make the language. In fact, some folks have said that were it not for tools like Eclipse, Java would be unbearable. The fact that Java MUST have tools like this ought to be a BFC that something is wrong.
Second, languages like Ruby and Python just don't need all these tools. Why? There are a variety of reasons for this, ranging from the already compact code (I've heard estimates of 1/3 to 1/10 the code base of the equivalent Java code from folks), to the fact these languages already have builtin shortcuts for certain features. Ruby, for example, has shortcut syntax for getters and setters.
On a final point, there ARE some good tools for these languages, including Eclipse plugins, Komodo, ArachnoRuby, OpenPerlIDE, PerlBuilder. The list goes on.
* Java scales!
And Perl, Python and Ruby don't? Did you try to build an app in one of these languages and have it fall down? Or are you just towing the Sun Party Line?
* Java is fast!
No faster than C, and probably less so in most cases. When Python and Ruby programmers need speed, we resort to C extensions which are quite easy to do in these languages. You can do it in Perl as well, although XS is quite ugly.
In addition, once GUI's, ORM's or Web Services get involved, the bottleneck is not the language, but the network/sql/database/whatever.
* Struts! EJB!
It's the "more is more" Java zealot mentality that lead to these sorts of monstrosities. It's the notion that good software must be big and complex for it to be good. Note to Java zealots - it just ain't so.
The advent of projects like Spring and Hibernate, as well as the new features in Java 5, are a testament to the growing discontent among Java programmers who are fed up with overly complex layers of goo. Even these, however, are still more complex than their scripting language counterparts.
* Cross platform!
First, Perl/Python/Ruby are also cross platform. Second, in my experience, it is more likely that your application would be retired than, say, ported from a Windows box to a Unix box. The only advantage Java has here is in the GUI category. Even then, you can still make a cross-platform GUI with scripting languages, but it may require 3rd party libraries.
* Structured exceptions!
You mean the ones that Java couldn't get right until Java 1.4? Yeah, Ruby and Python have these.
* Threads!
You mean the ones that have been broken in various ways since Java 1.0? Yeah, Ruby (green) and Python (native) have threads.
* (cough, sputter...) Corporate Backing!
So what? It's a better language because Sun says so? Is C# a better language then because MS has a better stock price? Yes, I'm familiar with the arguments to open up Java.
Frankly I hope they don't so that it will die quicker.
OK, so let me see if I understand. Better programmers select Python over Java because Python is the better language. Java is "a language that makes source code ugly". But "real ugliness" is "having to build programs out of the wrong concepts".
Are we talking about the concepts of the language, or the concepts of the application that the language is being used to express?
He probably doesn't mean the concepts of the language, because Java and Python have much in common. (And no, trivial syntactic differences don't count as conceptual differences.)
If he means the concepts of the application, then there goes his whole argument about Java forcing developers to build programs out of the wrong concepts.
Such nonsense. There are great, mediocre and horrible programmers in any language. The best programmers can create great software in any language.
Quite simply, those who do things becasue they love them tend to do them better than those who do them because they have to. So yes, this would seem to imply that those who use Python (a language that's just now gaining ground) tend to be more skilled than those who use Java (a language that can make you money). ...not a rule, per say, but I can see the potential for truth in it.
dmiessler.com -- grep understanding knowledge
I'm not being condescending but you haven't read that much Graham, have you? In Paul's ideal world every problem worth solving would be solved with Lisp and the only other languages would be domain specific languages related to the specific application.
;)
He is, for lack of a better term at the moment, a Lisp whore.
Mad props tho' for rep'in' brainfuck
... every fucking Paul Graham article have to include generalizations about a 'friend' that 'knows everything'? That's such an awesome tactic, I can't believe I didn't think of it.
.
Assert controversial subject
My friend who knows everything asserts , too.
So must be true.
The only thing that surprises me is that he's not using himself as a reference, as you would expect a typical big-headed academic like Graham. I guess that saves him from having to back his claims up, though.
Why doesn't python let you overwrite a position of a string?
>>> b="hola"
>>> b[0]="y"
Traceback (most recent call last):
File "", line 1, in ?
TypeError: object doesn't support item assignment
Open Source Java Web Forum with LDAP authentication
Guess what, you would be laughed at if you went into carpentry and claimed that your hammer was the best hammer for every single job. Same goes with programming languages, these, "but language x is clearly superior to language y, and here are some bs reasons I pulled out of my butt" statements are just plain dumb.
There is no silver bullet in programming languages, every project has different situations/stipulations etc. I know I will get flamed for this, but sometimes if a VB app will work and you can get it out the door fast, use that. Same goes with apps witten in Java/perl/c/assembly whatever. Every situation is unique.
Writing software is all about finding the best tool for the job. It seems people like the author tend to forget that.
I learned Java 1.0* because I wanted to write a GUI app with no prior knowledge of such in any language. I read Sun's Java tutorial and wrote my first GUI with no books or training of any kind. I know that's no big deal, but I thought I'd explain why I learned Java. I much perfer Perl. When I write Perl, I feel like Cartman rolling in a pile of money. It makes me feel good just to write something in Perl, rather than some other language. That's not because I want to push Perl, it's because I just like writing Perl more than anything else. However, I write Java for a living. I do this because programming skill is language independent, and when I go looking for work I'm far more likely to find Java jobs than Perl jobs. I set out to learn Python just for the hell of it. I didn't have any visions of it ever being in widespread use. I just did it for fun, but I could not like the language. I don't like block-follows-indentation. I don't like 'else' statements on loops that get executed when you don't break out of the loop. So, when I saw these things (and others, but it's been years since then), I decided I should make a decision on whether to continue learning the language. I couldn't come up with a reason to use Python over Perl, Java, C, C++, or even PHP. So I stopped exploring Python. Nothing has happened since then to change my mind. This article certainly does not have that effect.
"A man talking sense to himself is no madder than a man talking nonsense not to himself."
That example seems a bit selective to me. Code blocks are nice given the rest of the way that Ruby is designed to make them useful and handy, but I don't think it's necessarily superior. Personally I'm a great fan of Ruby for it's consistency, which I suppose it inherited from Smalltalk. I really like being able to deal with anything in the same way, without having to worry that there might be exceptions.
I've been using Python as my favourite scripting language for several years -- it's a neat language to code in. Recently though, I had a situation where I wanted to make adjustments to the String metaclass, and I hit a brick wall. Python's consistent in most places, and getting even moreso over time, but there are some bits of it that completely conflict with everything else. If you hit one of them it can be quite frustrating.
Switching to try the same thing in Ruby, I found that the consistency between standard library classes and everything else made it so much easier. In my Python version, I had to design a wrapper around a string, which is very yucky because I really want all strings to act a certain way - not just those that I remember to put a wrapper around. With Ruby it was just a matter of re-declaring the String and adding the methods I wanted.
[do_something(x) for x in collection]
(yeah List comprehensions rocks!)
Other times, you're doing something for which no library exists, because you're the first, or because you have some idea for doing it better than anyone has ever done before. Now the language itself is most important.
Paul Graham wrote the Yahoo Store, one of the first web-based applications. He did it in Lisp, and crushed his competitors with his speed of development. He had a very expressive language, and nobody had libraries they could just plug in.
Of course, Lisp is not exactly slouchy on libraries these days, though I still haven't found anything anywhere that matches Swing's text system.
I have to agree with what (he says) Google does: hire Python programmers for Java development jobs. Regardless of what language your project is in, you'll do better if you hire developers who are motivated to try out (and learn from) tools that they don't need for their job and who know a wide variety of ways code can be structured.
On the other hand, I'm not impressed by Python. You can't apply any static reasoning to the code, because other code can dynamically change the code you're looking at. There's no way to determine if a variable is undeclared without actually running the program and getting to that line, because some other code could add it. Other code could even read a string from the user, and add a field with that name to an existing object. It's relatively hard to test Python code, because you have to exercise every line of code to find out if you have a simple typo.
Java does a reasonably good job (and a better job in 5) of making code that couldn't be right not compile. Better programmers make fewer design errors, but they don't make any fewer typos, so the verification that Java provides is, if anything, more important to better programmers.
It seems like most Java code is designed by bad designers and written by bad programmers, but that doesn't mean that Java is bad; it could be that a Python program is always more broken than an equivalent Java program, so only really good programmers can get Python programs to work at all.
I agree with most everything you say, but I don't think Design Patterns is a good example.
It weighs in at 395 pages, which isn't the thinnest but way short of the 1000 page plus behemoths you're talking about.
Most of that page count is actually showing you example implementations (in C++ and SmallTalk). Sure, you could leave those out, but examples are useful when your book is about abstract concepts.
This book is worth its (light) weight in gold.
Lord Pixel - The cat who walks through walls
A little bigger on the inside than out
Cheers,
Tom
Easy, automatic testing for Perl.
From http://www.paulgraham.com/javacover.html :
...
I've never written a Java program, never more than glanced over reference books about it
Do I need to add more?
On-going from my previous reply, I should also point out for all those existing python programmers who are concerned they might miss a particular module that they really really need:
ruby-python: Ruby/Python is a Ruby extension library to embed Python interpreter in Ruby. With this library, you can use the libraries written for Python in your Ruby scripts.I've never used it so can't comment on its effectiveness, but would be interested if anyone has any comments.
some other languages regarded as 'obscure' because intelligence
Like what, exactly? I'm curious as to what obscure languages you've used at a job.
The reality is that most good programmers like several different programming languges. Certainly the more ways of doing things that you're exposed to the better. The author could have ignored Python and avoided talking crap about Java and simply said that programmers that know several languages are better than those that know just one.
I think a better way to put it is, "I want my languages COSHER and prefer Computer Science over Computer Secrecy", [Steve Mann, wearcam.org]. It doesn't necessarily mean someone is smarter but it might mean they think better.
peterrenshaw ~ Another Scrappy Startup
Java is cool with me. Let the language meet the need
Where is the need for Java? Maintain some previous Java? Java was a nice idea of a COBOL-like OO language (no, COBOL was certainly not OO, no matter how much crazies insist). A learning tool for OO, procedural programming maybe (though the original Smalltalk did the job great, Pascal was OK)...?
To me it all boils down to reinventing the wheel. If I want a quick calculation done I'll use my calculator, or possibly a spreadsheet if my data is 2D and requirements simple - hey, I can write a macro (VBA:MSOffice/Javalike:OOo) too! If I want to do a major project collaborative project I'll probably end up doing it with VC++ (such as these projects dictate). If I want to do serious data analysis I may use C++, I may use Matlab or Mathematica, I may use a vast array of functional languages too. If I want to make a website I'll use HTML, hell... if I want to query a database I'll probably use SQL! In each of these cases the attributes of the need require a language to 'get the job done fast and well'. I am inable, and if this is a fault of my own please let me know, to find a function for which Java is the best tool for the job, if you know of any I insist you to post them here.
My point? Comparing a language to Java is as pointless as TFA states. A language is meant for a job, and could perhaps be applied to others. Java is, IMHO, suitable for nothing which another language is/was superior at already - I believe this was the point of the article: we may have to lower our standards when working, but we can signal our standards by recognising what is better.
Choice is a great thing. I chose to give up COBOL and BASIC years ago as soon as something else better became feasible for work, I pushed to use an alternative, and so did a heck of a lot of other people, and those languages became mainstream. Yet today we have people programming with VB, Java et. al., which are dominated (functionally) by other languages, yet they have their (market) dominance because they meet the lowest common denominator. This is what is so wrong with programming today. SQL and HTML are great examples of 'languages' (the relational model employed is rarely normalised limiting n-dimensional implementation of SQL, HTML can still be screwed by poor interpreters becomming mainstream), perhaps as their function is so specific the lowest common denominator applies less.
I suspect you'd agree with me on this, and I think Paul Graham would as well. Python hackers are better Java hackers and Lisp hackers are better Python hackers.
It has been ages since I've worked on a project in a single language. At this point, I'm very sceptical of anyone who does. There are things I do in C and wouldn't seriously try to do in Lisp or Python or Perl. But I turn those into tools that are callable from higher-level languages as components.
From my own work experience, I think he is right (in some situations). There certainly are many great hackers I've worked with whose technical skills I respect but I would never want to work with again. Of course, I've also worked with a lot of great hackers who were also great employees, so it can go either way. But any hiring manager (or any employee for that matter) would be wise to remember that the person's technical skills are only part of a bigger picture.
Most of the people i know who use Python are sys admins and DBAs who use it for the same tasks that people use Perl.
These people as a group are definitely not better programmers than the full-time Java programmers i know.
Remember that a lot of early CAE system were written in Lisp. Look at tech reports from CMU, MIT, Stanford, and Berkley (or even DAC Proceedings) from the early 80's. You'll be surprised at the number of parentheses you see.
This was another reason (besides DoD funded expert systems projects) why Lisp machines were viable at the time - they were needed to run graphically intense IC design systems. This history is the foundation of interchange formats like EDIF.
That is all.
Consider that Graham's premiere hack was Yahoo! Stores. It wasn't a huge project in LOC count (PG says this is because it was in Lisp). However, it was big enough that Yahoo! had trouble reimplementing it in more conventional languages (and in the end, actually wrote a simple lisp interpreter to handle part of it).
Yahoo! Stores wasn't a "small" project by any sense of the word. Maybe the upper boundries of "medium."
Slashdot. It's Not For Common Sense
Today I finished writing proof of concept code that uses JVM to start a JFrame derived class, which has Canvas on it, which dynamically loads a dll (with JNI) that I wrote in C++ (this is for Windows in this release, next release for Unix with shared objects,) which uses JAWT dll to get hWnd and hDc of the Canvas, and initializes a device driver for a video input card that has a DVD player attached to it.
Right now I am sitting in front of a Java application that uses a C++ module to run a video from a DVD player through a specialize industrial video input card.
You can't handle the truth.
So please lets turn the tide starting at the edges - whenever one sees the opportunity to use an better alternative, lets do it and write up success stories.
Personally, I have used perl, ruby, sh and erlang where massive weblogic/websphere overengineered Java crap would have been used if someone else had gotten control of that subproject instead of me (and only through the inefficencies of the Java ecosystem turned it into a full blown project with 6 developers and a need for 3 new machines).
The upcoming SOA revolution will marginalize Java and creeping OO-ism but the problem is right now MS is the only one building a full multilanguage toolkit around it and doing it hand in hand with patentable XML sprinkled liberally throughout the system.
Mark my words - MS is stealing the future of SOA before people wake up and realize that is what has happened.
Mainstream languages, not that good, in widespread use:
Basic (+ Variants)
VB (utter crap)
VBA (I have seen complex data analysis that was s.l.o.w. and entire complex databases interfaced through Excel VBA)
Pascal/Delphi (see VB)
Java (COBOL all over again)
Algol/COBOL (yes this is still in mainstream use)
Javascript (hmmmm, why)
I believe these, aside from C/C++ (not included as they can be pretty good), make up the vast majority of applications. Just my experience from a business-world perspective).
'Obscure' languages, which are pretty decent:
Assembley (speeeeeeeeeeeeed)
APL, K, J, etc (vectors, arrays, yeah!)
Haskell (how recursive)
Ruby (nice)
Smalltalk (ideas which are still fresh and useful but poorly implemented by modern languages)
Python (not that obscure these days)
TCL/TK (pretty OK for strapping some things together in a GUI... certainly superior to VB, not least because it is very platform portable and doesn't miserably fail at OO)
YOu can see, bar C (which was sculpted long ago and for which there was no alternative bar assembley) and C++ (C + OO concepts, similar 'quality' in design and people adopting), the successful languages are those of the lowest common denominator.
This is like saying that a mechanic that uses metric wrenches is a better mechanic than one who uses SAE....
love is just extroverted narcissism
I had to maintain a medium sized app written in jython. For a litle while I maintained it and made slight changes - but eventually I had to move it back into Java as it bugged me too much to work like that.
It was actually a very well written app too, well commented and structured, easy to follow. So it really was all about python/jython for me!
I really like the look of Groovy and it's different enough from Java that the sae kind of people going for Ruby, Python, and other languages might go for it if they have to do some work with Java.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
He did not say "java programmers are dumb", "python is better than java" or "python programmers are smarter than java programmers", he said "python programmers are smart." This does not exclude java programmers from being smart, but the smart ones will actually read and understand the essay. As with many of Paul Graham's critics, you appear to be someone who thinks he is a member of the top 1 to 3 percent of programmers who are truely create but clearly are not as evidenced by your poor reading comprehension and sub-average critical thinking skills.
I agree that big books are seldom good books but I think that ...
Having said all that, what makes all this extra funny is, to learn any language, all you really need is a little review book (to master the syntax) and AN INTERNET CONNECTION.
... doesn't apply for every Language. At least it requires a background in similar languages to make a small book suffice. Learning a different language isn't all about learning a different syntax.
With my C, C++, Assembler, Pascal and a bit of Perl and Python background it took me quite some time to master Common Lisp. It's a different style of programming - but it's definitely worth knowing since it has a couple of features not available in the former languages that really give you much more power (despite it being even harder to learn due to a lot of newbie pitfalls). (Actually I'm now almost exclusively using CL, but that's another topic.)
I had to maintain a Jython app for a short time, and I've tried writing other things.
Basically I dislike Python for whitespace indenting even more that Fortran77 which had a special "comment" column that meant something was commented out if a character was in that column. I only had a short brush with Fortran 77 in school but I would have gone insane without a special mode in Emacs to help keep you out of that column by accident.
To me, it's just wrong to use a medium (whitespace) that is all about improving code readability, to also control code flow in any way. I find it to be imposing values about how to best visually present grouping that I might not always agree with, and thus I just can't get behind it.
I like some of the language features quite a bit. It's mostly, as I said, the whitespace.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
It's just that Groovy is what happens when you say "I'd really like a powerful modern scripting langauge that can take full advantage of VM features easily."
"There is more worth loving than we have strength to love." - Brian Jay Stanley
And this article is not flamebait because?
The reasons I moved to Java are the very same reasons that Paul Graham describes as reasons that people use HIS favorite languages. I had had an early foray in Smalltalk, was heavily influenced by it and embraced Java as a chance to get away awful C++ (which I had studied heavily and worked with)..
I embraced Java because I could finally program the OO way in it. C++ was supposedly OO, but didn't work quite right, and Java was an ok (not perfect) mainstream Smalltalk based language. The original team was fairly strict in the sense that it would not allow brain damaged C++ programmers to ruin the language (there was definitely a "purist" language design philosophy involved). Of course, in recent years they seem to have dropped that (see Java 1.5 generics, etc..)
Now Python comes along... and Ruby too... they are nice, because among other things they bring us the Smalltalk philosophy of simplicity with Java lacked for marketing and acceptability reasons.
I say.. what about Smalltalk itself??
The reason I still stick with Java is:
- Huge huge number of libraries
- Good acceptability
- Easier to convince my boss
- etc..
Pragmatic reasons.. not purist ones.
I think a lot of Java programmers are the same.. Python is nice.. hope it catches on, but look we have this very mature platform in the meantime.
Now P. Graham arguing about Perl as a good design vs. Java is just laughable. Sure, Perl is fast, Perl has regular expressions. But Perl has NO orthogonality, Perl is a write only language... it is not a language for people who like to read code.
To me it just seems like Paul Graham is used to using Lisp, to running his code on Unix. Paul Graham probably runs emacs and has the Unix culture in him. He shouldn't confuse his Unix culture preference for scripting and languages similar to scripting, his preference for dynamic typing, his preference for the command line, his preference of being with a rebel as a real reason to bash the mainstream. It's just an illusive preference of his own.
It's laughable for a Perl or C++ programmer to diss a designed language and say theirs is superior.. the only reason we listen to Graham is because of his Lisp background.
I agree. I've been looking for a programmer, and one stood out because he listed Perl and Python on his resume. So I asked him how he had used those in the past, and how he got interested. The answer? "It's neat, and it just does what I want it to". He learned it ON HIS OWN. For his own personal use, on his own websites. Because the thought it was neat. Now, I'm not quite management, but that put his resume on top of the list. Unfortunately (for me) NASA hired him instead. See, the way I look at it if I'm interviewing someone (especially fresh out of college) I'm not looking for adaptability as much as I am willingness to learn. Those aren't the same thing; someone that knows three programming languages is good; someone how actually enjoys learning new things is a whole lot better. Being self-taught in anything technical that your college doesn't offer a course in is a big plus in my book. You have no idea how hard it is to find someone self-taught (even if they got the mindset from a four-year degree). Those people are rare. I'm just keeping my fingers crossed that I can find another.
Because the approach doesn't scale, that's why.
To use an obvious example of sensible operator overloading, suppose I'm working with mathematical matrices and vectors, with the * and + operators overloaded in the usual mathematical sense of matrix multiplication and addition. A typical multiply-and-add on a vector x (as in M*x+y) could be written like this:
Or it could be written as... oh, wait, I already showed you the version with operator overloading.
There is no doubt in my mind -- as someone who uses mathematical concepts with overloaded operators in C++ all day -- that a judicious use of overloading can make for much more readable code than the unnatural, prefixified mess you get without it. Just don't overload operator^ to mean "to the power of", because that's not what that operator means in C++, and the precedence is wrong as a result; trying to force new meanings on operators (cout << "Ahem!") is when it all goes wrong. Otherwise, why not use the natural, obvious notation, and save functions for more specialised things that don't have ready-made natural notations, like Inv or Det in the matrix example?
You can make a similar case for many uses of op-overloading in mathematical contexts, for container classes (using operator[] in C++), for pointer-style classes (using operator* and operator->), and so on. Used sparingly and in the right context, they make things much easier to read, and indeed decrease the learning curve as a result.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Well, uh, generally I agree with that... but, earlier today there was a posting about why the number of female Comp Sci majors was dropping.
Hope they don't read Slashdot...
/* Dang, I can't type that well. */
Neither of the article say "Python programmers being better hackers than Java programmers".
They merely say, "Python hackers are smart, because they choose a language based on more than just money".
On the SAME person, using what you like will make you do things smarter than using what you don't like.
However, the same comparison is entirely pointless and illogical if it is made between two individuals. It is like saying,
"I'm is a hobbyist car mechanics but you are JUST an airplane mechanics. Since you're doing it for money and I'm not, therefore I'm a smarter mechanic than you are".
Geez.
Then she's made of wood....
ok, not quite a paradox, but a Python logicism nonetheless.
"There, I've run circles round you, logically" - John Cleese, the penguin on the television sketch
Wish I still had mod points. Give me compile-time type checking and I'll be all over Python.
TMTOWTDI - There's more than one way to do it.
;)
I'm waiting for ThinkGeek to come out with this T-Shirt.
Ruby:
Thanks, but I'll take
or, if you prefer,
It never ceases to amaze me when languages take something simple like applying a function to everything in a collection, and clutter it up with objects, blocks and/or iterators. What's more amazing is how many people think doing so is clever...
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
I'm referring to Python editors. Unless they've changed in the last few months since I last used them, compared to Eclipse, they're not worth much. It's a bit surprising to me considering how long Python's been around, too.
I was recently working on two separate projects: one mainly in c++ and one mainly in Java. For part of my work, I scripted stuff in Python. You can definitely tell the difference when you're having to work with all of them side by side. I like Python for small projects, but, given the choice, I would rather stick to Java for anything larger just because a good ide like Eclipse makes my life easier.
There is discussion among philosophers about what a paradox is, but the best definition I've heard is this: a paradox is an apparently valid argument with apparently true premises and obviously false conclusion.
Since a valid argument is one such that it is logically impossible for the premises to be true and the conclusion false, this definition of "paradox" helps make it clear why they are puzzling. Each premise really does seem to be true; the argument really does seem to be valid; and the conclusion really does seem to be false.
This definition also has the benefit of making clear the different ways you can attempt to "solve" the paradox: you can deny one of the premises; you can deny that the argument is valid; or you can accept that the conclusion is true. Of course, for the great paradoxes, none of these options is tolerable.
Psyco speeds up some Python code to nearly the speed of the C counterpart, surpassing in some cases even statically-typed Java code.
... I guess I'll have to make sure I'm not doing anything financially rewarding to make sure I'm "cool".
First off, let me be clear: I like Python. I think the throw-back to the yesteryear of line-oriented programming with enforced indentation style is quaint, bordering on painful and that the ultra-dynamic typing without dynamic conversion is kind of a strange choice, but I like Python, and I intend to use it quite a bit.
However, back in the "old days" (late 80s, early 90s), Perl too was a bastion of those who wanted to throw off the shackles of scripting (I hate when that word is mis-used to refer to interpreted languages). Perl was the way to start giving some real structure to all of those tasks like report printing and systems toolsmithing that had traditionally involved totally unmaintainable "scripts" which eventually had to be re-written in a low-level language.
So what happened? Nothing really. Perl developed some nice features, but ultimately LOTS of bad programmers learned it and in a language that makes it easy for people to write programs, you quickly develop a robust collection of REALLY bad code (along with the really good). Just look at C for confirmation of that.
Python is where Perl was in the early 90s now. Lots of folks who know bad code from good are using it, and it looks like the next great island to swim to. It's easy to look back at Perl and say "it was the dollar-signs that FORCED people to be bad coders," or to look at Java and say, "the low-level types are what SEDUCED people into writing crappy code."
In reality it was the popularity and subsequent influx of bad programmers. Python is becoming popular and I guarantee that in about 5 years Python programmers will be listening to, "[Span, Ruby, something else] is so much better than Python... just look at how much cleaner the code is."
I wonder if we'll ever figure out that joe blow who barely understands what programming is will always produce unmaintainable shlock, no matter what language he writes in and no matter what book on abstract modeling he's just read.
Overdesign is a problem that has appeared in the Java culture because a bunch of C++ programmers, previously concerned with language features are now free to meditate about design issues, unit tests, dev practices.
.... which is many of us ourselves... that life doesn't always have to be so complex)
All this thought about these more valuable issues has made many overdesign their solutions (hype hasn't helped either). That is why there is now a trend to a "simpler Java". (We learned from the PHP people
OO encourages overdesign.. C++ never let us truly do OO because we were so stressed by the language features (don't believe me.. just look at any C++ forum, and you'll notice they are still trying to figure out how the language works)
Java now lets us do OO, but we have little experience (our C++ experience was insufficient).. so we overdesign to compensate.
Never underestimate the value of a highly experienced and hard nosed project lead.
Seriously, syntactic whitespace! Damn you Python! Long live Ruby?
"Your superior intellect is no match for our puny weapons!"
You, on the other hand, are making a different mistake: you're advocating that one treat the terms and syntax of a language as meaningless symbolic stuff. Strictly speaking, this implies that all symbolisms are equally good. In practice this isn't so-- "+" has a meaning in real world use that goes well beyond "invoke a function".
Are you adequate?
Yes, operator overloading can lead to confusing code when used improperly, but it can lead to clearer code when used well.
For a simple example, take the BigInteger class from Java. I think it's quite easy to see that it would make sense to write "bigInt1 - bigInt2" rather than "bigInt1.subtract(bigInt2)."
Now look at "y = m * x + b" compared to "y = m.multiply(x).add(b)". This makes it even more clear how what should be a simple, easy to read statement becomes quite muddled by unnecessary verbiage.
Of course I could define operators for situations in which their intention is quite unclear, but that's not the fault of the language.
Operator overloading lets bad programmers write bad code, however without operator overloading all programmers are forced to write bad code.
Of course I suppose that kind of supports Paul Graham's point. Java is a crippled language that eliminates some programmer pitfalls, thus catering to the lowest common denominator. However, languages like Python give good programmers the freedom to write a solution well suited to their problem.
Groovy is heavily influenced by ruby - it supports the same kind of closures/iterators and strict "everythin is an object, damn it" mentallity. If you work in a java environment, groovy has some compelling points that make it superior to jython and jruby. Groovy does not introduce its own class libraries -- it is purely syntax and reuses the java libraries. It is normally interpreted, but can also be compiled. When it compiles, it compiles to pure bytecode which makes it literally indistinguishable from compiled java code.
Finally, it adds one innovate syntax feature that I really like: in addition to syntax support for lists and hashes, it has syntax for representing heirarchical data structures and searching them (using closures). This makes tasks like dealing with XML or HTML effectively trivial.
Well, that's not offensive, it's just silly. They were likely to be smart people before they learnt python.
...
But I think labelling yourself as a "Java (or whatever) programmer" is also dangerous; it may lead people to assume that Java is all you know. And if that is the case, then you should learn a few more languages, if only to broaden your understanding of programming, and develop abstractions that aren't intimately tied to the functionality provided by one single language.
Suggested "other languages": another OO language or too, one of the dynamic OO languages like python or perl or smalltalk, a declarative language - Prolog and/or Haskell,
Pretend that something especially witty is here. Thanks.
I know Ruby very well, ML fairly well, and like them both, but Ruby is just usually easier to program in, at least in the short run. This is because of a combination of dynamicity, really good OOP, libraries that are easy to use and extend, and integration with the OS. (The last point would be the one to emphasize if you changed your question to "Why do so many people program in Ruby instead of Smalltalk"...)
It's also a big factor that Ruby takes a lot of pretty advanced language features like coroutines and closures, and packages them up in a syntax that looks like imperative control structures.
Are you adequate?
Also, there's many iteration methods defined generically on terms of each(), like each_with_index(), find(), find_all(), collect(), reject(), inject(), etc.
You can also write your own iterators very easily: the other day I needed to convert a list of objects into a list of strings with their position in the list substituted into the string, so I wrote a map_with_index iterator, like this:
Another generic iterator I once wrote is each_with_successor(), which iterates over pairs of an element and its successor in the collection (or file, or string, or XML element children, or whatever).Are you adequate?
was to learn python. I used it in my previous job for rapid development (easy interfacing with C, clean code, etc etc) and it did the job. But in the end (looking for a new job) this python experience is pretty much useless... everybody wants .net / .com /.c++ experience and nobody's even heard of python... they thought I was taking the piss... probably would've had a better chance mentioning perl or php.
Anyway, I hope it's not going to take me a year to learn c++ to the same level I can do python because there are better places I could think of statying in than my parent's basement...
module Enumerable
def each_even
each_with_index do |elt, i|
yield elt if i % 2 == 0
end
end
end
# Hell, that was too easy. Let's have this instead:
module Enumerable
def each_modulo(n, polarity=true)
each_with_index do |elt, i|
yield elt if i % n == polarity
end
end
def each_even
each_modulo(2) { |elt| yield elt }
end
def each_odd
each_modulo(2, false) { |elt| yield elt }
end
# and so on...
end
# now we can print all line of a file except for every seventh one:
File.open("filename") do |file|
file.each_modulo(7, false) do |line|
print line
end
end
</ecode>
Are you adequate?
I tried to post a Perl example to answer this, but Slashcode thinks Perl has too many junk characters.
For some reason, corporations prefer strong-typed and compiled languages. Dynamically typed languages are often passed over even though many developers prefer them and are more productive under them.
I think it is because it is perceived (real or not) that strong-typing herds the lazier programmers into doing the right thing.
Corperations have always been that way. Even in the 60's, Fortran and Cobol were embraced while LISP was ignored.
Table-ized A.I.
I misread your perfectly reasonable sig:
"Never underestimate the value of a highly experienced and hard nosed project lead."
as:
Never underestimate the value of a high velocity hard nosed lead projectile.
Those are just not interchangable.
Obviously, I need a _lot_ more sleep, but unfortunately I'm an insomniac with a colicky baby.
Ah, you almost had me before I looked at your comment history.
I got as far as:
Except that he did not learn the language because of some disdain for the tools with which he had been conducting himself; he learned the language as a requirement imposed upon him by his environment.
I was going to include some sardonic comment about your reading-comprehension but then I decided to see if you were a regular troll or just an idiot.
You can freely consider it a bite, since I've decided to reply anyway. Have fun.
Any program not written in the language of the problem effectively simulates the language of the problem. To maintain or even comprehend that code you'll at least understand the language of the problem...AND the encoding/simulation of that language in the actual code.
Nothing's for free in understanding the code.
However there *may* be an advantage to having the simulation explicit and in plain view everywhere because it isn't encapsulated in an overloaded operator, etc. But, clearly, that is a different sort of advantage (if it exists).
I am working with a real time system that needs:
1) A web site for job entry and tracking
2) A single simple interface for updating changing business data.
3) A complex GUI for real time resource allocation and monitoring of job status.
4) An EDI system for communicating with outside vender software
5) A simple billing system for small clients and interfaces for more complex billing systems.
6) A hand held interface for agents in the field
7) Insane stability, and reliability
8) The flexibility to change the system on a whim
Why? When my customer agrees to pickup and deliver a package within 15 minuets of there customers call my system has to ensure that they can deliver. They also need to connect this information to all their clientele and be able to manage updates even though there not the brightest people in the world.
Now try to create a system like that in C++ or hell a mix of 3 or more lanuages and watch what happens when a new customer says they love your system but they let there customers select pickup and delivery windows so can you change your website to handle that and o yea I guess that changes some dispatch a little and hmm maybe the handhelds as well. And when you start thinking of how much of the database your going to have to change and how much of the EDI and billing system need to be updated when suddenly they hand you the requirements for the "largest" client's EDI system and you realize they don't use Unicode.
And for completeness, heres the equivalent in whitespace:
End Communication.
(had to post this anomously to not get modded down for trolling :)
( "bar"));
Foreach item As MyItemClass In collection
DoSomething(item)
Next
Personally, I'd prefer the Java syntax (or the VB snippet above) over Ruby. After working over a year with a strongly typed languages (Java and VB.NET) and trying PHP for change, I found myself missing the compiler errors if I try to do absurd things with my non-strictly typed $foobars.
Sure its powerful to say
$foo['bar'] = "Something";
echo $foo['bar'];
Instead of
HashMap foo = new HashMap();
foo.put("bar", "Something");
System.out.println((String)foo.get
But the truth is, if you didn't code it yourself, you won'be finding the bar from foo, so to say. And after the application gets big enough, you start missing those type definitions..
That's great until you end up with a system that uses Pascal, C, C++, Cold Fusion, JavaScript, and ORACLE stored procedures and you find yourself adding the same basic changes to multiple parts of the system and you start recoding the same function in 3 different languages because someone thought this or that language would be for this task. I agree that you use the right tool for the right job but try and avoid using several tool set's for the same problem. I have been cleaning this mess up with java for a while and while sometimes I want to write this or that in some other language sticking to one tends to save a lot of time in the long run. If for no other reason than the fact you use the same naming library's across several subsystems.
.Net did to VB I don't like the idea of sticking with a Microsoft language.
PS: Look into Java it's like C# but without the Microsoft. Sorry people used to call it C++ without the C, and after what
The risk to wear out your teeth has increased over the years since many toothpast manufacturers adds abrasive and call it whitening. Many dentists of today actually advices against brushing more that 2 times a day. (Eat regular instead!)
Off-topic ok, just wanted to spread dental enlightenment
I'm not certain that I really have much of a point, except that any reasonably high-level language probably appears simple, trivial, and readable by the people that already know and use it. If one has a certain background, or one has a sufficiently-defined meaning for what it means to be able to easily read code then meeting that criteria is perhaps harder or more difficult.
I'm sure Smalltalk programmers would consider their language to be more easily understandable by a novice than Python, and I've seen plenty of posters on Usenet that believe that Ruby is more elegant blah blah than Python. You get the idea, I imagine.
REXX Rules. Understand that you snake.
He basically says that since Python is not the kind of language that lands you a job like Java, those who learn it seek more than simply financial benefits.
Because people writing code in binary on the bare metal will certainly not land a job, they certainly must be better coders than these Python Hackers.
There are some second and third rate publishers who are notorious for cellulose bloat that are easy enough to avoid. Maybe I'm just "old school" in wanting reference volumes that don't hog space in my briefcase, knapsack, or shelves. I've purchased quite a few Java books and almost none of them are the official Sun documentation despite my usual preference for the most authoritative sources. I wish that Sun Microsystems and Addison Wesley would consider using paper with half the thickness they have been using. Hint! Hint! Besides, this would save a few trees.
Small well-written books will always rock!
No. It was formalised in Common Lisp. Gregor Kizcales (sp?) designed the common lisp MOP before selling out and going to java.
C'mon folks, who really cares how many lines X can be accomplished with? Just get X to happen, in whatever is fastest for you, that can also be read and maintained by a large group of people.
For me, that's Java, because I know it so well, and because that's the "standard" here. For others, the situation should drive the language. I also believe that the environment has more influence on the choice of language then does the problem/solution.
Isn't the true sense of a hacker to accomplish the previously thought impossible with what we have today? I think bringing tools, languages and such from outside the environment is a bit like cheating.
...at least very similar to the vesion I "cut my teeth" on. While Python is very useful for numerical applications, it isn't ready to replace Octave just yet.
My current Python project is a program that evaluates repairs and/or holes in aircraft skin (say, you need to cut a hole for an antenna cable). It includes a rudimentary CAD engine for drawing up the repair. Apparantly Tcl was originally intended for drafting programs (or so I've been told). In any event, can't really do that in Octave. So, in this case, Python is well suited to the task.
The real cool thing is that I can mail the source to my home e-mail account and fire it up on my Linux box. The only thing I needed to do was specify font sized based upon which OS it runs on. When, I get to the printer calls, I'll need to do something similar, but writing code that works on both systems is pretty darned easy by-and-large.
A goal is a dream with a deadline
I'm not quite sure what to make of this. Sometimes I think he's just promoting that developers learn more than one programming language. I can dig that. I don't agree with equating intelligence with choice of programming language. Things are harder than that, particularly in a large company.
.NET really is about bringing the level of language up to and beyond the semantics that Microsoft technologists already had with COM.
In a general sense, there has been a long debate about whether language influences thought, or if all languages are independent of thought. In oral human languages, Steven Pinker would argue that language is an instinct, and doesn't influence thought -- it evolves from thought.
In computer languages, however, you're not just communicating. You're representing. Also note that computer languages are written langauges, not oral languages. Harold Innis and Marshal McLuhan have both shown that written languages do influence thought, particularly the western phonetic alphabet leading to a paritcular societal pattern vs. eastern pictographic languages.
Turning to computer languages, one could argue that if you've only been exposed to one way of "representing" a thought, say with Visual Basic 6 - you are limited in the boundaries you set up in your own mind about what's possible. Ideas like dynamic dispatch, inheritance, etc. are all foreign, unless you've been exposed to them in another language.
Or, on the other hand, you may be using a language like C with very few boundaries, but this doesn't help either -- there's a lot of freedom there, and not a lot of guidance about how to use it properly. I always find it interesting when C programmers defend their choice and suggest "but, you can do object oriented programming in C!". Well, of course you can! But it required another language, Simula, followed by Smalltalk, to generate the discipline and ideas around what object oriented programming really was. Could that paradigm have evolved without another language to naturally support it? It's possible, but somewhat unlikely.
Any Turing complete language could implement a programming paradigm, it's just a matter if it's natural to the language's constructs or if it requires more elaborate structures. For example, if anyone has programmed Microsoft's COM realizes that the underlying concepts are relatively simple, but the elaborate syntax for achieving it in C++ (prior to ATL especially) is ridiculous. In this light,
Nevertheless, there's still a practical problem with modern dynamic languages. The world has a legacy, and that legacy is large, chaotic, crufty, and not very dynamic. Getting a handle on it requires simplification, constraints, and classifications for the kinds of languages, tools, techniques, and platforms for the future. This is the main reason why languages like COBOL, C++, or Java stick around: we have to stick to something for a few years to simplify the system dynamics in the large. Picking "one standard" or "one vendor" is a key way of ensuring quality - by constraining and simplifying the business environment.
Java is clearly not a "thought leading" language like Python or Ruby , or even older languages like Lisp or Smalltalk. But that's not what it was supposed to be. Java was an "action provoking" language that took a very large C and C++ legacy of systems, skills, and mindsets, and pushed them forward an inch.
A lot of independent technical people may not agree with "constrainting" the environment, because it limits innovation. Modern dynamic lanaguages make life so much simpler for the programmer. And I agree they do. But there are levels of simplicity -- and organizational simplicty in the large often trumps simplicity in the small. We'll get there eventually, but it will take a while. Most enlightened organizations will have an emerging technology lab to bri
-Stu
The link you posted quotes text from a book, which is the same as the OP's quote. But there isn't a source for the actual (?) academic research.
Even given a primary source, I'd find the claim highly questionable. One in 15 business school majors becoming millionaires seems unlikely, especially in 1980 dollars. If this really happened at some super successful business school, it would be worth naming the particular school. This smells an awful lot like a snake-oil vendor dangling false visions of wealth in front of people.
Yes I HAVE tried it. I've even maintained some stuff in it. That's why I REALLY HATE it, because I had to work with it. Otherwise I'd probably just have a mild dislike.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
The best computer book I've ever had (and it still sits less than a foot away) is K&R's "The C Programming Langauge". 272 pages (small by today's standards) of pure gold. No wasted pages here. IMO the best "my first C book" ever written. Now if some publishers would listen to your sage advice.
Don't judge a book by it's cover? Don't judge a book by it's weight.
"I hate to advocate drugs, alcohol, violence or insanity but they've always worked for me" - HST
The quote doesn't imply a single school. It says 1500 business school students. There could be between one and 1500 business schools in question here.
I noticed it doesn't necessarily imply a single school. In no way does my guess that the story is false hinge on there being only one school. In fact, I only mentioned the one-school scenario as the case that would require the least stretching to make this far-fetched tale believable. The closer you get to 1500 business schools, the more certain you can be that the story is a lie.
I'll completely agree if you make sure that I get a compiler error when I try to do x*M instead of M*x (i.e. matrix multiplication isn't commutative).
Of course, aspects are no macros. Nor they are stupid. But they are no important advance in CS - indeed, the AOP is just a fashionable buzz-acronym. Because you can do AOP in Java, using reflection for that so-called "metaprogramming". There is a drawback, however: one must be quite a hacker to understand it.
This seems to confirm the PG article:
6 3091
http://slashdot.org/comments.pl?sid=101530&cid=86
Yes ... and that is why the Red Sox are the better baseball players over the Yankees. They play for a team that doesn't win! Brilliant!
IMHO the hacker is in the person, not the language.
Then maybe that's why you're confusing simple programming, i.e. skipping patterns (whether in Python, Java, C++) or whatever, vs. programming using patterns to build reliable, robust, maintainable, modifiable, extendable applications.
Let's take MVC (Model-View-Controller). I could write on large simple script in PHP, Python, Perl what have you, quick and simple, gets the job done, I saved some time etc etc. But as you build on it, that solution quickly falls apart, hence the MVC and other time-tested patterns.
I just read about a new CRM based on PHP and MySQL. They emphasize "Fast fast fast" on their website. They don't have any documentation on their architecture, but I'm betting it's 'fast' because they hit the db directly from their web scripts.
Here's an interesting discussions on patterns. Paul Graham seems to be arguing that there is a silver bullet. I remember this guy, he used to say Lisp was the silver bullet. Now I guess he's saying Python is.
First of all, some of the best programmers I know work magic in _whatever_ language they program in. One guy, who used to write operating system code for a phone company (in Forth I believe), wrote a simple messaging server using SQL Server stored procedures (when the management said we couldn't buy a real messaging system like MQSeries). Now that's what I call a cool hack.
Paul Graham's statement reminds me of a friend's kid brother saying why he didn't want to eat his spinach. But Mom, real surfers don't eat vegetables. By the same token, real programmers don't program anything but Python either!
re your sig, that was a good book, can't remember the authors name though. Have to dig it out of storage and re-read it sometime. There was also a short story version of it in some anthology or other.
Mycroft
https://signup.leagueoflegends.com/?ref=4c3ed6600b6ea
blah($_), blahblah($_) for @x;
Of course, with the comma being recommissioned for Perl 6, who knows where that idiom will go.
aQazaQa
From all reports, a PHB wanted Yahoo! Stores based in a language that was more mainstream. Yahoo! sunk a lot of money into trying to redo what PG's group did. And in the end they lost several features and had to write a bare-bones lisp interpreter in Java to get only about 1/2 of the html generation and templating functionality.
What was cheaper? Hire two (relatively expensive) Lisp hackers to maintain and upgrade the project, or sick whole teams of wage-slave-class developers to literally downgrade the product.
From reports, they even reimplemented the C code for image generation and the perl glue code. It must have been like watching lemmings march off a cliff. Lemmings with huge wallets.
The economics calculations that go on in these people's minds boggles me. It really does.
Slashdot. It's Not For Common Sense
Interesting combination... As you say, it sounds pretty close to today's Java.
This is one of those issues that I think polarizes people's opinions, and although semantics matter more than just about anything in a language, I certainly disagree with those who say syntax doesn't matter. Personally, although I work with languages like C++ and Perl all day, I do find the curly braces, semicolons and (in particular) parentheses for function calls overweight at times.
I'm quite a fan of functional programming. I wouldn't want to use a purely functional language for most real projects, but I miss serious tools for manipulating functions in languages like C++. When you're dealing with that level of flexibility, I find the parentheses can build up uncomfortably in a language like C++: it becomes almost LISP-like, and while the latter has a certain elegance in its design, I think people who dislike all the )))))s have a good point.
I guess I prefer a relatively clean and punctuation-free syntax by default, but where you can easily add () pairs to disambiguate. I'm undecided about Python's characteristic use of whitespace to block code, perhaps because the rigid nature doesn't fit with my hypothetical style where both functions and types are built fairly freely, but in a naturally block-structured language (such as Python is) I think it also has that certain practical and elegant quality.
I guess we just disagree on that one. In my world, not everything is an object; something like Java's approach is great for certain features with types, and does impose a useful structure that's good for maintainability by Joe Average, but it severely limits what good guys can do -- I want both powerful types and powerful functions, not something one-sided.
I totally agree with your other points: I think any serious contender for my "New Language of the Year" award is going to need a very tight, very flexible standard library, backed by something like CPAN so all those features that 10% of the users want have a home, and community effort can be focussed on producing a small number of top quality libraries rather than a wide range of mediocre ones (which is what, IMHO, Java's standard library has become).
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
The claim that "being forced to use a language" to write a certain application "is like someone telling someone when they build a house that they have to use this screwdriver and only this" is a badly flawed analogy. The language an application is coded in is rather like the material a house is built with -- wood versus brick versus prestressed concrete etc; the material/language will remain with the house/application and define for example its maintenance needs for a long time after the builder/programmer has been paid and gone on to other tasks for other customers. It is therefore quite reasonable for the customer to care about this kind of technical issue! You as a professional may agree or disagree with the customer's preferences, but it's unprofessional to belittle the customer for caring about this kind of choice.
The proper analogy to a silly customer specifying that you must use a screwdriver rather than another, would be one telling you which text editor you must use to edit the program's source code. _THAT_ would be pretty ridiculous (as long as you're procuring your own tools -- if the customer is the one that has to supply your tools, the situation is, again, different)...
Alex