I want to build a website, but I'm an amateur.
July 31, 2017 7:08 PM   Subscribe

I want to build a website with the same functionality as Urban Dictionary, but I'm an amateur web developer. I know HMTL, CSS, and some javascript. That's it. I've tried multiple courses, such as Thinkful and CodeAcademy, to take my skills to the next level, but I never seem to be able to progress very far beyond basic websites.

What should I do? I'm also open to hiring out some of the work to get a website like this done, so I'm not necessarily interested in this as a project just to hone my skills. I'm more interested in the site itself.

So, 1) I'd like thoughts and opinions on how to go about teaching myself to build a website like Urban Dictionary and 2) other thoughts and opinions on how to hire out building such a site. Any help would be much appreciated.
posted by uncannyslacks to Computers & Internet (8 answers total) 16 users marked this as a favorite
 
A long, long, long, long time ago I made my own website, which was a mock encyclopedia. I started out hard-coding in HTML but eventually graduated to PHP and MySQL. I was entirely self-taught, and my general strategy was combing through the PHP documentation looking for functions I could find useful and reading lots of tutorials on making pages that generate themselves off of SQL queries. I also wasn't above shamelessly using free example scripts if they performed something that I could use. Eventually, after Wikipedia became a thing I gave up on my amateur pecking and installed MediaWiki to power my recreated website.

The web has changed a lot in the 15 years I was actively rolling my own code, but the underlying structure is still the same. Most websites have a database as their foundation and pages of code that query the database and generate the HTML visitors see. This seems to be the missing piece of your repertoire, since you can make a pretty site with HTML and CSS, but you can't make it do much of anything. Nowadays if I wanted to resurrect my old site by hand I'd look into Javascript and JSON to power it, but I've fallen way, way out of touch with the state of the art for web development so there's probably someone else that could steer your more accurately in that regard.

That being said, what I'd REALLY do if I wanted to resurrect my old site is find some free CMS that suits my needs and install it on a server. That way all the tedious heavy lifting of coding a functional site is already done. Then I'd start digging into the source code and making changes to tailor it to my interests. I'd even consider using something like Squarespace, which is designed to be super simple to use and can also be flexible enough to make something superficially similar to Urban Dictionary if you're creative about it.
posted by Mr.Encyclopedia at 8:17 PM on July 31, 2017


Best answer: My answer got really long, sorry. tl;dr: I believe in you!

Like you, HTML, CSS and javascript were where I started, and I feel your pain about bridging over to backend development.

I'm not going to make any assumptions about what you do/don't know, so forgive me if my answer ends up being too beginner-y. I am going to assume, though, that you'd sincerely like to learn how to be a (backend/full-stack) developer, rather than just find existing software that you use to make your site. (If you'd like to use existing software, that's okay, and could still be a good first step towards someday being a backend/full-stack developer.)

To build a user-generated dictionary site, you'll need to create a database where that data is stored (for starters: a table of all the terms, a table of users, a table of definitions that cross-links to the term they define and the user that submitted them). Then you'll need backend code that fetches the right data from the database and builds it into HTML -- or takes the data a user submits and puts it back into the database.

(I will now take a moment to note that when you've got a site that allows users to create and request data from a database, there are all kinds of security issues that can arise. Whatever you do, whatever technical solution you pursue -- even if you end up hiring someone to do this work for you -- please take time to educate yourself about security. It's a big, difficult and frustrating topic, but it's also very important -- especially if you have users who're trusting you to not get hacked and accidentally expose their email addresses, passwords and ridiculously naughty definitions.)

