The Artima Developer Community
Sponsored Link

Weblogs Forum
The departure of the hyper-enthusiasts

262 replies on 3 pages. Most recent reply: Dec 20, 2006 11:11 AM by Carlos Neves

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 262 replies on 3 pages [ 1 2 3 | » ]
Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

The departure of the hyper-enthusiasts (View in Weblogs)
Posted: Dec 18, 2005 8:38 AM
Reply to this message Reply
Summary
The Java hyper-enthusiasts have left the building, leaving a significant contingent of Java programmers behind, blinking in the bright lights without the constant drumbeat of boosterism.
Advertisement

But the majority of programmers, who have been relatively quiet all this time, always knew that Java is a combination of strengths and weaknesses. These folks are not left with any feelings of surprise, but instead they welcome the silence, because it's easier to think and work.

Where did the hyper-enthusiasts go? To Ruby, apparently. This is chronicled in Bruce Tate's book "Beyond Java," which should probably be titled "Why Ruby is Better than Java." The book is roughly edited; you'll find yourself thinking "haven't I read this paragraph before?" in any number of places, but that's a disappointing experience I've had with several O'Reilly books of late. In many places he plays fast and loose, and almost at the end of the book he declares that he doesn't have time to learn these other languages in any depth -- although he has no trouble condemning the same languages in his rush to Ruby. Such a statement should be in the first paragraph of the book: "I've decided that I love Ruby, so I will condemn other languages without fully understanding them" (in one sentence repeated in a number of places in the book, for example, he declares that C# is no more than a clone of Java). I've been on the rollercoaster of language-love myself in the past and have made similar mistakes; one error in particular was dismissing Python's scoping-by-indentation when I first saw it (months later realizing that we always indicate scoping by indentation anyway, even when we have curly braces available). Now I try to investigate and support my ideas about these things more thoroughly. It takes a lot more time and effort to do so, but it also leaves a more lasting impression.

This is not to say that Tate's book is valueless; on the contrary, it is worth reading. I've learned a number of new and useful things from it. But you must be prepared to be annoyed in places. Tate shrugs this off as being just a matter of opinion, but if you know more than he does about some of the languages he criticizes, you'll realize that, as he admitted, he just didn't want to put in the effort. Because of that, even the new things that you learn from the book you'll wonder about -- did he actually do his homework on this particular topic, or will you be embarrassed in public if you use his explanation? For example, I think I now understand about continuations and continuation servers (which seem to be very powerful concepts), but upon reflection I had better double-check that knowledge elsewhere.

Recently, two people that I know have gotten into an indirect tiff about what "simplicity" means. Martin Fowler (with whom I've organized technical meetings) first made the assertion that the Ruby library was simple and elegant. For awhile, Martin was using Python, but several years ago he departed that camp for Ruby, explaining that Ruby had blocks like Smalltalk and that he liked blocks. He seems to have been happy about his decision.

Martin's argument is that Java's List interface requires you to say aList.get(aList.size -1) to get the last element, and this seemed silly to him. Which it is, if you have unified all sequence containers (that is, list containers) into a single type, as Ruby and Python do. Java, however, follows the C++ STL approach of providing different types based on the efficiency of various operations. The Java libraries do not unify to a single list type because of efficiency issues, so you have to decide if you are going to be fetching the last element from a list a lot, and if you are you use a LinkedList, which does have a getLast() method -- a fact which was completely left out of Martin's original discussion, and the ensuing firefight (other than some ignored comments).

Elliotte Rusty Harold (who took over the management of the Java track at the SD conference from me; I actually lived in the building next to his in Brooklyn for two months once) observed that Ruby's library design didn't seem so simple and clear to him, and he went into detail about many of the methods in the list class, pointing out that they often seemed to make no sense and wondering whether anyone was actually using some of them. Elliotte has spent a lot of time on library design recently, producing the XOM XML library which, I think, represents some very clear thinking. Look at what he writes; I think he makes a good case.

On the other hand, I'll bet that list was one of the first library classes that Matz wrote. You can find plenty of methods and classes in Java 1.0 that appear to be amateurish additions, as well. I think a better test, for both Ruby and Java, is to examine the classes that people have created when they have more experience with the language and its use. I note that I rarely find methods in the Python libraries that make me wonder why they were included, and I think that comes from the maturity of Python (which predates Java). Also, understanding the constraints under which Josh Bloch designed the Java libraries might make you understand that design a little better. Personally, I prefer the simplicity of Python's single list class to Java or C++'s multiple implementations, but a single list implementation must make efficiency compromises. Library design involves compromise, and if such a compromise disagrees with you you're likely to feel it was a bad choice.

Aside from Tate, we know the hyper-enthusiasts have moved to Ruby because of the howls of protest at Harold's opinion (although much of this was before his analysis of list). We can identify hyper-enthusiasts because the arguments have a strongly faith-based flavor to them. X is the true way, therefore anything X is best by definition, and all other languages lack X's goodness. For example, upon discovering metaclass programming, a number of Ruby hyper-enthusiasts (I don't have Tate's book with me, so I don't remember if he was one), have declared that Python is incapable of metaclass programming, which is untrue. It may be true that Ruby's metaclasses are easier to grasp and use than Python's, but Python has had the capability for many years.

Ruby is to Perl what C++ was to C. Ruby improves and simplifies the Perl language (the name "Ruby" is even a tribute to Perl), and adds workable OO features (If you've ever tried to use classes or references in Perl, you know what I'm talking about. I have no idea whether Perl 6 will rectify this or not, but I stopped paying attention long ago). But it also seems to carry forward some of the Perl warts. For anyone used to, and tired of, Perl, this certainly seems like a huge improvement, but I'm tired of all impositions by a language upon my thinking process, and so arbitrary naming conventions, reversed syntax and begin-end statments all seem like impediments to me.

But it's hard to argue that Ruby hasn't moved things forward, just like C++ and Java have. It has clearly shaken the Python community up a little; for a long time they were on the high ground of pure, clean language design. Although the Perlish warts in Ruby don't have that cleanliness, when Matz started from scratch on Ruby he was able to look at the problem in a fresh way and he's done some things that have made the Python core folks look again at "what problem are we solving?" Ruby, for example has coroutines, as I learned from Tate's book. The expression of coroutines in Ruby (at least, according to Tate's example) is awkward, but they are there, and I suspect that this may be why coroutines -- albeit in a much more elegant form -- are appearing in Python 2.5. Python's coroutines also allow straightforward continuations, and so we may see continuation servers implemented using Python 2.5.

And of course, who can ignore Rails? The backlash from heavyweight web frameworks has been significant. We now know that EJB 1 & 2 were based on an entirely flawed set of use cases. Because of the damage this (still slowly dawning) realization has wrought to Sun's reputation, it's hard to know whether EJB3, which probably should have been called something else to disassociate it with the failures of its predecessors, will succeed, despite the fact that EJB3 is like a breath of fresh air. You look at the code and it makes sense; no bizzarre and obscure interfaces and concepts to puzzle over while thinking, "I wonder why I have to do this? Well, these guys are clearly smarter than I am." (I tried to understand EJB1, but when I first heard that entity beans didn't actually work, my brain refused to let me invest any more time, which turned out to be the right choice). As a result of all this, someone said "hey, all I want to do is create a database and use it from the web. Why should I do all that work?" As it turns out, such activities seem to be about 90% of all we ever do in "Enterprise" programming, and EJB 1/2 were solving an entirely different problem, and making the 90% incredibly difficult in the process. Thus, the Rails approach of "just connect the database to the web."

Rails brings up a deeper issue, as well. Apparently, something "relatively simple that you only do once," such as setting up the database by writing SQL, really does benefit from automation, possibly because you actually end up doing these things more than once. Or possibly because simplicity of both expression and of understanding really is important. There is a faction among us that seems to feel that if you can do anything at all, it doesn't matter how many hoops you must jump through to accomplish that thing. These are the folks that assert that Java's verbosity is "just finger typing that Eclipse/IntelliJ will do for me," and it doesn't matter if the resulting code has 20 times the visual bulk of a simpler approach. One of the basic tenets of the Python language has been that code should be simple and clear to express and to read, and Ruby has followed this idea, although not as far as Python has because of the inherited Perlisms. But for someone who has invested Herculean effort to use EJBs just to baby-sit a database, Rails must seem like the essence of simplicity. The understandable reaction for such a person is that everything they did in Java was a waste of time, and that Ruby is the one true path.

The Rails fallout in the Python community has been significant. Pythonistas have been busy since the beginning of the web, trying to understand the problem and spinning off a multitude of web frameworks to solve it. Because of the confusion in the web space in general (hindered further by the dead-end reasoning behind EJB1/2 -- how many billions of dollars were wasted by this?), there was no nucleating agent that made any one of these frameworks come forward as clear winners, although it might be argued that Django had been in development for several years and appears to predate Rails, even if it wasn't public until after Rails.

My own experience in web frameworks was with Zope. In an interesting parallel with EJB3, Zope is now on version 3 which is a from-the-ground-up redesign, and everything I've seen of it indicates that, like EJB3, it represents a great deal of rethinking of the problem. I've been bumping up against the problem of "but all I want to do is connect a database to the web" in Zope2 for several years now. Oh, it's definitely something you can do, but unfortunately it's past the knee of the "Z-shaped learning curve," and is only trivial if you live and breathe Zope every day. Don't get me wrong; Zope is an excellent system and incredibly powerful, and Zope3 may be much easier, but I'm out of steam. I have realized that on my site, I really just want to do a collection of simple things, and I don't want to relearn Zope every time I want to accomplish something. So -- sorry, Jim (Fulton, not Kirk) -- I'm going to find something drop-dead simple to solve my drop-dead simple problems. Probably PHP5, which actually includes most of Java and C++ syntax, amazingly enough, and I wonder if that isn't what made IBM adopt it.

I'm sure we will find that the Rails approach isn't the ultimate solution; there will be plenty of other problems that we need to solve on the way to making web development easy. But it represents a fundamental restart in the thinking process. And it has caused, in the Python community, attention to Django, the development of Subway (although I don't know how that one is faring), and the creation of Turbogears, which seems like a very good solution because it builds on best-of-breed existing pieces using a Rails-inspired approach.

Clearly Ruby is making important contributions to the programming world. I think we're seeing the effects sooner in Python than elsewhere, but I suspect it will have an effect on Java as well, eventually, if only in the web-framework aspects. Java-on-rails might actually tempt me into creating a web app using Java again.

However, I can't see Ruby, or anything other than C#, impacting the direction of the Java language, because of the way things have always happened in the Java world. And I think the direction that C# 3.0 may be too forward-thinking for Java to catch up to.

But here's something interesting. I was on the C++ standards committee from the initial meeting and for about 8 years. When Java burst on the scene with its onslaught of Sun marketing, a number of people on the standards committee told me they were moving over to Java, and stopped coming to meetings. And although some users of Python like Martin Fowler (who, it could be argued, was actually a Smalltalk programmer looking for a substitute, because the Smalltalk relationship never really worked out in the real world) have moved to Ruby, I have not heard of any of the rather significant core of Python language and library developers saying "hey, this Ruby thing really solves a lot of problems we've been having in Python, I'm going over there." Instead, they write PEPs (Python Enhancement Proposals) and morph the language to incorporate the good features.

I think we've mostly been hearing from people who have come from Perl and found Ruby to be a "better Perl, with objects that work," or people who are finally convinced that dynamic languages have merit, and so mix the enthusiasm of the first time dynamic language user (quite a rush, as I remember from my 2-month experience with Perl many years ago) with their experience of Ruby. So far, I've heard from the hyper-enthusiasts about Ruby being cool, or that it has begin-end blocks and they don't like indentation to delineate scope. That kind of thing: "I like this, I don't like that," which is fine but not compelling. The person I want to hear from is the core Python expert, someone who knows that language incredibly well, who has decided that Ruby is just so much better that all the mature Python libraries and community expertise doesn't hold a candle to the value of moving to Ruby. That person would be able to make a compelling, feature-by-feature argument (such an essay is better served as his or her own weblog entry, rather than posting it as a comment here).


Kyrill Alyoshin

Posts: 2
Nickname: kyrill007
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 10:00 AM
Reply to this message Reply
Very glad that you touched on the Tate's book. How about "I've never written a single EJB in my life" from an author of "Bitter EJB"?..

I am sensing quite a bit of commercial pressure from Bruce and his camp. They are simply not making enough margin teaching Java anymore. To do make that margin, you have to work hard, maybe not as hard as B. Eckel but still really hard: play with intricacies of the language, dig ever deeper and deeper, invest the time to write a book... But that's hard to do, kayaking is way more interesting. So, it seems like Ruby has potential, why not throw a book or two at it, run a few $1000 a day courses... If you read "Beyond Java", this is exactly what Jason Hunter says in his interview.

I think mercantilism of "hyper-enthusiasts" is yet to be analysed.

That said, I am not buying another Tate's book every again, no matter how "pragmatic" it is.

Kevin Lawrence

Posts: 13
Nickname: kevlaw
Registered: Feb, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 11:41 AM
Reply to this message Reply
XP has made it fashionable to use code to express ideas and Ruby allows you to do that. Java requires you to write lots of code in the solution domain which obscures the code that addresses the problem at hand. The Java APIs demonstrate the minimal interface philosophy throughout and I find them painful to use. This, IMO, is the main reason for the flight to Ruby.

I blogged more about it here http://www.developertesting.com/archives/month200512/20051218-HumaneInterfaceOfMinimalInterface.html

Why Ruby and not Python ? I don't know but a colleague and I recently tried tackling the Python Challenge - he in Python and I in Ruby - and our solutions were almost symbol for symbol identical. Around challenge #8 I started to miss IntelliJ and went back to Java for the rest.

Jakub Pawlowicz

Posts: 1
Nickname: jpawlowicz
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 2:01 PM
Reply to this message Reply
I think you are mainly right about reasons for people moving to Ruby, and its influence on Python and Java languages.
But by saying that "Java-on-rails might actually tempt me into creating a web app using Java again." and by comparing development in Ruby to the one in EJB 1/2 (or even EJB 3), you are missing the fact, that part of the server-side Java community has already moved to the lightweight approaches such as Spring Framework.
From a one and a half year experience of working as a Spring web developer I must admit that the server-side Java development could be much simpler with lightweight approaches than it was in the EJB 1/2 times.

Jonathan Ellis

Posts: 7
Nickname: jbellis
Registered: Aug, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 2:52 PM
Reply to this message Reply
I blogged something similar (but much shorter) a couple months ago: http://spyced.blogspot.com/2005/10/why-do-java-programmers-like-ruby.html. I was a little surprised to see that "I don't like syntactically meaningful whitespace" was the most significant reason to prefer ruby most people gave. As usual, people are making decisions based on hype instead of thinking things through, which is disappointing.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 2:54 PM
Reply to this message Reply
The issue at hand is comparable to the "to use or not to use EJB". I, too, had a bad time trying to use EJBs, so maybe you can demonstrate some simpaty for a now Ruby user who can't seem to use any other language.

I claim that Ruby is simple enough for me to concentrate on the problem and not on the language (primary tool). Maybe for you Python is cleaner, but to me Python is harder than Ruby when I try to read the code. Ruby has a nice convention of "CamelCase", "methods_names", "AClass.new", etc, that make the code easier to read than a similar Python code, because in Python you don't have a good convention for that. Also, when I require 'afile.rb' in Ruby, it's much easier to read than the "import this.that.Something" in Python. Thus, despite the forced indentation, I prefer the way that the Ruby code looks and feels in comparison to the Python code.

On the supported libraries, Python has a very good selection, indeed. I would say that the Python libraries might be very good in comparison to the Ruby libraries. On the other hand, Ruby has very unique libraries which feel good to use. So, even if Python has more libraries, Ruby should have some quality libraries that compensate a lot for the difference. By considering that one should be well served using Ruby or Python in terms of libraries, the Python's force over Ruby diminishes quite a bit.

Finally, when you are up to the task of creating something new, like a library or program, you may be much more well served by using Ruby if you get to the point of fluid Ruby programming. But, if all you want is to create some web app, maybe Rails already fulfills your requirements.

Even if you consider Python better, for example, because Googles uses it and you want to work for Google or something, that won't make us Ruby users give up on improving the language and the available tools. I simply love Ruby and I will keep using it for the forseeable future -- in the future, if I can make a major contribution to the Ruby community, I will.

Pierre Bernard

Posts: 1
Nickname: houdah
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 2:57 PM
Reply to this message Reply
Have you tried Apple's WebObjects? It's Enterprise Object Frameworks do a great job in mapping entity-relation model storage to a Java OO design. The actual WebObjects layer is a great component based architecture for delivering content to various types clients.

WebObjects 5.3 is now free with every Mac. WebObjects itself dates back to the NeXT days and has its roots in NeXTStep.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 3:10 PM
Reply to this message Reply
BTW, another convention that I think Ruby has better than Python is the OO convention of the syntax and libraries. Because Ruby has always had an OO approach, and Python still struggles to support OO as well as Ruby does.

I don't remember writing pure procedural code since a long time ago.

I never had an easy life trying to find what I need in Python. On the other hand, the PragProg free book and the online Ruby documentation have always felt very easy to follow as a reference.

That has been my contribution to this thread. Merry X. Happy new year.

Phillip J. Eby

Posts: 28
Nickname: pje
Registered: Dec, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 3:31 PM
Reply to this message Reply
"""Python still struggles to support OO as well as Ruby does"""

FUD and nonsense. If Python advocates were to use such slippery reasoning, we'd be saying that Ruby isn't OO because it lacks multiple inheritance and it's unsafe because its builtin types lack encapsulation.

Stop repeating religious slogans and try thinking for yourself.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 3:38 PM
Reply to this message Reply
Well, after 30k of lines of Ruby code I prefer the OO of Ruby. Maybe you have 30k LoC of Python code and you prefer the OO of Python.

My slogan is based on personal experience, but I lack a lot of Python experience even though I tried to use it even before Ruby. EJB?! :P

JOhn Mudd

Posts: 5
Nickname: johnmudd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 3:41 PM
Reply to this message Reply
Good article.

The general theme seems to be that the best language should win out. Seems fair but maybe Python (gulp) is not the best. Maybe well engineered but not the best marketed.

I recently made the observation that lots of people won't give Python a chance because of "scope by indent" and suggested that optional (let me repeat this a few times: optional, optional, optional) braces could bring Python into the mainstream. The response: no way. Later it dawned on me the response made sense, considering that it was from an audience of engineers. I just need to make the same suggestion to the marketing department. Oops, there is none. And hence the first problem with Python.

The term "hyper-enthusiasts" conveys to me a sense of disdain for marketing. I think otherwise. I believe the saying that no tool (not even Python) is good enough to sell itself. It's the person that champions the tool, not the tool, that makes the difference. Argue all you want that this is not right or fair. You'll only miss the point.

This is not to say that Python doesn't also suffer engineering weakness. Yes, the GIL. And amazingly the same engineers that reject marketing suggestions also reject the suggestion that the GIL needs to go. That's really scary. Strike two for Python.

But hopefully there won't be a strike three. PyPy may soon eliminate the GIL. And (why not?) it may also throw in optional braces. I'm hopeful as Python is re-written in Python that there will be a shift of control to a new generation. That's where the real hope lies, not in adding yet another minor feature such as continuations.

John

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 4:36 PM
Reply to this message Reply
That was a very interesting article to read. Im not going to buy Beyond Java because I just don't need to read it. :D I had the choice of buying Swing Hacks or Beyond Java. I got Swing Hacks and have had a much better time with it than I probably could ever have with Beyond Java. I read "Better,Faster,Lighter Java" and don't remember what I learned from it. I do remember some silly Hello World EJB example that was supposed to prove something. :D

I write software in Java and Python and I haven't become disillusioned by either one of them. I don't need metaprogramming. I need classes and methods. The languages supply both of these for me. Exotic features don't impress me. Ive looked at blocks in ruby and I don't know why in the world I would switch over to Ruby because of the feature. I don't use Python because of generators.

I read Java and Python code. I find it very simple to figure out what Java code is doing. I probably read the Java libraries source every day. Mystery seems absent from it. I have trouble figuring out Python code sometimes not because of bizare syntax but because it lacks the informational punch that Java code carries with it. If it was Ruby or Perl Id have the same problem, but I guess in those languages it may be aggravated by oddball syntax. :D

Languages don't suddenly become broken or bad. Java and Python have remained relatively the same for a long time. I would think it would have been obvious to these "oh my, I never understood that Java is bad until now" folks long ago that they didn't like the tool.

Again, why do I like Java and Python? Simplicity and clarity.

Libraries are important as well. I really like the Java libraries. The java.util.concurrent packages were a wonderful addition to the kit. Those are a joy to work with and read. Does Ruby have a CyclicBarrier or do I need to write my own? Does Python have one? No, but I can easily use them in Jython.

So I guess the current Anti-Java crowd hasn't convinced me that I don't enjoy programming in Java or can't successfully build my software in it. "Hyper-Supporters?", well let em go. Im not sure if they ever taught me anything new anyway.

leouser

Martin DeMello

Posts: 1
Nickname: zem
Registered: Oct, 2005

Ode to the block Posted: Dec 18, 2005 8:46 PM
Reply to this message Reply
Your noting that Martin Fowler left Python for Ruby "because Ruby had blocks like Smalltalk and he liked blocks" does not really do justice to how indispensible a feature said blocks are. While I consider myself a Ruby enthusiast (perhaps even a hyper-enthusiast), I do realise it's a combination of strengths and weaknesses, and will not claim it's the One True Language for everything under the sun. I *will* however claim that lexical closures are an absolute must for a high level language, and would not now consider investing in one that didn't support them fully. From what little I've seen of Python's lambdas, they don't really count, and all Python's admittedly better library support doesn't make up for the frustration of programming without blocks.

robert young

Posts: 361
Nickname: funbunny
Registered: Sep, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 8:57 PM
Reply to this message Reply
the point of his book is not clear, i'll grant that. if you take his fundamental premise: we're put on this earth to "baby sit" databases, then the intent becomes clearer.

in RoR, there is the concept/implementation called Scaffolds, in which the engine generates soup to nuts from the database schema. if you think about Model Driven Architecture or Database Driven Design, then RoR looks like a lightweight way to get there. Then you later find that the developer team view Scaffold as a throwaway.

Enter (stage Java) Firestorm/DAO (commercial) and middlegen (OSS) and various others, with the recognition that the middle and UI are just artifacts of the datastore, esp. if the Don't Repeat Yourself mantra is to be followed. Intelligent (database) Design and Code Generation will work in any language. and guess what??? the browser doesn't give rat's patootie where the html, css, and js came from. a good string manipulation language sounds a good bet. maybe that's not java.

so a new paradigm: database geeks who know what a functional dependency is mated to Black Box UI generator that let's them change out a View with a couple of (virtual) switches.

in the years BPC, designers had the upper hand; coders were serfs. maybe the past will be new again.

Jason R Briggs

Posts: 3
Nickname: jasonb
Registered: Jul, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 18, 2005 10:09 PM
Reply to this message Reply
> I was a little surprised to see that "I don't like syntactically
> meaningful whitespace" was the most significant reason to
> prefer ruby most people gave.

It's an unfortunate knee-jerk reaction (emphasis on the jerk... ;-). I too exhibited whitespace prejudice coming, as I did, from the rabid java camp (when I first saw Python source a few years ago, I was less than impressed -- thankfully I got over it). It wasn't until I made the effort that saw the light... so to speak.

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 4:01 AM
Reply to this message Reply
Note that I've tried to express my issues with Ruby (too Perlish, etc.) in a way that shows them as my personal issues. Clearly lots of people are having good experiences with productivity in Ruby and it's contributing to the forward movement of computing. I think it would be interesting to see more of the specific issues -- Ruby's coroutines and continuations and different style of metaclass programming, for example -- that show the distinctions between Ruby and Python (and in some cases, only the perception of distinctions).

Vincent O'Sullivan

Posts: 724
Nickname: vincent
Registered: Nov, 2002

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 6:01 AM
Reply to this message Reply
One fact that generally seems to be overlooked in these discussions is that all these languages (Smalltalk, Python, Java, Ruby, C#, etc.) are all, more or less, functionally identical.

Certainly some have minor strengths and weaknesses compared to others but to develop an application with any of them still requires a developer to sit in front of a PC with a text editor (some of which are, admittedly, very impressive) and code in assignments, for loops, conditional branches, encapsulate methods, encode button positions, etc. Ninety percent of the syntax in any one of these languages can be translated into any of the others on a one-to-one basis and the rest can be readily simulated with something else that is, to all intents, identical.

Unfortunately, I'd say that this has been the situation in software application development for over thirty years now. Sure, we've been refining the development process over that time and development techniques like the 'Waterfall Model' and procedural programming' have slowly given way to newer versions of the same things such as TDD and 'functional programming'. Underlying this though is the fact the developing software still requires a geek, a keyboard and unfeasible amounts of coffee coding in the same old commands.

The disappointing fact for any of the 'hyper-enthusiasts' who decide to abandon any one of these ships for any of the others is the realisation that they are all moving as a flock. Each language is avidly watching all of the others and any development in one language is soon matched by something equivalent (if not identical) in the others.

I think the real reason the hyper-enthusiasts have gone quiet is simply because they are bored with what's on offer and are waiting for something genuinely new to enthuse about.

Vince

Adam Connor

Posts: 12
Nickname: adamconnor
Registered: Jan, 2004

Re: Ode to the block Posted: Dec 19, 2005 6:06 AM
Reply to this message Reply
> Your noting that Martin Fowler left Python for Ruby
> "because Ruby had blocks like Smalltalk and he liked
> blocks" does not really do justice to how indispensible a
> feature said blocks are.

I agree, closures are extremely useful. Although I think Lisp did them better. ;-)

While I agree with Bruce about the unfortunate Perlisms in Ruby, I think it does have a lot to offer, mostly in terms of a Unix-y Smalltalk.

The author of "Beyond Java" spends way too much time worrying about what will be hot, and not nearly enough time investigating the merits of the languages. Maybe that makes sense if you are a consultant, but it doesn't make for a very edifying book. I appreciate that community is important, but I don't see all that much reason to expect any different fate for Ruby than for Python: a fine language with a stable but modest community. Nor do I see anything wrong with that; you don't need 20 versions of every framework, as in Java. And hey, it could be a lot worse... look at Common Lisp and Scheme.

Java the language isn't going to die any time soon, but we are beyond the hype part of the curve, so it is going to gradually lose developers to more productive languages.

Adam Connor

Posts: 12
Nickname: adamconnor
Registered: Jan, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 6:14 AM
Reply to this message Reply
> One fact that generally seems to be overlooked in these
> discussions is that all these languages (Smalltalk,
> Python, Java, Ruby, C#, etc.) are all, more or less,
> functionally identical.

In the Turing sense, sure. In the "equivalent productivity" sense, I doubt it. Java is a fairly tedious and verbose language, and refactoring is made expensive by all the static type annotations. Early on, when you are still experimenting with the design, Java is an expensive language to work with. Dynamic languages have an advantage here precisely because they don't require as many decisions about type, and the code is easier to refactor.

There are also differences in features that are shared. I've written a fair amount of metaprogramming code in Java. It is tedious in the extreme. Ruby looks a LOT easier to me, as does Lisp (in a different way).

I'm mostly interested in finding tools that improve my productivity at this point. I can easily see why folks are interested in defecting from Java.

Xan Gregg

Posts: 2
Nickname: xangregg
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 7:23 AM
Reply to this message Reply
Typo: replace "statments" with "statements" and delete this comment.

John Norman

Posts: 1
Nickname: johnn
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 7:27 AM
Reply to this message Reply
I don't think we should misunderestimate the relationship between the publishing world and language/framework adoption.

Dince Ruby is new to North American developers, there are only a few books about it, which for some developers is a relief. In the C++ and Java worlds, if you want to do something, there are a myriad of choices (indeed, we use up a lot of time discussing why, say, WebWork is to be preferred to Struts). Whereas with Ruby / Ruby on Rails, you get some focus through the really decent books put out by the Pragamatic Programmers. Since they're good books, you have that feeling of one-stop shopping.

Achilleas Margaritis

Posts: 674
Nickname: achilleas
Registered: Feb, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 8:33 AM
Reply to this message Reply
I do not see a problem with having List/Map/Array in the same language. If a programmer is not able to choose between one of those collection primitives, then he/she should not be programming. One size clearly does not fit all.

S. Fanchiotti

Posts: 10
Nickname: impatient
Registered: Nov, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 9:12 AM
Reply to this message Reply
Interesting article and discussion.

The most important aspect of a programming language adoption (for me) its usefulness to solve a common problem in a domain area. All the rest is watercooler bragging.

C solved the problem of being a portable assembler. Still is today.

C++ tried to solve the problem of building large and more maintainable applications riding on the portablilty of C. Somehow it still works for that task, warts and all.

Perl solved the problem of implementing a portable glue language for data processing. Then it was adapted to the initial web data processing mechanism using CGI. Its lack of scalability to build consistent and maintainable apps opened the field to newcomers like PHP.

Java was first billed as a portable solution for client apps. Then marketiing hype took over. Java suffered when it tried to cover too many domains while being awful at delivering in most. Only on the server side and rarely in the client side you see some Java apps work well enough. Too much work for little payoff.

The problem with Python and Ruby is the same one I have when trying to getting good at speaking Portugese, French or Italian from knowing Spanish. The difference is not that large so I slip back to the previous knowlwedge to get real communication (read work) done. In my case it is Perl vs Python or Ruby, but evey one probably has the same experience with their favorite dialect. That is the most important aspect to rescue from what that Bruce and others point out.

In most cases the deciding factor is the emergence of the 'killer app' or for developers the 'killer framework pattern' to make the jump worth the split brain pain. The Python comunity has been in search of that killer framework for a while without a big hit like Ruby has had with rails. But trying to replicate previously sucessful stuff is not going to work in principle.

In a sense the answer is to look beyond the current comon application domains and try to see what is coming next. What is the next paradign that will make development easier.

Personally I am perceiving more and more the need to have a clear and simple way to build scalable distributed apps in a simple way. There will be plenty of CPUs and even plenty of hosts where apps will need to run in parallel or worse, asynchonoulsy. Trying to fight about whose web framework is the best is kind of childish because it seems to me that it is just the front end of a much larger problem that will need to faced sooner rather than later. Most of the web smarts is what happens behid the web server. All that SQL encapsulation is nice but it is a very restrictive model when thingking about distributed processing, a kind of premature optimization or lack of clear component separation when builing an app.

So, in conclusion, the quality of a newcomer language will be probably measured on how well it will support a framework were developers can build large scalable distributed apps over many hosts (or mutiple core cpus). Also its capability to adap to legacy infrastructure (e.g. C and C++ stuff mostly) while doing that is key.

Today most attempts I've seen are pityful in solving the future problem mentioned above with the exception two very obscure cases that never got to be popular. The first was a very interesting agent framework caller Voyager, written in Java; the second was Erlang, a pure functional language. Both cases looked like a great way to build a future of small pieces of code running in a collabrative way.

Why didn't Sun buy Voyager and ran with that is the bigest case of missed opportunity I've ever seen. And why erlang hasn't made more impact in the scripting world than all the web services stuff amazes me even more.

Or to put in a different way, does Python or Ruby give us an better tool for the future, not the stuff of Yesterday?

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 9:12 AM
Reply to this message Reply
I have a feeling that some people need to move 'out of' mature languages because there are too many people who can see through BS. When Java was new and 'hot', you could write just about any fool thing about Java programming and people would call you a guru as long as they didn't really understand what was being said or written. Now there are a lot of truly skilled people in the Java community. People will call you out on nonsense. Time to move to a new language. It will be years before people realize that a lot of current Ruby advice makes no sense or is just plain wrong.

Bruce Tate

Posts: 2
Nickname: batate
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 9:31 AM
Reply to this message Reply
Actually, I'm guilty as charged. I didn't extensively research Perl. I don't like PHP as much, for the reasons that I stated in the book. I also don't think C# is dramatically different from Java. But my opinions are based on my limited experience, and I say so several times in the book.

And I would definitely double check facts around the continuation based web model, because that idea is new to me too. Ruby is also new to me, though I like what I see so far. I've been extremely productive in Ruby on Rails, and I've helped some customers generate an incredible amount of value in a very short time.

Beyond Java is about my experience of using Java to solve a business problem, and revisiting some assumptions I'd made based on some success I had with an alternate framework. I then went underground to understand what had happened to me, and didn't like my conclusions. So I'm a self-proclaimed, recovering Java bigot. I've had tunnel vision. And I thought my research might also be helpful to others in the same camp. I did several interviews with people I trust to sanity check my ideas and establish new ones.

As to the Ruby love fest, I think the answer could have well been Smalltalk or Python or the upcoming Perl 6, because they all have the core productivity inherent in such a strong metaprogramming model. But they don't have a catalyst. I think Ruby on Rails is that catalyst for a dynamic language, so I'm betting on it. But it's not for everyone. It's aggressive, and it's firmly aimed at one particular class of application.

I've got a tremendous amount of respect for you, your books and the quality of your writing. I aspire one day to one day use the language with your command. But you're doing yourself a disservice by attaching the hyperenthusiest label to such a broad community. Technology needs early adopters, pragmatics, conservatives and skeptics. We're just riding different parts of the wave.

Doug Smith

Posts: 1
Nickname: javapapa
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 10:22 AM
Reply to this message Reply
One of the issues I've had to face coming to the web from the cozy cocoon of the insular AS/400 world is to know what is bogus and what is worth learning. Not an easy task for a business major RPG language journeyman.

I have learned to apply one rule to filter out BS - does the language or framework help me change an installed application more easily than the toolset I currently use?

Why? Because there is absolutely no difference between the end user changing their mind and my making a mistake in the design or code.

Both Eckels and Tate have written books I have purchased, read with enjoyment, and have learned more about the craft of programming. It has been a pleasure to read this article and the replies.

Kay Schluehr

Posts: 302
Nickname: schluehk
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 10:50 AM
Reply to this message Reply
> Technology needs early adopters, pragmatics, conservatives
> and skeptics. We're just riding different parts of the
> wave.

Python originated in 1991, Ruby in 1993 and Java in 1995. Which part of the wave do you believe to ride in your own watery scenario?

Is there any indication that you have lost your "tunnel vision" just because you switched your belief?

Morel Xavier

Posts: 73
Nickname: masklinn
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 11:07 AM
Reply to this message Reply
> Maybe for you Python is cleaner, but to me Python is
> harder than Ruby when I try to read the code. Ruby has a
> nice convention of "CamelCase", "methods_names",
> "AClass.new", etc, that make the code easier to read than
> a similar Python code, because in Python you don't have a
> good convention for that
.

Either you don't like the conventions set by PEP 8 ( http://www.python.org/peps/pep-0008.html ) and PEP 257 ( http://www.python.org/peps/pep-0257.html ), or you didn't even bother looking for python style guidelines before bashing Python on this.

Which one is it?


> BTW, another convention that I think Ruby has better than
> Python is the OO convention of the syntax and libraries.
> Because Ruby has always had an OO approach, and Python
> still struggles to support OO as well as Ruby does.

Arguments please, the only OO-related thing that I saw could be considered superior in Ruby 1.8 (compared to Python 2.4) is the handling of properties...


> I do not see a problem with having List/Map/Array in the
> same language. If a programmer is not able to choose
> between one of those collection primitives, then he/she
> should not be programming. One size clearly does not fit
> all.

I don't see a problem with having lists, maps or arrays in the same language, quite the opposite in fact (even as native language objects, and not as side-library classes).

I think that what annoys most people with Java is not the fact that you have Lists, Maps and Arrays in the same language, but that the language requires you to select one container between 2-5 different implementations (classes) of these within the standard library.

Python and Ruby both provide lists, arrays (immutable lists) and maps, and more, the difference is that they provide ONE standard implementation of each of these containers, not a hundred.

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 11:58 AM
Reply to this message Reply
> I think that what annoys most people with Java is not the
> fact that you have Lists, Maps and Arrays in the same
> language, but that the language requires you to select one
> container between 2-5 different implementations (classes)
> of these within the standard library.
>
> Python and Ruby both provide lists, arrays (immutable
> lists) and maps, and more, the difference is that they
> provide ONE standard implementation of each of these
> containers, not a hundred.

Really? Having to choose the type is worse than having no choice? You realize why there are different choices, right? They are different datastuctures for solving different types of problems. It doesn't matter which one you choose if efficiency is irrelevant or unimportant, they all implement a common interface.

Bruce Tate

Posts: 2
Nickname: batate
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 12:08 PM
Reply to this message Reply
> > Technology needs early adopters, pragmatics,
> conservatives
> > and skeptics. We're just riding different parts of the
> > wave.
>
> Python originated in 1991, Ruby in 1993 and Java in 1995.
> Which part of the wave do you believe to ride in your own
> watery scenario?
>
> Is there any indication that you have lost your "tunnel
> vision" just because you switched your belief?

But Ruby has only emerged in the last 5 years or so, and only gotten the catalyst in the last 2. Right now, I'm looking for a dynamic language that I can sell into conservative accounts, because I can be more productive with them for certain problems. I actually like Python, Lisp and Smalltalk, though of the three, I've only used Smalltalk in anger, and only on very limited apps. Iwould be happy with any of the 3 as an alternative. Smalltalk's the most pure, Python the most approachable, and Lisp the most powerful. It's jsut that as a consultant at conservative Java accounts, I need to also consider market penetration. Java has already popped. In Ruby, I see a possible catalyst in Rails. In Smalltalk and Python, I don't.

But since Beyond Java, I've used Rails, Spring and Plone on various applications, and been peased with each.

And I don't think anyone ever completely loses their tunnel vision, but I'm working on it.

Patrick Hurley

Posts: 1
Nickname: phurley
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 12:22 PM
Reply to this message Reply
I speak most of my piece here (http://blog.hurleyhome.com/articles/2005/12/19/ruby-hyper-enthusiats), but to summerize. All languages have strengths, weaknesses, sytax issues and enthusiasts.

I agree people should not run from fad to fad and need to research the strengths and weaknesses of each language, but I think you are confusing critism of some enthusiasts with critisms of the language.

Additionally, you nitpick Ruby syntax (the Perlisms, which are largely historical and for the most part not in common usage), while ignoring historical warts in Python. These are not significant issues in Python and they are not significant issues in Ruby -- they are just differences. Each language will appeal to different people for a variety of different reasons.

I don't expect that many core Python developers will be switching to Ruby or many core Ruby developers switching to Python -- the languages are too similar both in power and nature. Make your own choice and have fun :-)

Dick Ford

Posts: 149
Nickname: roybatty
Registered: Sep, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 12:34 PM
Reply to this message Reply
Call me cynical, but this seems more of a defense of Python than "don't jump on the hype bandwagon folks" article. I watched Bruce's Berkley video about Java 5 and he did his fair share (rightly so) of Java bashing and it's no secret that Bruce has been evangelizing Python recently.

Fine Bruce, you prefer Python over Ruby, but I read Beyond Java and I didn't see any Python bashing in it.

Joel Redman

Posts: 3
Nickname: redmjoel
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 12:59 PM
Reply to this message Reply
I think that much of the problem here is that in order to understand a language, you must not just understand the syntax, but also the thought processes and idioms to use the language.

Ruby's thought process is very different from Perl's, or Python's. The blocks in Ruby are a very powerful abstraction and are central to the Ruby mindset. In Python, you also have blocks available, but they are peripheral. In Ruby you have backwards support for Perl, but Ruby style frowns on things such as $ variables.

I think it's important to separate what _can_ be done with the language with the "moral" use of that language.

In theory, for instance, I can do anything in ML, Java, Perl, C, C++, Python, etc, which can be done on a computer. In practice, though, the process by thich you come up with a solution is definitely affected by the language you use.

In C++, I approach most tasks with RAII in mind. I.e. leaving a block of code should automatically free any objects allocated by that code, and in a predictable way. In Ruby, I get some of the same behavior with one of the File.open calls, or Dir.chdir, or any number of other resource allocations. Blocks are useful for this type of behavior. Blocks also mostly replace loops in Ruby.

I can't speak for the thought processes in Python (it's not my first language), but it seems clear to me that the two ways of thinking are not terribly compatible. If you grok one you find it hard to switch to the other because you find it hard to use the methods from one language in the other, but they still LOOK similar.

With respect to the article, the Ruby hyper-enthusiasts will soon learn that Ruby isn't a magic bullet either, and move on to something else. Just like they did with VB, Smalltalk, Java, .NET, UML and any number of other technologies over the years.

Erik Wessel

Posts: 1
Nickname: wesselej
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 1:03 PM
Reply to this message Reply
I think this whole idea of "hype", and therefore the idea of "hyper-enthusiasts", is a distraction. There are people out there who dislike the fact that Ruby is getting a lot of attention, very quickly, because of RoR and that it's drawing that same attention from their language of choice. I can see how those who like Python feel that Python should be getting the same attention that Ruby is now getting. In many ways they are similar. Guido and Matz both have stated that they developed their languages in response to Perl.

But the thing that makes Ruby so appealing right now is its simplicity, which is something I personally have not found in Python. Several years ago, Python was enjoying a surge in publicity because of things like Mailman. I decided to try getting into it, went out and bought Learning Python, and immediately got bogged down in things like setting the PYTHON_PATH. It didn't just work out of the box.

Several years later, I was involved in a project using Zope. So the whole environment was set up for me, finally, by a web framework. I was actually happy coding procedurally in Python. Zope made it easier to program in an MVC fashion. But the other developers I worked with didn't understand that, and still did it all backwards. But when it came to OO programing, I was lost again. Zope itself almost discourages the use of custom objects. Despite this, I was determined to use them, but learned that creating objects involved an abundance of silly ways of doing things. (Why do you have to send "self" as a parameter to __init__? Doesn't the object know itself?)

As far as databases go in Zope, it's a disaster. There's no way to easily create a single connection to a database that can process all the SQL you throw at it. Those who set up the environment created way to do it, but it required making a new connection to the database for *every* SQL statement. Five statements on a page makes five connections to the database. Ugh.

All of this happened before I even heard about Ruby. I heard about it and started investigating before RoR even showed up on the scene. And I liked it immediately upon seeing it. I downloaded an interpretter and could run a script that used my own custom objects the first day I started learning about it. *Then* RoR came along and showed me even more great things about the language.

So, this from a person who has used Python professionally and only played with Ruby. I'm not even saying Python is bad, just that it's not as easy as Ruby. And that's why so many people are finding RoR and Ruby attractive.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 1:19 PM
Reply to this message Reply
"Either you don't like the conventions set by PEP 8 ( http://www.python.org/peps/pep-0008.html ) and PEP 257 ( http://www.python.org/peps/pep-0257.html ), or you didn't even bother looking for python style guidelines before bashing Python on this.
Which one is it?"

Both. I prefer the Ruby conventions over the Python conventions, even though I have had some opportunities of using Python and getting a little acquainted with it. It's possible that I have had the opportunity of reading a Python guideline in the past (maybe the PEP 8).

"Arguments please, the only OO-related thing that I saw could be considered superior in Ruby 1.8 (compared to Python 2.4) is the handling of properties..."

I have seeing OO in Delphi, Java, Ruby, and a little in Python. I prefer Ruby for programming, but I don't think I can contribute with a philosophical discussion on OO or programming in general. As I have said in a previous post, I'm a very "hands-on" person, so feeling comfortable while programming is essential for me, and I prefer the OO way by a long shot, mainly because of the "methods + data" in the objects, plus polymorphism and a good documentation, all of which Ruby provides in a nice way. Also, the big plus of Ruby over the others that provide OO programming, is that Ruby seems to favor ease of use for the ordinary people like me. I like typing a regular expression like "if /^\s+$/ =~ text; puts 'matches a string filled with only spaces.'; end".

After Delphi and Java, I wanted a good OO shelter, I think, and I found Ruby in two tries. I'm very thankful for the people responsible for that, including all the Ruby community and Matz and Dave Thomas in particular. I don't want to move from Ruby for at least three years, but I expect C# 3.0 to be a very good static typed alternative in the future. I really want them to create something good so I don't have to use Ruby all my life. hehehe.

Cheer up, guys. Cheers.

Gregor Zeitlinger

Posts: 108
Nickname: gregor
Registered: Aug, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 3:20 PM
Reply to this message Reply
> Ruby, for example
> has coroutines, as I learned from Tate's book. The
> expression of coroutines in Ruby (at least, according to
> Tate's example) is awkward, but they are there, and I
> suspect that this may be why coroutines -- albeit in a
> much more elegant form -- are appearing in Python 2.5.
C# 2.0 has introduced coroutines as well (the yield return statment). It may not be exactly the same - just like Java's anonymous inner classes are not true closures.

Considering that Sun has basically not changed the core language of Java until C# came along, I could imagine that coroutines will find their way into Java in one way or another, once they become popular in C#.

Brian Ford

Posts: 153
Nickname: brixen
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 4:38 PM
Reply to this message Reply
> Where did the hyper-enthusiasts go? To Ruby, apparently.

Why is it that the word most associated with Ruby and Rails outside of those communities is 'hype', and now 'hyper-'?

Communication is often fraught with misunderstanding, and perhaps I am guilty of misunderstanding, but that opening sentence sounds disparaging, and seems to suggest that Ruby is not legitimate, or does not have substance. While that initial impression may be tempered by things said later, the post nonetheless has a general air discounting Ruby and Rails.

Arguing for one language being superior without carefully laying the grounds for the comparisons is pointless. That said, I have used Python enough to know that I like it better than C, C++, or Java, which I have used enough to accomplish something nontrivial.

I learned Ruby much later and now I find that language feels best for me. But, your mileage may vary. I mentioned to my Python mentor, "the reason I like Ruby is doing something like this: yield if block_given? unless flag == 'never yield!'". He responded, 'because it's backwards?' Not unless 'go to sleep if you are tired' is backwards, I replied. I find constructions like these to be extremely helpful; he disagrees. But, at the same time, he hardly calls me a hyper-enthusiast.

I also find blocks extremely useful. They are not a simple idea. And their inclusion in Ruby _is_ a compelling reason to use Ruby. Perhaps you should try them. And then present in Python why you don't need them, which might actually render them a non-compelling reason to use Ruby, aside from your simple assertion. Some people think they are a good idea in Python (e.g. http://www.python.org/peps/pep-0340.html).

Please provide examples of 'Perlisms' that you find to be flaws in Ruby. Include as well examples of their usage in such technically sound projects as Rails. (Hint, there is a 'Perlism' in this response; can you spot it? Is it a 'flaw'?)

And for anyone who wants to answer in depth how Python and Ruby differ, why not port Rails to Python? Then we can really compare apples and apples and perhaps gain insight into the languages deeper than the common but vacuous sentiment, 'I can do the same things in either language.'

Before making rather empty assertions about why Ruby is a hyper-fad, you may consider actually coding a nontrivial project in Ruby and then describe, with code fragments, what you dislike about Ruby and how Python, again with code fragments, is technically better, along with the basis for the comparison, of course.

I actually own two of your books, and found them to be very helpful. Sadly, after this hyper-defensive and ill-thought post, "I had better double-check" what I learned elsewhere. Perhaps in the 'Programming Ruby' book. ;)

Todd Blanchard

Posts: 316
Nickname: tblanchard
Registered: May, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 4:52 PM
Reply to this message Reply
Ah WebObjects - great framework - when it was written in ObjectiveC. Now its been ported to Java and it is much less attractive, more rigid, harder to work with, and Apple isn't doing a good job supporting it.

Java killed WebObjects. If 4.5 were resurrected I might give it a look, but the 5.x versions all blow chunks.

FWIW, I'm doing all my work in Smalltalk/Squeak/Seaside these days and loving it. Smalltalk is what all these other langauges are trying to become. Might as well just go to the source.

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 4:59 PM
Reply to this message Reply
Does anyone have an Open Source Ruby application they can point me to besides "ROR"( prefarbly a desktop app)? I wouldn't mind analysing some of its code, if one exists, so I can get a better sense of why its going to be a great desktop application programming language for me to use.

I have to nod in agreement that having multiple implementations of List, Set or Map is a good thing. There are times when I need a TreeMap or TreeSet, times when I need just a HashMap. The point is, there there when I need em.

gotta run!
leouser

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 5:21 PM
Reply to this message Reply
Find one that you like:
http://raa.ruby-lang.org/
http://rubyforge.org/

There are two that I know of in Ruby-GTK+:
Alexandria: http://gnomefiles.org/app.php?soft_id=110
Rbbr: http://ruby-gnome2.sourceforge.jp/hiki.cgi?rbbr

But the most well known must be the Free Ruby IDE:
http://freeride.rubyforge.org/wiki/wiki.pl

But you know, with open source it's hard to keep up. So maybe a look in the RAA or RubyForge might show something interesting.

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 6:18 PM
Reply to this message Reply
Thanks for the links, finding one I might like is going to be hard. Ill skip RIDE, won't have too much fun playing with a garden variety IDE, Alexandria won't get much exercise, rbbr probably falls in the same category as RIDE. If I were a ruby enthusist RIDE and rbbr probably would be good. I need a cool concept app, something that hides its rubyness.

leouser

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 6:20 PM
Reply to this message Reply
That's what I'm creating, but it's not open source yet.

Steven E. Newton

Posts: 137
Nickname: cm
Registered: Apr, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 6:37 PM
Reply to this message Reply
> Does anyone have an Open Source Ruby application they can
> point me to besides "ROR"( prefarbly a desktop app)? I
> wouldn't mind analysing some of its code, if one exists,
> so I can get a better sense of why its going to be a great
> desktop application programming language for me to use.

How about a Ruby/Cocoa application? I'm speaking of the graphical TestRunner for Ruby's Test::Unit I wrote: http://rubyforge.org/projects/crtestrunner/
It provides an interface similar to jUnit's for running ruby unit tests.

Also check out Rake and RubyGems. Actually any of the top projects on RubyForge are worth digging into.

Cedric Beust

Posts: 140
Nickname: cbeust
Registered: Feb, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 7:22 PM
Reply to this message Reply
> """Python still struggles to support OO as well as Ruby
> does"""
>
> FUD and nonsense. If Python advocates were to use such
> slippery reasoning, we'd be saying that Ruby isn't OO
> because it lacks multiple inheritance and it's unsafe
> because its builtin types lack encapsulation.
>
> Stop repeating religious slogans and try thinking for
> yourself.

I'm not the original poster but I agree with him.

Here is a quick question to make the case that Python is not really OO, then: why do I need to pass "this" (sorry, "self") to each method?

Last time I used this trick, it was to emulate OO behavior in C.

Python was not designed OO from the ground up. There's nothing wrong with that, but trying to retrofit OO features to it is taking its toll on its consistency and syntax.

--
Cedric
http://testng.org

D H

Posts: 13
Nickname: dug
Registered: Jul, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 9:27 PM
Reply to this message Reply
I highly recommend skimming thru these short resources to get a much more in depth feel for what ruby is like, if you are already familiar with java or python like myself. I did recently and I am finally "getting" ruby much better (the perl-isms turned me off from seriously looking at it earlier, just like it took me a year to get over python's indenting):

Ruby user's guide:
http://www.rubyist.net/~slagell/ruby/
10 things every java programmer should know about ruby:
http://onestepback.org/articles/10things/
Coming to ruby from java:
http://fhwang.net/blog/40.html

Things I like:
-blocks
-you can be more expressive in ruby and essentially twist it into different domain-specific languages, see: http://blog.ianbicking.org/ruby-python-power.html
-I like how standalone functions essentially become protected extensions of the object class (like C# 3.0 extension methods):
http://www.rubyist.net/~slagell/ruby/accesscontrol.html
-using "end" instead of curly braces (easier for beginners and more readable)

Things I don't like and never will:
-awkward syntax for some things like symbols and properties
-awful perlisms like $_,$$,$0,$1,?,<<,=begin
-80's style meaningless and over-abbreviated keywords and method names like "def", "to_s", "puts", etc.
-:: (double colon) vs. . (period).

Ruby is definitely better than python, but still not perfect, and still an order of magnitude slower than statically typed languages.

Kay Schluehr

Posts: 302
Nickname: schluehk
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 9:37 PM
Reply to this message Reply
> Here is a quick question to make the case that Python is
> not really OO, then: why do I need to pass "this" (sorry,
> "self") to each method?

http://zephyrfalcon.org/weblog/arch_d7_2003_07_12.html#e283

the metapundit

Posts: 3
Nickname: metapundit
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 11:25 PM
Reply to this message Reply
> > Here is a quick question to make the case that Python
> is
> > not really OO, then: why do I need to pass "this"
> (sorry,
> > "self") to each method?

Fair disclosure: I'm not a pythonista or rubyist yet. Most of my work is in PHP and I'm eyeing both/either languages as possible upgrades. Currently python feels more *natural* to me, although I realise that this is an aesthetic preference that may be purely personal...

That said, I was struck early on by the oddness of accepting self in method declarations (you don't have to pass it; it is declared only in the def, not in the argument list of a method call) and python rightly passes self automatically when you call an object member function. Coming from oop via C++ I didn't understand why this wasn't just automatically available and googled for a reason. Very reasonably, somebody on a mailing list (see http://www.python.org/tim_one/000152.html) explains that methods of classes in python are just functions (that could be dynamically added) and so self is not a reserved word but just the convention that the first argument to a method is a reference to the instance. Methods are not any different than functions and this allows for easily adding functions to an object...

Brian Takita

Posts: 1
Nickname: btakita
Registered: Sep, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 11:30 PM
Reply to this message Reply
I tried Python before I tried Ruby. The syntax just wasn't clear. It seemed like Object Orientation was hacked onto a procedural language.

When I first tried Ruby, I was amazed by how elegant the syntax was and how Ruby's Object Orientation seems to be built in from the ground up.

Kay Schluehr

Posts: 302
Nickname: schluehk
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 19, 2005 11:42 PM
Reply to this message Reply
> I highly recommend skimming thru these short resources to
> get a much more in depth feel for what ruby is like, if
> you are already familiar with java or python like myself.
> I did recently and I am finally "getting" ruby much
> h better (the perl-isms turned me off from seriously
> looking at it earlier, just like it took me a year to get
> over python's indenting)

Does that mean you will not polute the Python newsgroup with boo announcements in future but spent your time trying proselyte Rubys?

That's really good news - at least for Pythonistas. Now only Xah Lee has to follow. On the other hand programming language cranks can be entertaining sometimes...

hannes häyrinen

Posts: 1
Nickname: hannes2
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 12:06 AM
Reply to this message Reply
> > Maybe for you Python is cleaner, but to me Python is
> > harder than Ruby when I try to read the code. Ruby has
> a
> > nice convention of "CamelCase", "methods_names",
> > "AClass.new", etc, that make the code easier to read
> than
> > a similar Python code, because in Python you don't
> have a
> > good convention for that
.
>
> Either you don't like the conventions set by PEP 8 (
> http://www.python.org/peps/pep-0008.html ) and PEP 257 (
> http://www.python.org/peps/pep-0257.html ), or you didn't
> even bother looking for python style guidelines before
> bashing Python on this.
>
> Which one is it?

Maybe that applies to those who develop Python standard library as well.

E.g. "Like modules, Python packages should have short, all-lowercase names, without underscores."
What about "StringIO", "cStringIO", "ConfigParser"?

Or "Almost without exception, class names use the CapWords convention."
But then we have classes "datetime" (and other classes in datetime package), "shlex", "zipimporter".. "True" and "False" are objects of type "bool", now that is completely backwards.

What's the use of guidelines if they're not followed? I'm not a Ruby programmer but I believe it enforces the CapWords syntax for classes. Maybe other conventions are also more enforced in Ruby camp. I consider that a good thing.

And then I just dislike a lot of Python's letswritesentenceasasinglewordconvention. "toordinal", "utcfromtimestamp", etc. Yuck.

Peter Booth

Posts: 62
Nickname: alohashirt
Registered: Aug, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 4:59 AM
Reply to this message Reply
Pulling the discussion back from the languages onto the people. I have respect and gratitude for both Bruce and Bruce. Years ago when I was struggling through Stroustrup Eckel's Thinking in C++ crystallized the conccrete "how do I get this done in C++" lessons for me, and it's logical, straightfroward presentation allowed me to clarify that my challenge wasn't that C++ books sucked but that I simply didn't like the language. Years later as a Java bigot I was puzzled by the number of Java projects I kept seeing that had all the ingredients of success yet produced enormous, verbose spaghetti applications that were hampered by multithreading excessive String operations and plain old bloat. I couldn't grok why smart people used this powerful technoilogy to write such crap applications. Tate's "Bitter Java" crystallized a bunch of my concerns and came at just teh right time. Bruce is correct that we need the earlty adopters, the pragmatists, the skeptics, and the rest.

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 6:20 AM
Reply to this message Reply
I don't get why people think Python doesn't have OO suport. I write classes in it and I subclass in it. So where does that fall short? You mean 'self' ruins it? Though not as silly as enforced whitespace ruins the language, it seems somewhat silly.

leouser

Kay Schluehr

Posts: 302
Nickname: schluehk
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 7:10 AM
Reply to this message Reply
> I don't get why people think Python doesn't have OO
> suport. I write classes in it and I subclass in it. So
> where does that fall short? You mean 'self' ruins it?
> Though not as silly as enforced whitespace ruins the
> e language, it seems somewhat silly.
>
> leouser

It's an anachronism. Until Python 2.2 introduced "new style classes" it has not been possible to inherit from builtin types like int, float, str, dict, tuple and list. Those were "types" not classes. The distinction has become obsolete since then [1]. Before Python 2.2. wrapper classes had to be used. They are still available in the stdlib and you can identify them looking for UserDict, UserList etc.

[1] http://www.python.org/2.2.3/descrintro.html

Mike Pence

Posts: 2
Nickname: mikepence
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 9:15 AM
Reply to this message Reply
Bruce,

I have enjoyed your books and sessions at the Borland conferences and argued strenuously as a member of the Delphi community for some of the functional programming constructs that make other languages so powerful to find their way into Object Pascal. (Some of this has actually come to fruition in Chrome, but that is another story.) I've done my share of Java, Visual Basic (eye roll) and Lingo, and started with FoxPro in the early 90's.

My point is that I have been doing this -- developing professionally in various languages -- for over 15 years. Frankly, I had become sick of it, but Ruby and Rails showed me that programmatic logic can be succinct, even elegant. I am more a writer at heart than a programmer, so expressiveness is very important to me. That ability to be elegant, more than anything else, has rekindled my enthusiasm for programming. I just finished my first Rails app, and am beginning my second. I even started a project to marry OpenLaszlo and Rails, to create truly rich net apps. I haven't been this excited about development since I first read Booch and really *got* OOP, or discovered Delphi. Or maybe since those first plaintive strokes on the big grey keyboard of that TRS-80 when was I was 11.

So, come on in. The water is fine. We may seem to be playing with a bit too much enthusiasm, but it is all good. Even us old guys are in on the fun. Write yourself a Rails app or two and get out of your denial. We may be misfits, we enthusiasts, but we are also the agents of change.

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 9:56 AM
Reply to this message Reply
"On the other hand, I'll bet that list was one of the first library classes that Matz wrote. You can find plenty of methods and classes in Java 1.0 that appear to be amateurish additions, as well."

Looks to me like the jist of the disconnect lies in Bruce's use of the word amateurish. We're now staring at a chasm that is gaping wide between the professional developers and the amateur developers.

It is a huge, unbridgeable chasm. Bruce seems proud to count himself among the professional crowd. We, the Rubyists, are proud to be partaking in the amateurish camp. Will the twain never meet?

What's the difference between a professional and an amateur? A professional is someone who professes certain way of doing things (usually, it's a prescribed way of doing something). What that means is that there usually is one, and only one proper way of doing something. This ensures consistency and predictability, so that everyone can sleep soundly at night.

An amateur, on the other hand, is someone who loves what they are doing. And once you love the thing you are doing, naturally there will be countless ways to do it. Making love would not be attractive at all if there was one, and only one proper way of doing it.

So we see that the bureaucratic approach to software development despises amateurism, because bureaucrats are extremely uncomfortable with the notion that there could be more than one way of doing something. Java was embraced by the huge bureaucracies precisely because it was anti-amateurish. Java is all about prescribed ways of doing things, and that is the pure essence of bureaucratic mindset.

Now, my thesis is that it is impossible to love bureaucracy. Yes, we can resign to it, view it as a necessary evil, but I've never met a person who is really, truly in love with bureaucracy. They may be in love with something bureaucracy may propose to bring to the fore, like control, power, security. But the actual bureaucratic mechanism that enables the control, the power, is impossible to love.

That's why I'm truly sceptical whenever someone tells me that they love Java. I suspect that it is the control, the power and the security that Java proposes to bring into their lives that they fall for. But the rigid, one-and-only-one way of doing things properly, that is the essence of Java, C#, and all the other corporate sweetheart languages, offer nothing to be in love with.

Anyone who is capable of overcoming the fear of losing control, losing security, and who then tries the amateurish things, such as Ruby, invariably falls in love with it. I'm not talking hot air here -- witness the huge crowds of Ruby converts (just peruse this thread to see some heart warming confessions of the former bureaucrats who discovered Ruby). All these people have only emotion-drenched words of amazement for Ruby.

This is not an accident -- people really and truly want to be able to enjoy what they do eight hours a day.

Cedric Beust

Posts: 140
Nickname: cbeust
Registered: Feb, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 10:14 AM
Reply to this message Reply
> > Here is a quick question to make the case that Python
> is
> > not really OO, then: why do I need to pass "this"
> (sorry,
> > "self") to each method?
>
> http://zephyrfalcon.org/weblog/arch_d7_2003_07_12.html#e283

That answer is missing the point. The correct way to solve it is to write "this.x = 42", which you can do in any real OO language since they all define "this" implicitly.

Of course, you can't do that in Python and you need to declare it explicitly (you can even choose whatever name you want to call it, which makes things worse).

Even worse: in Python you declare your methods with, for example, three parameters (self being the first one), but you only invoke them with two arguments.

Sorry, that's not OO to me and very confusing.

And don't get me started on all these weird __ reserved methods, public/private visibility, static methods, etc...

--
Cedric

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 10:51 AM
Reply to this message Reply
OO is about classes and objects, inheritence, polymorphism

'self' does not disqualify Python as a OO language. Find another reason to say its not OO please. :D

On the other hand 'self' can be annoying, but then again with functions and methods it certainly clarifies what beast your working with when reading it. Hmm... this isolate piece of code says 'self', its a method. Though the user could just have put 'self' into it....

leouser

Kay Schluehr

Posts: 302
Nickname: schluehk
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 10:58 AM
Reply to this message Reply
> > > Here is a quick question to make the case that Python
> > is
> > > not really OO, then: why do I need to pass "this"
> > (sorry,
> > > "self") to each method?
> >
> >
> http://zephyrfalcon.org/weblog/arch_d7_2003_07_12.html#e283
>
>
> That answer is missing the point. The correct way to
> solve it is to write "this.x = 42", which you can do in
> any real OO language since they all define "this"
> implicitly.
>
> Of course, you can't do that in Python and you need to
> declare it explicitly (you can even choose whatever name
> you want to call it, which makes things worse).

Ah, you ask for explicit passing of self as a first parameter not it's usage in method bodies. Sorry for misrepresenting your question.

So why does Python not have a mandatory implicit self/this for all class level functions i.e. methods?

Well, functions and methods are not that different in Python. It's simple to make a function a method but the function needs a method protocol. In order to achieve coupling of a function to an object the object is passed as a first parameter into the function.

Example:

class A:
def __init__(self):
self._x = 5

>>> add5 = lambda self, y: self._x+y
>>> A.add5 = add5
>>> a = A()
>>> a.add5(6)
11


Note that add5 will not be transformed in any way. There is no mysterios process of "methodization". It is just an attribute of class A, put into A's __dict__.

> Even worse: in Python you declare your methods with, for
> example, three parameters (self being the first one), but
> you only invoke them with two arguments.
>
> Sorry, that's not OO to me and very confusing.

In the example add5 is still an attribute of A. So you would expect that calling add5 with A needs passing the object a. This is indeed the case:

>>> A.f(a,6)
11


The convenient method call a.add5(6) is just a shortcut for the bounded expression:

a.add5(x) => a.__class__.add5(a,x)

I don't see anything illogical here. On the contrary the semantics can be expressed using Python notations only. No wizard behind the curtain is needed.

Regards
Kay

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 11:08 AM
Reply to this message Reply
Note also that the post before it:
http://zephyrfalcon.org/weblog/arch_d7_2003_07_12.html#e284
Shows how Python was designed as an OO language from the beginning. Version 1.0 supported classes, virtually the same as they appear today.

I go back and forth about "self." C++ and Java also pass in "this," but it's implicit. So the question is whether an implicit this pointer is a good idea or not. Making it implicit is certainly convenient, but it also adds complexity, because an unqualified reference can then be ambiguous. That is, with an implicit this pointer, x could mean a member x or a local x, but with an explicit this pointer x can only be a local (well, or a global). Despite that, I would probably prefer the apparent simplicity of an implicit this pointer.

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 11:11 AM
Reply to this message Reply
> "On the other hand, I'll bet that list was one of the
> first library classes that Matz wrote. You can find plenty
> of methods and classes in Java 1.0 that appear to be
> amateurish additions, as well."

>
> ...
>
> This is not an accident -- people really and truly want to
> be able to enjoy what they do eight hours a day.

I'm a happy amateur in lots of things. I was using the word in the sense of "not-well-thought-out." Perhaps there's a better term, but the point is that there are things in the list class and in Java 1.0 libraries that don't appear to be very well thought out.

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 12:01 PM
Reply to this message Reply
Quality API's are hard to do. The more time you pour into something the better it may/should become. There is always going to be use cases that don't fit your vision of generality. Ive been frustrated by API's in any language Ive programmed in.

leouser

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 12:05 PM
Reply to this message Reply
> I'm a happy amateur in lots of things. I was using the
> word in the sense of "not-well-thought-out." Perhaps
> there's a better term, but the point is that there are
> things in the list class and in Java 1.0 libraries that
> don't appear to be very well thought out.

Thanks for the clarification. The way I look at it, the world is littered with carcasses of well-thought-out things. Ruby is so lovable precisely because it frees us from the tyranny of well-thought-out things.

Not-well-thought-out things are problematic only if there is no other choice. For example, Ruby array offers this interface element:

array.pack(aTemplateString) -> aBinaryString

This may or may not be well-thought-out (depending on one's makeup, or shall we say one's personal taste). If you happen to think it's not well-thought-out, what's the big deal? You are free to ignore it. So long as there are alternative ways to achieve the same things, an innocent extra little method cannot hurt.

Most bureaucratic-minded people fail to appreciate Ruby's lenience (a.k.a. the 'smart servant' paradigm). For example, the beautiful little feature where you can ask an array for its size as well as for its length (beautiful because it doesn't terrorize you into having to remember the exact precise syntax; it approximates it, which is the way most humans actually work), seems to rile non-amateurs. They seem to lack the imagination needed for perceiving the beauty in such a simple solution.

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 1:45 PM
Reply to this message Reply
'For example, the beautiful little feature where you can ask an array for its size as well as for its length (beautiful because it doesn't terrorize you into having to remember the exact precise syntax; it approximates it, which is the way most humans actually work),'

you've intrigued me, which means I might be one of those programmers who lacks the imagination to see the difference between an arrays size and its length. :D What exactly is the difference?

leouser

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 1:55 PM
Reply to this message Reply
> For
> example, the beautiful little feature where you can ask an
> array for its size as well as for its length (beautiful
> because it doesn't terrorize you into having to remember
> the exact precise syntax; it approximates it, which is the
> way most humans actually work), seems to rile
> non-amateurs. They seem to lack the imagination needed for
> perceiving the beauty in such a simple solution.

I guess you can argue this as a matter of taste, and even go so far as to say that it's an example of Perl's "more than one way to do it" philosophy. But providing multiple equivalent ways to do something is not necessarily a good thing when reading code. Now you have to know that "length" and "size" mean exactly the same thing and that people choose to use one or the other. I don't think that arbitrarily adding mental clutter is a good thing (and far from wonderful), and it is precisely why Perl programs are unreadable. You could argue that this is only a small thing and that people can figure it out, but the road to hell and all that.

Cedric Beust

Posts: 140
Nickname: cbeust
Registered: Feb, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 2:24 PM
Reply to this message Reply
> Note also that the post before it:
> http://zephyrfalcon.org/weblog/arch_d7_2003_07_12.html#e284
>
> Shows how Python was designed as an OO language from the
> beginning. Version 1.0 supported classes, virtually the
> same as they appear today.

Fair enough, Bruce, I stand corrected.

I still don't understand why self was made mandatory, though. I used to think that backward compatibility was the reason, but now I'm completely at a loss. The only reason I can think of is that this is how we emulated classes in C (passing a pointer to this to the function) but C++ was already fairly established by then, so it's not as if it was a brand new technique.

Also, I'm still bothered by the fact that you declare a method with n arguments (self being the first one) but invoke it with n-1 arguments.

I also dislike how crowded the code becomes when you read "self" everywhere, which is very non-pythonic. I like significant space indenting for that reason (it saves you from all these "end" keywords that I dislike in Ruby) but the omnipresence of self ruins a lot for me.

--
Cedric

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 2:34 PM
Reply to this message Reply
> I guess you can argue this as a matter of taste, and even
> go so far as to say that it's an example of Perl's "more
> than one way to do it" philosophy. But providing multiple
> equivalent ways to do something is not necessarily a good
> thing when reading code. Now you have to know that
> "length" and "size" mean exactly the same thing and that
> people choose to use one or the other. I don't think that
> arbitrarily adding mental clutter is a good thing (and far
> from wonderful), and it is precisely why Perl programs are
> unreadable. You could argue that this is only a small
> thing and that people can figure it out, but the road to
> hell and all that.

You talk like a machine when arguing the above point. Don't you realize that for all English speaking humans, it is obvious beyond a trace of a doubt that 'size' and 'length' of an array are equivalent? You should allow some meaning, some semantics to enter the picture when parsing a computing language statement. Allow yourself to go a bit beyond syntax.

This is exactly why we cannot compare Ruby with Perl, Java, C#, C++ et al. Those other languages are strictly formal. Ruby is common-sense oriented, and thus much less formal. Java, C# et al. are High Level Languages (HLL). Ruby is a Very High Level Language (VHLL). Comparing HLL with a VHLL is like comparing apples to oranges. It's like comparing Low Level Languages (an Assembler) to HLLs.

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 2:42 PM
Reply to this message Reply
> 'For example, the beautiful little feature where you can
> ask an array for its size as well as for its length
> (beautiful because it doesn't terrorize you into having to
> remember the exact precise syntax; it approximates it,
> which is the way most humans actually work),'
>
> you've intrigued me, which means I might be one of those
> programmers who lacks the imagination to see the
> difference between an arrays size and its length. :D What
> exactly is the difference?

There is no difference. The terms are synonymous. Ruby, being a common-sense oriented language, allows for synonymous terms without throwing a fit. It accommodates the way humans tend to think.

Java is the exact opposite. It is very stern, very non-commonsense oriented. It will throw a fit if you send the message 'length()' to an ArrayList. Although in the commonsense world, we all know what the meaning of the question: "what is your length?" should be for an ArrayList. Still, Java bureaucratically insists that our question is dead wrong, and that we should be asking it for its 'size()'. Java is absolutely non lenient.

Now, if you ask me, such boneheaded bureaucratic mindset is very dumb, very stupid. This is why anyone who develops in such bureaucratic languages feels their debilitating effects. And that's why switching to Ruby feels like a full-blown liberation!

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 2:52 PM
Reply to this message Reply
> Most bureaucratic-minded people fail to appreciate Ruby's
> lenience (a.k.a. the 'smart servant' paradigm). For
> example, the beautiful little feature where you can ask an
> array for its size as well as for its length (beautiful
> because it doesn't terrorize you into having to remember
> the exact precise syntax; it approximates it, which is the
> way most humans actually work), seems to rile
> non-amateurs. They seem to lack the imagination needed for
> perceiving the beauty in such a simple solution.

But what about amount, amplitude, breadth, capacity, height, magnitude, range, and spread? Can I get the length using those names? What about other languages?

The thing that I don't like this is that Java's interfaces are meant to be implemented. The more methods you add to the interface the more you burden the implementor. From what I am reading here and elsewhere, Ruby sounds more and more like a confining language where you don't have many options. This may not be fair, but those kinds of languages bring thoughts of incompent developers merrily coding away; comfortable and safe in not having to understanding what the code they are writing really does.

I also find this fairly amusing. Is this really a big problem that many programmers face? To me it seems like the silliest reason for choosing a language. 'Terrorize'? A little melodramatic, don't you think? I also like you suggestion that only amateurs can grasp the beauty. Maybe that should tell you something. Generally, I go to a professional if I want something done right. I don't hire an amateur plumber or electrician, nor do I go to an amateur doctor.

"You need a triple bypass. Dr. Patel will be doing your operation and is our most experienced heart surgeon."

"Experienced? I'll pass. Can't you find an amateur? You know, someone with 'imagination'."

This actually brings up another question. Why is it that Software Development the only field (that I know of) where experience is often considered a handicap? "Don't put the experienced people with proven results on the new software design. Get some new people who've never written any production code on it." What if we built bridges and buildings that way? Maybe then they would have the (high) failure rate of software.

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 2:56 PM
Reply to this message Reply
> Java is the exact opposite. It is very stern, very
> non-commonsense oriented. It will throw a fit if you send
> the message 'length()' to an ArrayList. Although in the
> commonsense world, we all know what the meaning of the
> question: "what is your length?" should be for an
> ArrayList. Still, Java bureaucratically insists that our
> question is dead wrong, and that we should be asking it
> for its 'size()'. Java is absolutely non lenient.

And then what? You give up? You go and cry? The world explodes? I don't get it. What's the big problem. You try to compile, the compiler says, "sorry, I don't get your meaning" and you correct the mistake. Is that really a soul-crushing experience? And that's in the stone-age when we didn't have IDEs for Java. Now you type '.' a list comes up and you select the appropriate method. Not that difficult.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 3:19 PM
Reply to this message Reply
How many times have your project enabled you to create reusable components?

Without blackboxes, you will always be starting over and creating as many parts from scratch as needed.

Take Rails, for example. It's a framework built from components. One person was responsible for creating the main components, like HTTP Interface, ORM, general framework, etc. One person only! And the components were so good that people were able to use them with extreme ease (now known as "hype").

How many Java projects could have enjoyed a way to create good components, instead of poor frameworks and libraries that barely work together? I would say most Java projects could enjoy a componentized approach because they generally involve lots of very skilled people and lots of resources. :-)

What's a component compared to a library or a module? A component is a code that has a published interface and works like a blackbox -- you don't need to know how it works, only that it works. Even a single object can be a component, like said by Anders Hejlsberg (C#, Delphi):

"Anders Hejlsberg: The great thing about the word component is that you can just sling it about, and it sounds great, but we all think about it differently. In the simplest form, by component I just mean a class plus stuff. A component is a self-contained unit of software that isn't just code and data. It is a class that exposes itself through properties, methods, and events. It is a class that has additional attributes associated with it, in the form of metadata or naming patterns or whatever. The attributes provide dynamic additional information about how the component slots into a particular hosting environment, how it persists itself—all these additional things you want to say with metadata. The metadata enables IDEs to intelligently reason about what a component does and show you its documentation. A component wraps all of that up."
http://www.artima.com/intv/simplexity3.html

So, to me, components are truly the fine-grained units of code reuse. With Ruby, I not only can create my own components in a succinct way, but also can use its Domain Specific Language capabilities to create easy interfaces to use and exercise the components. All this happens in Rails. All this happens in my own libraries. And all this happens in the libraries of people who use Ruby. We are not starting our projects from scratch and hopping for the best. We are enjoying some powerful programmability!

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 3:29 PM
Reply to this message Reply
> > Java is the exact opposite. It is very stern, very
> > non-commonsense oriented. It will throw a fit if you
> send
> > the message 'length()' to an ArrayList. Although in the
> > commonsense world, we all know what the meaning of the
> > question: "what is your length?" should be for an
> > ArrayList. Still, Java bureaucratically insists that
> our
> > question is dead wrong, and that we should be asking it
> > for its 'size()'. Java is absolutely non lenient.
>
> And then what? You give up? You go and cry? The world
> explodes? I don't get it. What's the big problem. You
> try to compile, the compiler says, "sorry, I don't get
> your meaning" and you correct the mistake. Is that really
> a soul-crushing experience? And that's in the stone-age
> when we didn't have IDEs for Java. Now you type '.' a
> list comes up and you select the appropriate method. Not
> that difficult.

This is how people who spend most of their life working intimately with machines, serving the machines, think. They see no problem whatsoever in serving the machines day in, day out.

So the machine makes me its bitch, and all you can say is "I don't get it. What's the big problem."

The problem is, I feel insulted, devalued and downright degraded if a $500.00 dirt-cheap little machine makes me its bitch. I don't like that. I simply can't stand it. Maybe you can, in which case my hat, nay my wig goes off to you.

After almost 20 years of software development experience, I have built a lot of equity into my career, and by now I think that only hundreds of thousands, if not millions of dollars, are needed before I become someone's bitch.

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 3:34 PM
Reply to this message Reply
> Generally, I go to
> a professional if I want something done right. I don't
> hire an amateur plumber or electrician, nor do I go to an
> amateur doctor.

You make a great point. Yeah, if you happen to have some extra money in the bank and it's posing you considerable problems so that you can't wait to dispose of it, there's hardly a better way to promptly get rid of it than hiring a professional. Be it a plumber, or an electrician, or a lawyer, an accountant, a dentist, a doctor, etc., all these professionals know how to relieve you of extra cash in no time flat. They are the real experts in that domain.

leouser leouser

Posts: 9
Nickname: leouser
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 3:48 PM
Reply to this message Reply
> > 'For example, the beautiful little feature where you
> can
> > ask an array for its size as well as for its length
> > (beautiful because it doesn't terrorize you into having
> to
> > remember the exact precise syntax; it approximates it,
> > which is the way most humans actually work),'
> >
> > you've intrigued me, which means I might be one of
> those
> > programmers who lacks the imagination to see the
> > difference between an arrays size and its length. :D
> What
> > exactly is the difference?
>
> There is no difference. The terms are synonymous. Ruby,
> being a common-sense oriented language, allows for
> synonymous terms without throwing a fit. It accommodates
> the way humans tend to think.
>
> Java is the exact opposite. It is very stern, very
> non-commonsense oriented. It will throw a fit if you send
> the message 'length()' to an ArrayList. Although in the
> commonsense world, we all know what the meaning of the
> question: "what is your length?" should be for an
> ArrayList. Still, Java bureaucratically insists that our
> question is dead wrong, and that we should be asking it
> for its 'size()'. Java is absolutely non lenient.
>
> Now, if you ask me, such boneheaded bureaucratic mindset
> is very dumb, very stupid. This is why anyone who develops
> in such bureaucratic languages feels their debilitating
> effects. And that's why switching to Ruby feels like a
> full-blown liberation!


wow, that's weird. :D I wouldn't dream of making synonyms for operations. Does this philosphy pervade all of Ruby's libraries? Geesh, how hard is it to remember that you get a List's size with size()? I guess Ive been programming in Java and Python too long. :D

leouser

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 4:06 PM
Reply to this message Reply
> wow, that's weird. :D I wouldn't dream of making synonyms
> for operations. Does this philosphy pervade all of Ruby's
> libraries? Geesh, how hard is it to remember that you get
> a List's size with size()? I guess Ive been programming
> in Java and Python too long. :D

It's not that it's hard to memorize that "size()" gets you the List's size, it's more that the fact that array for some godawful reason insists on "length" instead of "size" is throwing a nice curveball at the unsuspecting coders. After a while, we humans tend to blur the two, because, in our minds, we make an abstraction that we're dealing with a collection of sorts (be it a list or an array or whatever), so which one expects which message? It's an unnecessary burden on our short term memory buffers.

Ruby resolves that beautifully by allowing for a bit of common-sense. Sort of like the leniency in the java.util.Date (this leniency in the Date is the only occurrence of common-sense that I was able to detect in Java, so far). Ruby simply says: "Hay, 'length', 'size', same difference. I hear you. And I know what you mean!"

Bill de hÓra

Posts: 1137
Nickname: dehora
Registered: May, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 4:08 PM
Reply to this message Reply
"Also, I'm still bothered by the fact that you declare a method with n arguments (self being the first one) but invoke it with n-1 arguments."

You mean like arrays?... ;)

Bill de hÓra

Posts: 1137
Nickname: dehora
Registered: May, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 4:13 PM
Reply to this message Reply
"There is no difference. The terms are synonymous."

Length and Size? Not for anything that has more than 1 dimension.

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 4:17 PM
Reply to this message Reply
> I still don't understand why self was made mandatory,
> though. I used to think that backward compatibility was
> the reason, but now I'm completely at a loss. The only
> reason I can think of is that this is how we emulated
> classes in C (passing a pointer to this to the function)
> but C++ was already fairly established by then, so it's
> not as if it was a brand new technique.

I think it's because of the "explicit is better than implicit" philosophy. As I've said, I'm probably more ambivalent about this issue than anything else.

> Also, I'm still bothered by the fact that you declare a
> method with n arguments (self being the first one) but
> invoke it with n-1 arguments.

Yes. Slightly non-implicit, that.

> I also dislike how crowded the code becomes when you read
> "self" everywhere, which is very non-pythonic. I like
> significant space indenting for that reason (it saves you
> from all these "end" keywords that I dislike in Ruby) but
> the omnipresence of self ruins a lot for me.

Yes, implicit "this" could be said to gain more than explicit "end" does. It will be interesting to see what happens in Python 3000.

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 4:45 PM
Reply to this message Reply
> "There is no difference. The terms are synonymous."
>
> Length and Size? Not for anything that has more than 1
> dimension.

We're talking collections, such as lists and arrays. How many items do they contain? That's the question that 'length' and 'size' messages are trying to pry out of the collection. Where do you see more than 1 dimension in this scenario?

Dick Ford

Posts: 149
Nickname: roybatty
Registered: Sep, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 6:05 PM
Reply to this message Reply
Remember, both Tate and Eckel make a living writing and talking about programming technologies. So both have to be looking down the road when Java goes into COBOL-like legacy status. It takes a lot of investment in time to learn a programming language and their libraries well enough to write and lecture about them. So if Ruby "is the one" to make into the enterprise eventually and Python never makes the leap, then that's a huge amount of re-tooling that Eckel has to do. It looks like he's trying to protect his Python investment.

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 6:07 PM
Reply to this message Reply
> It's not that it's hard to memorize that "size()" gets you
> the List's size, it's more that the fact that array for
> some godawful reason insists on "length" instead of "size"
> is throwing a nice curveball at the unsuspecting coders.

Actually, there is a good point in here -- my guess is that someone on the Java team wasn't communicating with someone else when array was given the read-only length "field" and all the containers use size(). I would have liked Java's array to use size() as well (the compiler could have optimized away the call to produce the same efficiency as length). That would give me fewer things to have to know about, which is what I prefer when programming.

Bruce Eckel

Posts: 875
Nickname: beckel
Registered: Jun, 2003

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 6:12 PM
Reply to this message Reply
> Remember, both Tate and Eckel make a living writing and
> talking about programming technologies. So both have to
> be looking down the road when Java goes into COBOL-like
> legacy status. It takes a lot of investment in time to
> learn a programming language and their libraries well
> enough to write and lecture about them. So if Ruby "is
> the one" to make into the enterprise eventually and Python
> never makes the leap, then that's a huge amount of
> re-tooling that Eckel has to do. It looks like he's
> trying to protect his Python investment.

Actually, if you look at the last paragraph of the article, my hope was that someone would produce a useful feature-by-feature comparison of the two languages. Although I suppose you're right in a way; that would allow me to grasp Ruby in terms of Python, and would effectively "protect" my Python investment. I'm definitely trying to understand Ruby by putting in minimal effort and leveraging what I already know. My normal approach to learning a language, as you've observed, takes a huge amount of time and effort.

Cedric Beust

Posts: 140
Nickname: cbeust
Registered: Feb, 2004

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 9:37 PM
Reply to this message Reply
> Actually, there is a good point in here -- my guess is
> that someone on the Java team wasn't communicating with
> someone else when array was given the read-only
> length "field" and all the containers use
> size(). I would have liked Java's array to use
> size() as well (the compiler could have optimized
> away the call to produce the same efficiency as length).
> That would give me fewer things to have to know about,
> which is what I prefer when programming.

The length/size inconsistency has nothing to do with Java and everything to do with poor API design decisions made in 1995, probably by some very inexperienced programmer who had no idea that Java would become so successful.

There are a few more flaws in the Java libraries, such as Stack extending Vector, the misnamed System.arraycopy and Hashtable or the non-respect of get/set conventions in some core classes.

However, I have to say that overall, these collections have aged pretty well, even if I prefer the more humane classes that Ruby offers today.

--
Cedric

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 10:51 PM
Reply to this message Reply
> Actually, there is a good point in here -- my guess is
> that someone on the Java team wasn't communicating with
> someone else when array was given the read-only
> length "field" and all the containers use
> size(). I would have liked Java's array to use
> size() as well (the compiler could have optimized
> away the call to produce the same efficiency as length).
> That would give me fewer things to have to know about,
> which is what I prefer when programming.

It's amazing how the old school manages to always and unmistakably miss the point. Once again, I'm deeply impressed. The point is not that we should reduce everything to the absolute bare bones minimum. That would simply turn our minds into a machine.

The new school idea that I'm talking about is to force the machines to become more like human mind. Which is what Ruby is trying to do. Now, keep in mind that Ruby is just a first stab, barely scratching the surface, in its early infancy, suffering from all kinds of childhood diseases. Nevertheless, it is a first step in the right direction.

As I've already mentioned here, I like Ruby because it's the first computing concept I've stumbled upon that's allowing me to avoid being the machine's bitch. I used to be the machines bitch for the past 20 years. Believe me, that wasn't much fun. Tiptoeing around the stupid despotic compilers, trying to appease some quirky mechanical gods. It felt like hell (and still feels like hell each time I'm forced to go back and use the statically typed languages).

Now, using Ruby, I suddenly turn the machine into my bitch. I make the machine obey me!

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 10:57 PM
Reply to this message Reply
> The length/size inconsistency has nothing to do with Java
> and everything to do with poor API design decisions made
> in 1995, probably by some very inexperienced programmer
> who had no idea that Java would become so successful.

This is akin to saying that the Inquisition had nothing to do with the fanaticism of the Catholic church, and everything to do with poor decisions some clergy made at that time. In reality, however, the Inquisition was inspired by the broader climate of the Catholic church fanaticism.

In the same way, poor API design that Java is infested with was/is directly inspired by the bureaucratic nature of the language itself.

Kay Schluehr

Posts: 302
Nickname: schluehk
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 20, 2005 11:24 PM
Reply to this message Reply
> This is exactly why we cannot compare Ruby with Perl,
> Java, C#, C++ et al.

He didn't compare Ruby with Java, C# and C++ but with Perl and I'm really interested why it cannot be compared with it?

According to the legend of saint Matz it was Perl creator Larry Wall who was his personal hero and it is actually Larry Wall who never became tired to speak about the postmodernism of Perl, it's relationship to natural languages the many ways to express things etc.

Take a look here for acknowldegement and praise:

http://www.mcs.vuw.ac.nz/comp/Publications/CS-TR-02-9.abs.html

Marcelo Barbero

Posts: 5
Nickname: mbarbero
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 3:10 AM
Reply to this message Reply
> You talk like a machine when arguing the above point.
> Don't you realize that for all English speaking humans, it
> is obvious beyond a trace of a doubt that 'size' and
> 'length' of an array are equivalent? You should allow some
> meaning, some semantics to enter the picture when parsing
> a computing language statement. Allow yourself to go a bit
> beyond syntax.

Not being a "totally" English speaking human (that's to say, I'm not a native English speaker), if I see two functions: one called "size" and the other "length", I would suspect that there may be a difference that I can't see without reading the documentation. For instance, the first time I saw that two functions mentioned, I thought that "length" was like Python's "len", and "size" like C's "sizeof".

I think it's confusing.

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 6:53 AM
Reply to this message Reply
> So the machine makes me its bitch, and all you can say is
> "I don't get it. What's the big problem."
>
> The problem is, I feel insulted, devalued and downright
> degraded if a $500.00 dirt-cheap little machine makes me
> its bitch. I don't like that. I simply can't stand it.
> Maybe you can, in which case my hat, nay my wig goes off
> to you.

If the machine is making you it's bitch, I feel sorry for you. I think you need to remember that this is a machine. If you were an auto-mechanic, would you get mad if you connected the gas tank to the water pump and the engine didn't 'know' what you really meant? I wonder if you really have the constitution for software development or any technical field. That you really care about this makes you more of a bitch, not less of one.

The other thing I'm struggling with here is all you are talking about is creating synonymous methods. It's not like you can't do that in Java or any language really. It's not like Ruby is reading your mind. There are Java classes with synonymous methods. Vector, for example.

Personally, I wholly prefer the one way to do it methodology. It makes other people's code a lot easier to read.

Lastly, if this is the greatest problem you have in developing software, you are probably doing something wrong. Good software development has a lot more thinking than typing. This should be a mild inconvienience only.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 7:01 AM
Reply to this message Reply
"Good software development has a lot more thinking than typing. This should be a mild inconvienience only."

Exactly. It has nothing to do with performance of the programming language or with "one way to do it" -- those are superficial things that can be distracting at times.

mike bayer

Posts: 22
Nickname: zzzeek
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 7:28 AM
Reply to this message Reply
> As I've already mentioned here, I like Ruby because it's
> the first computing concept I've stumbled upon that's
> allowing me to avoid being the machine's bitch. I used to
> be the machines bitch for the past 20 years. Believe me,
> that wasn't much fun. Tiptoeing around the stupid despotic
> compilers, trying to appease some quirky mechanical gods.
> It felt like hell (and still feels like hell each time I'm
> forced to go back and use the statically typed
> languages).

hey alex, you talk a lot about not being the "machine's bitch" and all, but once your Ruby site needs to handle half a million transactions a day, ohhh youll be that computer's bitch again, just you wait.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 7:43 AM
Reply to this message Reply
"hey alex, you talk a lot about not being the "machine's bitch" and all, but once your Ruby site needs to handle half a million transactions a day, ohhh youll be that computer's bitch again, just you wait."

Piece of cake.

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 8:37 AM
Reply to this message Reply
> "hey alex, you talk a lot about not being the "machine's
> bitch" and all, but once your Ruby site needs to handle
> half a million transactions a day, ohhh youll be that
> computer's bitch again, just you wait."
>
> Piece of cake.

According to this Ruby doesn't scale well because it's threads are not implemented at a hardware level:

http://blogs.codehaus.org/people/tirsen/archives/001041_ruby_on_rails_and_fastcgi_scaling_using_processes_instead_of_threads.html

Not claiming this is absolutely accurate but is there any evidence you can provide that Ruby can scale under heavy loads?

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 8:41 AM
Reply to this message Reply
> According to this Ruby doesn't scale well because it's
> threads are not implemented at a hardware level:

Make that, 'threads are implemented in the interpreter'. Assuming this is accurate (a quick Google search suggests it is), it's a huge disadvantage vs. Java. Java's threads can be implemented in the VM, on the OS level or both without making the developer it's bitch, so to say.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 8:46 AM
Reply to this message Reply
"Make that, 'threads are implemented in the interpreter'. Assuming this is accurate (a quick Google search suggests it is), it's a huge disadvantage vs. Java. Java's threads can be implemented in the VM, on the OS level or both without making the developer it's bitch, so to say."

We can scale horizontally, when vertically is not enough. It means scaling ala Google, Slashdot, etc: just add more processes and machines when you need them; let the database handle the rest.

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 8:49 AM
Reply to this message Reply
> "Make that, 'threads are implemented in the interpreter'.
> Assuming this is accurate (a quick Google search suggests
> it is), it's a huge disadvantage vs. Java. Java's threads
> can be implemented in the VM, on the OS level or both
> without making the developer it's bitch, so to say."
>
> We can scale horizontally, when vertically is not enough.
> It means scaling ala Google, Slashdot, etc: just add more
> processes and machines when you need them; let the
> database handle the rest.

That kind of scaling a step backward IMO. It's definitely not an advantage. In Java you can do both.

Joao Pedrosa

Posts: 114
Nickname: dewd
Registered: Dec, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 8:55 AM
Reply to this message Reply
"That kind of scaling a step backward IMO. It's definitely not an advantage. In Java you can do both."

Ruby 2.0 is going to have native threads. I'm praying that SASADA will be able to create a Ruby Virtual Machine with native threads, so in the future we can have both as well. For your information, Ruby 2.0 has been progressing well -- SASADA already supports native threads on Windows and already supports quite a lot of Ruby code. I'm his unconditional fan. :-)

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 10:01 AM
Reply to this message Reply
> If the machine is making you it's bitch, I feel sorry for
> you.

Thanks for understanding:-)

> I think you need to remember that this is a machine.

How would that help? If a machine is torturing me, and if I at that moment remember that it's just a machine, how is that going to make it less painful?

> If you were an auto-mechanic, would you get mad if you
> u connected the gas tank to the water pump and the engine
> didn't 'know' what you really meant?

I would get mad if the design of that mechanical contraption was misleading. Like, if all of a sudden the machine reverses the gas and brake pedals, let me tell you, I would get really, seriously mad. Wouldn't you?

> I wonder if you
> really have the constitution for software development or
> any technical field. That you really care about this
> makes you more of a bitch, not less of one.

So, what you're saying is that only genuine masochists have the constitution for software development?

> The other thing I'm struggling with here is all you are
> talking about is creating synonymous methods. It's not
> like you can't do that in Java or any language really.
> It's not like Ruby is reading your mind. There are Java
> a classes with synonymous methods. Vector, for example.

Fine.

> Personally, I wholly prefer the one way to do it
> methodology. It makes other people's code a lot easier to
> read.

And it severely shrinks what's possible to do.

> Lastly, if this is the greatest problem you have in
> developing software, you are probably doing something
> wrong. Good software development has a lot more thinking
> than typing. This should be a mild inconvienience only.

When did I say it's a problem with typing? I raised this issue precisely because it's a misleading one for the thinking process. Using Java, I am forced to try to remember which collection specializes in expecting which method. Do I use 'size' or 'length' for a list? What about an array?

These things should not be confusing.

Those are just trivial examples, and I don't think we need to dwell on them. I'm just using them to illustrate the fundamental difference in the philosophy of the HLL vis a vis the VHLL.

Apparently, I'm not getting through...

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 10:08 AM
Reply to this message Reply
> hey alex, you talk a lot about not being the "machine's
> bitch" and all, but once your Ruby site needs to handle
> half a million transactions a day, ohhh youll be that
> computer's bitch again, just you wait.

That's a very good point, Mike. It's actually a topic for another thread, but let me just say here that I'm still sitting on the fence when it comes to enterprise. Is Ruby a good choice for enterprise? I don't know. Probably not.

All I know is that I'm using it for real life solutions. And in most cases, these are way, way smaller than any enterprise level stuff. In my experience, maybe one in every fifty projects warrants enterprise level approach. Maybe even less than that.

Most business problems I've ever dealt with in the past 15 years are completely below the enterprise level radar. As such, they are perfectly solvable using Ruby. Since I am not a big-ass vendor, nor do I plan to ever become one, I'm not really that keen on tackling enterprise level problems. I'll leave that to IBM, Oracle, SAP, et al.

Alex Bunardzic

Posts: 546
Nickname: alexbunard
Registered: Oct, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 10:14 AM
Reply to this message Reply
> Not being a "totally" English speaking human (that's to
> say, I'm not a native English speaker), if I see two
> functions: one called "size" and the other "length", I
> would suspect that there may be a difference that I can't
> see without reading the documentation. For instance, the
> first time I saw that two functions mentioned, I thought
> that "length" was like Python's "len", and "size" like C's
> "sizeof".
>
> I think it's confusing.

What you need to do is place the words in the context. Outside of the context, anything can be confusing.

If, for example, you see the following two statements:

1. customers.size()

2. customers.length()

would the above be confusing to you?

mike bayer

Posts: 22
Nickname: zzzeek
Registered: Jan, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 11:32 AM
Reply to this message Reply
>
> We can scale horizontally, when vertically is not enough.
> It means scaling ala Google, Slashdot, etc: just add more
> processes and machines when you need them; let the
> database handle the rest.

When I made my comment about scaling, I wasnt referring just to Ruby's immature thread support or its other intrinsic weaknesses, such as its poor unicode support or just the raw speed of its interpreter as compared to Python, but also that the mentality of the developer, which in this discussion and others makes a lot of references to "its not how computers think, its how people think !" is by itself enough of a factor to produce a large community of applications that simply by design will not perform well, regardless of underlying engine. You see this same thing happening in a myriad of PHP tools that, despite PHP's incredible speed, still perform like crap; its because of developers who have no interest in computer science, no interest in learning how to develop reasonable software architectures, and no interest in the underlying internals of the constructs they are using that even a fast engine like PHP can be brought to its knees. It is this mentality that I always seem to observe in the Ruby community; its a non-curious and informal mindset that is obsessed with moving new widgets and features "out the door" with blazing speed, but little attention to the architecture of those features. Rails is the leader in this category; tons of new blinky lights every day, zero large scale benchmarks, real-world stress testing, or consideration of how an enterprise might fare with this application.

If we want to say, as someone mentioned, "well Ruby/Rails is not for big enterprise apps ! its just for all the little things I do all day", that would be consistent with my impression of it....and this fact should be more openly admitted. For me, I'd much rather write my smaller apps using tools that I know can stay with me all the way out to the bigtime as well...otherwise, why should I have to master two or more ways of doing the same thing ? Why not master one way that is friendly towards both small and large environments? I think Java has come very close to this. I think Python has a great potential as well since a decently written Python application can perform extremely well alongside a corresponding Java application, if not better (witness Google), and certainly far better than a Rails app could.

One additional note, the plethora of web frameworks in Python has granted us one fantastic thing that a tool with Rails' hype-machine would utterly obliterate: room for new approaches and architectures. The Ruby community has plenty of room for tons of new eager developers looking to write blogs and other small applications with Rails; but for people looking to build communities around architectural notions divergent from Rails, pretty much none.

James Watson

Posts: 2024
Nickname: watson
Registered: Sep, 2005

Re: The departure of the hyper-enthusiasts Posted: Dec 21, 2005 11:43 AM
Reply to this message Reply
> I would get mad if the design of that mechanical
> contraption was misleading. Like, if all of a sudden the
> machine reverses the gas and brake pedals, let me tell
> you, I would get really, seriously mad. Wouldn't you?

As a developer, you are in the role of a technician not a user. And nothing is switching on you. The method on List is always size() and the property on arrays is always length.

> So, what you're saying is that only genuine masochists
> have the constitution for software development?

No I'm saying that software development is full possibilities for subtle errors. This is one of the most insigngificant. What would you do if asked to write in assembly? Curl up in the corner and weep?

> > Personally, I wholly prefer the one way to do it
> > methodology. It makes other people's code a lot easier > > to read.

No, no it doesn't. By defintion, in order for something to be possible, it's only necessary that there be one way to accomplish it. Having more ways t acomplish it doesn't make it any more (or less) possible.

> And it severely shrinks what's possible to do.

> When did I say it's a problem with typing? I raised this
> issue precisely because it's a misleading one for the
> thinking process.

You think this is a crucial part of the thinking process? Are you kidding?

> These things should not be confusing.

They aren't. I can't fathom why you find them confusing. Do you get confused when going to a public bathroom in a seafood resturaunt? "Buoys? Oh no, I'm so confused!" How long do you sit there confused about this? If it's more than a couple seconds, are you stoned?

> Those are just trivial examples, and I don't think we need
> to dwell on them. I'm just using them to illustrate the
> fundamental difference in the philosophy of the HLL vis a
> vis the VHLL.
>
> Apparently, I'm not getting through...

No, you are getting through. You are just wrong. Thinking that people disagree with you because they don't understand you is not only a logical flaw, it's a sign of unclear thinking.

Flat View: This topic has 262 replies on 3 pages [ 1  2  3 | » ]
Topic: The departure of the hyper-enthusiasts Previous Topic   Next Topic Topic: Java Applets + Ajax = ?

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use