How do I learn programming to create web-based applications?
January 11, 2010 11:06 PM   Subscribe

I want to create computer programs. What do I learn, and where do I start?

I am a VFX artist and designer. I work with computers in the creative industry and have only ever created limited scripts in maya's MEL. I know and understand 3d and design, and a bit of html and css....not programming. That being said...there are two applications I have laid out and I want to actualize them. I do not want to do it to make money, but to fill my own need for them. One is a todo list app, the other is a workout routine generating app. Please do not suggest existing apps.

I have designed exactly what these apps look like (I created the interface design in photoshop) and what every single feature is to do. I know exactly how I want them to work, how they should look (based on interfaces from existing web-based apps), and what every feature and menu do.

I simply don't know how to make them more than pictures.

Since we're dreaming...ideally they would be WEB BASED and also stand alone. I am thinking along the lines of Mint-like functionality (so maybe they'd be java script?) What programming language should I learn in order to create snazzy, yet functional web-based apps?

The apps I have dreamt up *should* be fairly simple. The workout routine generator is little more than an app that would randomize user generated input, putting it and pulling it out of some sort of database. The todo list app is based around automatic sorting of tasks based on priority but would be far more involved...

I completely realize this would be like a neophyte asking me what program to use to create "Transformers" - but please humor me and tell me the realities of the situation. I understand the probabilty of me "learning programming" and creating these apps is close to zero...but again...humor me.

In the end, I may very well consider hiring freelance programmers to do my bidding (I have literally visualized every single screen and button in these programs)...but i'd like to at least learn a bit about programming so I can be more informed about this little dream of mine.
posted by jnnla to Computers & Internet (26 answers total) 31 users marked this as a favorite
 
If you know HTML and CSS, can you create non-functional web pages that LOOK exactly like you want? Put in buttons that do nothing and so on?
If so, then javascript and php will implement the functionality for you. If you get hosting at somewhere like nearlyfreespeech.net, you can use their SQL setup, and you get the database functionality without having to manage it yourself.
posted by jacalata at 11:26 PM on January 11, 2010


HTML, to design the UI to be close to your intentions. Be warned that you may not get it pixel for pixel identical to the photoshop blueprints, but it comes with some layout flexibility. Beyond that you specifically need to look at the forms part of HTML which plenty of 'bit of HTML/CSS' people ignore.

Python, to deliver and process those form submissions. Python is fairly close to how programmers describe programs to one another without the trivial details (pseduocode). There's a number of support libraries geared towards what you desire that make web stuff simple. Django for example supports everything from form handling to abstracting the database, so you don't need to necessarily learn SQL. If it's just you and you have sufficient server power then a database simplification layer is fine. Or you could learn SQL and use sqlite.

Finally, if your site needs to be super AJAX-y / interactive, then JavaScript. I haven't used Mint.com for the obvious security reasons. But you should probably focus on jQuery, which is a popular javascript library for this stuff.
posted by pwnguin at 11:32 PM on January 11, 2010


You could do that sort of thing in any number of languages, but note that both apps you speak about have databases. Which means you'll need a database too. But to a certain extent you can use whatever tools you have that can do the job. If I were doing it, I'd learn a bit more Python and I'd link it to a MySQL database. You have a web hosting company (or if you don't, you will want to get one) and that company will offer a database and some scripting/programming languages to interact with it. (Mine offers MySQL and Python/Perl/PHP and more...)

Elektrotechnicus's suggestion of Python as a language is a good one. The other obvious language choices for this kind of work are PHP and (historically) perl. Whilst a lot of people think PHP is good, it's not as "clean" as Python, and I dont think that Perl is a good first language (even though it is awesome). There will be other options too that are Windows specific or that I've just overlooked (all those mentioned so far run on Windows, Linux and Mac). Then you need your database - MySQL, PostgreSQL, ... again I am sure there are Windows-style variants (SQL Server).

