Choosing a new language

R

Rico Secada

Hi.

First let me start by saying, please don't let this become a
flame-thing.

Second, I need some advice.

I am a 35 year old programmer, who program in C/C++, PHP and Bourne
Shell almost daily.

I am currently going to start focusing on becoming more skilled at a
few key languages, rather than knowing many (which I do on a more
superficial level).

My key languages are C, PHP and SH (Bourne Shell), and I have stopped
using C++ because I find that its a C-hack rather than a good design
choice.

I have made the following decision:

To study Ada and use it instead of C++. I come from a Pascal background
and I love the Ada syntax and wide area of usage. I am also attracted
to Ada because of its usage in the industry.

Now I have three more languages that I am very attracted to, but I
prefer to focus on just one of them:

Python, Haskell and Lisp.

I have been doing some reading and some coding, and I am mainly
attracted towards Lisp because of its ability to "fix a
running program".

But I find that Haskell is a more powerful language. Yet again Python
has a huge user base and many libraries, and it is implemented
everywhere, where Haskell and Lisp on the other hand hasn't.

I like the syntax of all three, and I have gotten beyond the
"confusion" stage of Lisp parentheses, so they don't bother me at all.

I need advice from people who have been coding in all three, and who
can share some views and experiences.

Please, if you don't know ALL three by deep experience, don't respond to
this thread!

Thanks and best regards!

Rico.
 
J

Joachim Durchholz

I don't know all three languages, but I know you won't get a useful
answer unless you say what purpose you want to learn any of these
languages for. To expand your mental scope? To improve your CV? To use
as a new workhorse for your daily work? If it's the latter: what kind of
work do you do?

Regards,
Jo
 
J

John Nagle

Rico said:
Hi.

First let me start by saying, please don't let this become a
flame-thing.

Second, I need some advice.

I am a 35 year old programmer, who program in C/C++, PHP and Bourne
Shell almost daily.

I am currently going to start focusing on becoming more skilled at a
few key languages, rather than knowing many (which I do on a more
superficial level).

My key languages are C, PHP and SH (Bourne Shell), and I have stopped
using C++ because I find that its a C-hack rather than a good design
choice.

I have made the following decision:

To study Ada and use it instead of C++. I come from a Pascal background
and I love the Ada syntax and wide area of usage. I am also attracted
to Ada because of its usage in the industry.

Now I have three more languages that I am very attracted to, but I
prefer to focus on just one of them:

Python, Haskell and Lisp.

I've used every language mentioned except Haskell.

I'm somewhat fed up with C++ myself. I've used it for years; I've
written large systems in it, and I have to face that it has a fundamental
problem. C++ is the only major language with hiding but without memory safety.
C has neither hiding or safety; Java and Ada have both hiding and safety.
No language since C++ repeats that mistake.

Ada has its advantages, but outside the DoD world, it's more or less
dead. If you have a security clearance and are interested in real
time avionics programming, maybe.

LISP has a cult problem. It's not used much any more, even in the
AI community. LISP users tend to be too wierd. The language itself
is OK, but few commercial applications use it. Viamall, which became
Yahoo Store, is one of the very few major commercial LISP apps.
I've written about 20,000 lines of LISP, but I'll never use it again.

Actually, the ability to "fix a running program" isn't that useful
in real life. It's more cool than useful. Editing a program from
a break was more important back when computers were slower and just
rerunning from the beginning was expensive.

Python suffers from a slow implementation. Numbers vary, but
10x to 60x slower than C is typical. The language is quite
powerful, but is held back by the CPython implementation, the
lack of a language standard independent of any implementation,
and a clunky mechanism for linking to external non-Python libraries.
There's no fundamental reason that Python couldn't be made to run at least
as fast as Java, but with the language spec tied to CPython, the
other implementations are always playing catch-up and run far behind the
CPython implementation.

As languages, C# and Java are reasonably good. They tend to come
with too much excess baggage in the form of frameworks, run-time systems,
and packagers, but as languages they're fast, safe, and expressive.

Can't speak for Haskell.

John Nagle
 
G

Gary Scott

Rico said:
Hi.

First let me start by saying, please don't let this become a
flame-thing.

Second, I need some advice.

I am a 35 year old programmer, who program in C/C++, PHP and Bourne
Shell almost daily.

I am currently going to start focusing on becoming more skilled at a
few key languages, rather than knowing many (which I do on a more
superficial level).

My key languages are C, PHP and SH (Bourne Shell), and I have stopped
using C++ because I find that its a C-hack rather than a good design
choice.

I have made the following decision:

To study Ada and use it instead of C++. I come from a Pascal background
and I love the Ada syntax and wide area of usage. I am also attracted
to Ada because of its usage in the industry.

