Good beginner programming language?
November 30, 2005 7:22 AM   Subscribe

Going back to school to learn some programming but lost in a sea of language choices and preferences. Help.

I've been a designer for 15+ yrs (desperately trying not to date myself) and would like to go back to school to learn programming. I've built my share of websites (both flash enhanced and e-commerce) but still consider myself a complete novice when it comes to scripting. In order to better communicate with my design team, I've decided to put my left brain on hold for a bit and go back to school, but I am lost in a sea of language choices. I use Flash so have been exposed to Actionscripting (though don't know it) and I've also dabbled with Java, Perl and a couple others but only in relation to specific jobs I had contracted - and always while working with qualified programmers.

What is a good 'base' to start with? I've heard that Javascript and Actionscript are not that far removed and as I use flash fairly frequently, maybe java is the way to go - I just don't know. I wish I could be more specific as to my end-needs but jobs run the gambit here and I'm just trying to stay informed. Thanks to all for any advice you can give.
posted by j.p. Hung to Education (35 answers total) 3 users marked this as a favorite
 
Without a doubt.. Python.

I had not coded a app, on my own, for like 15 years. I had to create an app that FTP'd files, resize images, update a database, etc.. I tried every language.. no dice.. all of them were a big pain in the ass.

I tried Python.. had it done in 8 hours..

Oh what a joy.
posted by cowmix at 7:35 AM on November 30, 2005


Well, I don't use Java personally, nor have I ever learned it, but it is a good, solid programming langauge from what I've been told. You'll probably get several people recommending something like Ruby or Python [on preview, crowmix], which are both fairly powerful languages. Have you tried looking at Ruby On Rails? It's a good, easy to use web programming language.
posted by KirTakat at 7:38 AM on November 30, 2005


can you describe the kind of web site you want to develop?

i'm very much at the programmer end of the programmer/designer spectrum. i work on projects that typically involve a lot of interface work with databases, and a lot of "business logic". "enterprise" is a word that i hear fairly often. so the web/presentation part is a fairly small part of the final product.

java extends down to simpler sites that still require a fair amount of database work (eg mefi), but there things overlap with php, which dominates that market.

and then there are sites that are largely static, or which use off-the-shelf components (typicall written in php or java) where you're more concerned much more about presentation. there, the emphasis is more on flash/dhtml/ajax etc.

and these different levels can be present in one project. so at the moment, for example, i'm working on interfacing to a major database (many terrabytes), coding in java, but the main user interface is ajax with ruby on rails (server) and javascript (client - so you need both ruby and javascript for rails based ajax).

so really it depends a lot on what you want to do. from your description, it sounds like you're much more at the designer end of the spectrum, so should be looking at flash/actionscript/etc or ajax.

there are also tools that you use every day just to get the job done. those include sql (if you work with databases) and either python, perl or (rarely, i suspect) shell scripting. you'd do well to become fairly proficient in one those as well, whatever else you choose.
posted by andrew cooke at 7:40 AM on November 30, 2005


arrrgh. my second paragraph ("enterprise") should include "using java"!
posted by andrew cooke at 7:41 AM on November 30, 2005


When you say 'designer', do you mean website design? Your question implies as much, but then again there wasn't exactly much of a market for Web design 15+ years ago, so there must be something else too. Application GUI design? Graphic design for print media? Other? Just curious :)

Anyway, regardless: Python is excellent, like cowmix said. It's pretty easy to pick up, especially if you have some very basic exposure to programming concepts like loops and variables, which I assume you do if you've had to dabble in Java/Perl/etc.

It can be used in just about every place you can imagine--even in my own limited experience, I've used it for command-line scripting, various-sized Web applications, and embedded systems.

That said, it's not a "big industry player" like Java, but that's in the same way that Microsoft is the OS industry giant even though its products are (generally) crap compared to Apple the underdog. So if you're looking for something that you'll be able to use in communication with a lot of (randomly chosen) collaborators in the market, Python may not be as good a choice--but if all you really want is the ability to better communicate with programmers on their own ground (as opposed to learning a highly marketable specific language) then it's fine.
posted by cyrusdogstar at 7:50 AM on November 30, 2005


If you just want to learn programming, I think you can't do any better than Python. Although I also think that other languages (Java) are more marketable, and you already know which ones are most relevant to your situation. Probably JavaScript, but my God, I would not want to learn programming in JavaScript.

decided to put my left brain on hold