Perhaps a more interesting question is how to get going. I'd start off the web - you can download Python for free - and get to grips with the basics of data structures and how to manipulate them and how to control the flow of a program. What sort of "moving parts" will your apps need? Well you'll need to take a list (of tasks/exercises) and then go through it putting it on the screen (so you need to store in lists and be able to go through them - arrays, for and while loops, particularly associative arrays). You'll need to be able to highlight parts of a list, so you need to be able to select elements (if statements, case statements). You'll need to count stuff. And so on. These are all basic programming tasks. If you've gone for Python, there are a load of links from the python homepage to beginners guides to Python for non-programmers. Just pick one and play - it will give you the basic skills.

Then you get on the web - and you try and make a python program run when you visit a website (rather than when you tell it to on the command line of your own machine). Again the python homepage has a useful set of links here. And finally, you want to work out how to use python to attach to a database. This again is not hard. It's probably 2 or 3 lines of code. You'll probably want to know more than a little bit about the database setup too; looking at your descriptions, you might be able to get away with one table for the workout generator if you're only storing the exercises and not each individual workout. But if it's actually a workout manager and you want it to keep track of what you've generated, then you've more involved database stuff and probably want to read up on tables, keys, SQL and so on. The TODO list is harder so you'll want to probably start with the workout one.

What I do to test this stuff when I am learning is to set up the worlds' most basic blog - one page with a text box and a submit button at the top. When you type in the box and press submit, the text goes into the database. Underneath the text box you extract every thing that has ever been typed in the "blog" and print it onto the screen. That page, once you get it going, shows you that you can enter into a database, extract from it, and print the contents to screen.

And now you're ready to go. It's really not hard - I have gone on a bit here as I've gone into quite a lot of detail about the stages. But basically you need a web database, and a way of getting things from that and onto the screen.
posted by handee at 11:58 PM on January 11, 2010 [8 favorites]


Learn Python first. There are a ton of tutorials for the neophyte.

I'd learn Javascript after getting comfortable with Python - Javascript is an uglier language which can give you bad habits.
posted by benzenedream at 12:04 AM on January 12, 2010


Or on preview, what handee said.
posted by benzenedream at 12:05 AM on January 12, 2010


You should learn python anyway for your vfx work. Its integrated into Maya and many other 3d and compositing apps. My bet is that it will eventually replace MEL and maxscript and whatever else.

Another thought, you could go with flash? I like to think of Flash studio as a 2D version of Maya or Max. It is easy to build an interface in flash, its more graphically orientated, and you have easy web integration.
posted by phyle at 12:31 AM on January 12, 2010


Well, I'm going to go out on a limb and suggest PHP might be better if you want to jump right in to doing web apps. Python might be easier to learn (I don't know) but PHP isn't difficult.

But Python is a general purpose programming language, and in order to do web pages in python you're going to need extra stuff. Here is a page on doing web programming in Python. There are lots of different Web frameworks including Django, which is the one I hear most commonly mentioned. As well as Grok, Pylons, Turbogears and Zope.

PHP on the other hand is built for doing web pages. You just write HTML and then you mix your code right in your HTML. That can be a problem if you're going to write huge apps, but for small projects it's not a big deal.

So for example, if you wanted to write a "hello world" app in PHP you would just do this:

<h1>PHP Test</h1>
<p>This is a test of PHP, here is some regular HTML<p>
<p><>
echo "Hello ";
echo $_REQUEST["name"];

?></p>

<p>this is some more HTML</p>


--

Then in order to execute it, you just save that as a .php file and upload it to almost any web hosting provider out there. Almost all of them support .php files without any special configuration whatsoever.

So if you want to jump right into (server side) web programming, I think PHP is probably the easiest rout. I literally wrote that php code and tested it while writing this comment, because (of course) my web server already supports PHP.

And not only that, but a lot of HTML editors, like Macromedia dreamweaver actually have support for PHP built in (although this isn't something I've done, I always do HTML by hand). So if you're comfortable using dreamweaver, you should be able to write your PHP in it.

