My audience is mostly people who are interested in becoming professional programmers, but also includes anyone interested in developing at all. For any developers reading this, please critique anything I say! Please! I know I'm still relatively young in the field, and I'd love input. I'll be transparent about my earnings, so you can get a feel for what a web developer in Salt Lake County, Utah might make.
I goofed around with programming languages during my teen years, seriously studied PHP for a few months the fall after graduating high school, then got my first real job the following spring making $14/hour.
The Long Story
High School / Beginnings
My very, very first programming experience would've been one of four things, that all occurred during high school. I'm not sure which happened first, so I'll just list all three!
- Geocities. I lied, this one was definitely the first of the three. Also, it's not technically programming, but it's a good precursor. If you're not familiar with Geocities, it was a free service by Yahoo (I think?) that allowed you to drag and drop elements so you could build a webpage. Mine was incredibly ugly, as most websites back then were. It's actually been archived, if you're interested in seeing it :)
- TI-83. During my math class my senior year, I looked at the code for some programs (games) on my calculator, and I copied bits and pieces of code around until I understood what they were doing. Doing that, I was able to program a simple game. Basically a ball ("O") would fall form the top of the screen, and you have to move your cup ("U") to catch it. If you missed, the game was over and it showed your score. It also logged a high score. In retrospect, I'm amazed I did this without Google haha (that's only half a joke).
- IPB forums. This also was hardly programming, but important to where I am now. Invision Power Boards are built on PHP, the main language I work in today. I managed a forum that was mostly frequented by my high school buddies, but we built a memorable, if small community. The only "programming" aspect was copying forum mods from websites into the existing code. Many people who ran IPB forums did this same thing, but looking back at it, it was extremely hackish. You would find a certain bit of code, and paste another bit of code directly after that. Obviously, if you used more than one mod on your forum, it was likely they'd break each other.
- I also took a Java class in high school, but I have so few memories of that class (except doing nothing in the class) that it's barely worth mentioning. My teacher was cool though :)
Between those four experiences, I picked up some HTML, a little TI-BASIC, and a very small amount of PHP and Java. Nothing worth anything useful, really, but enough to pique my interest.
College, Java, PHP, and First "Jobs"
After high school, I went to a community college where one of my classes was Java. It was a good class where I learned a lot, and surprisingly still remember bits and pieces more than nine years later.
While I was studying Java in class, I started practicing PHP on my own time. If I recall correctly, I had a couple friend who recommended it. And the community has always been so big (lots of online tutorials) and the language has always been so simple, that's it's an easy one to pick up. I mostly learned by looking at examples on w3schools.com and writing code in Notepad. I believe I purchased a server from GoDaddy for about $3/month.
I looked into programming, because like every teenager, I wanted to make video games. I quickly learned that PHP is not a good language for video games. Nowadays it can serve as a backend for a web-based game, but still not ideal for games xD
Within a month or two, I thought I could conquer the world. In retrospect... what did I even know? Haha I can't remember much. But it felt cool! I fell in love with web development because it was so easy to write some code and then turn around and show it to friends.
It was probably around this time that I took my first freelance job. I took a job from a guy I found on Craigslist. Probably charged like $150 (which I would never do now). Probably wrote some terrible code. But hey, I got paid, and I don't regret my decision to be adventurous.
I also took a part-time job from my brother-in-law, working on his website and helping him run his car lot. Again, probably wrote terrible code, but I was getting paid, so hey. Around this time, I did some programming work for my brother and dad. I specifically remember being really lazy and tired (I'd fall asleep at work sometimes haha!) which just makes me feel really grateful they were paying me at all. At each of those jobs, I was probably making somewhere around $5 and $8 an hour.
First Real Job
The best part of all of this was that now I had a resume, even if it wasn't anything special. I had three or four items I could list, and say "hey! people have actually paid me to program before, you should too!" I think this was extremely helpful in my early days.
What I'd call my first real job was what I got in March of 2007, at a place called Heritage Web Solutions, I believe it was my first full-time programming job. They happen to be out of business now because of tax fraud (hah!) but again, I'm grateful for the work experience I could put on my resume.
When I interviewed there, they asked me how I'd rank my PHP skills on a 1-10 scale. I said seven. SEVEN. I don't know if I'd call myself a seven even today. I was a cocky little sucker, but again, it probably served me well.
They were what many refer to as a "chop shop." It's a programming place where you have a bunch of developers (we had about 20 PHP guys, and probably 50 HTML/CSS guys), clients come to the business and ask for help making a website, and the company produces a website for very cheap. Usually low quality too.
I earned $14/hour, and I thought I was rolling in the dough. I started spending money like mad, because never in my life had I had access to so much. And to be fair, less than a year out of high school, I was making more money than many middle school and high school teachers. Which is a real shame for them, but a nicety of the programming world. Take that how you will.
So in short, I was passionate. That was probably one of the biggest strengths I had in my early development days. Honestly, I was lazy, and I didn't study standards or proper techniques much, but I was passionate. When I started that job, my code was terrible. I remember doing things that now make me cringe. But there's something to be said for learning to do something while being paid to do it. I got much better very quickly. I still wasn't very good when I quit nine/ten months later, but I was definitely better.
The Long Job and School
After quitting my job and serving an LDS mission for two years, in 2010 I jumped right back into the field. I got a job at another "chop shop," but this one was much smaller, slower-paced, and we wrote better code. Despite only having about one year of real-world programming experience, I quickly became the lead developer at this new job. I was also the only in-house developers, but we had 3-5 outsourced developers that I'd often play as a minor management role. Again, not knowing the value of this, I feel like I really lucked out in that regard.
I was at this job for the next 3.5 years. My boss was cool enough to let me telecommute, so I could work while I lived with my parents, and I could work while I was going to school and living in Ephraim, Utah. Fantastic combination for that time of my life. Again, mostly unintentional, and I feel like I was really lucky. I was able to pay for all my college tuition and board while working and remain debt-free while getting my associates degree.
Quick note: I didn't study web development in college. I took one or two relative classes, but honestly I was way ahead of what they were teaching. Work experience is great that way. Kinda like being thrown into the deep end of the pool to learn to swim.
Also, colleges tend to be behind the curve when it comes to programming. And how wouldn't they be? Businesses have to keep up with technology if they want to thrive. Professors on the other hand typically want to teach what they learned, whether that be 5, 10, 30, 50 years ago. Unfortunately that doesn't work in the IT world. To be fair, not all classes are this way, but many are. On th
Being at one job for a long time had pros and cons. I learned a lot in that time, but I also got too comfortable doing the same stuff every day. One of the best things that happened to me at that job was when we hired another, more experienced developer who taught me a thing or two. This is when I really started picking up OOP, MVC, and more specifically, CakePHP. All good stuff.
By the time I left this job, I was making about $20/hour.
Hop, Skip, and Jump to Now
I don't want to divert too much from the subject matter (learning to program), so let's wrap this up.
The last few years, I've had a few different jobs, all of which involved a lot more OOP than the other jobs I've talked about. Which is great! OOP is wonderful, and I'm happy to be getting better at it. I think there's also a big salary jump when you move from procedural (non-OOP) to OOP. With all these jobs I've earned $30-$33/hour.
Other Thoughts and Conclusion
I think I'm a little behind the expected salary for my experience, but I'm okay with that for now. I more or less took the last year off from the work world, so I'm willing to take a pay cut to ease myself back into the workforce. A few programmers I know with similar experience are making $40-60/hour.
As a rule of thumb, you should charge twice your full-time pay when doing freelance work. I charge $60/hour at the moment. I feel good about this rate, because freelance projects are usually pretty straightforward, I know the code in and out, I'm very focused while working in short ~2 hour bursts, and overall my time is extremely productive.
If you think you're interested in developing, it is undoubtedly a good field. I've done research comparing different careers, and the pay is excellent, especially based on pay per years of experience, and pay per education level (most jobs don't care if you have a degree as long as you can do the job). At 27, I'm making more on my own than the average American household. Most jobs have salary with benefits, and the job growth for the industry and huge and likely will not decrease anytime soon. People are always needing more computer and more systems and more programming and more developing.
If you want to program games, go with C++. It's easily the most popular language for games.
If you want to make more money than I do, go with Java, C++, or an obscure language that other programmers don't want to touch. The danger, of course, with that last option is that your skills won't transfer to other jobs as easily.
When it comes to programming, web developers (like myself) typically make less than software engineers. Do your research first by looking at pay rates of different languages.
New languages are tricky, because they often earn a lot, but often phase out quickly too. A few years ago there was a lot of excitement about Ruby / Ruby on Rails, but it's really died down now as the honeymoon phase has worn off.
PHP is an easy language to learn, but doesn't necessarily encourage good practices. You can learn those regardless, but it's something to keep in mind.
I wish I would've been more serious about learning good practices from the beginning. This is one pro of going to school to learn programming, I've heard they really drive good practice. But you can also do that on your own. Just have to be conscious and passionate about it.
Use Git (or similar, but not SVN). Just do it. It's great practice, and will save you many headaches.
I often say that 90% of programming is Google, so get good at googling. That might sound like a joke, but really, learning how to ask Google the write questions is important. It's also important to get in the habit of saying "I'm not sure I know how to do this," or "There might be a better way to do this," or "It's possible someone has written some code to do what I'm trying to do" or even," I know how to do this, but I wonder how other people do it," and then Google it quickly and at least see what's out there. You will learn so much this way.
On that same note, I think the best developers are open-minded developers. Always be aware that you can improve, and be passionate about doing so. You will never be a perfect developer because things change so quickly.
Thanks for reading, feel free to comment with any questions, thoughts, or criticism!