You mean your right brain, yes? Although Wikipedia claims there is little justification for this dichotomy.

posted by grouse at 7:51 AM on November 30, 2005


Addendum, my last sentence as written is rather contradictory. Sorry about that. What I really mean is that if you need the ability to interface with programmers in a highly specific manner, you may be better off with a more widespread language; but if you 'only' need a more general grounding in programming ideas, one that will allow you to grasp most languages thrown your way, Python is still an excellent choice.

Also, sort of what grouse said :)
posted by cyrusdogstar at 7:57 AM on November 30, 2005


Response by poster: Thanks, the input has been great. Unfortunately, I'm not able to parse this down to a particular need, however we do a lot of e-commerce type stuff. I am primarly a designer but am often put in the position of acting as a liasion between my clients and programming staff. In my freelance life, I am often asked to do seemingly simple things like, create mailing lists, basic forums and some multi-media plug-ins. Not knowing languages does make this difficult sometimes as typically, I just want to tweak here and there. I guess that's where I'm coming from more than anything.

I'd like to be able to learn a language that will give me enough basics to be able to look at most 'code' in general and be able to at least identify and modify as needed. Is this helping??
posted by j.p. Hung at 8:05 AM on November 30, 2005


ah, ok. in that case python. that's what i meant by "tools" and what most others are talking about too.
posted by andrew cooke at 8:08 AM on November 30, 2005


Response by poster: Python certainly seems to be the consensus. Thanks to all of you for taking time out to help!!!
posted by j.p. Hung at 8:11 AM on November 30, 2005


If you look at the current vogue server-side development languages, you might be able to choose something by process of elimination: C#, Java, Perl, PHP, Python, Ruby.

C# - Strong contender if you work in Microsoft server environments (perhaps your only contender if you work in Microsoft server environments.)

Java - Sounds like you've had some exposure; if you work in enterprise environments this is a strong choice. Be warned though, what many think as "enterprise" isn't. Java is not a good "pick-up" language.

Perl - Classic language. Some consider the syntax a bit esoteric; I haven't found my mountainous knowledge of Perl immediately transferrable to other environments (save perhaps Python.) I find my colleagues who know Perl don't talk about it a lot.

PHP - Everyone's favorite Hypertext Preprocessor. I'll be controversial and say that despite its popularity its days are numbered.

Python - If you like John Cleese or are John Cleese, this is your language. People who like tabs like Python. Python is a good choice, buuuut

Ruby - Teh hawt new environment; the scuttlebutt is Java's 10 year reign is over and Ruby will be the new king (though butts are known to lie.) Rails has really invigorated the language; if you learn rails, you're not only picking up a new language, but an entire framework whose concepts will be applicable to any language.

[On preview, you'll regret Python! Ok, fine, you probably won't...]

posted by Loser at 8:14 AM on November 30, 2005


Response by poster: Thanks for turning my world upside down Loser...lol. Really though, that's a major help in figuring this out. Thanks.
posted by j.p. Hung at 8:28 AM on November 30, 2005


Response by poster: Anyone here have any experience with Actionscripting? It's used extensively in Flash. I typically have been able to find decent open source scripting for my flash projects but would like to be able to do more on my own. Would learning a language like Python or others mentioned be a good groundwork for learning AS??
posted by j.p. Hung at 8:31 AM on November 30, 2005


this is probably a bit out of date, but might help you, j.p.
posted by andrew cooke at 8:42 AM on November 30, 2005


Let's play our game...

If you're looking to better manage your development team, why not take a look at the languages they're using primarily.

If you're just wanting to establish a basic understanding of syntax, programming conventions, limitations and patterns, then go with something basic. PHP or Perl would be my suggestion for you.

C#/ASP.NET is definitely what you'll need to do if your team develops primarily on Windows machines, as Loser mentioned. It has a sharper learning curve, since you may find yourself learning a lot of Visual Basic to interact with ASP, and none of the three are very forgiving when it comes to stupid mistakes.

Ruby (on Rails) is the last thing you want to look into. It's a simplified psuedo-language, created by 37 Signals to make web application development completely simplified. "Learning" it will do nothing, except to show you how many switches you can flip and pieces of code you can paste to have an entire, simplified web application built. It will not teach you enough in regards to the basics of programming at all. In fact, RoR is heavily focused on object-oriented development and makes a lot of shortcuts in an effort to further simplify things for experienced programmers. It's fun to "build" an entire weblog in 2 minutes "from scratch," but a terrible "language" to learn on.