The other thing to learn is Javascript, along with a framework like jQuery for writing the 'client side' portion of the web app. A lot of the dynamic effects you see on web pages (like fade ins, pop ups, etc) are done in Javascript. You can mix client side and server side together, which is often called AJAX (which stands for asynchronous javascript and XML -- but don't worry about that yet).
posted by delmoi at 12:33 AM on January 12, 2010


Er, crap. My php got mangled when I tried to post it. Should look like this:


<h1>PHP Test</h1>
<p>This is a test of PHP, here is some regular HTML</p>
<p><?

echo "Hello ";
echo $_REQUEST["name"];

?></p>

<p>this is some more HTML</p>

posted by delmoi at 12:36 AM on January 12, 2010


Just to be clear: Javascript is a bit of a red herring here because it is a client-side language, whereas the meat of your app will be primarily server-side and can be any language whatsoever. It is totally possible to implement your app completely server side without any client side Javascript. But many sites use a mix of server side and client side code, particularly because client side scripting in the form of javascript is often necessary to a) have neat effects like visual flourishes or pages that update without being reloaded (so-called AJAX) or b) overcome browser rendering oddities.

The hot server side languages right now are PHP, ruby, perl, and python, but in fact you can use any language on the server. The choice is invisible to the user because the purpose of the code running on the server is to emit code HTML and CSS for the browser to render -- the output of the program is the input to the browser. Client side scripting can either be emitted by the server side application or it can be served as regular files and just included into the HTML. The difference of course is that the client side code runs on the browser, so you're sending source code not output.
posted by Rhomboid at 12:38 AM on January 12, 2010


(And to be pedantic, yes, it is possible to also use Javascript as a server-side language but that usage is such a rarity compared to its typical use as client-side code that I omitted that distinction for clarity.)
posted by Rhomboid at 12:40 AM on January 12, 2010


Everyone...all FANTASTIC answers...thank you all so much and keep them coming if you could! Interesting that so many are suggesting Python...all my CG programmer friends tell me to learn python also for cg haha. I hadn't thought it might be suggested for web apps as well. Hat tip to you phyle for making that connection...
posted by jnnla at 12:40 AM on January 12, 2010


...oh...any input on RoR? My roomate works for a company that does a lot of web dev and iphone app dev and he speaks highly of RoR...
posted by jnnla at 12:41 AM on January 12, 2010


Django is basically the python equivalent of RoR; history suggests they were independently developed and influenced each other over time. Some people complain about Rail's performance, but then some complain about Django. It's usually a bit harder to locate hosting for Rails. Haven't used it much myself so I can't offer an opinion.

The main goal of these is to replace the database programming, something normally done in SQL, with Ruby (rails) or Python (django, turbogears, etc). In SQL you declare a table as a set of rows containing specific fields; in Django you declare a table as a python class containing specific member variables.

If you look at Ruby, it's not very popular outside of Rails, whereas you've noted Python is already valuable in your current field, and is applied in many more. From a personal and professional development perspective Python would be more productive.
posted by pwnguin at 1:10 AM on January 12, 2010


Programmers like RoR because it removes much of the drudgework from programming database-driven web apps.

It's a great environment for practicing programmers. I don't think it's a great first environment to learn in as it hides too many of the moving parts from view. You should learn how to create a basic console app, SQL table, and CGI page before jumping into the richer frameworks like Django and RoR, if only to understand where Django and RoR's strengths are.
posted by benzenedream at 1:33 AM on January 12, 2010


jnnla: “I have designed exactly what these apps look like (I created the interface design in photoshop) and what every single feature is to do. I know exactly how I want them to work, how they should look (based on interfaces from existing web-based apps), and what every feature and menu do. I simply don't know how to make them more than pictures.”

There's a lot of good advice here, so I'll only add a few notes from my own brief experience:

(1) Drop the GUI stuff you've designed. I know, it was fun, and it started you on fantasizing on programs. I did the same thing; and it suddenly turned out that GUI programming was sort of the last, and least important, part of what I was learning about, so I had to forget about it and focus on the nitty gritty of actually programming. Focus on building a command-line version of what you want to do first; you can make it look pretty later. This is counter-intuitive to those of us who care about design, but it's essential, since programming isn't about design; it's about mathematics, and about making things work. So resist the temptation to fantasize about how programs will look until you've properly nailed down how they work.

