A Repeat: New Language After Ruby?

Hi,

I am sorry that there have been so many responses; it is very hard to
decide what to do. Can I make the boundary more clear? The new language
should satisfy all the following criteria:

  1. Age
    The language should have been around more than 5 years, so that it is
    relatively stable with most bugs already fixed.

  2. User Base
    It is very difficult to calculate the number of users, but one simple test
    is whether it has a discussion group and whether the discussions are still
    very active.

  3. C/C++ and Java Interface
    The language should be able to be interfaced to either C/C++ or
    Java. This is for practicality, so that we can easily justify our spent
    resources.

  4. Library
    The language should have a reasonably well built library, such as regular
    expression (in Ruby it is native), OLE, GUI, Web, scientific
    computations, etc., and people are still developing and contributing to
    the library.

  5. Syntax
    The syntax should be easy, clean, short and regular (something like Ruby
    :)) so that we spend less time coding.

  6. (Optional) Execution and Memory Performance
    Ideally, the language should be comparable in performance with C, but this
    is the last to be expected.

In particular, does Haskell even satisfy all the criteria above? IMHO,
Tcl, Perl, Python, and Ruby satisfy 1) to 5), and I have used them all.

Regards,

Bill

I wonder about the value of learning a new language, going in with a
predefined notion of why it is valuable or what makes the syntax good. For
me, the criteria would lean more towards “not like any other language I’ve
used,” or, “Fairly new, so that it was designed to exploit current
technology and up-to-date CompSci thinking/theory.”

Pragmatic versus exotic; use the pragmatic approach in day-to-day work, and
explore exotic tools by night.

James

···

-----Original Message-----
From: William Djaja Tjokroaminata [mailto:billtj@z.glue.umd.edu]
Sent: Wednesday, August 21, 2002 1:54 PM
To: ruby-talk ML
Subject: A Repeat: New Language After Ruby?

Hi,

I am sorry that there have been so many responses; it is very hard to
decide what to do. Can I make the boundary more clear? The new language
should satisfy all the following criteria:

  1. Syntax
    The syntax should be easy, clean, short and regular (something like Ruby
    :)) so that we spend less time coding.

    In particular, does Haskell even satisfy all the criteria above? IMHO,
    Tcl, Perl, Python, and Ruby satisfy 1) to 5), and I have used them all.

If you think Perl’s syntax is “easy, clean, short and regular” just
about anything will meet (5)… :slight_smile:

The criteria you give are IMHO appropriate to choose a language to
implement things on, but I believe the “learn one language a year” rule
is more about learning (broadening views, understanding other ways to
make the same stuff, better design…) than about using it for critical
tasks.