Now I have three more languages that I am very attracted to, but I
prefer to focus on just one of them:

Python, Haskell and Lisp.

I have been doing some reading and some coding, and I am mainly
attracted towards Lisp because of its ability to "fix a
running program".

But I find that Haskell is a more powerful language. Yet again Python
has a huge user base and many libraries, and it is implemented
everywhere, where Haskell and Lisp on the other hand hasn't.

I like the syntax of all three, and I have gotten beyond the
"confusion" stage of Lisp parentheses, so they don't bother me at all.

I need advice from people who have been coding in all three, and who
can share some views and experiences.

Please, if you don't know ALL three by deep experience, don't respond to
this thread!

Thanks and best regards!

Rico.
And the good old standbys Fortran 95/2003 and REXX.

--

Gary Scott
mailto:garylscott@sbcglobal dot net

Fortran Library: http://www.fortranlib.com

Support the Original G95 Project: http://www.g95.org
-OR-
Support the GNU GFortran Project: http://gcc.gnu.org/fortran/index.html

If you want to do the impossible, don't hire an expert because he knows
it can't be done.

-- Henry Ford
 
G

George Neuner

Actually, the ability to "fix a running program" [in Lisp] isn't
that useful in real life. It's more cool than useful. Editing a
program from a break was more important back when computers were slower
and just rerunning from the beginning was expensive.

Speak for yourself.

The ability to patch a running program is very useful for certain
types of embedded applications. Not every program having high
availability requirements can be restarted quickly, or can be
implemented reasonably using multiple servers or processes to allow
rolling restarts.

I worked with real time programs that required external machinery to
operate and several minutes to reinitialize and recover from a cold
restart. Debugging non-trivial code changes could take hours or days
without the ability to hot patch and continue. I know not everyone
works in RT, but I can't possibly be alone in developing applications
that are hard to restart effectively.

That all said, online compilation such as in Lisp is only one of
several ways of replacing running code. Whether it is the best way is
open for debate.

George
 
G

george.priv

Hi.

First let me start by saying, please don't let this become a
flame-thing.

Second, I need some advice.

I am a 35 year old programmer, who program in C/C++, PHP and Bourne
Shell almost daily.

I am currently going to start focusing on becoming more skilled at a
few key languages, rather than knowing many (which I do on a more
superficial level).

My key languages are C, PHP and SH (Bourne Shell), and I have stopped
using C++ because I find that its a C-hack rather than a good design
choice.

I have made the following decision:

To study Ada and use it instead of C++. I come from a Pascal background
and I love the Ada syntax and wide area of usage. I am also attracted
to Ada because of its usage in the industry.

Now I have three more languages that I am very attracted to, but I
prefer to focus on just one of them:

Python, Haskell and Lisp.

I have been doing some reading and some coding, and I am mainly
attracted towards Lisp because of its ability to "fix a
running program".

But I find that Haskell is a more powerful language. Yet again Python
has a huge user base and many libraries, and it is implemented
everywhere, where Haskell and Lisp on the other hand hasn't.

I like the syntax of all three, and I have gotten beyond the
"confusion" stage of Lisp parentheses, so they don't bother me at all.

I need advice from people who have been coding in all three, and who
can share some views and experiences.

Please, if you don't know ALL three by deep experience, don't respond to
this thread!

Thanks and best regards!

Rico.

Can't say much about others but my experience with C, C++ (20 years),
C# and Ada so far:

C is too primitive, too much labor. I use C only on embedded platforms
with limited availability of other languages.
C++ for the years of use I have identified the following trouble
spots:
- Templates not always instantiate the way you think they should
- Lack of typing restrictions: typedef is a bad joke
- #define/ #ifdef should not be part of any high level language
- no support for concurrency even simple threads

C#/Java are pretty good except for reliance on garbage collection.
Try the application that goes through 10Mb per second data crunch and
witness the hick ups.

Ada: in my first project. To summarize experience so far
- More complex takes longer to learn
- Takes some paradigm shift from pointers, callbacks to tasks/
message/rendezvous mentality
- Some keywords seem to be redundant
- Takes more time to think through data structures, interfaces and
tasks
- That can in turn result in better code
- Anything having to do with life safety better be coded in Ada

George
 
B

byte8bits

I am a 35 year old programmer, who program in C/C++, PHP and Bourne
Shell almost daily.

I am currently going to start focusing on becoming more skilled at a
few key languages...

Python and Ruby. They are the future of programming and are here and
useful today. Both excellent languages... similar yet different. I use
both for general purpose programming (I do not do Web development
mostly systems programming). You can do things in minutes with them
that would take days in Java or C++. You can write very portable code
in either language (Windows, Linux, BSD, Mac, Solaris, etc.)