(2) Don't try to do everything. There are all sorts of great things out there, and it's tempting to want to download the Django packages and learn SQLAlchemy and figure out this and figure out that all at once. My advice: pick one language and stick to it, and don't add any modules or anything to it until you've learned the basics straight off. If you like Python, remember that Python comes out of the box with everything you'll need to do anything you want to do right away; just stick with that until you're ready for things that are a little more complex, and then you can look around later and see what your options are for flashier stuff.

(3) Web CGI Programming? Standalone + web-based? Mm... no. Pick one. You can make it interoperable later if you really need to, but... pick one. If you're going the web route, go the web route. Maybe PHP. But, having worked on learning both, I can tell you that Python is much easier, and makes more intuitive sense to the beginner. Python is also great for CGI work, does it nicely and simply, but I'd still say you should avoid that straight off and just dive into the language itself before trying to do anything fancy with it.

(4) If I were simply to suggest something specific, it would be to choose Python and try to make a standalone script that just did whatever functions you want it to do when you run the script - you can pretend you're pushing your GUI buttons when you do that and design the GUI around that later on, but what you want first is to be able to have the program do what you want it to do.

(5) With all due respect, I know handee says he'd use MySQL, but being all too familiar with the level you're on, I recommend you skip that route. If you're trying to learn a programming language, you don't need the added process of installing, running, and maintaining a database server. Look, Python makes this very, very easy for us beginners. Python actually contains the SQLite format, and can generate it without adding any modules or extra packages or installations. SQLite is neat, and incidentally absolutely perfect for what you're hoping to do, because instead of being a server running a database it's just a small file format. It's not as malleable or robust as a working SQL server, but you certainly don't need big, malleable or robust. What's more, SQLite can be generated right off from within Python, and Python contains modules for easily manipulating it as simply as you'd manipulate any other SQL database. So make it easy on yourself and just go with SQLite.

(Later on, when and if you want more robust and complex database interfacing I highly recommend the SQLAlchemy module, which is a more specialized and honestly really cool abstraction layer for interfacing generally with databases. Django does a little bit of abstraction, and can handle most of what a web designer would want to do, but SQLAlchemy is a real workhorse about it. But that's for way, way in the future.)

Hope that helps.
posted by koeselitz at 4:01 AM on January 12, 2010 [3 favorites]


@koeselitz, handee's not a he.

Otherwise, SQLite sounds like a great idea.
posted by handee at 4:05 AM on January 12, 2010


Other people have touched on this but it's very important so I'm stressing it again...

Your ideas involve several quite different things that mix together.You need an "engine" (some code that can take some information about workouts and generate the information about one single workout), you need a web interface, and you need some database storage.

It will be a lot easier if you only do one of these things at a time, and you find a way to be certain that this one thing works before you do the next thing.

Breaking it down even more, first you need some code that can take in all your input about workouts. But how will you know whether your input reading code works or not? Don't get sucked into the idea that you have to write a whole website before you find out whether you have written the input code correctly. Just write something to print out all your input again. Try it out with different inputs. Write some code to put in the different inputs, output them and check that the input and the output are the same.

Only when you are certain this TINY BIT is working correctly, do you find another tiny bit and move on and work on that.

Otherwise, you will rapidly find yourself in a giant spaghetti nightmare, in which you have a strange problem and you have no clue whether it's your input data that's wrong, your input reading code, your workout generating code or your website.

If you hang on to all your test code and make an easy way to run it, this will help enormously. Eventually you will get to a point where you want to add the database, and you will realise that all your storage code is scattered around inconveniently. You will think, well if I just moved this HERE, and that THERE... and then you will break something. If you have an armoury of test code for each little bit, you will find out really quickly exactly what has broken. If you don't, you will find the problem three weeks later, mixed in with six other slightly different problems, and spend days and days puzzling over it.
posted by emilyw at 4:41 AM on January 12, 2010


Whoops! I am very, very embarrassed. Many apologies, handee.
posted by koeselitz at 4:53 AM on January 12, 2010


contrary to koeselitz's first point, I think that starting with a solidly designed UI and filling in the code afterwards is a perfectly good methodology: it can prevent you from spending a lot of time implementing functionality you don't actually need, and neatly avoids the more usual problem where people make a clumsy UI because it's easier to match to the backend they've already built.

When I'm starting a new application from scratch, I find I get the best results when I go in this order:
1) figure out who will use the application and why, and what tasks they will need to accomplish in order to do that
2) Design an interface that suits what I worked out in step 1
3) Spend a lot of time thinking through exactly what needs to happen when each part of that interface is touched by a user: what data will it need to create or retrieve? What other processing will have to happen for that widget to do what it does?
4) Look for places where those paths can be made to overlap behind the scenes: if I see I've got fifteen different widgets that all need to, say, calculate the difference between two dates, then I know I need to write one date calculation function which all of them will use. (Date manipulation is a dumb example, since most modern languages have that sort of thing built right in, but you get the idea.)
5) Now I've got a list of all the data structures the app needs to keep track of, so I can make informed decisions about whether I need a real SQL database or can get away with SQLite or even just XML or flat files or what have you; and I know generally what code I need to implement (or, whenever possible, not implement: perl has CPAN, I'm sure there are equivalent module repositories for PHP and Python).
6) In parallel: Build functional interface. Write code for that part of the interface. Build automated tests for each part of the code as you build it. Repeat until thoroughly sick of the project.

