Fog Creek Software
Discussion Board




First Programming Language

I'm fairly new to programming and was wondering which would be the best programming language for starters.  I looked at Python which seems pretty impressive, easy and fast. VB looks decent to but it seems a lot more complicated.

All suggestions are very much appreciated.

Rock
Friday, December 14, 2001

We had a bit of discussion on this a few weeks ago:

[ http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=1289 ]

Alyosha`
Friday, December 14, 2001

I would strongly reccomend VB, provided that you make an effort to learn good programming practices at the same time, and that you make an effort to learn what's happening behind the scenes.

Jeff Paulsen
Friday, December 14, 2001

The actual language you write something in is almost always to do with the environment, the audience or the presentation of the final product.

There are very few classes of problems and solutions that are affected by the actual language they are implemented in.  There are exceptions of course, Lisp, Smalltalk, MUMPS, RPG and so on, but for the most part most of the languages commercially used have in process terms the same kind of grammar.

Script languages such as Perl and Python look very different but they are similar enough to other block structured languages to be able to pick up straightforwardly.

If you can express your algorithm/design in something more generalised than a specific language in the beginning it will be all the easier to decide on the right language for that implementation, given all the other criteria, environment, audience and presentation.

Your real question then might rather be, "What Language/IDE can I most easily create the kind of software I want to create" 

So the first question for yourself is "What kind of software do I want to create?"

This is known as the 'Irish Answer', as in your man being asked directions to Dublin saying, 'Well if it was me I would not be starting from here'.

Simon Lucy
Friday, December 14, 2001

If you want to learn programming as a "discipline", I recommend following the advice on this site.

For building Windows apps, VB is the best place to start.

If you want nice cross-platform language (with great documentation), I'd start with Python. Later when you're ready to poison yourself with Object-Oriented programming, you can dive into Java.

If you're less concerned about what macho-coders think, and you just want to get stuff done quickly, take a look at REBOL (pronounced "rebel" -- see http://www.rebol.com). REBOL is a relatively simple cross-platform language that bakes-in all of the major network/Internet protocols. It's a productive language that doesn't force you to spend hours writing programs that save only minutes.

Non-programmer programmer
Friday, December 14, 2001

Actually, Python is as object-oriented as it gets :)

Petru Paler
Saturday, December 15, 2001

Duly noted; I didn't mean to imply that Python isn't object-oriented (or VB for that matter, but this is fertile ground for an ages-old debate). These days, Java is a common starting point  for OOP-- back in my day, we started with Smalltalk or Eiffel.
Label me "behind the times", but I find OOP often introduces complexity that doesn't substantially improve my productivity. As a first-time programmer, I'd start with a language that doesn't rigidly enforce object-oriented programming (or any other special "mindset").

Non-programmer programmer
Saturday, December 15, 2001

> As a first-time programmer, I'd start with a language that doesn't rigidly enforce object-oriented programming

the trick with python is that it teaches you to use objects (everything is an object, period) before you learn how to create new object classes.

if you only write small programs, you can get by just fine without ever using the "class" keyword.

Fredrik Lundh
Sunday, December 16, 2001

Rock, is your goal to play around and have fun or do you ever hope to have a job doing programming some day?

If the former, then VB may be a viable option.  If the latter, I would avoid it like an anthrax-tainted letter.

VB6 was released in 1998.  It is now just days away from 2002.  There will never be a new version of VB (VB.NET is not VB, it is MS's version of Java with a vbish syntax).  It is far to early to see if VB.NET will gain any traction in the marketplace or even how well DotNet will succeed.  Early indications are that C# will take over as the DotNet environment of choice.

If you go into VB6 now, you will be competing with no job experience in a dying niche with tons of people with 3, 4, 5 6+ years of experience in the work environment. 

If you are talking about languages that are still "alive", that have a lot of marketplace penetration and a decent future, I would recommend C++ or Java.  C++ for the low-level stuff like video drivers, 3-d animation, games, OS development.  Java for business development.  I expect MS will do well enough with DotNet but if you really want to move to a new, untested platform that MS hopes will do well in the marketplace, I suggest focusing on C# and not VB.NET.  Most all of the people I know going into DotNet development are doing it with C#.  You will find that DotNet and Java are extremely close to each other, particularly if you use the C# syntax.

Good Luck!

Matthew Cromer
Sunday, December 16, 2001

I would like to suggest checking out Delphi, for several
reasons:

1) Its easier for new programmers, than say C++ which
in my oppinion is a bit too obfuscated, at no gain.

2) Delphi is a clean straight forward language (Object Pascal) ... i can hear some of you guys grinding your
teeth at the sight of Pascal, but the truth is its not anywhere near the original Pascal you all were tought way back, when in college. Delphi implements real OOP as well
as the low level API stuff that die-hard C++ SDK hackers
should be familiar with.  The visual component library (VCL)
implements a load of reusable components which "hides"
the low level API-stuff, but Delphi still allows you to use SetWindowsHookEx() the day you feel up to it.

3) "Strong typing is for people with weak memories" is a
quote that might be true, but I personally found strong
typing useful when learning my programming skills. Most
C newbies including myself has problem with their
*a **a and &a's :-)

4) Dealing with Java, JRE's and the stuff to get Java working on any platform is in my humble opinion overkill
if you do not need platform independence. Your average
"Hello, worlds" usually dont fall into this category.

5) I am not a C/C++ hacker by trade, and I keep the C/C++
on a "need to know basis" - however I find the transision from Delphi, to other modern languages mentioned here quite easy.

I apprecaite this is a potential flamebite, as every programmer i know is kindof sensetive about their language of choice. It is not meant as a flamebite, I just saw the mention of Delphi missing from this discussion.

Just my two cents worth.

Patrik Ohman
Sunday, December 16, 2001

Delphi

Everything I have ever read and heard about Delphi indicate it is a very solid language with a great environment for creating GUIs.

However, the demand for Delphi programmers is so small as to be virtually non-existent.

If you plan to do software development at a career, I would recommend very strongly that you focus on languages that can pay the bills.  That means (today):

C++
C (less and less)
VB (Only those with experience, the language has been killed by MS)
Java
C# (May or may not gain traction in the marketplace)

If someone wants to list another viable commercial language for general purpose software development, pipe up! ( I mean viable in terms of finding a job, not in terms of quality of product).

Matthew Cromer
Sunday, December 16, 2001

Matches from monster.com (selected all the computer related options like IT and Computers, Software):

Java -            2609
Visual Basic - 1415
C++ -            962
Perl -              839
Delphi -          119
PHP -              57
tcl -                56
Python -        35
C# -              31
Lisp -              7

It terms of "the market" it seems that Java is tops because of its versatility.  C# hasn't come to the fore, Lisp and probably Python (unless you work in a shop that uses Zope) are more for learning that practical usage it seems.

I learned Perl first, and I *love it* for quick & dirty scripts, but it enables one to develop bad habits real quick.  Some would say that "Don't develop bad habits in the first place," but if you're a beginner struggling to figure our arrays and references and the like, it's easy to take short-cuts. 

C++ is might hard for a first language, and C is kind of old at that point though I found it not too difficult after Perl (and it's less messy than Perl).

Seems like Lisp and Python are so low on the marketability meter that you might want to focus on something else.

Visual Basic locks you into MS, and I find that VBs syntax looks peculiar to me coming from the perl/C universe, so you might not want to become ghettoized.

So again, I think we're stuck at Java.  If you know Java, you get familiar with its family of languages-and you have a *very* marketable skill (at the moment).

razib kahn
Monday, December 17, 2001

Sorry for not answering the original question(don't have a strong opinion about it), but I have to comment things like
"Dealing with Java, JRE's and the stuff to get Java working on any platform is in my humble opinion overkill if you do not need platform independence"

Well, you have to install *something* if you want to run the program, right ? I thing getting a gcc for Windows from Cygwin isn't any easier then getting a latest JDK from Sun. They both pretty easy, I think.

I didn't install JDK on Linux but exact steps of doing it on Windows are following:
1) Download the exe
2) Run it
3) Update your PATH to include the "bin" directory,
log off, log on (to catch the PATH update)   

That's it, am I wrong somewhere ? Where is the dealing with Java and jre ?

Evgeny Goldin
Monday, December 17, 2001

With GCC, VC++, or VB (or Delphi?) on Windows you are still using the MS-supplied runtime, so your .exe has no dependencies. With Java your users must install the Java runtime.

It is the eternal dilemma - stick with platform-specific runtimes and you are safe, but firmly locked-in; use a cross-platform runtime and you've got to deal with installing the dependencies. (sadly no platform vendor will include a runtime that is not "theirs," for obvious business reasons. cf. Microsoft with Java)

UNIX-type systems generally make dependencies harder to handle because you can't just set PATH, you also need to do system-specific voodoo with LD_LIBRARY_PATH or /etc/ld.so.whatever so that the linker can find the DLLs. (MS did the right thing by adding "." to the dynamic linker path... Now that I think about it, on UNIX the linker could just examine the PATH and change every /foo/bin to /foo/lib...). If you want to be really complete you *also* need to add the path for 'man' to find the man pages, 'info' to find the TeXinfo pages, etc... All of this stuff needs to be handled *differently* on each Linux distro, Solaris, IRIX, etc...

Dan Maas
Monday, December 17, 2001

"Everything I have ever read and heard about Delphi  indicate it is a very solid language with a great environment for creating GUIs.
However, the demand for Delphi programmers is so small as to be virtually non-existent."

I know there is a small demand for cosultants doing Delphi stuff, I used Delphi heavily when I was working at a small shop writing a product (oracle database c/s application).
However, if I (or for that matter Joel, for CityDesk) had chosen Delphi over VB no one would have cared, as long
as you can ship a product to meet a business need.

If you are into consulting I find your remark valid,
since most customers seem to ask for whatever
they read in the newspaper this week since the whole industry is pretty much a game of "Simon Says". 
Its pretty much a matter of who is going to be
Simon the next couple of years.

This however, does not make the choice of Delphi as a
learning-language to learn basic programming skills
a bad one.


A comment for  Evgeny Goldin:

"That's it, am I wrong somewhere ? Where is the dealing with Java and jre ?"

See the post from Dan Maas, about installing JRE's on
Solaris and Linux, and you will get the picture. Under
Solaris (which was what i installed and used) is pretty
messy as compared to a standalone distributable .EXE
you get from a compiled language which uses the OS
supplied runtime. MS runtime libraries on Windows, the
libc library on UNIX/Linux.


Just my 2 cents.

Patrik Öhman
Tuesday, December 18, 2001

"See the post from Dan Maas, about installing JRE's on Solaris and Linux, and you will get the picture"

I didn't know it can be *this* complicated on Solaris or Linux .. But may be it's not Java but OS which makes things complicated ? :)

Evgeny Goldin
Tuesday, December 18, 2001

Programming languages vary immensely in mental leverage. One of the problems in evaluating a new programming language is that if you haven't used it for anything significant, you don't think in the new language.

If you read about it, or try a toy problem with the new language, you won't actually think in the new language: you'll think in your favourite langauge and translate to the new language as you go.

So you will probably miss whatever the new language has to offer and make a decision based on superficial characteristics. For example, many people coming to Java from C++ and VB completely miss the point of Inner Classes.

If you're considering a first programming language ever, think very carefully before making a choice.

Of course, I have a recommendation, but it is unlikely to be popular. I suggest Scheme Lisp and two books: "Structure and Interpretation of Computer Programs" and "Lisp in Small Pieces".

After that, everything will seem obvious, as every other language will feel like something you could whip together over the weekend.

BTW, that does NOT necessarily mean I advocate Lisp as a programming language of choice for developing professional applications :-)

Reginald Braithwaite-Lee
Tuesday, January 01, 2002

start with oops VC++ or C++ or JAVA.
eventhough they r not simple u can have good start if u want to become a programmer.

Rekha
Tuesday, May 06, 2003

hey there

as a reply to your question, i would  to tell you that if you want to become a programmer you need to make a chioce,. do you want to start with OOP (object oriented programming) then start with v.b .net, or VB 6.0, but if you are talking production then start with C, after you are comfortable with it you go right ahead in to the worlds highest class languageC++
" no matter what any one says", and this is an advice from a Programmer.

M. Babeli
Friday, June 06, 2003

*  Recent Topics

*  Fog Creek Home