Home

Aaron Godin

Programming, design, and stuff! I enjoy the web, among many other things.

The Path of a Web Developer

07/29/2010

This is a difficult time to start learning web development. I only say that because, like most skills that require steady learning, the breadth of knowledge that is required grows every day. If you are a first time programmer, first time web developer, or an intermediate developer (that’s my category), finding your way around what you should learn is tricky. I hope to provide insight into things that worked along my beginner path.

Software developers who are not paying attention to the web are hurting themselves. The amount of new desktop software compared to the amount of new web applications in the past two years is incredible, with web applications greatly outnumbering those on desktop.

There are two reasons why web applications rule. Desktop software is hard to maintain. When you need to fix it, you create a patch and then let people know that it is available for download. With web applications, you update your web server with the new patch and every user is already up to date. A second reason lies in software piracy at an all-time high due to increasingly fast connection speeds. Web applications are never stolen.

Lastly, a main drawback of web applications is that you leave yourself at risk when exposed to the public. Someone with the knowledge to bypass security in your application can destroy it. This affects every user. Taking these things into consideration, developing for the web is fun and is getting easier every day.

The First Thing To Do

Find a mentor. There are developers, including myself, who are willing to help you get started. When you have someone to guide you, answer questions, bounce ideas off of, and create challenges for you, the learning process is much more focused and rewarding. This is one criteria of being a web developer that I have learned to appreciate in the past few months.

How Do I Get There?

Skills begin with rudimentary drills. To master a martial art, you first learn a stance to hold your body in and a punch to inflict damage. Long amounts of training will allow you to not need to consciously remember these small skills when performing other things. The same is with web development.

Keep in mind that web development was my first experience programming. This was also when I was 14, so I scouted for the easier things to learn. This worked out very well for me and provided a good understanding of how the web works.

The Basics

The first task is to learn HTML and CSS. These are the building blocks of the web and are important to know inside and out. Neither of these is a programming language, but they are essential. They define your content, how it looks, and where it is placed.

Choose Your Destiny

When you have a grasp of the basics, your path splits somewhat. There are two approaches you can go to next, and both should be explored. However, it does not matter which order you do them in. My suggestion is in the order that I give them to you.

You will need to learn some sort of server-side programming language. PHP (stands for PHP: Hypertext Preprocessor) was the simplest to learn and allowed me to develop some basic web programming chops. The excellent thing about PHP is that it is simple to learn yet powerful. It has an awesome documentation that is contributed to with examples by PHP programmers and developers.

What is a server side language?
When a user visits your website, your server can generate the HTML file that is sent. The work is done on what is called the “backend” to perform operations such as inserting content into the document, looping to generate content, or more sophisticated operations.

Server-side programming can be taken in a number of paths in itself. Some examples outside of PHP include Microsoft’s ASP and ASP.net. While there are a number of people that use ASP.net every day, I find it much more complex to learn if you have little or no programming experience. As a personal preference, I don’t enjoy programming any flavor of ASP. A third alternative is Java and JSPs (Java Server Pages). This approach is also more difficult for a beginner programmer like I was.

Languages all have their strengths and weaknesses; keep that in mind when learning a server-side language. That said, my current language of choice is Ruby and my framework of choice is Ruby on Rails (sometimes RoR or just Rails). There are hundreds of frameworks out there of all different flavors, but this is the one that has worked for me. However much I enjoy Ruby and Rails, I can’t advocate it to a beginner programmer because there is too much to learn at once. Also, when you learn PHP, you may just see why Rails is such an awesome way to develop web applications.

Front-end Development

A web browser today is also a scripted browser; it can interpret code and run it (keeping in mind that HTML and CSS is not really “code”, though it does act like it). The language that has become the standard is JavaScript, not to be confused with Java. There are thousands of online resources to learn JavaScript. The main idea behind JavaScript as I see it is that it is an event-driven language. What that means is that its best uses are to respond to events performed by the user such as a click, hover, and scroll. Responding to these events allows you as the developer to create excellent effects and interfaces.

Where To Go After All That

Other important skills to have are image manipulation, photography, server administration, graphic design, and much more. These things will most likely become of interest to you as you develop websites once you realize what you use them for.

Keep On Going

The key is to never stop learning. Learn everything. That language is difficult because you haven’t learned it. Anything is learnable over time. And time is another key to success; take your time to absorb information and learn how to apply what you learn.

The path I took is what I feel is the most simple approach to learning the web. It took four years to get to a point where I can have a decent enough understanding to be able to pick up a new idea and run with it. With even some dedication you could cut that in half today due to the amount of resources available. Also, I didn’t devote as much time as I should have to it, being that I was a busy kid in high school.

My Goal To Contribute to Newcomers

In this article, I mentioned a lot of programming languages that you may or may not have heard of before. I didn’t go into particular detail on anything, so I am developing a web developer wiki of sorts to assist beginner developers. Wikipedia is a good source, but I want to focus on how each technology is used in the grand scheme of things along with what it is related to. Also, it would prove a good resource for myself.

If you’re following me on Twitter or have my RSS feed, you will be updated when I have released the Glossary. If that’s not your thing, then you’ll just have to check in now and then.

Questions or comments? Leave a response below! I’d love you hear your input.

Read comments

World of Warcraft: Good for Programmers

07/07/2010