I’m looking forward to learning Lisp (or a dialect such as Scheme),
Smalltalk (Squeak?) and something of the ML family, but I don’t think I
will code much in Lisp (anyway, that’s not my business :slight_smile:

···

On Thu, Aug 22, 2002 at 05:53:37AM +0900, William Djaja Tjokroaminata wrote:


_ _

__ __ | | ___ _ __ ___ __ _ _ __
'_ \ / | __/ __| '_ _ \ / ` | ’ \
) | (| | |
__ \ | | | | | (| | | | |
.__/ _,
|_|/| || ||_,|| |_|
Running Debian GNU/Linux Sid (unstable)
batsman dot geo at yahoo dot com

Actually, typing random strings in the Finder does the equivalent of
filename completion.
– Discussion on file completion vs. the Mac Finder

William Djaja Tjokroaminata wrote:

I am sorry that there have been so many responses; it is very hard to
decide what to do. Can I make the boundary more clear? The new language
should satisfy all the following criteria:

  1. Age
  2. User Base
  3. C/C++ and Java Interface
  4. Library
  5. Syntax
  6. (Optional) Execution and Memory Performance

[sorry for delete some portion of text]

Eiffel, anybody?

···


http://dmoz.org/editors/profile.cgi?editor=bpdp

Hi,

Like other programmers, I did learn and use some languages.
(Postscript, Forth, Pascal, ADA, Cobol, PL1, Lisp, CL, RPG,
Mainframe assembler, C/C++, VB, Java, Perl, Ruby … )

I really want to know when we talk “learn” a new language,
what exactly the definition of “learn” ?

Is it just learn the syntax of language ?
It is much much difference depend on your definition of “learn”.
Think about this, learn java language, I think you can
spend a little bit of time to learn java syntax.
But if you want learn the entire API, Oops, that take
may-be not in one year ( J2SE, J2EE ).

So, any language come out with their (huge?) libraries;
without learning those libraries can we consider learned that language?

One Year One language? (How many time per day? Without learn all libraries ?)

Your opinion ?

" JamesBritt" james@jamesbritt.com writes:

Pragmatic versus exotic; use the pragmatic approach in day-to-day work, and
explore exotic tools by night.

Well… I’d say learning Haskell, or OCaml, or Ruby, is pragmatic. Each
of these teaches us something about the nature of programming, and
each improves us as programmers. I too take issue with the OPs
criteria: choosing what to learn based solely of the prosaic is unlikely
to achieve the kind of benefits he’s looking for.

Dave

Hi,

In my opinion, Eiffel is being in the middle, i.e., its performance is
below C but its syntax is not as short as Ruby. Yes, there are some good
object-oriented designs in Eiffel (such as the indistinguishable data
access and function call, which is adopted by Ruby), but to me it is
better to have two extremes than to have one in the middle. For example,
by combining Ruby and C, I can optimize the kernel in C (so that is is
really fast) and provide user interface in Ruby (so that it is simple to
use). A specific example in network simulation is per-packet processing
should be done in C, but the basic routing algorithm can be written in
Ruby.

Regards,

Bill

···

==========================================================================
Bambang Purnomosidi D. P. bpdp@3wsi.net wrote:

  1. Age
  2. User Base
  3. C/C++ and Java Interface
  4. Library
  5. Syntax
  6. (Optional) Execution and Memory Performance

[sorry for delete some portion of text]

Eiffel, anybody?


http://dmoz.org/editors/profile.cgi?editor=bpdp

tran55555@yahoo.com (Email55555) writes:

Is it just learn the syntax of language ? It is much much
difference depend on your definition of “learn”. Think about this,
learn java language, I think you can spend a little bit of time to
learn java syntax. But if you want learn the entire API, Oops, that
take may-be not in one year ( J2SE, J2EE ).

Learning a language means coming to understand it: the philosophy, the
idioms, and the “way things are done”. Doing that gives insight,
insight that can often be applied in different arenas.

With Java, I see little point in learning all the libraries if Java is
simply one of your “languages of the year”. The incremental benefit of
studying the 804th API set is marginal.

However, it is interesting to study the Java libraries at a higher
level. One of the things I learned from Java is the entire concept of
library-based programming. Libraries are pervasive in Java, to the
eternal detriment of the Java community (and computing at
large). Developers writing java are pretty much taught not to write
applications, but instead to write libraries, and then glue these
together with a minimal application core. The result: remarkably
bloated applications, full of code that’s never used, and full of
patterns because “that’s the way to code libraries”. Josh Bloch’s
Effective java is a great book, but it is redolent with library
thinking–write these methods because someone may need them…

So (ending my rant), I think there’s much to learn from all languages,
and some of it is far outside the actual syntax of the language
itself. In the case of Java, the sheer size of the libraries, and
therefore the barrier to learning they present, it itself an
opportunity to reflect and learn.

Cheers

Dave

Bertrand Meyer writes about it in OOSC:

···

On Thu, Aug 22, 2002 at 11:40:10AM +0900, Bambang Purnomosidi D. P. wrote:

William Djaja Tjokroaminata wrote:

I am sorry that there have been so many responses; it is very hard to
decide what to do. Can I make the boundary more clear? The new language
should satisfy all the following criteria:

  1. Age
  2. User Base
  3. C/C++ and Java Interface
  4. Library
  5. Syntax
  6. (Optional) Execution and Memory Performance

[sorry for delete some portion of text]

Eiffel, anybody?


In addition, the language is straightforward and includes very little
else than direct support for the method. First-year students using it
have commented that it was “no language at all” — meaning that the
notation is in one-to-one correspondence with the method: to learn one
is to learn the other, and there is scant extra linguistic decoration on
top of the concepts. (…)

What counts is the simplicity of the notation and how directly it maps
to the concepts. If you understand object technology, you almost know it
already.

As I see it, Eiffel is kinda like “crystallized statically typed object
orientation with design by contract”. It’s probably too close to Ruby in
its roots (if we omit their differences in typing), and learning it
won’t broaden the way you think much. Ummm, following that line of
thought, maybe I should dismiss Smalltalk. But then again, its syntax
and environment are strange enough for me to consider it :slight_smile:

Eiffel is for sure a nice language to work with, but I do believe we’d
learn more by doing a complete paradigm shift rather than staying on the
OO side.

Maybe I’m too biased towards learning instead of actually working
but that’s because I am still a student :slight_smile:


_ _

__ __ | | ___ _ __ ___ __ _ _ __
'_ \ / | __/ __| '_ _ \ / ` | ’ \
) | (| | |
__ \ | | | | | (| | | | |
.__/ _,
|_|/| || ||_,|| |_|
Running Debian GNU/Linux Sid (unstable)
batsman dot geo at yahoo dot com

No, that’s wrong too. Now there’s a race condition between the rm and
the mv. Hmm, I need more coffee.
– Guy Maor on Debian Bug#25228

Pragmatic versus exotic; use the pragmatic approach in
day-to-day work, and
explore exotic tools by night.

Well… I’d say learning Haskell, or OCaml, or Ruby, is pragmatic. Each
of these teaches us something about the nature of programming, and
each improves us as programmers.

Well, there’s the paradox: pursuing the exotic is, ultimately, a very
pragmatic, or at least practical, goal.

James

Thinking about this issue further, it seems to me that being pragmatic is
harder than being practical. I realize that learning a language such as
Haskell will definitely bring a lot of benefits, but probably for me the
cost/reward ratio is just too high.

Probably then to me the most important criterion is 3), the ability to be
interfaced with C/C++ or Java, because, I think, then criteria 1), 2), 4),
and 6) simply follow, because we can always decide whether to program in
that language or in C/C++/Java and even keep switching between the two
without any progress penalty.

