Join 3,415 readers in helping fund MetaFilter (Hide)


Programming languages for beginners
April 9, 2004 8:53 AM   Subscribe

Near absolute beginner looking for a programming language with a small learning curve to make basic utilities/apps for my personal enjoyment. I've taken a few programming courses in HS and so am familiar with *basic* concepts but am pretty much ignorant other than that. I've googled but choosing a language/environment is incredibly daunting with the diversity out there.

Criteria:
-Must be able to make Windows GUI apps.
-Must be able to use sockets easily. I plan on making both client and server apps in the future.
-Must be able to manipulate files easily.
-Must be able to easily utilize common file formats like jpg, gif, wav, and mp3.
-Would like to compile programs into stand alone EXEs though the inclusion of a runtime DLL would be okay.
-Would love to be able to use DirectX audio plugins in my programs someday but definitely not a requirement.
-Online tutorials and resources geared towards the beginner level would be a huge plus.

Again the emphasis is on ease of use and a low learning curve. What am I looking at here? Visual Basic? Some obscure derivative like Euphoria?

Should I be looking at Delphi? I just really don't know where to start.
posted by yangwar to Computers & Internet (28 answers total) 1 user marked this as a favorite
 
I used to love Delphi, but no. It's better than Visual C++, but it's not so well supported anymore, and doesn't have nearly the community that other languages have.

I'd go with C# - Microsoft's flagship .NET language. It's pretty speedy, there are some free IDEs and stuff, good documentation. Tutorials abound. The compiler and runtime is free, and under windows there are tons of libraries out there. It does UI apps just fine and works great for web stuff if you go that route.

It's a well-thought-out language, too. Perl can be chaotic, C++ has a bit of a learning curve. I program in Java professionally but it's not what I would want to learn for my own entertainment.

I don't normally recomment books I haven't read, but Bruce Eckel's "Thinking in Java" was excellent and I've heard the entire "Thinking in..." line is great as well. He has a Thinking in C#" book, so you might consider it.

And this is coming from a Linux user, too so I'm not a Microsoft fanboy by any means. (And there's a open source .NET runtime that works in linux called mono if you ever want to make the switch.)
posted by mragreeable at 9:03 AM on April 9, 2004


Visual Basic is probably the easiest programming language for making programs with GUIs that do stuff. It is very easy to learn. You can also use the .NET libraries with Visual Basic, so that would also you to do client server apps and other such things.

(though, i must say, i find visual basic to be an ugly, ugly language.)
posted by chunking express at 9:18 AM on April 9, 2004


Not to be harsh but if you're doing anything that heavy, yangwar, you should invest the time to learn C++ and do it right. Take a look at the tutorials on a site that helped me way back when: WinProg.

Good luck.
posted by Ryvar at 9:25 AM on April 9, 2004


The company I work for makes a programming tool that fits your description. It's called REALbasic, and it's a beginner-friendly GUI-builder app in the tradition of Visual Basic and Delphi. It's a bit easier to use than Visual Basic (or at least that's what the ex-VB users who buy it tell us) and it compiles single-file executables. The "Pro" version also lets you cross-compile to Linux or Mac OS. It is designed around a GUI window layout tool. It includes TCP and UDP socket classes, classes to manage various internet protocols, and a "ServerSocket" class that automates the process of listening for and serving multiple connections on a single port. It has file I/O classes, with built in support for various common image and audio formats.

It's about as beginner-friendly as a programming tool can be. Its editor auto-completes words as you type them, and there's a "tips window" that shows you the definition of each method or property as you type it. You can start from the outside-in, laying out an interface first and then slowly adding bits of code as you go.

