My friend John Saddington posted on his Wordpress-focused site a couple weeks ago about starting a new career in web development. Of course, he comes from a Wordpress perspective, but his recommendations are solid for learning tools and resources.
Wordpress is, after all, a great place to start learning web development. It gives you a template to start with and nearly infinite flexibility and extensibility. Wordpress is being used more and more as a development platform, too. It's a great place to cut your teeth in building interactive and content-driven websites.
I can't tell you how much time I've wasted worrying about my tools. "Am I using the right editor with this language? Am I using the right language for this problem? Joe Schmoe is using a cool setup; maybe I should try it out."
My most recent rabbit hole was trying out the Light Room IDE (Integrated Development Environment). It looked really cool in the video and several developers I follow on Twitter tweeted about the latest 0.4.0 release which provides better JavaScript support. The problem is that it's still very alpha, which means I spent an hour trying to debug a fairly simple JavaScript function in Light Room that turned out to be a bug in Light Room itself. I should have just stuck with Chrome DevTools and worked it out in 30 seconds.
Very rarely do I find a tool that I stick with outside my toolset of Chocolat (editor), Chrome (plus DevTools), and iTerm. I do my best to stay focused on solving problems and not the tools, but my lizard brain wants to taste every new tool that hits the Internet's shelves. So tell me, how do you avoid tool envy?
When I first started learning web development (in earnest), people looked at me funny when I told them what I was doing. It's not normal for adults to shift career paths from something "grown up" into a field like web development. Web development, and programming in general, is seen as the realm of teens and basement dwellers. In many cases, I might as well have told them I was going to become a professional D&D player.
That's ok. Lots of ideas, even the idea of becoming a web developer as an adult, sound stupid at first. Even this really smart guy has made bad calls on other people's ideas in the beginning. But when you're the one that can work from home or name your salary when you walk into an interview, it doesn't matter how people look at you. You won.
Learning web development is hard, especially doing it on your own as an adult. You're faced with challenges that kids don't have. For example, kids. Or work. Or just a slow moving old brain that doesn't want to absorb as much information as you're trying to cram into it.
So, don't quit. Hard isn't impossible. Your old brain may resist new information, but it's not blocking it altogether. It may take longer than you expect to become a web developer as an adult, but "it's taking so long" is a lame excuse to quit.
Think of it like a college degree. Give yourself 4 years to "graduate" with enough knowledge and experience to get an entry-level job as a web developer. If you're able to get a job sooner than that, then GREAT!!! But be okay with it taking 4 years.
And be thankful that it probably won't actually take 10 years.
Getting started with rbenv for Ruby development on Mac
Read this whole thing before using it as a guide. It's not long.
If you're setting up a new Mac for Ruby development, I highly suggest using rbenv instead of RVM to manage your Ruby versions and gemsets. However, the rbenv documentation doesn't clarify that you'll need a couple things to get started.
rbenv - Of course, you'll need to install rbenv. Installing rbenv can be done via a Github checkout, but Mac users can use the Homebrew method, which is easier.
ruby-build - The ruby-build tool is a plugin for rbenv that provides a command to compile and install Ruby versions on UNIX-like systems.
Xcode and the command line tools - The C compiler that ruby-build uses is actually in Xcode and access to the compiler requires Xcode's command line tools. You can find Xcode in the Mac App Store and the command line tools in Xcode's Preferences in the Downloads pane.
Why rbenv?
rbenv is lightweight and does only what you need (if all you need to do is manage Ruby versions to match your production environment). It uses Bundler (you'll need this eventually, as well) to keep gemsets in sync. It's fast and simple.
The popular alternative to rbenv is RVM. It's incredibly powerful, but it's a pain in the ass to install and manage. Before I found rbenv, RVM was a necessary evil to keep my rubies in line. If you're already using RVM, you'll need to implode RVM before you can install rbenv as they aren't compatible.
This information is also handy if you're setting up your Mac for Ruby development for the first time, even if it's not a new machine. Have fun!
Our goal as an industry shouldn’t be to get every kid to program, instead we should to cast a wide net and let every kid try it out for themselves. In short we need to re-frame the learning to code discussion as exposure rather than literacy.
Gathering with domain experts outside your core competancy
I’m spending today and tomorrow at the Ancient City Ruby conference in St. Augustine. I’m here (and spent the $300) for several reasons that I’ll talk about in the weekly memo later this morning. (So sign up for it by clicking the big green button at the top of this page!)
I’m especially excited about this conference because (1) it’s my first Ruby conference and (2) there is no doubt that, with my relatively small amount of Ruby knowledge, I will learn a ton. While I’m not a very experienced Ruby programmer, I’m right at the perfect level to understand what’s being talked about and learn from (probably) every talk. There’s very little that I’ll hear this week that won’t teach me something.
If you know me at all, you know that I love learning. My wife has heard me say this a thousand times, but I really believe that learning is one of life’s greatest adventures (and with very little risk). Learning, especially learning material that will benefit your career, is worth the investment you put in. Not only will it help you when the family sits down to watch Jeopardy, but you’ll be more well-rounded and ready for opportunities that may arise outside your typical day-to-day.
For me, my time and investment in this conference is about being well-rounded. Being able to converse with Ruby developers, participate in code reviews, give educated feedback or help solve problems; these are valuable in my field as a designer, front-end developer, and project manager.
Not all conferences cost $300. Not all educational gatherings are conferences. But getting together with a group of peers and experts is a great way to increase your domain knowledge in an area that your trying to grow toward.
Last month Treehouse release their Console Foundations series, to help aspiring Web Developers get confortable using the command line.
This month Treehouse has expanded their Quick Tips video series with with several short videos on getting set up with your own Virtual Private Server (VPS). This is part of a partnership with hosting provider Linode, what makes this partnership even more exciting is that Treehouse is giving a $50 service credit to all Treehouse members.
So now after you learn about using the Console and set up your own VPS you can play around with it for a few months for free.
To top off this list of Server-related courses, there’s also a Database Foundations course. This course starts with getting your own MySQL database setup and then jumps into learning SQL.
Finally to round out this new content blitz, if you are a Gold member, you’ll want to check out the Front-End Proformance Workshop. This video showcases a wide variety of things you can do on your server, to reduce the amount of time it takes for your site to load in a browser.
Don't learn to program by starting with JavaScript
I'm not convinced that JavaScript is the best programming language with which to start learning programming. I think such advice comes from people who have known JavaScript so long that they've forgotten how confusing and rigid the syntax can be. Furthermore, I think many programmers have forgotten that there are two distinct aspects to programming: (1) thinking like a programmer and (2) knowing a programming language.
First, you need to be able to think like a programmer. Writing an application means breaking down simple functions into their most basic parts and figuring out the most efficient and reliable way to put those basic parts back together.
This concept, breaking down a problem and putting it back together in an efficient manner, is completely separate from the second aspect of being able to program, which is knowing the syntax and vocabulary of a particular programming language.
Most (all?) higher level programming languages share concepts like loops, iterators, conditionals, etc. These are the foundations, and while their syntaxes change from language to language, knowing how to use these foundations is knowledge that will be carried from one language to another.
So, when you're learning to program, learn with a language that is easy to read and understand, that is flexible and not rigid, that is terse instead of verbose, and that gives you good error messages when you do something wrong. JavaScript is not that language. I've heard that Python gives good error messages and I know that Ruby is easy to read and is pretty terse.
Knowing JavaScript is necessary, but don't start there. You'll be doing yourself a disservice.
Want to learn a Ruby web framework? Start with Sinatra, not Rails.
This is not an April Fools joke.
If you're at the point that you want to dive into backend web programming and you've chosen to learn Ruby, a web framework can help you build something usable quickly. A web framework is essentially a pre-packaged collection of code that does the foundational work for you. They all work a little differently and include different "features" like asset handling, routing, scaffolding, background processes, message handling, etc.
When you're first starting, knowing which framework to use as you learn isn't obvious. The most popular Ruby framework, Rails, is tempting because there's so much chatter about it. But don't jump on the Rails train immediately.
I'm a fan of starting with Sinatra if you haven't worked with a web framework before. Sinatra is simpler, smaller, and not suited well for large web apps, but those "restraints" are helpful to a beginner because it means less complexity and faster "time to launch" for simple web apps.
Rails, on the other hand, is large and powerful, but with great power comes great complexity. You can build a full scale Twitter clone with Rails, but Rails is huge, with 100,000+ lines of code and many, many features and abstractions to learn. Rails is a great next step after getting familiar with web frameworks while working with the simpler Sinatra.
The reason I love Sinatra so much is that it's very, very simple to get a basic Ruby app running with content and logical routes. For example, I built a simple web app that had a user login and basic email messaging features (using the Mandrill API) with less than 100 lines of Ruby.
There are a bunch of Ruby web frameworks, but I still prefer Sinatra. I've heard good things about Padrino and Ramaze as well, but I haven't used them extensively.
If you wait for someone to give you permission to start pursuing your dream, you’ll be waiting a long time. You have to begin before you think you’re ready.
That's one of the most common questions I see from beginners, and understandably so. Knowing your destination is pretty important when starting any journey. But the answer isn't always clear, as you can see from the varied responses on this Treehouse forum discussion.
There are several ways to answer this question, but I've found that the best way to answer it is also the simplest.
Look at job listings for web developers. A job listing will give you actual requirements for web developers that employers are hiring for. There is no better way to gauge the skills you'll need than looking at job listings.
Authentic Jobs is a good place to start. Here's four search examples:
Front-end web developers
Back-end web developers
Full stack web developers
Design-focused web developers
But, looking through those lists can make your journey ahead feel like an overwhelming task. So, to give you a "lowest common denominator" of sorts, let's look one really good job listing for a front-end developer.
Wingard Creative is hiring for a front-end web developer and their job description is excellent. It delineates clearly between required skills and "nice to have" skills. Use this job description as a baseline for the skills and experience you'll need to get a job as a front-end web developer.
Be a better freelancer: An interview with the prolific Mr. Brennan Dunn
Few people gain authority on a topic like Brennan Dunn has on the topic of being a successful freelancer. He's written two hugely successful books on freelancing, runs a widely read weekly newsletter for freelancers, and built a project management tool for freelancers and their clients.
His book Double Your Freelancing Rate is amazing. And, what's more, if you use the coupon code newmethod, you'll get a 20% discount. It's a great book about making more money with the hours you're already working.
I chatted with Brennan for a bit yesterday. Here's the transcript.
Me: How long have you been freelancing?
Brennan: Since 2006, so... 7 years? Started out moonlighting with a fulltime job, and then transitioned to full time, and then again to building a team.
Me: What type of work? All web or other stuff, too?
Brennan: I started out doing team augmentation - coming onboard to help an existing web development team. As I started getting more direct clients, I started handling the design and development (before getting heavily into development, I almost went to school for design.) These days, when I still do consult, it's mainly to help businesses make more money — and I do whatever it takes to help them get there (custom code or design, off-the-shelf, etc.)
Me: Do you still have your team together or are you independent again?
Brennan: It's a bit hazy. I promoted someone to run my consultancy (we help startups build greenfield apps), but these days when I consult it's at a much higher rate and I'm brought on as an actual business consultant, instead of an outsourced developer or whatnot. But my primary focus now is products.
Me: Speaking of products, tell me a little about Planscope; what it is and why you built it.
Brennan: Sure, so Planscope is a project management tool I built that's focused entirely on the relationships between us and our clients. I'd tried tons of different PM apps over the years, but never of them successfully bridged the divide between "what's left to be built" and "what's left in the budget". Planscope makes it easy for you and your clients to answer "Will this get done on time and in budget?". I also wanted to strip it of all technical jargon, and make it as friendly to clients as Basecamp, but also powerful enough to actually plan and execute projects.
Me: Love that. Very obvious need. Are there other products you're working on?
Brennan: Yep. The really interesting part about building Planscope was when it sunk in that no one was buying "project management software", they were buying some outcome — more transparency with their clients, which led to happier clients, which leads to more referrals and repeat work. So I thought... what other outcomes could I deliver? What experience did I have (or what could I research), that could make more freelancers better off than they are today? And I wrote my first book, Double Your Freelancing Rate, which has helped over 2,000 freelancers learn to better position themselves and formulate value propositions that actually make them more money. The other week, I launched my second book, The Blueprint, which helps freelancers get more leads organically over the Internet. On top of that, I run a monthly workshop that helps people build multi-million dollar consultancies, manage a weekly newsletter that over 4,000 freelancers subscribe to, and host a weekly podcast called The Business of Freelancing.
Me: Whew, putting off sleep for retirement?
Brennan: Nah, I actually don't work that much. Maybe 30 or so hours a week.
Me: What's your favorite tip for raising your freelancing rate?
Brennan: Understand why you're being hired in the first place, determine what the value is in delivering a solution to that problem, charge accordingly.
Me: What's one thing that most new freelancers don't know that's hurting them?
Brennan: That no one is hiring them to write code / design / copywrite / whatever. Brennan Dunn: No one cares about the medium, they just want to solve some business problem. And most freelancers are obsessive about their craft, and completely miss the reality of why someone's cutting us a check.
Me: When you were independent, did you charge hourly or based on an agreed-upon spec?
Brennan: I've always charged for my time. Though earlier on, I did get trapped in some fixed bid arrangements, but always ended up regretting them. I think there's certain situations where fixed pricing is advantageous (e.g., productized consulting), but for many of us doing custom design or development it can end up hurting us.
Me: Do you know a magic phrase or trick to landing your first freelance client?
Brennan: Just be confident in yourself, ask the right questions, get away from becoming a "yes-man", and focus on the prospective client and figuring out their needs.
Me: So, like empathy?
Brennan: I wouldn't call it empathy, but just being able to dig through all the cruft ("I'm looking for a new website") to get to the heart of the problem ("My business is suffering... we hardly have any new clients, and I think my website is to blame.") Learn why that problem exists, how critical the problem is, and work outloud with the prospective client to see how your abilities can help solve that problem.
Me: If you could go back to when you were moonlighting as a freelancer, what is one thing you would have done differently?
Brennan: I would have really focused on building up a sustainable company, and put together a stretegy for getting clients, executing on client projects, and creating a cash flow that would allow me to safely plan when I could quit my job and go into business full time for myself.
You've landed your first freelance client. Now what?
Convincing the first person to trust you to build their project is a milestone, but now it's time to deliver. Your first client is important, even if they're not paying you. This client will be the person that proves to the world that you know what you're doing and that you're responsible and trustworthy.
I won't beat around the bush. If you want to make sure your first client becomes your first champion, do the following:
Write out a plan for you and your client.
Working without a plan is a mistake most new freelancers make. You want to dive into the project and writing out a plan slows that down. Trust me, you need a plan.
Map out the steps of the project (as you understand them now). Make sure your client knows the plan and has a part to play, even if it's just feedback loops or draft approvals. Post the plan so everyone involved can see it and the progress that's being made. This can be as simple as a shared Google Doc or something more advanced like using Planscope or Basecamp.
Communicate with your client more than you think is necessary.
Poor communication is the norm with freelancers and your client probably has low expectations regarding how much visibility they'll have into the project. This is an area that you can stand out and do something extraordinary for your client.
Daily (brief) checkins at the end of the day, updates when you finish a large task or piece of the project, and quickly asking questions when you're unsure of something are all simple ways to make sure your client feels connected to you and the project that they're spending their hard earned money on.
Set dates for project deliverables and meet (or beat) them.
Dates will give your client some peace of mind to know that there will be incremental milestones leading up to the completion of the project. Even if the project is short, give each major task on the project plan a date to be finished. If you're going to miss a date, address it with your client, explain why it will be missed, and adjust the rest of the plan accordingly.
Ask for a reference.
Once the project is over, ask your happy client for a reference. Ask them to write 2-3 sentences about their experience working with you. Ask for permission to put their statement on your personal website or tweet it out to your followers. You worked hard to make them happy and you deserve the recognition of doing a good job.
Your first steps toward becoming a web developer are going to be unsure. The language of the web is entirely different than how humans typically think, which means learning it is hard. To add to the difficulty of getting started, there are thousands of possible starting points.
I started, in earnest, learning web development about a year ago, so the emotions associated with it are still fresh. Now, a year later and with a couple web apps under my belt, I want to offer some advice about starting.
Start slow and give yourself reasonable expectations.
It's a long road, so save your gas. Let your mind adjust to your new way of thinking and all the new information. If you're like most people, you haven't stuffed a lot of information into your noggin since college or even high school. Your brain needs time to grow and absorb.
Get into the community.
There's more to being a web developer than just knowing code. Participating in the community is a big part of the role. Take time to read things that aren't tutorials. Ask questions on forums. Learn about the industry and the community outside the code itself.
Learn how to learn.
The absolute most important thing you can learn in the beginning is your own learning style and pace. Learn how to find answers to problems when you get stuck. Figure out what environment is the most beneficial to your learning style.
Have a learning plan.
Even if it's just a rough draft of a path that you'll take to get to your first milestone, write it out so you have something to guide you. This is one place that Treehouse, Codecademy, and Code School excel, providing clear and helpful learning plans for their students. Use one of theirs or put your own together.
Sign up for the weekly memo.
This isn't a sales pitch. The weekly memo will help you. It will motivate you, inform you, and give you a connection to other learns just like yourself.
Coding bootcamps are programs of intensive study during a restricted amount of time. Most are in-person courses with teachers and other students all physically present, but some are available online (like Bloc, which I've covered before).
Every bootcamp is different and each bootcamp touts unique advantages. Some focus on core programming, others focus on shipping products, while others still let you choose disciplines from several options. But they all have one thing in common, you have a short amount of time learn an incredibly large amount of information.
I've compiled a list of the bootcamps that I'm aware of:
Hackbright Academy
The Starter League
Polycademy
Bitmaker Labs
Disruption Institute
Flatiron School
HackerYou
refactorU
Tealeaf Academy
Makers Academy
Hack Reactor
Launch Academy
App Academy
Dev Bootcamp
Hacker School
Bloc
Coding bootcamps aren't for everyone. Many people don't have the time to commit to a bootcamp, even though they last a short amount of time (usually 9-12 weeks). The least intensive bootcamps require a minimum of 20 hours of focused study time each week. The most intensive bootcamps expect you to study 10-12 hours a day. Whoa.
Also, while the online bootcamps are more accessible, the in-person bootcamps tend to garner more favorable reviews from students and students tend to feel more closely connected to their teachers and other students in their class.
And then there's the price. Tuition ranges from $5,000 to over $12,000, with the online bootcamps coming in at the low end of the spectrum. This is yet another hurdle for would-be web developers to choose a bootcamp to speed up their learning.
What's more, many of these bootcamps also offer job placement services with technology companies. That means you have a high probability of getting a job as a web developer once you graduate from one of these bootcamps. However, when a student is placed in a job, the bootcamp usually gets a sizeable bounty; anywhere from $5,000 to 20% of the candidates first year's salary.
If my math is right, the most successful bootcamps are making around $300,000 a month between student tuition and job placement fees. That's solid income for a company with fewer than 10 employees.
Bootcamps are, however, an excellent place to get a kickstart in your learning experience. If you're in a hurry to switch careers into the technology industry, bootcamps are the fast-track for making that happen, so long as you have thousands of dollars and a few months of nothing to do but study.