Ruby seems to have been a real jackpot. It really teaches a lot of new
things. Of course, since the beginning we knew that all its good stuff
comes with execution and memory performance penalty. But it is not a
problem at all, because we can always optimize it with C/C++.

I have some doubt with functional programming languages. Can Haskell or
any of them be interfaced with C/C++/Java (at the linking level)? To me,
the benefits in learning the new concepts are diminished by not being able
to explicitly code in that language in practice. (My concern is, if I
really write a Haskell code for a project, then I am stuck with Haskell, I
cannot switch parts of it to C.)

I learned Tcl, Perl, Python, and Ruby because they can be interfaced to C,
knowing that whenever I am stuck in them, I can always switch to the old,
well-known, library-rich, high-performance C. In some sense, Tcl, Perl,
Python, and Ruby can be regarded as some C libraries, although what
wonderful libraries they are! Probably then I am just not pragmatic
enough…

Regards,

Bill

PS: My background and work is more in (network) engineering, and probably
that’s why I cannot be as pragmatic…

···

============================================================================
Dave Thomas Dave@pragmaticprogrammer.com wrote:

" JamesBritt" james@jamesbritt.com writes:

Pragmatic versus exotic; use the pragmatic approach in day-to-day work, and
explore exotic tools by night.

Well… I’d say learning Haskell, or OCaml, or Ruby, is pragmatic. Each
of these teaches us something about the nature of programming, and
each improves us as programmers. I too take issue with the OPs
criteria: choosing what to learn based solely of the prosaic is unlikely
to achieve the kind of benefits he’s looking for.

Dave

William Djaja Tjokroaminata wrote:

Hi,