I finished Andy Hunt’s book Pragmatic Thinking & Learning today and am amazed at the breadth of knowledge that exists in the category of “refactoring your wetware.” If you’re a programmer and have not picked up a copy, I suggest you do. There is a lot to be learned about checking and balancing how we do things as programmers.

Andy talks extensively on goal setting and how to approach your goals. I am now a firm believer that World of Warcraft (shortened “WoW”, the online gaming sensation, and in my opinion an excellent game) is a very good method of learning about goal setting.

Vision, Goals, and Objectives

A vision is the overall thing that you see yourself eventually attaining. This is what most people would refer to as a goal and can be something broad such as “I want to be an excellent programmer” or “I want to be the best WoW player.” When you have a vision, you need to break that down into separate achievable goals (goals should be other things as well, but I won’t rehash Andy’s content). Examples include “setting up a web service with Node.js”, “being an expert in Ruby”, and “reaching the maximum level in WoW.”

These goals will have many smaller objectives that work towards your goal. In World of Warcraft, goal setting is extremely easy, and working towards those goals is what the game is built on. If you want to be the max level, you have separate objectives called quests that are small items that you can focus on to progress in the game. Should you decide you want to max out your Herbalism skill, there are varying levels of skill level to work towards that help you stay focused.

It is this sort of objective based progress in WoW that helps you stay on track for achieving your goals, and there is a lot to be said for that ideology. Even though it is in a video game, goal setting is an awesome skill to have that can be learned. I would also argue that to be successful in the game requires you to be objective oriented.

Good For This, Bad For That

While I think World of Warcraft is a great way to learn goal setting, Andy also talks in his book about getting distracted from what you’re trying to achieve. That is where WoW really shines. If you let it, it will suck time out of your day. That said, have fun with it because I feel it does teach some great skills.

Video games are not entirely a bad thing. They expand our mind and make us think along with inspire us. Keep that in mind next time you pick up the controller or mouse. I like am a fan of now asking myself, “what am I going to gain from this?” That usually keeps me in check if I can simply sit down and think about it.

Read comments

Restrict File Types in Paperclip

07/06/2010

Paperclip by thoughtbot is an easy way to handle database-driven file uploads in your Rails application. It offers most options that are necessary for standard transfers and operations. While their documentation is good, I had trouble finding out how to only allow certain file extensions to be uploaded.

The simplest way to do this is to look up the MIME types for the extensions you wish to upload. Then, add these to an array that paperclip checks on validation.

For a list of MIME types, reference this list. For example, if I want to only allow PDFs, I use application/pdf.

Then, on the model that has the attached file, add a validation supported by paperclip.

# your model

has_attached_file :budget_document
validates_attachment_content_type :budget_document, :content_type => [“application/pdf”]

Microsoft and .docx

The MIME type for Microsoft Word .doc files is application/msword. However, this does not work for versions of Office after 2004. After some searching I found this obnoxious type.

application/vnd.openxmlformats-officedocument.wordprocessingml.document

You’ll need to add both that MIME type and application/msword to give full support. Also, consider this for other Office formats (.xls and .xlsx, .ppt and .pptx). Check Wikipedia for some more content types for other post-2004 XML formats..

I hope this helps anyone like me coming from frameworks that have this built in.

Read comments

As a developer, I want to blog, So that I can share

07/02/2010

For whatever it is worth, I have my opinions on the way the blogosphere works. In the design and web development industry, there are a few things I can’t seem to understand. As a new blogger, there are a few items that I will stick to that I feel are standards bloggers should adopt.

  1. I will not write a “list post” in which I either aggregate 20 best-of’s across the internet or summarize 10 quick tips.
  2. I will refrain from using the phrases “An introduction to” or “Getting started with” in any of my titles.
  3. I will ensure that the topics I present promote only healthy discussion.

The thing about list posts and intro tutorials is that we already have sites for that. Everyone and their mother has a website that “delivers the latest design and web development content”.

I Have Been There

The blogs that were teaching me inspired me when I started learning about the web. I wanted to teach, write, and have a popular, “well-read” blogazine. Then I realized that there are TONS of people that also want the same thing for fame, fortune, or enjoyment. So for now I am sticking to just learning.

I’m not here to change the world. I’m here because I have opinions to share and things to teach! Soon there will be some original content and new ideas. I only felt a need to proclaim that I will have a purpose beside regurgitation.

Read comments

Finding A Community

I started learning about the web in 2005, back when “Web 2.0” was the best thing since sliced bread and JavaScript rollovers were cool. A lot has changed since then, but for me, the most change has occurred in the last few months. And it all started with falling into a community.

Take The Opportunity

When I switched my college major from Music to Computer Science, I started receiving daily emails about job postings. Not much later I received an email about an all day camp that was happening run by a local user group. At this point, Ruby on Rails was one of those things that the “cool kids” who knew what the hell they were doing were into. But I took that opportunity attended the camp.

After that, I found out that there were tons of AWESOME people in my town that were interested in helping others learn Ruby and web development. I joined ECRuby and landed a job at the university learning Rails. Now, they’ve helped me learn and become involved in so much, and my knowledge of web development has broadened significantly.

What To Do

There are people in your local community and online community that are there to help you. I’m still no expert on Rails, but people including myself are willing to help you get your start. Make friends, attend code camps and conferences (I need to make it to a conference eventually), and get interested in everything that is out there.

Read comments