What are good free programming language environments?
December 30, 2005 5:34 PM   Subscribe

What are good free programming language learning environments?

I haven't programmed in years and I'm thinking about starting again and learning a current language. I don't know C or any of its children and I don't know OOP. What language should I go for and what free packages are available for the learner and hobbyist? I would be running it on a Windows XP system and I would not want to install another OS.
posted by pracowity to Computers & Internet (41 answers total) 2 users marked this as a favorite
 
a friend of mine put together this.
posted by 3.2.3 at 5:41 PM on December 30, 2005


To learn, you want an editor and a command line.

Otherwise, it's "magic", and it'll work, but you won't know why it works, or what to do when it does not.
posted by orthogonality at 5:48 PM on December 30, 2005


Python

I must add a comment about your (lack of) commitment to this: It must run on Windows XP, you will not change OSes, you're not willing to pay anything... Flexibility is a trait of good programming - it would behoove you to pick some up.
posted by unixrat at 6:01 PM on December 30, 2005


properly defining the problem domain is also a trait of good programming.
posted by Good Brain at 6:03 PM on December 30, 2005


For windows development, you cant go wrong with the express editions of Visual Studio.

I agree with orthogonality though, that for at least the first project, a command line and a text editor are the way to go. When I learned windows development many moons ago, I used Petzolds Programming Windows, and it taught how a windows application really worked, by making you implement a message loop, etc, by yourself ... without the tools help. Petzold also wrote a book on .NET development, that does approximately the same thing: it walks you through creating a .NET winforms application without Visual Studio.

Good luck!
posted by stupidcomputernickname at 6:19 PM on December 30, 2005


Ruby and Python are good "fun" languages with practical applications. Ruby on Rails is a hot, trendy web programming language these days.

PHP+SQL if you want to be able to write websites and get them hosted anywhere.

If you want to get a job, learn Java, which is pretty easy to learn, actually and there are lots of books and tools available. It has a reputation for being drab, which is just the way I like it :P
posted by delmoi at 6:25 PM on December 30, 2005


ortho: I think he meant "environment" as in VM/libraries, not IDE. That said, there's a lot to be said for Eclipse. It's free and open source. I use Jbuilder, which sucks, but I'm addicted to the way it does autocomplete. Eclipse just irritates me. (come to think of it, it's also the way visual studio does autocomplete)
posted by delmoi at 6:27 PM on December 30, 2005


If you want to try a general IDE, you could get Eclipse which will do several languages including C and C++.

If you want a free version of C# try Sharp Develop although last time I checked the debugging wasn't so hot.
posted by plinth at 6:32 PM on December 30, 2005


Pretty much any popular language you can thoroughly use on windows using 100% free/open source compilers and libraries: perl, python, php, ruby, C, C++, etc. So don't listen to anyone that says you should switch to linux because all the same tools are available under windows. And besides, like everyone has already said the best way to learn is with a good text editor, a book, and a command line -- and windows has plenty of good text editors (I prefer UltraEdit).
posted by Rhomboid at 6:33 PM on December 30, 2005


I used Petzolds Programming Windows, and it taught how a windows application really worked, by making you implement a message loop, etc, by yourself

Which is a pointless waste of time if you're not going to be writing win32 programs in C all the time. I mean most programs (even win32) programs just 'run', and in some cases register callbacks, which is what the win32 message loop actually is. I find the win32 API fun for some low level stuff, but for actually drawing windows and GUIs? Stay away, you'll end up spending 10 times as much time as you would with a 'real' API like swing implementing WINDCLASSes and god knows what else.

The designers of the original win32 api made lots of people think programming (especially programming in C/C++) was way harder then it actually was. Then they gave us Visual Basic, which was so limited it was laughable.

The world would be a lot better if they'd created an actually useful C/C++ API to use windows with rather then the crap that was VB.

There's no reason for a new programmer to learn how to do anything with win32.
posted by delmoi at 6:35 PM on December 30, 2005


properly defining the problem domain is also a trait of good programming.

This is such a better response than "Shut the fuck up." Thanks for saving me from that. Python is easy to use for Windows development, but the Express version of VS.NET and C# would probably be quicker to make magic happen on Windows.
posted by yerfatma at 6:44 PM on December 30, 2005


drscheme
posted by paradroid at 6:48 PM on December 30, 2005


Which is a pointless waste of time if you're not going to be writing win32 programs in C all the time.

