top | item 8355049

A Site That Teaches You to Code Well Enough to Get a Job

250 points| cyphersanctus | 11 years ago |wired.com | reply

196 comments

order
[+] embwbam|11 years ago|reply
Last year, I tried something new. One of my friends, a Mathematician, and the smartest guy I know, was working at the library. I told him he should get into programming, and hired him as my "Apprentice".

I was mentoring him directly. He was working right next to me. He was learning a lot, I was enjoying the teaching, but I could also hand him boring stuff (CSS) and he would love to do it. I paid him peanuts ($12/hr) at first, then I got him a job for a company making around $60k after about 8 months.

This is how apprentices used to work: the master (mentor is a better word :) would find the work because of his reputation, would handle the most interesting and difficult work, and the apprentice would do the routine stuff and slowly get more and more competent.

Has anyone else tried this? I think it would be cool to try it at larger scale, with a whole team of skilled senior devs adopting apprentices to help them with their work.

[+] tjbiddle|11 years ago|reply
This is what a properly managed internship (Or Jr. Developer's first 3-6 months) should look like.
[+] oAlbe|11 years ago|reply
Reading this kind of "experiences" always make me wonder if there's something wrong with me. As it seems, I am the only person in the world that can't find a mentor willing to invest a tiny bit of his/her time for teaching. And I didn't even ever asked for "peanuts".

It would be amazing to have the chance to learn from and improve my skill with an expert developer, and I'm sure a lot of people will agree with me.

Doing this at large scale would end up creating a "generation" of highly capable developers - and you will know that because you trained them yourself - who will eventually become the mentors and, in turn, teach to the next generation.

[+] 300bps|11 years ago|reply
Has anyone else tried this?

I've tried it with several people with varying degrees of success. The only real insight I've had from the process is that there are some people that just can't be taught programming because they have no interest in computers.

They're only making a half-hearted attempt to learn because they "hear you can make a lot of money programming."

Even junior level web programmers need to know a lot of non-programming topics to get their foot in the door. They need to know what a domain name is, what an IP address is, what a web browser is, what a file is, what a folder is, what a hard drive is and how to access it, how to back up files, how to copy files, the difference between http and https, the impact of various browsers and versions, etc, etc. All sounds great until you really try to teach a complete computer novice how to program. They just have incredible gaps in their basic computer knowledge that are not easily overcome.

[+] jiggy2011|11 years ago|reply
How much were you teaching him personally vs pointing him at the right resources and letting him mostly learn himself?

The biggest concern I think that a lot of people have about this approach is that your own productivity would suffer if you have to spend too much time handholding the apprentice with their own work. If the person is already a mathematician then they obviously have an advantage because a lot of the logical parts of programming will already make sense to them. I wonder how well this would work if you applied it to someone with only a basic education. Also people are used to school learning where they are micromanaged so might have problems shifting to this model.

This approach seems to work well in fields like plumbing where an apprenticeship will consist of 4 working days a week and 1 day of classroom learning at a technical college. The difference between plumbing and programming though is that plumbing is a far more standardised set of skills.

[+] theFish|11 years ago|reply
I was an apprentice to a screenwriter and it worked exactly the same way. Best learning experience I had. And also the most efficient. I learned a lot, met influential people, got familiar with some tricks of the business and eventually got myself a show. All that in just two years.
[+] Schweigi|11 years ago|reply
We have this apprenticeships in Switzerland for all kind of jobs including IT. Those apprenticeships do always end in an official degree which is controlled by the government and is the same for all professions (e.g. mechanic, electrician, nurse, construction and so on).

For IT there is one apprenticeship with Software Development focus which takes 4 years and is split between school and working in the company. The content is defined by an IT company association and all companies providing those apprenticeship need to stick to this defined content. Those apprenticeships are usually done when people get 16, so they have this degree when they turn 19/20. After that they can go to university to do a Bsc or Msc if they want. I think its quite a good system because people get introduced early but slowly to the working world and also have a lot of time to learn other job related things like project management or office politics.

[+] jbhatab|11 years ago|reply
I taught myself to code up to a 65/hr job in 2 years and trained a friend to a 25/hr job in half a year.

Very glad to see others doing the same, I can't wait until online education mixed with mentorship proves to be a viable education option.

[+] jdreaver|11 years ago|reply
I would have loved an internship like that! I'm afraid that some would accuse you of oppressing your friend by exploiting his labor at the unlivable wage of $12/hr though :)
[+] gotrythis|11 years ago|reply
I did this years ago. Hired a 16 year old kid who was about to be homeless, and trained him, and then he got a good job as a programmer a year later. Felt good and will do it again.
[+] j_s|11 years ago|reply
What tools did you use? Was any of the time spent working together remotely? I would love to help people out but I don't see it fitting into my schedule easily. (It sounds like you did this as a freelancer, but I would be doing this outside of my full-time job.)

The tool I am looking into next is http://bigbluebutton.org/

[+] reefoctopus|11 years ago|reply
I did something similar. Two friends of mine were unhappy with their jobs. One was a writer, and the other worked as a wordpress administrator. I started a somewhat informal weekly class, and six months later they both work as software developers.

It absolutely works, and it's certainly more efficient than a four year degree.

[+] fnatalie21|11 years ago|reply
I've heard that this is what Germany still does.

For every profession, there is an apprenticeship you can enter for it. You get paid (unlike an internship). Apprenticeships start after highschool or college.

I heard this years ago, so I can't remember the exact details, but maybe and German can speak up about it.

[+] godDLL|11 years ago|reply
I have many pupils like this, all over Israel -- two small business owners, and the rest hold high-paying design, tech and programming jobs.

I got to experience the joy of accepting my own student's invitation to join a startup where he has been employed as programming lead.

[+] Ryel|11 years ago|reply
Great idea.

Are there any websites for finding people like you who are in a position to mentor?

I guess I'll start asking around because I'm in a position where I could really benefit from working on more projects but I'm not skilled enough to take on the responsibility myself.

[+] bdcravens|11 years ago|reply
I'm doing that, but I'm paying more than $12/hr (more like $20)
[+] keeran|11 years ago|reply
Did exactly this and now he's earning market rate as a Rails developer.
[+] MrJagil|11 years ago|reply
Excellent how this problem is continuously attempted to be solved.

As a wannabe programmer, one thing I always lacked from these sites was the ability to somehow see my code live. I.e. it's fun to write html and css on codecademy or python from LPTHW or whatever but how on earth do I get it on the web or assembled into .app? In actuality, the complexity that surrounds DNS providers, server apps (or whatever you call filezilla etc), server providers (here i mean heroku, AWS, Cloudflare etc), those weird githubs and repos that people chat about etc etc, is way more deterring than actually learning what a "class" is.

Learning is fun; endless googling is not.

[+] GuiA|11 years ago|reply
And this is why I always use PHP as an introductory language if I have to teach web dev; the setup part is much more straightforward than it is for Rails/Django/etc., and you don't have to spend a ton of time teaching dozens of concepts (MVC, routes, templating, git, unit tests, ORMs, etc.) before the students can have mini web apps written.

Some programmers balk at the idea of teaching PHP with plain HTML/CSS instead of teaching using Rails + Angular + all the fancy crap they like, but I've taught web dev to over 500+ students in the past 7+ years (and programming/CS to about twice that), and it's worked like a charm (and the people who get the most upset by that notion are often those who have taught 0 students).

My girlfriend is an art teacher, and when they teach new students they don't start right away with watercolor or oil paints; rather, they start with materials that are easier to handle for beginners (e.g. plain pencil), so they can focus on the basics before tackling the more subtle and advanced techniques. Why are we trying to teach programming using all the fancy tools and technologies used in production systems?

[+] pjmlp|11 years ago|reply
> Learning is fun; endless googling is not.

At least you have Google, Bing, Yahoo, ...

Kids these days. :)