Ada is airline/dod blessed. Hardly used elsewhere. Best of luck in
finding skilled, affordable Ada programmers outside of major cities.
The others you mentioned are research projects of math and CS (applied
math professors)... and are not generally applicable to real-world
problems. Interesting projects though.

Best of luck,
Brad
 
J

Joachim Durchholz

George said:
I know not everyone
works in RT, but I can't possibly be alone in developing applications
that are hard to restart effectively.

Indeed. An additional case is interactive applications where setting up
the situation to be tested requires several time-consuming steps.

Regards,
Jo
 
P

Paul Rubin

Joachim Durchholz said:
Indeed. An additional case is interactive applications where setting
up the situation to be tested requires several time-consuming steps.

At least for web development, there are a lot of automated tools that
mimic user input, just for this purpose.
 
B

bearophileHUGS

It's not easy to answer this question, and the choice of language is
quite influenced by what's your use of it.

Python/Ruby and Java (and C#, sometimes, on Windows) are often a safe
bet today (for work purposes too), they have lot of libraries and they
are efficient enough for their purposes. But despite being flexible
those two pairs of languages have different purposes.

Haskell is a good language, it has much less libraries and today its
speed is comparable to Python/Psyco one, it may require some time to
adapt your mind tuned to older language to its nearly-pure functional
style. Today I don't think it's a language for newbies. In the future
maybe it will become more useful for work too.

Bye,
bearophile
 
S

Stephen Leake

George Neuner said:
Actually, the ability to "fix a running program" [in Lisp] isn't
that useful in real life. It's more cool than useful. Editing a
program from a break was more important back when computers were slower
and just rerunning from the beginning was expensive.

Speak for yourself.

The ability to patch a running program is very useful for certain
types of embedded applications. Not every program having high
availability requirements can be restarted quickly, or can be
implemented reasonably using multiple servers or processes to allow
rolling restarts.

And in applications like IDEs, dynamically loaded functions are very
important. Improving Emacs is vastly easier because Emacs Lisp is
interpreted. You can make a small change to a function and quickly
determine its effect. That's one reason (among many others :) I have
not switched to GPS (which is written in Ada).
 
X

Xah Lee

2007-12-29

Rico Secada wrote: $B!V(B... Now I have three more languages that I am very
attracted to, but I prefer to focus on just one of them: Python,
Haskell and Lisp. ... I need advice from people who have been coding
in all three, and who can share some views and experiences.$B!W(B

I have been coding all 2, namely Lisp and Python, while still dragging
my ass about learning Haskell.

as others have said, choosing a language for practical programing
largely depends on your purpose. (of course you knew that) Web
programing? PHP and Javascript and HTML/CSS and SQL/db you need. Unix
sys admin? Knowing Bash and Perl is in your favor considering the
states of the affairs. You want to do language research and AI? Lisp
and Haskell etc, of course. You want the ultimate text processor?
Emacs lisp. (beats Perl like you would beat your neighbor's child) You
want build light-sabers and spaceships in the Second Life virtual
world? Linden Script Language, is inevitable. You want to write device
drivers for Operating systems? Enduring the torture of C will benefit
you in long run.

Now, suppose your fancy brain told you that you want one to rule them
all for your kingdom of pure hobby, then the choices runs down to your
taste of course. You could, for example, imagine yourself to be the
king of bits, and enrapture yourself for the persuit to be the master
of all assembly languages. On the other hand, if you imagine to be the
supreme intellilect who wants the most high-level, expessive language
of all, with one line equals to one billion of a assembly, one million
of java, one thousand of lisp, there's Mathematica you can try. (with
few thousand dollars in your pocket to be able to begin this journey)

Sure, but you want us to comment on Python and Lisp and Haskell sans
scenarios.

In that case, my opinion is that Python sucks ass, Lisp and Haskell
rules.

Let me tell you, since you know PHP, that PHP and Perl are practically
identical in their high-levelness or expressiveness or field of
application (and syntax), and, Perl and Python are pretty much the
same except their syntax. In general, PHP, Perl, Python are the same.

(i have over years of industrial experienc with Perl and PHP since
1997, and just personal dabbling with Python since 2005. See my
tutorials here:

$B!z(B Perl and Python tutorial
http://xahlee.org/perl-python/index.html

$B!z(B PHP tutorial (meager, only started writing it this month)
http://xahlee.org/php/index.html

$B!z(B Emacs Lisp tutorial
http://xahlee.org/emacs/elisp.html

$B!z(B Linden Scripting Language tutorial (Second Life)
http://xahlee.org/sl/ls.html

O, and a Java tutorial
$B!z(B Java Tutorial
http://xahlee.org/java-a-day/java.html

)

Xah
(e-mail address removed)
$B-t(B http://xahlee.org/

----------------------------------

Rico Secada wrote:
Hi.

First let me start by saying, please don't let this become a
flame-thing.

Second, I need some advice.

I am a 35 year old programmer, who program in C/C++, PHP and Bourne
Shell almost daily.

I am currently going to start focusing on becoming more skilled at a
few key languages, rather than knowing many (which I do on a more
superficial level).

My key languages are C, PHP and SH (Bourne Shell), and I have stopped
using C++ because I find that its a C-hack rather than a good design
choice.

I have made the following decision:

To study Ada and use it instead of C++. I come from a Pascal
background
and I love the Ada syntax and wide area of usage. I am also attracted
to Ada because of its usage in the industry.

Now I have three more languages that I am very attracted to, but I
prefer to focus on just one of them:

Python, Haskell and Lisp.

I have been doing some reading and some coding, and I am mainly
attracted towards Lisp because of its ability to "fix a
running program".

But I find that Haskell is a more powerful language. Yet again Python
has a huge user base and many libraries, and it is implemented
everywhere, where Haskell and Lisp on the other hand hasn't.

I like the syntax of all three, and I have gotten beyond the
"confusion" stage of Lisp parentheses, so they don't bother me at all.

I need advice from people who have been coding in all three, and who
can share some views and experiences.

Please, if you don't know ALL three by deep experience, don't respond
to
this thread!

Thanks and best regards!

Rico.
 
A

Achim Schneider

Rico Secada said:
Second, I need some advice.
http://www.nondot.org/sabre/Mirrored/AdvProgLangDesign/

Learn, or better said understand, those and then choose wisely.

Lisp throws lambda calculus right into your face, which is a good
thing. Scheme might be the better choice, it's lexically scoped:
http://mitpress.mit.edu/sicp/
There are also video lectures with people with funny hats speaking wise
words.

For lisp, (and also a good read if you go for scheme, same with the
wizard book above the different way round), the book of choice is
http://www.paulgraham.com/acl.html

Python is Yet Another Scripting Language, borrowing concepts from more
advanced languages. You might want to go for the real thing instead,
although it's certainly nice.

Haskell is to scheme what a basketball basket is to a trash bin. It's
typed strictly and pure, but with some effort you will also be able to
throw your trash through the basket as well as find a trash bin big
enough for your ball
..
 
J

Joachim Durchholz

Paul said:
At least for web development, there are a lot of automated tools that
mimic user input, just for this purpose.

Yes, but it still takes time to run to the point you want.
Plus you'd need to integrate such a tool with the debugger.
Plus you'd need to record the user actions, save them somewhere, and
recall them.

None of that is rocket science, of course, but I have yet to see such a
thing. (It would be nice to have it though.)

However, for web applications, I found a far easier variant: I just
reload the page being debugged. (I have to make sure that the backend is
in the same state when reloading, but that's usually easy to accomplish.)
So web pages are one area where code modification during debugging is
less important.

Desktop programs with a large internal state are an entirely different
kettle of fish, of course.

Regards,
Jo
 
J

John Thingstad

På Sat, 29 Dec 2007 19:16:09 +0100, skrev Joachim Durchholz
However, for web applications, I found a far easier variant: I just
reload the page being debugged. (I have to make sure that the backend is
in the same state when reloading, but that's usually easy to accomplish.)
So web pages are one area where code modification during debugging is
less important.

Haveyou looked at selenium?

I quote:

Selenium is a test tool for web applications. Selenium tests run directly
in a browser, just as real users do. And they run in Internet Explorer,
Mozilla and Firefox on Windows, Linux, and Macintosh. No other test tool
covers such a wide array of platforms.
Browser compatibility testing. Test your application to see if it works
correctly on different browsers and operating systems. The same script can
run on any Selenium platform.
System functional testing. Create regression tests to verify application
functionality and user acceptance.

There is also a Lisp interface cl-selesium though I can't find the code on
the net now.
 
J

John Thingstad

På Sat, 29 Dec 2007 18:58:30 +0100, skrev Arnaud Delobelle
Common Lisp has lexical scoping as well (although defvar allows you to
declare dynamically scoped variables).

More precisely defvar, defparameter, progv and (declare (special var))
create variables with dynamic scope.
let and let* do as you said use a lexical scope. (unless you use a declare
as above)
 
S

Samuel Tardieu

Brad> Best of luck in finding skilled, affordable Ada programmers
Brad> outside of major cities.

Which is why it may be a good idea to learn it and earn a lot of $$$ :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top