I disagree. Knowing how windows (and windows applications) work under the covers makes it much easier to understand what is happening when something goes wrong, and helps you figure out what a framework is doing when it stops doing things for you and starts doing things to you.

For .NET development, I think that its even more interesting doing a project without the IDE, because VS does a lot more for you now than whatever the IDE was called back when everyone was writing straight C (I think it was "programmers workbench", but I was using Borland back then, so who knows).

There's no reason for a new programmer to learn how to do anything with win32.

If I were learning how to program on windows, I would agree with you, and start straight into .NET.
posted by stupidcomputernickname at 6:49 PM on December 30, 2005


Installing Cygwin will give you a Unix like environment under Windows.. for free. And to answer your question, it comes with every language under the sun.. C. C++, Python, Ruby, Perl, etc.
posted by cowmix at 7:20 PM on December 30, 2005


The "hot" languages right now are Java, C#, Python and Ruby. Java and C# are close enough that learning one will 80% of the way to knowing the other. Java is more established, more portable and considered less "evil" (by people who ascribe morality to programming languages). C# is newer and fixes some Java flaws and is very much a Microsoft product - which is great if you want to write apps for Windows. It has less library support than Java but is (my opinion) more "fun." Both are statically-typed modern OO languages with plenty of books and online info available.

Incidentally, Visual Basic .Net is semantically nearly identical to C# with friendlier syntax (words instead of symbols). You might find that more pleasant than Java or C#. Ignore detractors who poo-poo VB. It's a powerful, modern OO language, especially in its .Net incarnation. A lot of the venom, you'll notice, is directed at the IDE and/or users of the language rather than VB itself.

Since you're new to OO, you should really pick up a copy of "Object Oriented Software Construction" by Bertrand Meyer. He talks a lot about Eiffel (another OO language) but most of what he says can be applied to other languages.

Python and Ruby are dynamically-typed "scripting" languages (where "scripting" is a synonym for "slower than C++ but fast enough"). Python is the more established of the two but Ruby is burning hot right now due to Ruby on Rails (a web app framework). They're also close enough (to each other) that learning one will get you a long way to knowing the other. Ruby is semantically "purer" but Python has nicer syntax. Choose the one you prefer.

Best bet: learn C# (or Java) AND Python (or Ruby).

If you're just looking to play around, you might also consider Procesing (basically Java plus some support for graphics and animation), JavaScript (write some widgets in Konfabulator, available for Windows now) or even Rebol. Al three will let you get started quickly producing graphically "whizzy" apps which can be more fun than simple text processing.

Yeesh, apologies for the length of this.
posted by zanni at 7:32 PM on December 30, 2005


I would highly recommend picking up a good text editor and learning it well. A text editor will let you do pretty much any programming language out there so having this is a good start.

I prefer Vim, but there are several good ones, jEdit, EditPad Lite and so on.

Once you have that, I would then pick up one of scripting languages, Perl, Python or Ruby. All of them have thier plusses and minuses but I also prefer Python.

Then just Google for whatever language you pick and find the tutorials. Ruby has the Try Ruby site with a tutorial that runs right in your web browser. Python has it's own tutorial which is very good.

All of the above is free and none of these are learning languages either, you can take what you learn and complete real programs or get paid for doing it too.
posted by thecrypto at 7:47 PM on December 30, 2005


Whatcha interested in building, pracowity?
posted by ph00dz at 8:01 PM on December 30, 2005


I program for a living and my next project is to read Practical Common Lisp and follow along with Lisp-in-a-Box. It looks like a lot of fun and will probably stretch my mind quite a bit.

If you want to learn Ruby, check out Why's (Poignant) Guide To Ruby, which is simply delightful.
posted by evariste at 8:11 PM on December 30, 2005


As for editors: I use vim in cygwin primarily, but you can also use gvim and cream, which are Windows ports. I also use Scite a lot, it's a very nice editor.

It looks like I'll be learning emacs for my upcoming lisp adventures, since that's the editor included in the Lisp-in-a-Box.
posted by evariste at 8:14 PM on December 30, 2005


Emacs. Emacs. Emacs.
posted by bshort at 9:07 PM on December 30, 2005