[+] JonnieCache|11 years ago|reply
>In actuality, the complexity that surrounds DNS providers, server apps (or whatever you call filezilla etc), server providers (here i mean heroku, AWS, Cloudflare etc), those weird githubs and repos that people chat about etc etc, is way more deterring than actually learning what a "class" is.

That stuff is 80% of practical software engineering. The other 20% is communicating with other people.

If you want to be good at your job, you've got to put in the hours to learn the stuff that isn't in the books. The same as any other skilled career. If you want to worry about the niceties of programming languages all day, go into academia.

[+] enraged_camel|11 years ago|reply
This is why I loved the Rails Tutorial when I did it about a year ago: it doesn't teach you just writing code, but also testing that code, managing it in a version control system, uploading it to Github and deploying it on Heroku. It's basically an "end-to-end" guide that explains each step of the way thoroughly.

https://www.railstutorial.org/

[+] zo1|11 years ago|reply
"Learning is fun; endless googling is not."

Searching for knowledge/information, discovering domain-specific terms, then finding their definitions... these are all very important parts of learning.

Any time I've had to get into a new domain, I start off with searching. Then you discover new terms specific to that domain, then you learn those terms, then you apply those terms to learn more in-depth topics about the domain you're learning about. Before you know it, you're a jack of a new domain (or more than a jack, if you put the time in).

