I am a self-taught Front End Web Developer who writes a lot of CSS, HTML, & jQuery Javascript and pushes pixels in Photoshop from my laptop with flexible location and time restraints. I love my job. I want to share how to get started in this field. I feel that if you're reasonably tech-savvy and persistently driven, you can learn this. If you're not tech-savvy, then just double up on the persistence. First I'll cover the tools needed, next I'll go over the fundamentals, and then share my favorite resources.

Tools

  • Mac - Not saying you can't do this on a Windows or Linux machine, just that if you want to, you're learning from the wrong guy. That being said 95% of the people I know that do design, development, or production, do it on a Mac. You don't need a fast one as web work is pretty nimble (most files are really small). I'd suggest getting the low-end MacBook for the basics, or the low-end MacBook Pro if you've got a little extra. Portability is nice. If you know you'll only be working at home, then go for the iMac. That thing kicks ass and you get a huge screen (super helpful to have lots of screen space). If you go laptop, eventually get a second monitor.
  • Coda - Skip Dreamweaver. You need to learn the code. It's not too hard, I realize it's tempting to use a visual editor to lay web page elements out, but if you don't understand how the core components of web development work, then you're hurting yourself in the long run. Coda's the best code editor IMHO. Espresso's a good pick too.
  • Firefox & the Firebug extension - If web development was plumbing, then Firebug would be x-ray goggles. This amazing, handy, wonderful, life-saving doodad allows you to see the components of a web page, then alter them in real-time to see their effects. It's awesome. Get it, then right click on any element on any web page and click 'Inspect Element'. Now play around. This helps understanding so much.
  • Dreamhost Account - Not totally necessary at first as you can play around with basic stuff on your local computer, but getting this going allows you to have a web server and an actual web site to play with. Great deal, great support, tons of features. I've used them for a long time and am really happy with them.

Fundamentals

3 main fundamental languages make up the world of Front End Web Development that you need to learn: HTML controlling web content: images, text, links to other pages, etc; CSS laying out the HTML's content: placing an image on the right, selecting what font size and color the text is and determining the width of the sidebar; and finally Javascript manipulating the layout and the content as it reacts to the user's actions: menus dropping down, content becoming available, and other interactive actions. HTML:Content, CSS:Presentation, Javascript:Behavior. Keeping these separate is important and leads to your sanity, I swear. Usually these are kept separate by simply keeping them in different files. A basic site could contain three files: index.html, style.css, and script.js. In the top of the HTML file, you'd include links off to style.css, which would apply it's styles to the content of the HTML file, then link off to script.js too which would apply it's behavior to the same content. Here's the good news: you don't really need to worry about Javascript: yet. The vast majority of the work is done in CSS. Solid HTML is totally necessary, but HTML is actually pretty easy to learn. Let's go over it first.

HTML

HTML tags wrap content. There's a part before & after the content:
<p>I'm a paragraph</p>
The tags can have attributes also. Think of them as the settings of the tag. So to make a link, you need to have an anchor tag: <a> with an href attribute that says which URL to go to. Like this:
<p>Here's a link to <a href="http://google.com">Google's</a> home page.</p>
So, do you see how you close the tag with the '/'? A paragraph begins with a <p> and ends with a </p>. That's how you wrap content. Here's how you make an unordered list:
<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
The <ul> tells we have an unordered list, then all the <li> are the list items. Some elements stand on their own, like an image tag:
<img src="images/logo.jpg" />
So if this was in an html file that had a directory named 'images' with a logo image named 'logo.jpg', it would show up on the page. There's many more HTML tags than this, but it's all comprehendible. Focus on learning about the Headers (<h1>, <h2>, etc), Divisions (<div>), Spans (<span>), and the above mentioned tags. So there's two essential tag attribute we need to cover: IDs & Classes. These can be added on to any tag we've mentioned. It allows us to identify the content we want to style with CSS. So for example, that image of our logo is kinda important and we need to give it some layout attention. So we give an ID of 'logo', like this:
<img src="images/logo.jpg" id="logo" />
Or we might want to identify a list of some links that it's a menu:
<ul id="menu">
    <li><a href="item-1.html">Item 1</a></li>
    <li><a href="item-2.html">Item 2</a></li>
    <li><a href="item-3.html">Item 3</a></li>
</ul>
In both those cases, they are the only ones. There's just one logo and there's just one menu. IDs can only be applied to one tag per page. If the multiple tags need to be styled with the same thing, then you use classes. Say we had multiple paragraphs in a row and we want every other one to have a different colored background, we'd add a class="odd" to the odd paragraphs, like this:
<p class="odd">Paragraph</p>
<p class="even">Paragraph</p>
<p class="odd">Paragraph</p>  
<p class="even">Paragraph</p>
That way we can write some CSS styles for the odd paragraphs and some for the even ones. There's much more to learn, but I just wanted to give you an overview of what some of it looks like. Not too bad, right?

CSS

CSS is awesome. Think of it as orally describing design. You have rules of the way things look. The rules can be broad, affecting everything, or specific and targeted. It's pretty easy to understand. What do you think background-color: red; does? Or width: 200px? Let's look at a full style rule.
p {
    font-size:16px;
    font-family:Arial;
    color:black;
}
The first part is called a selector, and it's the html element without all the characters around it. So here we're assigning styles to all the <p> on the page. We're telling them all to have a size 16 pixel font, use the font Arial, and be black. So if we want to tell all the odd and even paragraphs from the example from earlier to have different styles, we use . for classes and # for IDs. So the paragraphs that had class="odd" we reference by using this for a selector: .odd. The navigation with id="menu" would be selected by #menu. Here's some examples:
.odd {
    background-color: gray;
}
.even {
    background-color: silver;
}
#menu {
    background-color: black;
}
Now if we wanted to tell all the links within the menu that we want them to be the color white (so they stand out from the black background we gave #menu), we'd use a descendent selector:
#menu a {
    color: white;
}
These are just a few of the selectors that are out there, and this only touches the beginnings of the style rules, but I just wanted to give you some examples. More things to learn

Further Reading

Suggested Books

Here's the first books you should pick up: Once you get a little bit further, pick these up:

Suggested Blog Posts Reading

Final Thoughts

Invariably, these tips, books, posts, and links will become outdated. Things are always changing and constantly learning new techniques is essential to this field. I, personally, love it. I hate the idea of stagnancy. So keep up on favorite blogs, keep buying new books that interest you, and always play around and experiment. Here's the sources I would keep up on: Eventually, you'll probably want to use a Content Management System to handle your content. I'd suggest Wordpress for starters, but I believe Drupal to be more powerful albeit a little harder to learn. Have anything to add? Got any questions? Made any progress from these initial steps? I'd love to hear all that and more in the comments below. Thanks for reading!