Ask HN: How did you get from learning to code to making your first dollar?
On HN, there is a lot of advice for people just learning to code and a lot of advice for people who are making some money with their startup/side project. However, I'd love to hear advice about the steps in between, that is, advice from real developers on how they went from a basic knowledge of coding to actually landing their first paid internship/job/etc.
Some questions to consider:
-Did you learn to program in school or teach yourself?
-Did you do unpaid work to establish yourself?
-Roughly how long did it take you from day 1 of learning to day 1 of being paid?
-What was your first gig?
My hope is to make a website with different timelines and step by step guides that shows new programmers how to go from finishing a basic tutorial like Codecademy to getting paid for software development.
72 comments
[ 1.6 ms ] story [ 119 ms ] thread- The only upaid work I did was side-projects or OSS contributions.
- Probably like 4 or 5 years. I started in high school, and then started doing freelance gigs in college.
- First gig was with a local magazine. I was doing Photoshop to HTML/CSS work (I also know Adobe CS stuff). Then I started doing PHP scripting for them. Then I moved on to a couple WordPress sites and more PHP work. Now I have one part-time client I do more PHP work for, and I take on a gig in Python or Ruby every once in a while. Though I'm looking for Clojure work.
June 2013 - decide to change careers and become a developer. Learn basics of looping, branching and data structures in Javascript. Apply to code bootcamps.
July 2013 - Accepted into Epicodus. Complete class prep work and now understand basics of HTML, CSS and JQuery.
August thru November 2013 - Attend Epicodus. 40 hours per week learning Javascript and Ruby.
Feb 2014 - after lots of interviews, I am offered a 6 week contract with the possibility of being hired full time at the end of the contract.
April 2014 - brought on full time as a Junior Developer
My background was in Industrial Engineering, which is part design, part engineering, part lots of math and BS courses that I've since long forgotten. I think the degree helped me to be more user-oriented, but I am pretty sure it had nearly 0 to do with my ability to code.
Now, let's get to the paid gig. Technically speaking, I think my "paid" digs were for friends and family. I am saying paid because of course, they all want a discount and you end up being paid minimum wage for a while :) My first real gig was a great experience, but a total disaster, so far as payments were concerned. The guy was very legit, up until the point where he skipped town and didn't pay any of his developers. I was out like 5k?
All-in-all, that was a great experience and a kick in the butt. It opened my eyes to the real sucky parts of freelancing business, and eventually led to me building Scoutzie.com where we built plenty of tools to help freelancers shield themselves from ass clients.
Now, back to making money. This might surprise you, but the most money we made because it had nothing to do with ability to code. In the early version of Scoutzie, circa early 2012 when we just got into Ycombinator, my co-founder Jenn said that it was time to make money. I was actually afraid - charging people money for your online product - that's crazy! So, Jenn put together a WuFoo form[1] and we pushed it live.
It was absolutely astonishing when a day later someone actually paid us $5,000 to find them a designer, without even talking to us. It was totally unreal!
So, my point here is - you don't need to know how to code to make money. Sure, we had an original product that required code and was running and collecting interest, but the actual money part was done manually, for the longest time.
If you're learning to code, that's awesome, but making money and coding has probably little to do with each other. You can be the best developer on the planet and completely suck at making money, or you can hack together a few lines of code and get a consistent income month-over-month[2].
[1](the forms are all private, but here's an idea of how the product started to scale once we realized that people were willing to pay -> http://cl.ly/image/2j2C3m2k3x2A)
[2]Right, I forgot to mention, I built PresenterMate.com once, juts for fun, and it's been in App Store ever since. People are still paying money for it every month, which is very cool :D
A couple of years later, my uncle got me a summer job where he worked. That was right after my first year of comspci. I would write bash scripts to automate manual business processes. That's when I first got paid, but it wasn't real software development.
After my second year of uni, I landed an internship at a startup. That's when I first got paid for writing real production code (python).
So, it took maybe 6 years total. However, I think coding is much more accessible nowadays. I'm sure it's possible to start making money in less than a year if you've got drive and passion.
I think that a great way for people to break into the industry is to do jobs for those who have even less software experience than themselves! These people may not pay much but they have lower expectations and will give you time to learn.
First I had to graduate from grade school, then do the middle school thing, then sit thru the high school thing. I guess 14 or so years?
(Edited to add, at the time there was a moral craze about credentialism; thou shalt not hire a programmer without a BS degree. At least if you didn't live on the coasts. And this was about a decade before the dotcom craze)
There are also some moral questions, like I was being paid to test impaired telecom circuits for an end user financial institution, but I saw I could replace 90% of my labor with a "telix" script (like the procomm terminal program but arguably better, or kind of like an inferior version of "expect") of moderately short length. So, seeing as I worked alone second shift, I was somewhat less productive for about one night as I wrote my script, and the for the next ... long time ... I read magazines and did my college homework (for the kids out there, magazines are like a static website, only updated monthly, and they print it out for you... like another obsolete technology, the "newspaper", but updated monthly rather than daily) and eventually graduated and got a "real" job, etc.
So my first gig was automating my job for about one day and then maintenance of legacy code, and monitoring the automation for performance.
My boss eventually caught me because I got bored and started rewiring things and generally going "above and beyond the call of duty" and I figured I was about to get fired or promoted; turns out he wanted to promote me but there were no job openings between the time I got caught and when I graduated college. Which is how I dodged the bullet of maintaining stock trading COBOL code for the rest of my life.
I did projects I thought were fun. But I finished them.
I found work by running into somebody who needed programming done. I was at work at a garage changing oil on cars for the summer. A guy came in, we started talking. Turns out he was a bookkeeper who had just bought a computer and was looking for somebody to program it.
I don't think there was more than a year between when I started playing with computers and when I made my first dollar. But everything I did during that time? It was for somebody else to use: games, utilities, whatever.
I ended up writing an accounting system in BASIC for an Apple IIe. Fun times. I made $250 and probably put 100 hours in on it.
Side note: ran into the same guy like 15 years later. After we said our hellos, I thanked him for giving me a chance to break into programming. He told me that he still used the program! Asked me if I could port it to Windows.
So I did. I charged him a lot more the second time around :)
Key point - it was not "work". Very true.
"I was at work at a garage changing oil on cars for the summer. A guy came in, we started talking. "
Key point - You were social enough to hold random conversations with someone that lead to something. Very opportunistic. That's more important than knowing the best way to code in my opinion (in an entrepreneurial sense I'm not talking about working at google for example).
"I ended up writing an accounting system in BASIC for an Apple IIe. Fun times. I made $250 and probably put 100 hours in on it."
There it is again.
My experience was the same. I taught myself and it was fun (Unix system). I didn't have a particular agenda in learning enjoying it was enough. (I'm not a programmer but can program somewhat but more importantly have made money from being able to program. But I learned because I enjoyed it not because I expected to make money from it.) Back in the day of 1 book, maybe 2 if you went to the technical bookstore at a University. Automating things at a company that I started.
I taught myself at first, and i'm currently in school.
>Did you do unpaid work to establish yourself?
Yes, but also because it's more fun.
>Roughly how long did it take you from day 1 of learning to day 1 of being paid?
Probably roughly 2 years or so.
>What was your first gig?
My first paying coding gig: I was working at a company while doing web design on the side, and someone else in said company (at the graphics end of the building) dumped a client on me because said client was a flake they no longer wanted to deal with them.
My first paying design gig: I won a contest (same company) to design a logo for a campaign, first prize was gift certificates.
September 2013: First paid gig after completing 2 personal projects
From my first project to my current ones I increased my rate at $5 a month for any new projects that I signed. It has gotten me to a livable wage from coding within a year. As of now I charge $120 an hour and even if I don't have 40 billable hours a week I can still get along. The key is be around people building things. They will inspire you and help get you projects. Luckily a few of my friends started projects in college so my first 6 months of client work was easier to adapt to. After that referrals started coming in and the business started to grow at a much more serious pace.
A specific tip is to always try to get a reference / testimonial from the customer. And always document your projects with screenshots etc. My paper credentials when I started out were really shitty, so the "portfolio" of screenshots and testimonials were all I could give to prove that I had at least some experience.
My story:
I started mucking around with VB 4.0 because I wanted to make games. Got a copy of "Peter Norton's guide to Visual Basic" on a recommendation from an IRC chat room and started reading and doing the examples. From there I did small utils for my own use, small games etc.
At the time I worked in a games / software shop and one day some guy came through the door looking for something that could format a huge data file. There wasn't really any shrinkwrap software that could do it, so I offered to make him one. That was the first gig and I charged like 400 bucks. Felt huge at the time :-) By then I had been "hobby programming" for 1 or 2 years.
The first assignment really lighted the fire though and I started trawling any channel I could find for assignments, programming competitions, charity projects and the like. Anything that paid money or could be used in a portfolio.
The channel was mainly Usenet, whereas today it would be sites like oDesk and the like. Eventually got a part-time job with a young entrepreneur, where I learned some HTML, spent days getting a mouse to work on Linux and cleaned and sliced carrots for lunch (which I thought was waaay below me, but it had to be done :-).
Read a whole lot of different stuff, and applied to a lot of companies. After 6 months to a year I ended up in a more professional company doing web "programming" part time (HTML and a bit of JS basically). A years time later I got full-time and into more serious programming.
After ~5 years I shifted into management and ultimately consultancy, but still program quite often for my own purposes.
I've been programming most of my life (thanks to the 80s UK/BBC home computer revolution), but during high school the web was becoming A Thing. When I was about 14/15 I taught myself HTML and Javascript from online tutorials and trial & error. I volunteered to build my school's website mostly because nobody else was interested, and in the process started learning server side programming (ASP, I think).
I saw a job ad for a summer intern in a magazine and replied to it, ended up learning VBscript and writing a couple of reasonably high-profile websites over the summer for real money. I also started up a few side projects, none of which made money -- or were designed to! -- apart from an e-commerce project with some school friends.
From learning HTML to my first paycheque, probably about 1.5 years? In my spare time alongside school.
What would I change if I were learning from scratch today? Not much, in terms of learning as much as possible and working on interesting projects. Volunteer to build websites/webapps/mobile apps or help out with those which are creaking along. I wouldn't expect to make money overnight but if you can solve people's problems with code then you might be able to align interests despite not being an experienced programmer :)
- Yes, but there was no ship date. "When it's done"
- Nearly 2 years, however I received an offer to do entry level front-end web development 8 months from starting that I declined because I had received another (non-programming) job offer that paid a bit more. I was not in a rush at the time.
- This is my first gig. I started two weeks ago and do support/patch issues for large medical records and clinical management software. It is overwhelming to say the least with a very large line count in the repo and a lot of moving parts and the threat of patient data compromise looming.
Went to college, majored in Computer Engineering. In my sophomore year, I got introduced to web applications. Then I came up with an idea, bought a few books on PHP and MySql and implemented the idea in about 5 months in my junior year. So technically, my first buck is from ad revenue and affiliate sales from that.
Didn't make the big bucks till after graduation...went through the whole career fair, interview, etc.
Since you're the one creating the timeline, I'll let you decide what you want to consider as my day 1, and day 1 of being paid. Not sure if people nowadays have the patience to go through an engineering curriculum if they just want to learn web development.
It took about a year before I landed my first gig which I found through craigslist.
Just simple jobs that would take someone at full speed less then a day to finish. And then I'd say that I'd deliver in 5 - 7 days so I knew I could bang my head against something silly for a night without getting into trouble with timely delivery. I was always on the lookout for stuff that would make me learn something new yet at the same time I knew I could nail so to keep my feedback very positive.
Never looked at the hourly wage as it's more a bit of beer money to learn something that you also would've learned for free. Under promise, over deliver.
Best feeling was one client that was so happy with my work and needed something done fast (I was a bit further in the game then and very comfortable with my estimation of the work that needed doing and me being able to do it) that he hired me for 1,5 weeks and paid $4200,-. Felt like a sort of rite of passage. Especially since he was really happy with the work and thought it was worth every penny :)
Good thing about sites like Freelancer.com is that although the money is shitty you learn a lot about dealing with customers without tainting your local market. I add nothing from Freelancer to my portfolio I use locally and I don't add anything from my local portfolio to my Freelancer one as I don't want anyone to connect the dots and try to get me cheapass.
Getting the first job is very hard without any reputation and reviews on the site but it gets surprisingly easy once you have a couple happy customers who've said nice things about you.
Taught myself JS, then PHP/HTML/CSS, then graphic design, then back-end stuff (Ruby/Python), some regexes, algos and how to use Linux at a basic level. I'd actually built some stuff as a teenager (websites and mods/tweaks for Homeworld2 in Lua), but I don't count that.
> Did you do unpaid work to establish yourself?
Yeah, quite a lot. Several small sites and a couple of slightly larger ones for my day job at the time - I was working three days a week for a learned society and studying my off days so I did bits for them. A lot of that looks pretty cruddy now, but y'know, that's learning for you.
> Roughly how long did it take you from day 1 of learning to day 1 of being paid?
Started learning in July 2012, got two job offers in June 2013.
> What was your first gig?
Working for a startup making scheduling software. Started as a UX/UI dev doing a bit of the back-end stuff but after re-doing the front end spent a lot of time putting in tests and re-architecting things. It was frantic but good for learning fast. I work for a mature (but still small) company now, which is a nice change.
-I taught myself.
-I learned to program while in a non-programming role, so I wasn't making programmer money at the time, but I was paid.
-It took me about six months to move into a programming role.
-Web developer at a small agency.
Long answer:
When I got out of the Army in 2009, I was hoping to get into something networking related, preferably security. I didn't have any experience in the area, but I had always had a knack for computers. However, after nine months of job hunting, I was ready to take anything remotely computer related and ended up accepting a position as a customer service rep/QA tester at a small (4-6 employees) web development agency.
My boss gave me a lot of freedom, so when I wasn't tied up with customer support or testing I worked on speeding up processes that were extremely tedious and/or time consuming. This agency had been around for more than a decade at this point, so there were a lot of things we did a certain way just because "that's how we've always done it." For example, at the end of each month we would review the hours logged against various client projects and create invoices manually. This process generally took several days because we would print out hard copies of all the time entries and mark up the sheets with pens and highlighters, then transfer that back to Word documents to be printed and sent to the client. By writing a little code and moving to an Excel spreadsheet for reviewing the logged hours, I was able to cut the time down from several days to "just" 3-4 hours. It was like magic!
I continued doing this kind of work in my free time until one of our developers left for another company. I expressed interest in moving to a development position and got the job. At this point, I had been with the company for about six months. I honed my skills for a while and got involved with some OSS communities and started a blog, both of which served to really help me grow as a developer. About a year and a half after moving into the development position, I moved on to the company I'm with now. I'm still doing web development, but not at an agency - I work primarily on internal tools and processes for a company.
Did unpaid work that dis-established myself. I did a bunch of temp office work putting myself through college; got in trouble because I'd fix their computers and help them with their database, but the big box of papers were still not alphabetized at the end of the week. Got fired a lot for that.
First gig being paid for active computer stuff was "office automation"; building Word Perfect macros to automate the boilerplate for psychiatric reports. So, day 1 of learning was years before day 1 of getting paid. Maybe as many as 10?
I think your idea is a hazardous one: you don't complete a tutorial and then go look for some work, or at least not and be happy later. If you do that, then you're a novice at the techniques _and_ at the subject matter.
That site was never really finished, as by the time I hit high school, almost everyone was using Facebook, and my idea seemed redundant. However, through high school, I kept up on a number of side projects (mostly in Python, and Django where appropriate), and also participated in Google's Code-In (a great experience for a high school student who'd never contributed to anything with more than a few users, so far. Would definitely recommend to anyone at that age interested in CS). That was my first "paycheck", but it hardly counts, as it was only ~$200, made from an organized competition. One of my side projects was a Chrome app that I sold for $5 each, and I made a couple hundred dollars off of that, too.
I got my first real job (part-time) when I moved to the Bay Area to go to college studying CS. Conveniently, a startup just off of the campus was looking for a Python/Django dev, and the skills I'd acquired on my own doing side projects were enough that I could dive into a moderately large codebase with a good idea of what was going on (and this was before I'd even started classes). I'm still with that startup now.
So, the timeline went something like this: ~2007: taught myself basic programming. 2009-2010: made some money in Google Code-In and selling an app. 2013: went to college, got employed at a startup.
I took a high school course in BASIC in '81 or '82, and am self taught beyond that point. Similar story for electronics. I did those things for fun while pursuing a mainstream math / science major in college.
At that time, at least in my region of the country, CS was almost exclusively data processing on mainframes. If you wanted to get into anything else, like scientific programming or microprocessors, you could do so just by being crazy enough to volunteer for a task. Many people bought their own computers and brought them to work, to bypass the computer bureaucracy.
A friend of mine was an electronics tech in a factory. They bought some sort of computerized test gadget. The boss asked if anybody wanted to learn how to program it. My friend was the only guy who stepped forward. I think he was interested in seeing if he could use it to run his model railroad. It launched a new career for him.
During college and grad school, I used any computer at hand for any task that I could come up with during summer internships or research projects. I found kindred spirits among the professors, who were doing the same sorts of things.
Many of those people were also ham radio enthusiasts, and it was a similar mind-set.
My experience didn't lead to a programming gig per se, but my programming skill has probably helped my career greatly over the years. I've done things such as designing computer controlled factory machines, modeling, prototyping, embedded gadgets, etc., but have not written "production" code.