[+] Nicholas_C|11 years ago|reply
I really got bogged down with that crap when learning python as well. I love coding but there was a point when I was launching my apps and there was just one thing after another that was slightly wrong and taking quite a bit of time to Google/find/fix them. That was my main problem with Django. I've since been using flask with PythonAnywhere[0] (I don't work for or have any connection to them other than being a casual user) and it's extremely simple to launch an app compared to alternatives that I've looked at. It makes writing web apps fun because you can focus on coding and not wondering why your templates aren't loading or whatever.

[0]https://www.pythonanywhere.com/

[+] philbarr|11 years ago|reply
It would probably be pretty easy to create a tutorial that gets someone to set up a github account, introduces the basics of git/html/css/javascript, and ends up with the tutee having a Github Page that demonstrates what they've done exposed to the world on the internet. Include the DNS setup via cloudflare if they want to buy their own domain.

Are there not tutorials like that?

And then there would be next steps, using free tiers of online services to add a backend etc. There's quite a lot of places to go from there though. What would be best?

[+] tim333|11 years ago|reply
There are some fairly easy ways to get some code up if you go for the easiest solutions. eg web2py/pythonanywhere.com for Python, http://www.appgyver.com/ for javascript/phonegap apps
[+] rattray|11 years ago|reply
I'm working on a book that targets this. Hit me up (email in profile) if you're interested in a spot of "beta testing" =)
[+] terryp|11 years ago|reply
As someone who has taught himself how to program - badly at times - I applaud these kinds of efforts, but I wonder if they're subverting the actual problem.

See, companies - I think - need more technology people. And the pool of technology people is limited. The laws of supply and demand say that limited supply and increased demand will drive up the cost.

This is great for individuals, but a losing proposition for companies unless they have limitless resources.

The one thing that Starter League, Code Academy and every other site is that they teach individuals the real rudimentary elements of programming. And while vital, these are not a substitute for battle hardened experiences of crappy code, terrible mistakes or the ability to work as an apprentice.

I think it's more incumbent on organizations to figure out how to build talent from within which is really a more holistic and basically an amalgamation of everything.

- Find motivated individuals. - Validate that they have the skills to be an apprentice. - Accept that they're a beginner and commit to training them. - Learn their strengths and weaknesses and tailor a development plan for them. - Promote the shit out of them and make them your next generation of software, test and system engineers. - When they eventually leave - say to yourself 'Mission Accomplished' and hopefully rely on a talent pipeline.