This is maybe a bit of an idiosyncratic process, but I find it works really well for me -- and I'm getting the impression that it'd suit you as well, since you're already done through step 2.

Set your existing ideas aside for a while while you get familiar with your chosen language(s) -- and do this before you try to move on to step 3 -- but once you've worked your way through a few examples there's no reason you shouldn't be able to build the types of application you've described. The dirty little secret about web programming -- ssh, don't tell anyone -- is that most of it really isn't very difficult, and most of the difficult stuff has already been written by someone else for you to borrow.

(As for your choice of language: Personally I've never been a fan of PHP, since it depends on intermingling code and HTML in the same file which I find always causes more headaches than is worth. It does have the advantage of being designed specifically for web work, however, so automatically handles some common tasks for you (managing user sessions, for example) which you would have to code yourself in other languages. I don't know python, simply because I've never been asked to work on a project that uses it, but it seems a perfectly decent language. For small self-directed projects I tend to default to perl (with the Template::Toolkit module to keep the code layer separate from the UI layer), but that's because I'm old and creaky and not in touch with what the cool kids are writing these days. Regardless of your choice of back end language, you'll almost certainly need at least some javascript as part of your front end interface; I strongly recommend using jQuery or Prototype/scriptaculous rather than starting from scratch. Actually, forget prototype, just use jQuery.)
posted by ook at 9:12 AM on January 12, 2010 [1 favorite]