Python is charming and my personal exposure to it is limited. Suffice to say, I'm not aware of too many enterprise-level (or othersize) applications that have been developed in a web-based environment. That's not to say that they don't exist, but that's not Python's primary focus, really, and it's not what your developers are coding in.

Perl is every Perl-programmers catch-all, do-all language. It's very flexible and widely used on the web. Syntax and a slightly higher learning curve may catch you, but you'll take something for it.

Now, my personal favorite is PHP. I personally believe that it's foolish to pronounce its death when certain companies have such a vested interest in it. Regardless, you'll hear plenty about how it's not a "real" language. Meh, whatever. Tons upon tons of sites use it, including nearly all the major blog and journaling tools. Regardless, PHP will generate results quickly and reinforce your learning of basic programming concepts.

BUT, here's what I'm going to suggest. It'll be something radical, but I think there's a damn good chance this will help. Start with ActionScript. Yes, that's right. When I was dabbling in Flash, I purchased ActionScript: The Definitive Guide. That was years ago, when ActionScript was just starting to develop as a true language.

In that book, the author takes the time to quickly but completely explain all the things you'll need to understand when it comes to basic programming: Variables, functions, methods, variable scope, conditionals, loops, arguments, operators and all those other programming devices. Since I was in Flash, I could simply whip something up in A/S and see a result instantly—no need to compile or upload anywhere or install anything else.

I continued to build my knowledge up through use of that book, and was pretty well surprised at how much of that knowledge transferred to when I took to learning PHP. Since you're pretty heavily vested in Flash, you might find that the perfect solution: Go through the motions with an excellent A/S book (like something by Colin Moock) and then move on up if you need to. It will let you dabble and do what you want and learn what you need to to discuss things at a basic level, but most importantly, it will be a fun way to get the fundamentals down before jumping into a more serious web language.

Note, of course, that finding an ActionScript class may be something of a joke... Perhaps start with the A/S book and some self-study before throwing yourself into another basic programming class. Either way, you'll get there if you're simply looking on ways to better communicate and understand, and not on the differences between web apps you need to actually build.

A few other notes: JavaScript is not Java. One is a browser-based scripting language and the other is a fully object-oriented programming language, respectively. JavaScript is an amazing tool for helping us developers extend our control over the user experience once the page has been sent to the browser. In the sense that we can only control what the users see in singular spurts of activity, and further, can only validate their actions that way, (ignoring AJAX for now, which is the revolution to some, but not a concern to you at all) it's of vital importance to have a tool that lets us blindly build for after the page has been sent to the browser. JavaScript lets us do that. It does not sufficiently interact with a database or generate complete web results or do anything useful, really, on the server side. Unless you're sadistic.

Java, on the other hand, is a full-on true language, with a nasty learning curve and a wavering bit of support. It's almost as if the web-apps community really isn't sure what to think or feel about it, but most are sure they want to love it, at least while it's still around. Don't bother with it, if your web team isn't using it.

I do hope this helps, and that you'll consider my somewhat unorthodox suggestion.
posted by disillusioned at 8:44 AM on November 30, 2005


Response by poster: ummm.....thanks andrew, I never thought to explore the flatulence/actionscripting connection.
posted by j.p. Hung at 8:45 AM on November 30, 2005


Response by poster: and disillusioned, yes, it helps a hell of a lot!
posted by j.p. Hung at 8:51 AM on November 30, 2005


arrgh, jessamyn?! the link should be http://ask.metafilter.com/mefi/9252 (that other link was for the "do you close the bathroom door?" thread elsewhere - sorry!).
posted by andrew cooke at 8:58 AM on November 30, 2005


* Python is the best choice for beginners. I recommend Dive Into Python.
* ActionScript is fun to learn, and not a bad choice either.
* C# would be my third choice.

Perl is my favorite language, but I wouldn't recommend it to you.
posted by Sharcho at 9:53 AM on November 30, 2005


Plan time to get familiar with at least two languages that are a bit different from each other. That way you'll learn what bits are language-specific and what bits are common to at least two languages, which will be more helpful in terms of grasping "how to program computers" than the syntax of a particular language.
posted by mendel at 10:21 AM on November 30, 2005


Good, I'm glad. It's always nice to see my six paragraph response mean something.

If you're looking for more insight, such as I can provide it, feel free to email or AIM me.
posted by disillusioned at 10:32 AM on November 30, 2005