In my opinion, Eiffel is being in the middle, i.e., its performance is
below C but its syntax is not as short as Ruby. Yes, there are some good
object-oriented designs in Eiffel (such as the indistinguishable data
access and function call, which is adopted by Ruby), but to me it is
better to have two extremes than to have one in the middle. For example,
by combining Ruby and C, I can optimize the kernel in C (so that is is
really fast) and provide user interface in Ruby (so that it is simple to
use). A specific example in network simulation is per-packet processing
should be done in C, but the basic routing algorithm can be written in
Ruby.

This ‘middle’ thing is why Python never quite clicked for me as a Perl
programmer. It was better than Perl in many ways but not really that
much better to have me switch. Ruby however, despite it’s paucity of
applications (CPAN continually saves my butt), was clearly better. I can
live with having to write everything I need.

However, and there always is one, there is one thing that drags me back
to Java which I despise. A cross platform GUI as standard. I think that
this is what turned alot of people onto Java, I know it got me. Now if
Ruby had one that was part of the standard install for all platforms
(Windows, Linux, Macintosh as a minimum) then I could forget all about
Java and clear some space on my bookshelf.

No Tk doesn’t count!

William Djaja Tjokroaminata wrote:

Hi,

In my opinion, Eiffel is being in the middle, i.e., its performance is
below C but its syntax is not as short as Ruby. Yes, there are some good
object-oriented designs in Eiffel (such as the indistinguishable data
access and function call, which is adopted by Ruby), but to me it is
better to have two extremes than to have one in the middle. For example,
by combining Ruby and C, I can optimize the kernel in C (so that is is
really fast) and provide user interface in Ruby (so that it is simple to
use). A specific example in network simulation is per-packet processing
should be done in C, but the basic routing algorithm can be written in
Ruby.

This ‘middle’ thing is why Python never quite clicked for me as a Perl
programmer. It was better than Perl in many ways but not really that
much better to have me switch. Ruby however, despite it’s paucity of
applications (CPAN continually saves my butt), was clearly better. I can
live with having to write everything I need.

However, and there always is one, there is one thing that drags me back
to Java which I despise. A cross platform GUI as standard. I think that
this is what turned alot of people onto Java, I know it got me. Now if
Ruby had one that was part of the standard install for all platforms
(Windows, Linux, Macintosh as a minimum) then I could forget all about
Java and clear some space on my bookshelf.

No Tk doesn’t count!

[This might double post as Mozilla crashed on my first attempt]

tran55555@yahoo.com (Email55555) writes:

Is it just learn the syntax of language ? It is much much
difference depend on your definition of “learn”. Think about this,
learn java language, I think you can spend a little bit of time to
learn java syntax. But if you want learn the entire API, Oops, that
take may-be not in one year ( J2SE, J2EE ).

Learning a language means coming to understand it: the philosophy, the
idioms, and the “way things are done”. Doing that gives insight,
insight that can often be applied in different arenas.

With Java, I see little point in learning all the libraries if Java is
simply one of your “languages of the year”. The incremental benefit of
studying the 804th API set is marginal.

However, it is interesting to study the Java libraries at a higher
level. One of the things I learned from Java is the entire concept of
library-based programming. Libraries are pervasive in Java, to the
eternal detriment of the Java community (and computing at
large). Developers writing java are pretty much taught not to write
applications, but instead to write libraries, and then glue these
together with a minimal application core. The result: remarkably
bloated applications, full of code that’s never used, and full of
patterns because “that’s the way to code libraries”. Josh Bloch’s
Effective java is a great book, but it is redolent with library
thinking–write these methods because someone may need them…

That is interesting because years ago all I heard was how
OO was the way to go because code reuse (ie, libraries)
would save time and money. (BTW, I did not buy into the OO
panacea hype --as I put it. I used OO but did not think OO
until Ruby).

Did Java go overboard, or were they too stoic in their
implementation, or what?

Dave

Jim

···

On Fri, Aug 23, 2002 at 12:06:45AM +0900, Dave Thomas wrote:


Jim Freeze
If only I had something clever to say for my comment…
~

Mauricio Fernández wrote:

Bertrand Meyer writes about it in OOSC:


In addition, the language is straightforward and includes very little
else than direct support for the method. First-year students using it
have commented that it was “no language at all” — meaning that the
notation is in one-to-one correspondence with the method: to learn one
is to learn the other, and there is scant extra linguistic decoration on
top of the concepts. (…)

Well, it’s his baby… I personally found it a little hard to deal with.

However, I have to admit that much of the problem with learning new
languages is that we as an industry/science don’t do the right thing
with regard to creating portable environments for languages to live in.

I hate Java, but I can write GUI code that will (almost) work everywhere.

Perl has some thorns too, but again, it generally works everywhere and
has tremendous support.

Learning a language like Eiffel, Scheme, ocaml, or Objective C, all of
which I find better than mainstream languages like Java and C++, means
often finding yourself isolated.

That, and the fact that a lot of employers force you to be buzzword
compliant.

learn more by doing a complete paradigm shift rather than staying on the
OO side.

I have always felt that OO solves problems that some languages never
really had. Also, I believe that every problem is best expressed in
terms of objects. I find a lot of OO solutions very obtuse and
difficult compared to the simpler algol-like algorithms in non OO
languages. It depends on what you are doing.

I guess I want to see a language that is more successful at being the
best of both worlds.

Maybe I’m too biased towards learning instead of actually working
but that’s because I am still a student :slight_smile:

I used to be where you are, but now I generally have to feel like a
language will help me get work done before I can spend time on it.

I have some doubt with functional programming languages. Can Haskell or
any of them be interfaced with C/C++/Java (at the linking level)?

Yes. Haskell code can make calls to C. That’s how I/O, user
interfaces and other services are implemented.

But… why are you asking this on the mailing list instead of
downloading a Haskell system and learning it for yourself? :slight_smile:

To me,
the benefits in learning the new concepts are diminished by not being able
to explicitly code in that language in practice. (My concern is, if I
really write a Haskell code for a project, then I am stuck with Haskell, I
cannot switch parts of it to C.)

Learning Haskell teaches you useful techniques, even if you don’t end
up writing Haskell code in your professional life.

For example, many aspects of the C++ library are influenced by
functional languages, especially the STL. The binder classes are an
implementation of curried functions, that are directly inspired by
functional languages. The STL algorithms and functor objects are an
attempt to write higher order functions in C++. Learning Haskell or
other functional languages is a good learning experience if it does no
more than teach you how to better use the C++ standard library. It’s a
lot easier to learn higher order functional programming in Haskell
syntax than it is in C++ template syntax, and the error messages will be
easier to understand as well. However, it will also make you realise
how limited and awkward a language C++ is for writing this kind of code.

Cheers,
Nat.

···

On Thu, 2002-08-22 at 14:55, William Djaja Tjokroaminata wrote:


Dr. Nathaniel Pryce, Technical Director, B13media Ltd.
Studio 3a, 22-24 Highbury Grove, London N5 2EA, UK
http://www.b13media.com

The lsnguage you mention most is C. Why not learn advanced C?

Seriously, You wanted to take the Pragmatic Programmers’ advice, so take it. I
don’t remember the book saying anything about needing to interface to C. The
point is to learn another language, and learn something from it. If you
learn Haskell, you will think differently about the C code you write. That’s
the main point.

I’m afraid I can’t agree with anything you say below :slight_smile:

Gavin

Thinking about this issue further, it seems to me that being pragmatic is
harder than being practical. I realize that learning a language such as
Haskell will definitely bring a lot of benefits, but probably for me the
cost/reward ratio is just too high.

Stop yabbering and learn it.

Probably then to me the most important criterion is 3), the ability to be
interfaced with C/C++ or Java, because, I think, then criteria 1), 2), 4),
and 6) simply follow, because we can always decide whether to program in
that language or in C/C++/Java and even keep switching between the two
without any progress penalty.

Progress penalty = time for reflection on what you’ve learned.

Ruby seems to have been a real jackpot. It really teaches a lot of new
things. Of course, since the beginning we knew that all its good stuff
comes with execution and memory performance penalty. But it is not a
problem at all, because we can always optimize it with C/C++.

