I want to be a web developer! Maybe!
June 11, 2009 5:15 PM   Subscribe

I want to quit designing and become a web developer! Can I? Should I? Where do I start?

Background: I've been designing for 8 years, exclusively web for the past 4 years. Picked up CSS/validation/site optimization really fast, jumped in jQuery, moved to general Javascript, and I'm learning it pretty quickly. I work in a Rails shop, and I've been told that I can move into a "buildout developer" role if I want to, which would involve CSS/HTML, but of course, no Rails. I'd like to move further, even if it means going somewhere with lower expectations and pay.

Why developing? I've finally realized that I love making things, learning things, and fixing things. Unfortunately, most graphic designers spend their time "selling things," which sounded sexy at 22, but seems downright icky now. The best part of every workday is when I get to use some Regex or set a session variable, so coding for a living seems attractive.

Is it too late? I work with people who've been on LAMP stacks since age 16, and I can't write a single SQL query. Is there too much a knowledge gap between me and lifelong developers?

Where to start? Going to a framework like Rails immediately sounds like cheating, but what do I know? What should I start playing around with, to get a general idea of how servers/DBs/languages work? What kind of goals ("Write a plugin", "Launch an app") could I reasonable set for myself in a new language?

Thanks in advance!
posted by dougunderscorenelso to Technology (13 answers total) 18 users marked this as a favorite
Response by poster: Maybe the "is it too late?" block should mention that I'm 28, which probably doesn't sound late, but sure feels like it.
posted by dougunderscorenelso at 5:25 PM on June 11, 2009

The easiest thing to do is to do something very simple as a project on your own and learn the basics of modeling and designing a web application. When I first learned web development, I created a very simple content management system - a bulletin board!

1. Create a database with a user table and a comments table. A user has a username and password. A comment is created by a user at a certain date with specific content data.
- Create tables with SQL. It can and will get more complicated, but create a basic relationship between the two tables to tie users to their comments!

2. Create a login page, user registration page, and a comments page. The comments page should only be accessible if successfully logged in.
- Select user information with SQL (validating a user login).
- Create user information with SQL (creating a new user).
- Select comments data with SQL (displaying existing comments, ordering them by date created).
- HTTP session scope and request scope
- HTML forms
- Application logic (validating form input, redirecting back to login or registration page on error, redirecting to comments view page on success).

3. When logged in, the user can create new comments, edit their own comments, or delete their own comments. This is the basic CMS model and builds upon the knowledge learned from creating the login and registration pages.

There's a lot of meat in this simple exercise and it contains a lot of foundational concepts that the majority of web applications have. Feel free to use something easily accessible like ruby or PHP, but, most importantly, learn the concepts. When you understand the concepts, then you will be able to build on them even more.
posted by seppyk at 5:38 PM on June 11, 2009 [4 favorites]

It's never too late, as long as you hold an interest. Yeah, cliché.

I learned SQL my last year of college, and only because it was part of a class req. It was probably the single greatest qualifier in getting my foot in the web development door, at least in environments too small to have a dedicated SQL author. The good news is that SQL doesn't really deserve its own course. Learn to insert, update, delete rows and join tables, and you've got 95% of your work done. I still use Google to check syntax for everything else.

Good luck!
posted by spamguy at 5:38 PM on June 11, 2009

Not too late, no way, not at all.

But. there is a lot to learn. Javascript is a good language (yes, caveats) but learn more than that. Ruby and python are great but get experience with a compiled language like java or c.

The rails framework would not be 'cheating', it's a big project to do more than just get it running.

Get a unix box and install mysql (rails, python, gcc, lisp, erlang...) and get comfortable, if you can do a non-trivial regex, a basic join is cake.

Write lots of little tools to speed your current work.

Learn some theory, data structures, algorithms, a bit of complexity theory (so you know why some things will never work.)

I'm personally mostly self taught but some classes can't hurt. Forces you to do those small projects.

Find an open source project that you like and spend time developing that tool, good for the resume too.

Don't think 'web' developer, think software developer, the web is great but it's just one case.

Good luck, have lots of fun, don't let anyone discourage you.
posted by sammyo at 5:43 PM on June 11, 2009

I'm a graphic designer who decided to stop designing and go to school for international relations. Follow your heart and your dreams, and everything will fall into place.
posted by hipersons at 8:15 PM on June 11, 2009 [1 favorite]

Just a minor warning, there's a great deal of "selling" (and with no concrete demonstration of why what you're trying to sell is right/wrong unless your boss/manager/client/coworker does your exact job ... and they rarely do) on the other side of things.

At least when you're selling a design, there's something tangible to look at, rather than "this is a better way to do it!"
posted by shownomercy at 8:17 PM on June 11, 2009

Only one point, but:

I've found that A Gentle Introduction To SQL is a fantastic way to start manipulating SQL databases, which turn out to be not-so-complicated-as-I-thought.
posted by koeselitz at 10:00 PM on June 11, 2009 [1 favorite]

Best answer: You're not too old to learn, if you can learn the logic that underlies programming languages.

If you've picked up JavaScript okay, then you're more than ready to pick up ruby, rails, PHP, whatever. And once you do, you should start to understand how different programming languages are just dialects of programming in general, which is about the logic of structuring an application. That's kind of a lifetime learning thing, but it's absolutely not required to start.

You should keep in mind that you have an advantage over the gearhead who's been coding since he was 16. You've worked design, you've done sales, you've managed customers. That's something a lot of those gearheads don't do well, and they tend to end up isolated in backrooms getting paid well but kept from the customers. If you add the programming side to your repertoire, you'll be well positioned to either get another job or become a consultant web developer. At 38, I keep hearing that my greatest asset as a consultant is my ability to speak to non-technical customers in a comfortable way that they understand. My coding skills make me good at delivering what I promise, but it's my (IMO average) social skills that keep me in business.

So: Go ahead with Ruby on Rails, build a couple non-trivial apps for yourself, and see if you like it. If you do, it's worth pursuing more, and branching out into all the things you'll touch along the way: web servers, databases, various app models...

The good news is that SQL doesn't really deserve its own course. Learn to insert, update, delete rows and join tables, and you've got 95% of your work done.

This comment scares me a bit. This is the top half of SQL, the easy half. The hard part is understanding how relational databases work in principle--how set theory informs the structure of databases, and how data modeling is done well or badly. Essentially, you need to learn more than inserts, updates and selects: You need to learn normalization, which involves grokking databases. You can scrape by with inserts, updates and selects, but you're neglecting the most important part of learning the database side if you don't learn and understand normalization. Once you get decent at delivering basic web apps, you'll probably be confronted with designing web apps that have to scale, and that involves more than just CRUD programming.
posted by fatbird at 11:22 PM on June 11, 2009 [1 favorite]

Response by poster: Everyone: AWESOME. Thank you. Sammyo suggested getting a Unix box - is that something that'd be a pain to administer/set up as a noob? Would it make more sense to start on a high-end hosting platform that I can tinker in?

@shownomercy selling to clients and bosses is hard enough, but the part of design that I despise is that you're selling yet another sales pitch. Trying to convince someone that my app works well sounds more appealing than trying to convince them that the colors I picked represent "security and innovation" to a certain age group.

@fatbird thanks for the warnings, I'll keep those to-learns on my list for when I get further into SQL.
posted by dougunderscorenelso at 5:03 AM on June 12, 2009

dougunderscorenelso: Sammyo suggested getting a Unix box - is that something that'd be a pain to administer/set up as a noob? Would it make more sense to start on a high-end hosting platform that I can tinker in?

Dunno about 'high-end hosting platforms'—it probably wouldn't hurt to get your own hosted site with somebody like DreamHost so that you can tinker about through PuTTY with the internals of setting up a site. That messing-around would be in Linux, the international language of web servers, and that would give you good experience.

But I don't think it's that tough to set up a Linux box any more; I've found that it's just as easy to set up a machine running Ubuntu as it is to set up a Windows machine, in some ways easier—for example, if you're running Windows now, you can use the wubi installer to install Ubuntu from inside Windows quickly and easily. It took me about fifteen minutes on my machine, and I didn't use a single Linux command; once installed, Ubuntu is a high-quality, user-friendly graphic interface that doesn't require you to know command-line Linux. (And it's pretty, too.) It could be a very good jumping-off point.
posted by koeselitz at 9:34 AM on June 12, 2009

Response by poster: @koeselitz by high-end I just meant one that lets me tamper with settings, which I know Dreamhost and some others have some restrictions on.

I'm running OS X now, and I've been using MAMP (Apache, MySQL, PHP) to play around with things, so it sounds like this might be enough to start with...
posted by dougunderscorenelso at 10:39 AM on June 12, 2009

You might want to learn a web application framework like CodeIgniter or Cake PHP. (They're roughly the PHP equivalents of Ruby on Rails. I use CodeIgniter--it's pretty easy to set up and to learn--but I've heard good things about Cake PHP.) They use a model-view-controller architecture that provides some structure and logic to your programming.
posted by kirkaracha at 1:54 PM on June 12, 2009

Response by poster: Thanks kirkaracha! I'm a huge ExpressionEngine fan (and it's how I spend a lot of time at work), so CodeIgniter seems like a good project to look at after I know some basic PHP stuff.
posted by dougunderscorenelso at 3:24 PM on June 12, 2009

« Older The sweet smell of... Santa Fe   |   Are my tomatoes too crowded? Newer »
This thread is closed to new comments.