Okay, so how did I, a frontend developer, learn to write enough backend code to make dynamic, database-driven sites where users can view and create content? Like Mr.Encyclopedia above, the first thing I tinkered with was PHP. I had installed some PHP-based software on my web host, and when I wanted to tweak its behavior, I started looking at the source code and eventually figured out how to manipulate it to achieve the small changes I wanted. (I'm sure a lot of people learned how to program by hacking their own WordPress installations and then grew from there.)

But then I found frameworks! Frameworks are awesome libraries of code that help you have to write less code to do common tasks -- creating/updating information, getting that information from a database and making it available to display in a template, etc.

For reasons of timing and location, I preferred Django, which is written in Python (and I adore Django and Python both). A Ruby-based framework called Rails has proven more popular in the long run -- I work at a Rails shop now. Both of those have been around for more than a decade at this point, so I'm sure you can find lots of helpful tutorials and hosting services that specialize in helping you deploy web apps that use these frameworks.

There are sooooo many frameworks that exist, and many are "easier" or "more elegant" or other adjectives that will give you pause. But I think you next steps are to get a development environment running on your own computer (follow installation instructions from whatever framework you choose), and noodle around with it there first, and teach yourself that way. A long-established and popular framework is a great starting point, because you can easily Google most of your problems (and error messages) and find good advice for beginners. And you can always port what you've built to another framework or language later when you have more specific opinions about how you'd like to get where you're going.
posted by katieinshoes at 8:37 PM on July 31, 2017 [1 favorite]


All sound advice so far. I'll add this...

#1 is going to be tough if you're finding it difficult to advance in coursework. I'm skimming over Thinkful's curriculum based on that they certainly seem to cover the fundamentals you'd need to get started, but then applying that knowledge to planning and building out an UD clone is another thing all together. The most challenging part of a site like this would be the backend (database, accounts, comments, upvotes etc), so perhaps if you've been left dissatisfied with frontend coursework, try switching to backend coursework and see if you prefer studying that. While there are devs who do both, they are two distinct skillsets and you might find that one suits your natural talents more than the other. Plus the current state of frontend coursework leans on advanced frameworks like React or Angular which totally isn't required for a site like this, while a good knowledge of backend fundamentals (including backend frameworks like katieinshoes says) would be.

Or of course just skip the coursework all together and dive in to some backend technology - everyone learns differently.

Either way, this is still a project with a wide scope (UD is a pretty complex site!) that I would advise a novice developer against using to learn with. Set achievable goals and all - there's a reason everybody starts with a todo list. Or like Mr. Encyclopedia (intentionally eponysterical?) suggests, try building one off of some existing solution. A wordpress with pages and comments might get the backend done good enough, though wouldn't be perfect.

If you go for #2, Metafilter Jobs might be a good place to start?
posted by mustardayonnaise at 8:45 PM on July 31, 2017 [1 favorite]


Best answer: As it happens, I worked with the creator of Urban Dictionary for a year on an unrelated project, and got the backstory of how Urban Dictionary started as a PHP app on a server that lived under his bed, then grew. He was transitioning the code base to Rails, but that was 10 years ago, and we've lost touch. What you might not see looking at Urban Dictionary now are the many years of experimenting and tweaking that it took to grow it to its current state. And you're not seeing the behind-the-scenes stuff (e.g., tests, monitoring, and moderation tools) that's needed to run a site like that.

As a novice now, though, if you go the do-it-yourself route you'll have the advantage of StackOverflow, github, AWS and the like, none of which existed back then. Look around for projects that try to clone Urban Dictionary or StackOverflow (or similar) and study them. Pick a project that gets you a 10th of way to what you want, choose a framework (Django or Rails are good choices, depending on your language preferences, but do run through the respective tutorials), and see what's involved in getting to something you can deploy and play with. Get some people you trust to give you feedback. Repeat. Be forewarned that it is liable to take a lot longer than you expect, though the path can be rewarding.

If you decide to hire the work out, beware of two novice traps. At one end, there's seeing the visible part of the iceberg, asking for that, then being disappointed when it's nowhere near enough. On the other end, there's the sticker shock of getting a bid from someone who has built something of similar complexity as Urban Dictionary (including the parts you can't see) and who bids accordingly.
posted by dws at 9:21 PM on July 31, 2017


What about a formal class? You might be able to find one at your local community college or technical college.
posted by Autumnheart at 4:08 AM on August 1, 2017


If I understand your question correctly you care more about having this website exist than you yourself getting the skills to make it (even if that'd be a nice bonus).
Urban dictionary is essentially a dictionary/encyclopedia. Is there any reason you can't use one of the existing wiki software packages?
posted by Wretch729 at 6:43 AM on August 2, 2017


Best answer: To build on Wretch729's answer - I would definitely consider a content management system as one route to getting your site built.

Personally, I'm a big fan of Drupal, which does a lot of the heavy lifting for you. You can still go in and fiddle with the HTML and the CSS all you like, but you don't have to build the basic database-plus-interface from scratch. Instead, you use various components to assemble the site, and then you can make little adjustments here and there.

So, looking at the Urban Dictionary site, a typical entry has:

* a title
* a definition, which may contain links to other terms
* the name of the user who posted it
* the date it was posted
* a voting widget
* social media links

You could build this pretty quickly in Drupal using its built-in content types and Views. (Actually, for the basic Urban Dictionary listing page, you probably wouldn't even need Views, you could just use the teaser view, but Views are the best thing since sliced bread, so, you could go either way.)

So you would just define a Term or Entry (or whatever) content type. You get Title and Body by default, usually, along with the name of the user who posted it and the date it was posted, so you'd just need to add social media links (which you could do using a Drupal module, or by simply adding some custom code into the theme) and voting; the Voting API module has you covered there.

Search is built in. Adding a new item is built in. Managing user accounts is built in. Support for multiple languages is built in. It's GREAT to learn how to build all these things yourself, but if you mostly just want to get a site up and running, it's really nice to have all these built-in features at your fingertips.

If you do want to go with Drupal (there are other options - you might even be able to do this in Wordpress, or you could look at Joomla, although I'm not as impressed with Joomla), your biggest choice would be whether to go with Drupal 7 or 8. Drupal 8 is nice and new and offers a better path to future versions; Drupal 7 has a LOT more completed plug-in modules available, but is much harder to update, so when it hits end of life you'll want to have a plan for moving forward.

tl,dr: I could probably build an Urban Dictionary-like site in Drupal in a day or two; you, starting from scratch, could probably build one all by yourself in a week or three.

Feel free to memail me if Drupal intrigues you and you have questions.
posted by kristi at 10:41 AM on August 4, 2017


Oh, one more thing: If you're interested in Drupal and want to teach yourself how to use it, there's lots of great Drupal documentation online. There's also a pretty active community support forum right at drupal.org, plus support at the Drupal Answers section of StackExchange.
posted by kristi at 10:44 AM on August 4, 2017


« Older Rental Car, 22 year old, Louisiana...complications...   |   How do I build a career in software from $0? Newer »
This thread is closed to new comments.