Performance isn’t an issue until you’ve proved it’s an issue. For network
engineering, fair enough, but there’s more to programming than that.

I have some doubt with functional programming languages. Can Haskell or
any of them be interfaced with C/C++/Java (at the linking level)?

Who cares?

To me,
the benefits in learning the new concepts are diminished by not being able
to explicitly code in that language in practice.

Rubbish.

(My concern is, if I
really write a Haskell code for a project, then I am stuck with Haskell, I
cannot switch parts of it to C.)

You’re not stuck with Haskell; you can port it to Ruby. Or C.

I learned Tcl, Perl, Python, and Ruby because they can be interfaced to C,
knowing that whenever I am stuck in them, I can always switch to the old,
well-known, library-rich, high-performance C.

You mean the old, stale, difficult, low-level, inflexible, unforgiving,
well-known, library-poor, high-performance C?

In some sense, Tcl, Perl,
Python, and Ruby can be regarded as some C libraries, although what
wonderful libraries they are!

Say what you like about Tcl, Perl and Python, but Ruby is in no way, shape or
form a C library. The point you are conciously failing to accept in this whole
discussion is that computer languages differ most importantly in the type of
abstractions they provide. C offers functions, structs, and pointers. Ruby
offers … well, learn some Ruby and find out. See ruby-talk:1-45000.

Probably then I am just not pragmatic
enough…

No. Not in the Pragmatic Programmer sense, anyway.

Regards,

Bill

PS: My background and work is more in (network) engineering, and probably
that’s why I cannot be as pragmatic…

There is help for you… :wink:

Gavin

···

----- Original Message -----
From: “William Djaja Tjokroaminata” billtj@y.glue.umd.edu

Peter Hickman peter@semantico.com writes:

However, and there always is one, there is one thing that drags me back
to Java which I despise. A cross platform GUI as standard. I think that
this is what turned alot of people onto Java, I know it got me. Now if
Ruby had one that was part of the standard install for all platforms
(Windows, Linux, Macintosh as a minimum) then I could forget all about
Java and clear some space on my bookshelf.

That is the only reason I translated DataVision from Ruby to Java. The code
feels bloated now, but at least the GUI runs everywhere without end users
having to install a GUI library.

Jim

···


Jim Menard, jimm@io.com, http://www.io.com/~jimm/
“We get a million calls a month saying, ‘Hey, this product is confusing.’”
– Bill Gates on the volume and tone of Microsoft’s customer feedback.

This is one of the driving forces behind Parrot’s getting ports of
some of the more obscure (relatively) languages. It’d be nice to use
perl/python/ruby/scheme/forth and have access to the swing libraries
for GUI work.

···

At 5:36 AM +0900 8/23/02, Charles Shannon Hendrix wrote:

Learning a language like Eiffel, Scheme, ocaml, or Objective C, all
of which I find better than mainstream languages like Java and C++,
means often finding yourself isolated.


Dan

--------------------------------------“it’s like this”-------------------
Dan Sugalski even samurai
dan@sidhe.org have teddy bears and even
teddy bears get drunk

Very well said, Charles. I completely agree with you.

That’s why I really hesitate to start learning Haskell. It seems Haskell
can only be interfaced with C through some intermediary called “Greed
Card” and not directly as between C and Ruby. Also one of my colleages
here is learning Scheme. I still cannot persuade myself to learn Haskell
in particular (why not Scheme, or even Emacs Lisp, which will make my
editor do all the wonderful things?) or a functional language in general.

Regards,

Bill

···

========================================================================
Charles Shannon Hendrix csh_hatespam@widomaker.com wrote:

(deleted)

Learning a language like Eiffel, Scheme, ocaml, or Objective C, all of
which I find better than mainstream languages like Java and C++, means
often finding yourself isolated.

That, and the fact that a lot of employers force you to be buzzword
compliant.

(deleted)

I used to be where you are, but now I generally have to feel like a
language will help me get work done before I can spend time on it.