If you go the PHP/MySQL route, you can set up a server for your own testing and development (or, really, for running the app, so long as you don't mind always running it locally) with something like WAMP (for Windows) or MAMP (for Mac). These are what I use. Both of them also support SQLite, in case you want to use that as your database server.

Evidently, you can run mod_python (i.e. an Apache extension) with WAMP/MAMP, but I don't have any experience with it, as I've never tinkered much with Python. Perhaps some of the Python fans can suggest an easy-to-install development platform option. I'm sure there's one out there.

Ditto all of what koeselitz said about taking this in baby steps. Start with a hello world app in whatever language you choose. Tinker around with various ways to write content to the screen using variables, loops, and conditional statements. Work your way up to a simple CRUD app. From there, the sky's the limit.
posted by wheat at 9:29 AM on January 12, 2010


ook: “contrary to koeselitz's first point, I think that starting with a solidly designed UI and filling in the code afterwards is a perfectly good methodology: it can prevent you from spending a lot of time implementing functionality you don't actually need, and neatly avoids the more usual problem where people make a clumsy UI because it's easier to match to the backend they've already built.”

Yeah, thinking about it now, I have a feeling that was more an early personal difficulty I ran into than a good general piece of advice. My own trouble was that I'd start trying to piece together a GUI and make it look nice and completely miss the bindings, the methods that worked best with it, et cetera, and then I'd realize I was at the end of the process instead of the beginning, and I had to start over. But again, I think that's more just a me thing than a general problem.

Anyway, jnnla: that process ook describes is exactly what you should be shooting for, as it's a great production process. It's good to see how the step-by-step goes when you're starting out, so you can picture where you're going.

wheat: “Evidently, you can run mod_python (i.e. an Apache extension) with WAMP/MAMP, but I don't have any experience with it, as I've never tinkered much with Python. Perhaps some of the Python fans can suggest an easy-to-install development platform option. I'm sure there's one out there.”

Well, I'm one, heh. mod_python is indeed the dev platform of choice; it's a good deal faster than any other option in webland (as I imagine the other mod_ extensions are). But honestly, there is no development platform option to suggest besides Python itself. You can write CGI scripts in Python, and although that's a bit slower than working with mod_python I think it's a much better place to start, as many servers will already have Python, and it's trivial to install on a server pretty much the same way you'd install it on a machine if they don't. And even before doing that I think it's probably a better idea just to start fooling with Python on a machine in the interactive prompt and work up to writing out scripts before doing CGI or anything like that.

In fact, I think it's kind of against the Python spirit to install stuff just yet. Keep it simple, is the idea. Almost everything you'll ever need is within the core language and standard libraries themselves already; and since there should be only one way to do anything anyway, it's best just to get acquainted with those. CGI scripting and mod_python will come later.

I'm in a Python mood, so I guess I'll give a few tips, if this is the direction you're leaning, jnnla. If not, this might be useful to somebody.

First, Python has two parts: one part, the core language, consisting of a (very small number of) methods, functions, variables, et cetera; that is, the grammar of the language, the way you say anything you want to say. And the other part is the standard libraries (and other modules if you want to add them) - these are just modules that have all the tools you'd need to do anything you want to do. If you want to use the tools in a module, you only have to go import [name of module] and then you can use it - it's that simple.

Which brings me to my second point. Guido Van Rossum, the creator of Python, has made it clear that there should be one and only one way to do anything; this leads to a nice, orderly set of modules that make great sense and are quite elegant. Therefore, there is only one module in the standard library with the tools for creating GUI interfaces: the Tkinter module, which is an interface to the very broad Tk GUI framework.

Now, for some reason the Python community has some fetish surrounding Tkinter (“CameronLaird calls the yearly decision to keep TkInter ‘one of the minor traditions of the Python world.’” – PythonWiki) but for all I can tell the inclusion of Tkinter has more to do with it being very cross-compatible than anything else. I don't like it much, as it doesn't make a lot of sense to me, although I probably gave up on it too easily. Anyhow, though I'm recommending that you minimize your additional installations of modules and stuff, one module I will recommend that you install straightaway is the wonderful wxPython module. wxPython is more intuitive, more immediate, and just flat-out easier to use than Tkinter, in my view; and frankly, I find it's more directly portable between OSes. With wxPython, I think you'll find you're up and writing GUIs a lot quicker.

Finally, as far as a distribution of Python, of course the mainline one at Python.org is great. However, if you're okay with a small number of proprietary things added in, and especially if you're on Windows (but even if you're not) I highly recommend ActiveState's very good distribution ActivePython. It includes all of Python plus a lot of extra modules which can be very helpful to have as you're getting started, so that you don't have to go out and download and install any. I use it, anyway. All you have to do is download and install it, and you've got Python running on your system.

Whether you're going the Python route or not, good luck. Hope some of this helps.
posted by koeselitz at 10:47 AM on January 12, 2010


I've been doing web programming for 15 years and have tutored many folks into learning the ropes.

I'm seeing lots of advice that is going to set you up for spending lots of time bit-twiddling and not really getting your project's finished. At this point, the very last thing you want is to use any kind of framework like RoR. RoR is the domain of web experts.

You need a web-based language: go with PHP, don't waste your time with Python (yet). It's on every web-server and to use it, you simply rename a webpage to .php. Done. And there is a huge online community that can help you when you get stuck.

You need a database: go with MySQL. It's on every web-server, find a host that allows you to configure it via a web-based console like Dreamhost.

My suggestion is to find a couple online tutorials on how to get data into and out of a database, we call this CRUD (Create-Read-Update-Delete). Virtually all webapps use this pattern. Keep running through these tutorials until you feel things clicking into place.

You'll have to learn the SQL syntax. You also need to learn the lifecycle of a web request. For instance, you'll need to understand how radio fields are relayed back to the server. You need to understand hidden form fields. You need to know your GET from your POST. You need to be intimately familiar with web form fields, their syntax and how to make them sing.

This can be a really fun journey, especially if you are learning new things everyday. But it will require some patience, take it with tiny steps. It is possible that you might enjoy client-side programming more than web-programming, if you are into making the UI look exactly like you want it to and don't want to deal with the overhead of the web request lifecycle.
posted by bprater at 11:59 AM on January 12, 2010


IMHO, learning PHP first is a good way to ruin a potential programmer. Very bad habits abound in PHP land, bad advice for PHP programmers is everywhere. Don't do yourself this disfavor, learn PHP later, and then learn to use it with a good MVC framework such as CodeIgniter.
posted by Invoke at 2:12 PM on January 12, 2010 [1 favorite]


bprater: “I'm seeing lots of advice that is going to set you up for spending lots of time bit-twiddling and not really getting your project's finished... This can be a really fun journey, especially if you are learning new things everyday. But it will require some patience, take it with tiny steps. It is possible that you might enjoy client-side programming more than web-programming, if you are into making the UI look exactly like you want it to and don't want to deal with the overhead of the web request lifecycle.”

Heh. Well, I'm with Invoke - in my mind, PHP = 'bit-twiddling.' It's a strange and confusing language in a lot of ways, especially for a beginner, and is a very bad first language to learn. If a person is dead-set on programming nothing but web interfaces, and if they don't really care about learning anything else about programming, PHP might be a good first choice, but otherwise there are better options.

This is why I focused on Python; because, as you say, the PHP approach will mean baby steps and a long time before you do anything workable in the language; whereas you can really start writing working Python programs in an afternoon. That's not to say it doesn't take some work, but it's a much more intuitive and immediate language. Not to mention the fact that Python is much more powerful than PHP. After doing string manipulation and mathematical calculations in Python, trying to do that stuff in PHP is painful, to say the least.
posted by koeselitz at 4:07 PM on January 12, 2010


This shouldn't turn into a your-favorite-language-sucks/my-favorite-language-is-the-one-true-path thread. The OP asked how these apps could be implemented, and mentioned a preference for implementing them as web applications. That's incredibly open ended. And every platform mentioned in the thread, not to mention dozens more, could be used for that task.

The ability to write bad code isn't a function of the language; it is a function of the programmer.
posted by wheat at 9:34 PM on January 12, 2010 [1 favorite]


Grah, this isn't about what language is better, it is about learning programming to develop something. Some languages are better for beginners. Python happens to be great for beginners, PHP, less so for the reasons I mentioned before.

In a similar way to the fact that learning Esperanto first will make learning other languages faster, leaning Python first will accelerate the acquisition of other languages.

I love programming, I've been doing it professionally for 20 years. I use Python for most of my professional work. PHP is second. For fun I hack around on microcontrollers in C, and on my Mac in Objective C. I used to program in Java, but lately will only do so when someone pays me a ton of money (wordy, boring, slow-to-develop language, bleah). I also love LISP, but have never and probably will never be paid to program in it. Sometimes I program in Javascript or Actionscript for clients, but I'd never pretend it was an adequate server-side language. You couldn't pay me enough to use Visual Basic or C#.

Any "real" programmer should know multiple languages, but the learning path is simpler for some paths than others. Simple truth, completely borne out in studies I've seen.
posted by Invoke at 4:53 PM on January 13, 2010 [1 favorite]


« Older We want the friendly germs, not the mean ones!   |   How do I validate a field in Access to DEMAND... Newer »
This thread is closed to new comments.