If you want to learn C++ there's the free DevC++ IDE for Windows based on MinGW. It's not bad as an IDE, though I prefer to use a stand-alone editor and the g++ compiler and gdb debugger from the command line (g++ and gdb available after you've installed DevC++, by adding the install directory to your path.)

Lisp or Python would probably be more fun.

Learn emacs or vi too -- either editor will give you cred.
posted by anadem at 9:20 PM on December 30, 2005


If you want to learn Ruby, check out Why's (Poignant) Guide To Ruby, which is simply delightful.

I second, third and fourth this. Even if you don't care that much it's a blast to read.
posted by Kickstart70 at 9:35 PM on December 30, 2005


Come'on ... I dare ya ...
posted by RavinDave at 10:37 PM on December 30, 2005


I'll recommend Ruby and in particular Chris Pine's Learn to Program tutorial as a good introduction. Download the one-click installer for Windows and hack away with a text editor (I prefer Textpad).

Python is just as good and here's a fine tutorial. You'll have to decide which language fits your style better.

I've heard wonders about Squeak, a descendant of Smalltalk.
posted by tremendo at 1:50 AM on December 31, 2005


ph00dz asked the right question. Whether you'd like to write for the web, command line or windows desktop should be the most important thing here. My take:

Learning a fantastic language, writing "helper" scripts that do useful stuff for you (eg screenscraping a website, sending emails): Python

Solid OO languages for writing Windows desktop applications: C# or VB.NET

Solid OO web languages: C#. VB.NET, Java

Not a great language to learn, but you can throw your website on any cheap $10 webhost out there: PHP

Get up to speed on programming patterns, too. They can be very useful.
posted by Leon at 4:00 AM on December 31, 2005


Don't listen to the code-ninjas who program for a living. They think installing and getting used to the most competent and flexible tools is trivial. For you, it probably isn't, and that's not where you want to get stuck.

That means you should not start fiddling with emacs, cygwin or vi. You want to get started coding, beginning with learning the syntax and concepts of a language. Later you can expand your development environment and learn about how to interact with external packages and OS functions.

I recommend taking up Python and use the IDLE environment, which ships with your Python distribution. The language is smart, friendly and commonly used.

It is very well documented, but for introductory stuff it is still a very good idea to get a book. Books typically cover more of the things that are not strictly programming, such as how to get the development environment up and running and how to relate to object orientation.
posted by springload at 5:51 AM on December 31, 2005


Visual Basic IS a good language and one that you can start creating good programs in quickly. If there's a student in the house you can search the web for academic software and get it at a pretty good discount. Not free, but worth it for the productivity you'll gain. Runs verywell on my old machine, a Pentium IV 1.5 Ghz, too.
posted by JamesMessick at 7:34 AM on December 31, 2005


It is very well documented, but for introductory stuff it is still a very good idea to get a book.

Speaking as someone who is currently teaching himself Python, I'd disagree with the assertion that Python is well-documented, depending on what you mean by 'well-documented'.

The barrier I'm running into time and again is a mystefying lack of easy to follow, basic building-block examples to achieve common tasks in Python. Perhaps I've yet to discover the magical repository of these examples, but thus far I'm having to rely on asking more basic 'how do I do this' questions of the Python community than I feel I should, simply because most of the online documentation seems to assume you have some familiarity with the language already.

For all the bashing PHP gets (and lord knows why, it's actually a very complete language as far as web scripting goes), if you want to see extremely useful online documentation, spend some time looking through the docs on php.net. In particular, the user-submitted code fragments and suggestions are often invaluable, but even the standard of the docs themselves is much higher than I've encountered for Python, or for Ruby, for that matter.

This is not to say Python isn't a great language -- I'm enjoying implementing what I've learned to do in it, but the documentation is its major weakness as far as I can see.
posted by planetthoughtful at 7:34 AM on December 31, 2005


JamesMessick writes "Visual Basic IS a good language"

Bad idea. VB's come a long way, but its still BASIC; additional language constructs feel bolted on, because they were bolted on. For doing most real-world programming (other than text processing (Perl), AI (smalltalk), or page-layout (postscript)), you're usually going to be using a "C-like" language; C (obviously), C++, C#, Java, and javascript and php all have a similar look and feel, use the same operators to mean the same thing (except for C++'s overload of the shift operators for stream output), and have pretty much the same operators with the same associativity and precedence. BASIC doesn't.

Learning BASIC first means doing a lot of "un-learning" when you (inevitably) encounter any of the many things VB won't do.
posted by orthogonality at 10:26 AM on December 31, 2005


s/smalltak/LISP
posted by orthogonality at 10:27 AM on December 31, 2005


Yeah, I wouldn't recommend that anybody learn a BASIC variant. The funny thing about BASIC is that it has all of this verbose syntax to make it "easier," which in the end, just makes it more difficult (in my opinion.) Of course, I never thought that Macs were "easier" to use then PCs, so your milage may vary.

I would say "learn C" or "learn C++." They're both excellent languages, and at some point in your career, you should learn one or both of them. There are lots of good C/C++ jobs out there. However, they can be difficult to learn, and you will wind up developing skills that you will never use unless you decide to make C/C++ your career path. So at some point, you should pick up them, but I wouldn't choose either for a "first language." (Even though C was my first Real Language)

People just love to sing the praises of this Ruby thing, and I'm like, "whatever." How often do you see job openings for Ruby programmers?

Python may be good, although I don't really know much about it. Generally, I dislike scripting languages, but that's really a matter of personal taste.

Anyway, for a first language that will teach you all the necessary fundamentals, I would say go with C# or Java. They are excellent languages that will give you all you need to write good OO code. They both have friendly visual development environments, tons of code examples, and forums that you can post questions on. Learning these languages will also open up a whole lot of good job possibilities for you. I lean towards C#, but I wouldn't tell anybody "Don't learn Java." And yes, the skills are easily transferrable between the two.
posted by Afroblanco at 12:08 PM on December 31, 2005


Agreeing with afroblanco here: if you learn C++ first, it's difficult, but every C-like language you learn after is easier. I got Sun's Java certification without ever compiling any Java: Java was just, to me, a bad and limited C++ implementation.
posted by orthogonality at 12:20 PM on December 31, 2005


xemacs + haskell (ghci)
posted by cytherea at 2:09 PM on December 31, 2005


People just love to sing the praises of this Ruby thing, and I'm like, "whatever." How often do you see job openings for Ruby programmers?

Not too often. How often did you see job openings for Python programmers as recently as two years ago? Not too often.

As for the original question, Xemacs + Ruby. Other people have already pointed you to the useful starting docs. Participating in the Ruby Quiz of the week (and studying others' answers) is a good way to learn fast.
posted by Zed_Lopez at 4:10 PM on December 31, 2005


> Come'on ... I dare ya ...

I've done assembly.
posted by pracowity at 5:33 PM on December 31, 2005


> I program for a living and my next project is to read Practical Common Lisp

And I've done Lisp. Prolog. Pascal. Fortran. Basic.

Most of these answers are great, thanks.
posted by pracowity at 5:44 PM on December 31, 2005


> Whatcha interested in building

I don't know yet. First, I want to build a "Hello, World" and a bunch of other examples for learners, and then I'll start thinking about a project.
posted by pracowity at 5:55 PM on December 31, 2005


> People just love to sing the praises of this Ruby thing, and I'm like, "whatever." How often do you see job openings for Ruby programmers?

Not often at all, but seeing the growth I've seen in the last 18 months, I'm hopeful. *And* I'd love to be able to pull this quote up in a couple of years and rub it in your face! :)

Anyway, the poster said was interesting in learning new programming language, expressed interest in OO, and I maintain Ruby is a great alternative.
posted by tremendo at 10:50 PM on December 31, 2005


You said: I haven't programmed in years and I'm thinking about starting again and learning a current language.

I was in the same situation about two years ago. I stumbled upon Python by accident and never looked back. Within a year, I wrote (mostly on evenings, on-and-off at that) an application called RUR-PLE where PLE stands for Programming Learning Environment. Since you've done some programming, it would not be what you are looking for. However, you might want to have a look at it (screenshots at rur-ple.sf.net) to see what can be done by a hobbyist learning Python.
posted by aroberge at 10:00 AM on January 1, 2006


orthogonality: Most AI research is done with Java these days. It really makes no diffrence what programming language you use. You could even do it with visual basic! There are lots of AI libraries you can use with java though (like weka, JavaNNS, and on and on)
posted by delmoi at 3:43 PM on January 1, 2006


Also, the "new" VB isn't really even the same as the "old" (non-dotnet). You can actually do "normal" things like inheriting classes and such. Not that I would recommend it, it's nothing more then a sop to all the VB coders out there who were going to be obsoleted by C#. Coding in VB 6 was torture :)
posted by delmoi at 3:47 PM on January 1, 2006


« Older I recently noticed that an Ira...   |  Looking for foreign words for ... Newer »
This thread is closed to new comments.