I don't know if this is a teaching hospital methodology or developmental leagues in sports. It's probably somewhere in-between.

So these sites are great. The organizations are great. But transforming people into functional experts in the field can only come about with BOTH training and experience. I feel like Exercism only deals with the training aspect, not the experience aspect.

My $.02.

[+] Tyrannosaurs|11 years ago|reply
Based on many of the people I've worked with "well enough to get a job" is a pretty low bar to clear.
[+] lorddoig|11 years ago|reply
Without a reason to attract (relative) experts beyond philanthropy I think there's a risk that a ballooning amateur/expert ratio could soon cripple this, as happened to the way Matasano Crypto Challenges used to be run.

I hate to be critical as I like the idea, and obviously there's some utility in it for experts as it is but it's much, much less so than for amateurs, and there's no reason to think that this imbalance won't manifest itself sooner or later. I feel this stands a much better chance of solving (or contributing to solving) the education problem and getting good traction if it was positioned to solve a much more general problem - like snippet management - in a really, really good way, and tacked these features on the side.

[+] jiggy2011|11 years ago|reply
The landing page for this site could stand to be improved, especially if it's target is absolute beginners.

* The instructions provided are very Unix specific and assume a reasonable level of familiarity with the command line. Lots of beginners are probably on Windows and not used to using the shell. Much as devs shun them, installable GUI clients have their advantages in this area.

* The language used on the first page is still fairly technical, "test suite" for example.

* How it works is not made clear, "practice problems" is only mentioned once at the top of the page in a hard to read colour and small font.

[+] mikeleeorg|11 years ago|reply
She admits that the site is a bit lack in the usability department. “It’s hard to tell what it is just by looking at it,” she says. “It’s remarkable to me that people have figured out how to use it.”

This. I love the fact that people have come to use her site despite its usability problems. To me, it shows there's a real need out there.

Admittedly, I also believe having a great UI from the start can be a differentiator (especially in a young market), but products that get used despite a poor UI mean current alternatives were even worse (or non-existent) for these users.

I hope she's able to turn this into something to works out for her.

[+] krosaen|11 years ago|reply
I wonder if a new position will emerge to help with freshly trained programmers out of programs / curriculum like this. For instance, if a company is willing to pay 100k for an experienced programmer with years of training and experience, what is a fair rate for fresh grads out of a coding boot camp? The trouble, to me, seems that freshly boot camp trained folks apply to the same jobs and it just doesn't make sense. However, if there was an established route, like, coding apprentice that paid 60k and had strong upside at perhaps 10-20k raises per year as they reach the equivalent of junior programmer, that could really open up the market on both sides merely by clarifying expectations.

Say a lawyer wants to become a programmer, and he/she goes through a program at The Flatiron School http://flatironschool.com - and the flat iron school can go out to companies to help get them placed, but instead of trying to get them placed at the same jobs / salaries fit for 4 year university grads or programmers with years of experience, it's into positions like I described above - I just think it'd be a much more honest path on both sides.

[+] mbubb|11 years ago|reply
Great site even with the lack of polish. Conceptually I like it. It makes you think more about the full process of writing code than most similar sites. I think what this does well is try to get folks to think about writing something that QA will then test. That is good for me as I come from an operations background and this part of programming is not natural to me. For me it is crank out Bash or Python and keep trying until something works... This is different it is more like "look at this framework, build the piece that is missing"

As I am a sysadmin I tend to write tools that only I would look at. Writing something fro a test suite is a great idea. A howto page detailing testing process and a testing 'hello world' would be a good addition.

I was surprised that the install didn't involve a github repo install, ie that the install script would not be part of a repo that you clone and then chmod X+ and then install. The benefit of this is that I can keep track of the cli repo and update when needed by watching the repo.

[+] mattmanser|11 years ago|reply
It's a nice site and everything, but who is this aimed at?

It doesn't seem to be non-coders as far as I can tell.