If you want to learn programming, start by deciding on something you want to build, even if it's somewhat simple (preferably simple, actually). In my experience, it really helps to have a short-term goal when starting learning programming.

For a counter-example, see the canonical "hello world" introduction to programming many, many languages have. Useless!

You don't really need to be an expert to understand MORE about the programming side of things.

Good luck!
posted by lrivers at 10:35 AM on November 30, 2005


I've not used Python nor have I used Ruby, so I'll let others speak for it. JavaScript is not a programmer's programming language. It is glue. It is the rancid mayonnaise on the shit sandwich of web content.

Java is a fine language and you can do some pretty fabulous general, computer science type things in it. I've easily produced more than a quarter million lines of code in Java and they were some of the most trouble-free code I've produced.

C# is Java with a new hat. It's fundamentally the same concepts, just with more keywords. There are some mistakes in the design, but some good things as well. I'm currently doing most of my coding in C#.

Perl. Hmm. I've written Perl and I've felt dirty every single time. If your entire house is nothing but piles of paper, books, and other detritus that obscures your furniture then you'll love Perl.

What I would do is find a class that centers around a conceptual goal rather than a language. There are patterns and processes of problem-solving in computer science that apply to every language to a certain degree. Learn that and you'll be better off. It's the whole get a fish/learn to fish thing. For example, here is a course description from my alma mater, Oberlin:
These courses introduce students to algorithm design and problem solving using a computer. Students are introduced to the fundamental concepts of programming and the object-oriented programming methodology using the Java programming language. Topics in CSCI 150 include basic data types and their operators, classes, control structures, recursion, exception handling, and input/output.
See - the emphasis there is on problem solving and fundamentals and Java is the road not the destination.
posted by plinth at 10:56 AM on November 30, 2005


Contra disillusioned, JavaScript can be both a procedural language and an object-oriented language, although the OO support is crude. (It also has some pretty impressive support for passing functions as arguments to other functions, giving it a weak claim to being a functional language). Also, it is not only a browser-scripting language; the Mozilla people, for example, write lots of high-level code in JavaScript; this lets them quickly develop very nice cross-platform apps. Its bastard child, JScript, lets you automate tasks in Windows.

Although plinth is right; the language is kind of rancid. But then I'm biased in favor of strongly-typed languages.
posted by profwhat at 11:33 AM on November 30, 2005


Response by poster: Thanks to all....really. You've given me some great insight and a place to start - at the very least. I guess that's why I love Mefi so much.
posted by j.p. Hung at 11:43 AM on November 30, 2005


I'd second PHP as the best suggestion, if your main interest is web development. Not sure where Loser gets his opinion that PHP's days are numbered. It's certainly the most widely used web development language today, and unless that somehow can be construed as a negative (?!), I can't see why that would change.

This is not to say that there aren't great things about Python or Ruby (though, while recently giving some thought to wanting to pick up a second language, I ran into some content that suggests that web development isn't easy in Python - no offense to Python coders, just what I've encountered). Either Python or Ruby would be a better choice if broad application development is your goal, with a leaning towards Ruby if what little I've learned about Python's web development issues are true.

Perl is another strong scripting language, though I've written a couple of simple apps in it and haven't been able to fall in love with its syntax.

Java is a very strong language, and opens up a lot of possibilities in cross-platform development. I agree with others that the learning curve is a little steep, but it would probably be the language I'd try to learn today if I didn't have habits and background in other languages.

All in all, I'd suggest PHP or Ruby.
posted by planetthoughtful at 12:16 PM on November 30, 2005


Following up on mendel's excellent suggestion of learning two languages: if what you really want is a base to grow from and not just a langague to get things done right now, don't start with Python (or any of the other scripting languages).

Python is a wonderful language. My first experience with it was similar to cowmix's - but that's because I already had a grounding in traditional languages like C, C++ and (dear god) assembly. I think it's a lot easier (and more fun) to go from C++ to Python than the other way around.

Start with C# or Java (depending on whether you're in the Microsoft camp or the Unix/Linux camp). Then pick up either Python or Ruby. Ruby has the advantage of Ruby on Rails (which is a framework, not a language) but Python feels more natural to me. Check 'em both out, see which one you prefer.

Having mastered two languages, you'll find it easy to pick up enough JavaScript/ActionScript/what have you to deal with the requirements of the task at hand.

