Am I trying to take down a mammoth or a mouse?
July 30, 2009 3:32 PM   Subscribe

I have an idea for a web project, but barely any knowledge of code. Can I teach myself enough to do this on my own over weeks or months, or is what I want to do so complicated it'd take years to learn everything I'd need to know?

I have an idea for a web site/application. I think it's a good idea and I'd like to at least have a go at making it, but I certainly can't afford to hire a professional. I myself am pretty ignorant: I know some HMTL, I've fooled around with CSS but never built anything in it, and once, long ago, I had to work with an SQL database. That's about it, really.

The site/ap I want to build would work along these lines: John would be able to upload a file to the site. The file then goes into a pile with a bunch of others. When Paul comes along to the site, he will get a pop up with a partial excerpt of John's text. If he wants, he'll be able to click in and read the rest of John's file. If he doesn't, he clicks "next" and another excerpt from a different, random file from the database will appear in the window. Paul can just keep clicking through. I would like to be able to very preciely measure at what point in the page Paul decides to read further or not --- some kind of floating cursor arrangement, perhaps, with a button hovering at the end of each line as Paul scolls through the excerpt. Further, I would like to automatically compile a number of statistics related to the excerpts (how many times they've been served up, how many times people wanted to read further and at what point they came to that decision), and possibly to correlate them with other user info stored in some kind of profile. Like, George and Ringo both like Paul's stuff; maybe George would also like John, who Ringo likes.That type of thing. There's more to it than that, but that's kind of the core of it and any of the additional functions I had in mind I don't think would work substantially differently, from a programming perspective. Like, I don't want to add a flash intro or nothin'. Also, I would like to be able to display much of this information to the user, through a web interface.

So, what types of things would I need to know to make something like that? And would trying to teach myself starting from almost pure ignorance be like trying to build a table from scratch (which, with the help of God* and Black and Decker I think I could do) or more like that guy who's trying to build a toaster from scratch?

*Norm Abrahms.
posted by Diablevert to Computers & Internet (11 answers total) 8 users marked this as a favorite
Besides HTML and CSS, you'd need to know SQL, JavaScript, and whatever server-side scripting language you chose (such as PHP). You'd also have to learn some of the details of administering a web server and a database server.

It sounds like a complicated site, but it's nothing crazy, and you could certainly figure out enough on your own to do it--it'll just take you quite a while longer than a professional would. But if you don't have a deadline, go for it. Many excellent projects have started the same way.
posted by fatbird at 3:43 PM on July 30, 2009

If coding as a hobby or profession interests you, then go for it. This is a great, focused design to approach in an interative manner.

All the interactivity would be clientside JavaScript most likely, with AJAX comms back to the server to do the statistical reporting stuff.

If I were doing this I'd look at hosting at Amazon's AWS or Microsoft's Azure, but I don't have much experience here so don't listen to me.

You're looking at weeks to get the alpha going and months for an interesting beta.
posted by @troy at 3:43 PM on July 30, 2009

You can build this yourself.

You need to know HTML, CSS and Javascript for the browser part of it. I highly recommend that you also learn JQuery (or some other modern Javascript library), because it helps your Javascript work the same way in multiple browsers (and makes other JS tasks easier).

(You could also go the Flash route if you want. Opinions rage about whether Flash is better or worse than HTML/CSS/JS, but in the end, you can build your site using either technology. So pick one and commit to it.)

You will probably need to learn an imaging program, like Photoshop or Fireworks, to make graphics for your site.

You will need to learn a back-end scripting language, such as PHP or Python, and you will need to learn SQL for the database management.

You don't really need to learn much server admin stuff, because for the sort of thing you're doing, you can do all that (e.g. setting up the database) via forms on your web host's site. But at some point after you've learned the other stuff, you might want to look into some admin technology.

As you're learning this stuff, pay special attention to security and injection issues, or people will hack into your system, usually to stick spam all over it.

The bad news is it will probably take you a decade to master all this stuff.

The good news is that you don't have to master it to build your app. If you're diligent, my guess is you could learn what you need to know in a year -- while building your site! Your code won't be all that well organized or optimized, but after you've built your app, you can later go back and clean things up, once you gain more knowledge.

The fact that you have a project in mind really helps. You can use it as a learning tool.
posted by grumblebee at 3:48 PM on July 30, 2009

One recent book I've come across aimed at beginners trying to write a web application is Using Google App Engine by Charles Severance. The author developed the book while teaching a course on building complex websites to people who didn't have much technical background. As for the mixed reviews on Amazon, Philip Greenspun has a good explanation for that. The book is intended to be a gentle, self-contained guide to programming simple applications using Google App Engine.

To me it sounds like you could build an alpha version via Google App Engine. Once you've got under your belt how all the pieces fit together - HTML, CSS, scripting language (Python in this case), JavaScript, AJAX - you might reevaluate whether you want to go through with the beta.
posted by needled at 3:58 PM on July 30, 2009 [1 favorite]

Yes, you can do this. Months.

I like needled's GAE idea. It's a modern and undertapped way to develop websites, but it's clearly the future. Since you are starting from scratch, it's a good opportunity for you to learn some forward-looking architectural and development techniques, rather that get bogged down learning the last gasps of dying languages or approaches like PHP or Perl.

If you don't like the idea of relying on Google's cloud, you can do the same thing with your own cheap web host plus SQL, and Python. With no old code you need to support, it's the perfect time for Python.

(Sorry, PHP and Perl guys, but we all love you very much and someone needs to say it: It's time to move on.)
posted by rokusan at 4:41 PM on July 30, 2009 [1 favorite]

I say learn python. If you learn the language basics (I picked it up pretty quickly as a never-before-programmer in ~2.5 months) you could build a nice robust web application with Django in a couple of weeks.
posted by i_am_a_Jedi at 6:45 PM on July 30, 2009

Response by poster: Thank you all very much for your help. Perhaps this is a foolish question, but what is the difference between PHP and Perl and Python? Is it just that one's newer, or is it superior in other ways? And if you develop something with the Google ap engine, what is Google's relationship to that code? Like, I assume the code is mine but do I always have to go through google to edit it? Would it be a pain in the butt to move to some other system if I decided I didn't like theirs in the future?
posted by Diablevert at 7:36 PM on July 30, 2009

what is the difference between PHP and Perl and Python? Is it just that one's newer, or is it superior in other ways?
All of them can do the job and you'll probably hear lots of people recommending their favourite pet language. Eg, you should choose Python because it's great.

And use Python 2.5, not 3.
And if you develop something with the Google ap engine, what is Google's relationship to that code?
You own the copyright to that code and Google don't own that.

You can edit your software outside of the Google App infrastructure but in practice you'll want to run the software in there to see how it performs anyway.
Would it be a pain in the butt to move to some other system if I decided I didn't like theirs in the future?
Generally speaking any software will have implicit assumptions about the platform it was written for (Eg, Windows software that only works on Windows, or Google App software that only works on Google Apps). There are what's called Abstraction Layers that will make your software portable across systems but this might not be an essential consideration for your first bit of software. Don't take this the wrong way but early developers make a lot of mistakes and throw away a lot of code and so I wouldn't worry about planning for the future -- you'll probably want to rewrite it a couple of times anyway.
posted by holloway at 9:07 PM on July 30, 2009

I try to tackle some of your later questions.

With something like GAE, the code is always yours however you are dependent of the GAE platform for your code to things that are useful. Without the platform you are out of luck. Now someone might come along to build a clone of the GAE platform so that you have some choice but that is yet to be seen. That's not to say the platform is flawed in anyway but it is a fact of life. For example the authenication portion of the GAE platform stands to save you bunches and bunches of effort (and keeps you from making some awful mistakes) but at the price of living with this choice.

As for your other questions about languages it is a more subtle one. In the beginning of the web, perl was where it was at. A huge chunk of the early dynamic web was written in perl because the early web was almost all unix based and perl was in widespread use on that platform and is known for its text handling chops (and the web is all text).

As the web grew people without traditional programming backgrounds wanted to get into the dynamic web page business but writing programs to generate HTML are a hassle and kind of a disconnect with the visual way most humans perceive the web. Solutions like PHP inverted the perl solution by embedding the programming bits into HTML pages. That way you could use normal HTML tools for your look and feel, and then write little bits of the PHP code with special tags that would get executed and replaced when the page was requested by a user. Common things would be like to look something up in a database and add it to the page.

Now it turns out this model of embedding all your programming bits into your web pages wasn't a great idea in a lot of cases because mixing and matching the programming with all the visualness of the web pages made things awfully confusing. So we are back to the idea of splitting up the programming bits and the visual bits and while you can do this by hand it is much more useful to use a framework to help you with the housekeeping duties in setting up an arrangement like this.

Perl has like 90 billion libraries to do all sorts of things but its syntax can be impenetrable to the uninitiated. PHP can be used to build structured apps with separation but it is easy to slip into old habits. Python although having fewer libraries is a nice choice because the syntax tends to be very clear. Also I don't think any Python lovers, including myself, would suggest that you build this in scratch in Python. We'd recommend something like the Django framework which takes away a lot of the hassles of low level programming of web apps and helps build good habits. Plus since there less competing libraries in Python more developer mind share is wrapped up in the existing libraries. Lastly, Django has something going for it since a subset of it is included in the Google App Engine framework.

Lastly, I'll say that it is possible to write good web apps in almost any langue, it is just some are more modern than others and some make it easier to make right decisions.
posted by mmascolino at 9:37 PM on July 30, 2009

Hi there, I know you say "i wouldn't be able to hire a professional" but I am in your situation: basic knowledge, would love to do it all myself, but there are SO MANY things to learn all at the same time, even when you have a basic understanding.

Just imagine buy the manuals for (taken from the first answer) "HTML and CSS, you'd need to know SQL, JavaScript, and whatever server-side scripting language you chose (such as PHP). You'd also have to learn some of the details of administering a web server and a database server".

Trial and error, overlapping concepts, you think an error is in the Javascript while maybe it's in the PHP or conflicting versions of stuff....

What I'be been studying for a while and planning to do shortly is to use

You go there and ask for a job to be done (you can just copy/paste the description you put in here) and you can specify for example that you want only the basic structure to be laid out, and the rest you can refine yourself. You specify a maximum amount (ie. less than 500$) and then freelancers from all around the world (India for example) who are maybe students or programmers who want to have an extra income.. bid (i'll do it for 450$ - i'll do it for 400$) and then you choose which one to assign the job to according to their references given by past "employers".

Really, especially young programmers who are willing to do everything will be serviceable and helpful, you can ask them to inform you at certain milestones or just lay down the steps they have taken.

I know building a miniature boat is fun, but you could do it all yourself (buy the wood, bend it, cut it, make the plan, take the proportions...) but you can have a way in between and buy a kit with the pieces and the glue and the paint and the instructions... it may end you spend less than by doing it all yourself.
posted by madeinitaly at 2:51 AM on July 31, 2009

apologize, the url for elance is obviously wrong should work.
posted by madeinitaly at 2:52 AM on July 31, 2009

« Older I need power tools to rebuild my house   |   Gardasil off-label for men in SF Newer »
This thread is closed to new comments.