1. You need to already have a github account

2. The setup assumes you have CLI experience

3. The setup assumes you use linux or a mac (because all non-programmers do that)

So has wired misunderstood the target audience, or is the site comically anti-n00b?

[+] brudgers|11 years ago|reply
The site was set up as part of a structured learning environment. Any implication that it is suitable for onboarding people with no background knowledge about software development [ if it exists ] comes from the article and it's choice of title.

In addition, if creating a Github account and typing commands into a computer instead of clicking a button represent impassable obstacles to learning programming for some person, then these requirements are appropriate for screening out those whose energy might be better invested elsewhere.

Programming requires interacting with other computers and typing.

[+] mbubb|11 years ago|reply
You should have a github account if you are learning to program. In my experience interviewers expect it.
[+] mendelk|11 years ago|reply
After spending a few minutes checking out the site, I thought I'd bookmark it for later, only to realize I'd already bookmarked it in the past. I don't remember ever seeing the site before.

Sigh. I clearly need to spend less time on HN proper, and more on the sites it promotes :).

[+] lutusp|11 years ago|reply
Article title: "Out in the Open: The Site That Teaches You to Code Well Enough to Get a Job"

It's a good thing the site's originator didn't make this claim. Even a first-rate site with an enviable effect on students wouldn't want to say this.

Maybe there should be a rating system for article titles, one that measures how far the title deviates from the article itself. In many cases such a title hurts the credibility of the article. In this case, it's obviously a well-intentioned and likely effective teaching method, one that shouldn't have to live down its hyped title.

[+] koevet|11 years ago|reply
I find it interesting that the list of supported languages doesn't include Java, which is one of the most, if not the most, requested language - at least in the enterprise space.
[+] lutusp|11 years ago|reply
I don't know anything specific about the site, but that might reflect an aesthetic bias overcoming the realization that Java is ubiquitous. It all depends on the degree to which a site's operators care about teaching what's being used in real-world projects.

If I ran such a site, I might want to suppress my own aesthetic preferences, but even I would probably exclude PHP, as one example, only because it doesn't represent an easy way to create reliable, understandable programs.

[+] jschulenklopper|11 years ago|reply
Interesting idea - and great that so many are helping in contributing exercises.

  To solve the problem, she created a site last year that presents the
  practice problems and prevents students from being able to move on to the
  next ones without submitting a solution to the previous problem.
I think that Project Euler, https://projecteuler.net/, has a better implementation of this. All problems are available, but they become harder and harder (at least in the beginning - they might level out now). That already is a stimulus to solve the problems in the intended order, in addition to the 'level degrees' awarded after solving a batch of problems.

Additionally, the Project Euler forum in which solutions are shared and discussed is only available once you've submitted the correct solution.

OK, back to Euler. I'm close to a next level award...

[+] ilaksh|11 years ago|reply
Moving on to the next topic in a class before an individual masters a more fundamental one is a core structural problem with traditional classroom-based instruction. Individual, self-paced computer assisted instruction makes that go away by verifying that foundational skills and knowledge are gained before moving to the next level. This is not limited in any way to programming or any particular skill or knowledge area.

Having a mentor or tutor adds another level of enhancement. But don't undervalue the ability of a computer to objectively measure an individuals performance and tailor the learning material to their own pace.

[+] hliyan|11 years ago|reply
I like the concept, but the very first Javascript problem statement starts this way:

  Bob is a lackadaisical teenager. In conversation, his responses are very limited.

  Bob answers 'Sure.' if you ask him a question.

  He answers 'Woah, chill out!' if you yell at him.

  He says 'Fine. Be that way!' if you address him without actually saying anything.
I'm sure this is my personal biases (and possibly age) showing, but this caused me to walk away shaking my head.
[+] pekk|11 years ago|reply
In that case, then maybe people who are refused jobs in this industry due to some superficial reason like age can simply take the course and instantly get a job, right?