Of course if you really want to understand what's going on, it's worth learning a little assembly, but that's hardcore. Also, Visual Basic .Net is a near semantic clone of C#. If your preferred syntax runs more to actual words than squiggles, you might want to start there. Don't be put off by people who sneer at it. It's essentially the exact same language as C# with different syntax.
posted by zanni at 12:37 PM on November 30, 2005 [1 favorite]


FWIW, I agree with those suggesting Java. You can do almost anything with it, it's a strongly typed, true Object Oriented language, the fundamentals you'll learn from it are very transferrable to many other languages and environments and there's a bazillion books and online resources to get you on your way.

If you want to work with web applications, you also have to learn a client-side language, and that would be Javascript. It's a weak, ugly, unpredictable slimy mess of a language that I wish would go away, but it's all we've got right now so we have to suck it up. If the Mozilla folks (or MS, Apple, Macromedia or anyone, please?!) really want to revolutionize the web, they'd find a way to get a strongly typed, true OO language into browsers. Why Macromedia persist with Javascript's genetically modified sibling, Actionscript, whilst they alone control the environment and can do whatever the heck they want, perplexes me. Flash running Python, for example, would be a huge step forward.

Python is lovely, but from a transferable skills on the resume perspective I'd still go with Java first. If you need to learn C#/ASP.NET sometime, Java will have got you 90% of the way there when you start. VB.NET is conceptually similar to C#, but an ugly, inconsistent bastard syntactically, that only exists so that MS could catch the legions of existing VB coders in their .NET. Not worth worrying about now, if you're starting from scratch.

Perl is fine to learn if you're already a programmer and want to add it to your resume, but I'd not recommend it as a first language because its bizarre quirks, counter-intuitive syntax and all-around weirdness means it sucks - or I just don't get it. It has many vocal defenders, so I better shut up.

If you want to be more of an all around web tech type, don't forget to learn something about database design and querying, but that's probably beyond the scope of this thread.
posted by normy at 2:10 PM on November 30, 2005


I'm a Vocal Defender Of Perl.

Perhaps the thing which sets Perl aside is the hugeness and comprehensiveness of CPAN, the archive of Perl modules. Millions and millions of person-hours have gone into creating libraries of code for just about any forseeable task you might have to do.

But that actually might be a negative factor for someone learning programming. Because rather than doing task X as a programmer, you'll be told by Perl people to "use Module::X;" and follow its syntax.
posted by AmbroseChapel at 3:18 PM on November 30, 2005


Perl is, imo, the best language to get stuff done with. hands down, there's so much available and its so fast to write (once you know the syntax, which isn't trivial) that nothing beats it. I wouldn't learn with it though.

For web development, so much of it is in PHP you might want to learn a bit of that. For serious web applications, Java/servlets are the way to go imo (of course, I still use ATL servers, but I wouldn't recommend that unless you really, really don't want to learn Java). For utilities, learn python. Later if you want to look at perl, its not an unmanagable jump (though I really don't see many people jumping that direction).
posted by devilsbrigade at 5:04 PM on November 30, 2005


I've been a Perl hacker since the early 90s, and have done plenty of Java and C# programming in recent years. I recently decided to learn a little bit about Ruby to see what all the hoopla is about, and I must say that I'm highly impressed by the cleanliness of the language concepts in Ruby. If I were to start a project, it would be in Perl, since I know the language so well. But if I were to recommend a first language, it would most definately be Ruby.
posted by jimfl at 7:42 PM on November 30, 2005


As others have noted, Python hasn't been particularly prominent as a web development language, of course, the same could have been said of Ruby a few years ago before Rails came along.

That may be changing. Django is a web development framework for Python that's been getting a lot of favorable attention. I've found it a very rewarding way to learn Python.

Django is being spun out of an in house system used at a Lawrence KS newspaper, so even though it's new, the core of it has been well tested in real world use and it includes some things that Rails doesn't have yet, like automatically generated yet customizable administrative interfaces for the various data types you create.
posted by Good Brain at 8:21 PM on November 30, 2005


To be pedantic, JavaScript was standardized as ECMAScript (spec), but everyone still calls it JavaScript.
posted by kirkaracha at 10:54 PM on November 30, 2005


PEAR for PHP is similar to what CPAN is for Perl.
posted by kirkaracha at 10:56 PM on November 30, 2005


Response by poster: my head is spinning....but thanks a ton to everyone!!!
posted by j.p. Hung at 2:24 PM on December 1, 2005


« Older How can I collaberate with indie musicians for my...   |   Tell me about the "We Buy Homes For Cash"... Newer »
This thread is closed to new comments.