I've worked here for three years, love the product, and would be happy to discuss it at greater length in email, where people won't mistake me for a salesperson. (No, really: I'm a programmer, a C/C++ kind of guy; but since coming to work here I've been converted, and now I do all my free time programming in REALbasic because it's more fun.)
posted by Mars Saxman at 9:29 AM on April 9, 2004


Your criteria "absolute beginner, small learning curve" and the list of required features do not match. I'm guessing from the list that you'll be doing all your development for Windows, so your best bet if you want to do those things is to get a copy of Microsoft Visual Studio .NET and spend about a year getting good with C++ and the MS APIs for audio, video, networking, etc.
posted by Voivod at 9:29 AM on April 9, 2004


I recommend Borland C# Builder, you can get a personal license for free. Similar to Delphi GUI.
posted by tcp at 9:43 AM on April 9, 2004


Tcl/Tk and probably Perl/Tk have most of what you're looking for and are significantly easier than lower-level languages like C++ and Java. I'm not sure you can make a standalone .exe with them though. I think socket stuff is easy and Perl would be a great thing to know anyway.

VB might just be the way to go. It's really simple to make the GUI and the IDE helps you with the code. I don't know about the sockets. I'd guess that this is your best bet if you mean what you say about your requirements.

Java, while having a steeper learning curve, will make you a "real" programmer in that your knowledge will be easily transferrable to other languages.
posted by callmejay at 9:47 AM on April 9, 2004


A piece of advice from a beginner too, be sure to learn about data structures and algorithms. There are a few books online, for free no less, that will get you started.

The reason? In an interview, I was told, but already knew this, that the aforementioned subjects were typically missing in many self-taught programmers knowledge and/or experience.

Just my two cents.

Please continue with the excellent suggestions.
posted by grefo at 9:56 AM on April 9, 2004


I agree with Voivod. Your list of features is much more advanced than someone with no experience should tackle. Having said that, I would suggest following the C# / .Net route. If you can afford it, I would highly recommend taking some intro course at a local community college to help you with the learning curve.
posted by falconred at 9:59 AM on April 9, 2004


Python. period.
posted by five fresh fish at 10:03 AM on April 9, 2004


i will take the (apparently unusual) step here of promoting C as your language. i don't think you should do all of the things you ask about in C (because i don't think you appreciate the challenge of them, as others have already said), but C is fairly straightforward and Java, C++, and C# are derivatives (and hence familiar once you program in C).

if you mainly just want to "do stuff" as you program, i would probably recommend RealBasic over Visual Basic. The people at RealBasic probably have much more incentive than does Microsoft to make their product easy to use, as MS simply wants Visual Basic to represent their brand in the lightweight language arena. Python is good too, as fff notes, but is probably not as e-z as the two Basics.
posted by moz at 10:14 AM on April 9, 2004


Just buckle down, take the time, and learn C++. You'll be better off for it.
posted by bshort at 10:42 AM on April 9, 2004


I've learned both java and C++. I'm curious what the difference between C# and java/C++ is?
posted by jmd82 at 10:43 AM on April 9, 2004


Python would be a great choice. Short learning curve. Does Windows GUI and everything else you mentioned. There is a lot of code lying around the net for reference. Plus a ton of libraries to do dirty work in many niches (HTTP, encryption, XML, whatever).

And it's free. Why bother buying VB.NET or MSVC?

I think C++ would be a really poor choice for a first language. Lotsa complexities and OOP to soak in before getting anything done. Especially if you're making "real" applications.
posted by turbodog at 11:13 AM on April 9, 2004


vb or c# are the obvious choices, realbasic sounds like it might be ok too from the comment above.

c++ is a very powerful language, but because of backwards compatability issues it's also very easy to do stupid things in it. not a good language for learning. and i wouldn't bother with c when you can start with an oo language (i disagree with moz, in that people who try to program in c with java or c# are going to make a mess - they may look similar, but they have different philosophies (unless you're a pretty damn good c coder, in which case you wouldn't be asking our advice))

python is a nice language but isn't as closely integrated to windows as a ms product would be. perl is similar to python, but with a wider variety of syntax, which can make it confusing. java is ok too, but if playing nicely with windows is more important than free then c#/vb win out.

your list is a bit innocent and ambitious :o) sounds like trying to run before you can walk. if you get frustrated and end up wanting to explore what's out there rather than make the next windows killer ap, you might try plt scheme, ruby or python - a bit higher on the intellectual cool scale than the very mainstream stuff. and one day you may be lucky enough to learn haskell, if you find the true path.

alternatively, for what i'm guessing you want to do, you might be able to get quite a way with these fancy macromedia flash thingies that the cool young kids keep wasting time on. if i were starting out again, i might be tempted along those lines...
posted by andrew cooke at 11:15 AM on April 9, 2004


If you want to get up to speed making GUIs quickly:- Visual Studio.NET with VB or C#.
If you want to stick to Windows and get the most out of .NET:- C#.
If you want to learn a language that will be in use for years to come (in some similar form or other) and which will help you learn all about correct OO programming and design:- C# or Java.
If you want to design and build large n-tier systems that are maintainable and don't end up as spaghetti-code:- C# or Java.
If you want to be kinda-sorta-cross-platform, with only moderate headaches:- Python or Java.
If you think you'll be writing a lot of scripts, as well as compiling executables:- Python (forget all the other scripting languages, they're all crap in their own special ways).
If you need to be able to write small applications that are efficient and you don't want to spend a lot of time coding:- Python.
If you want to write lots of code for coding's sake and prove how hairy-chested you are, or if you're convinced your application really does need super-careful memory management or real-time precision:- C++.

That'll do for now... I'm sure plenty of folks might disagree...
posted by normy at 11:24 AM on April 9, 2004


I would vote for C# -- it shouldn't be much more difficult to learn than VB, and the syntax is much closer to C/C++ (or Java), which will probably be languages you'll find useful to know sooner or later if you go deeper into the whole programming thing in the future. There's also no shortage of books and other documentation available right now to help you learn, since it's sort of one of the hot languages of the minute.
posted by m-bandy at 11:42 AM on April 9, 2004


Please check out Squeak before you do anything rash.
posted by electro at 11:49 AM on April 9, 2004


You said you already studied some programming in high school. I'd guess that means that you either learned Java, BASIC, or C/C++. (If your school district is really poorly funded, or you went to high school before 1996 or so, it might mean that you learned Pascal, but I'll write off that possibility for now). As the comments above show, all three of those form the basis of an integrated development environment that will let you easily create and manage GUIs. Go with what you know; then learn more of it.

Hold off on buying books for now. Whatever IDE you buy might well have all the documentation you need to get started. (I seem to recall that Visual Basic has some very nice documentation).
posted by profwhat at 12:00 PM on April 9, 2004


I vote for Python.

While you may enjoy learning C++, it's neither quick or easy to learn. C# is a little simpler, but still, you said these were apps for your own amusement - why let the tool get in the way of that. You can learn Python very quickly, it's free, powerful, and there're a ton of Python programmers and resources for any help you might need.
posted by drobot at 12:01 PM on April 9, 2004


The C/C++ set of languages are among the last languages an "absolute beginner looking for a programming language with a small learning curve to make basic utilities/apps for my personal enjoyment" should choose.

For starters, they are very poorly designed. They encourage poor programming practices. They're too easy to make mistakes in. They encourage the use of trickery.

A beginner should be looking at languages like Python, Smalltalk, Squeak, Haskell, Guile, Eiffel, Modula, Pascal, Sather. These are all languages that are well-designed.

Of them, I think Python and Squeak are your best choices. Python is the better-supported, with a superlative user group and a ton of libraries.
posted by five fresh fish at 12:02 PM on April 9, 2004


Yeah, everyone else has listed lots of good suggestions, but I'm going to strongly vote against C, C++, and Perl. They just do not match your beginner/easy requirements.

Your desire to manipulate common file formats and such should lead you towards a language with lots of available libraries. VB and C# have tons of available components like that, but I'm not sure how many are freely available and easy to find.

I've never used it, but I still think Python is definitely your best choice. It matches most of your requirement pretty well. I'm really going to have to learn it myself one of these days...

One caveat would be that GUI development will probably be more difficult to get up to speed on than VB or RealBasic, which would be my second choice. But you will pay for the ease of use. So maybe you should try out Python first for free. If it doesn't seem to work well for you, move to VB or RealBasic.
posted by whatnotever at 12:42 PM on April 9, 2004


andrew: (i've seen you from lambda the ultimate, but i don't really post there.)

i pick C only because its featureset is smaller. i hate that programmers get taught to learn Java first at my old college, because the first thing you have to be taught is to type this stuff in first, ok, now ignore it because it exists just to satisfy the gods of Java, here's where you can type in something that prints out "Hello world". so if you ultimately want to learn something C-like, i think you should learn C first. though the other languages you mention do have different philosophies, coming to them later doesn't mean you are forever shackled to the C way. but that's just my opinion, and we are entitled each to our own. (not that the person asking necessarily wants to learn a C-like language...)
posted by moz at 1:17 PM on April 9, 2004


What if you want to write a text editor?
posted by bingo at 1:24 PM on April 9, 2004


Don't listen to anyone who tells you to learn C++ or even Java for any of this. Perl, Python, Ruby, or Tcl are all good ideas - there are bundling mechanisms to make an exe with the script and interpreter bundled together, no dll or anything. Scripting languages are for exactly what you're trying to do.
posted by abcde at 5:50 PM on April 9, 2004


Lots of resources on the web as to why Python is a cracking first language. Here's one.
posted by nthdegx at 3:53 AM on April 10, 2004


moz: hi! maybe you're right. my strong reservations are against c++ or claiming that if you know c you can program in java, not that c is a bad language to learn - i learnt non-oo stuff first, and i don't think it hurt. i kind of assumed that you might as well get oo from the start, but really i can't justify that... and i guess it helps to know something about pointers, memory management. heh. maybe you should start with assembler.

apropos nothing, i'm hoping to start writing an interpreter for a "new" language next week when i'm off-shift, which, of course, will be the best language ever and make me hugely famous - my big sticking point at the moment is what to call it. and it has no support for oo at all (but then if you're a lambda reader you could have guessed that ;o)

bingo - text editors are best written in elisp.
posted by andrew cooke at 6:04 AM on April 10, 2004


Well, I'm currently looking into Python, RealBasic, and VB. Thank you all for your suggestions. You've given me a great place to start researching.
posted by yangwar at 6:51 AM on April 10, 2004


« Older Would I be crazy to plop down ...   |  I have quite a few silk blouse... Newer »
This thread is closed to new comments.