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.
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.
One way to read your comment is as a request for help, but there's no way to contact you directly from your profile here on Hacker News (in case you weren't aware, the email field is not public).
It's worth noting that some open source projects are noted for fostering a community that accomplishes what you describe... perhaps all that is lacking is the initiative to seek out such an opportunity!
> One way to read your comment is as a request for help
Well, actually, yes. I'm sorry, these are my first comments on HN.
> perhaps all that is lacking is the initiative to seek out such an opportunity!
Not really. I tried the open source way more than once both trying to collaborate on open source projects directly and through GSOC, but it failed. Turns out that GSOC seems to be exclusively for people already collaborating on the projects who partecipate in GSOC, so I got rejected (with harshness). The same happened (with even more harshness) on the copule of projects where I tried to collaborate directly (and I can guarantee I've been polite). For this reason I got discouraged, but not enough to give up. I already decided to try on a new project (NeoVim), but until now I didn't because of a lack of time.
I'd guess GSoC brings a lot of 'random internet strangers' to projects whose maintainers are highly motivated to reward known-quantity existing contributors (previously working for free) with the stipends.
Dealing with the personalities involved in open source can be the toughest part of the process; I recommend reviewing how previous contributions from others have been rejected before deciding to contribute yourself. Also, be sure to interact with the developers and community a bit (IRC, forums/issues, etc.) to get a feel for how well you fit in.
I think the first step is to decide what you're interested in learning and reaching out to a project closely aligned with your goals. It is possible you will be rejected, but still worth making the initial effort to find one that would hold your interest. See the following blog post (and comments) explaining the ideal mindset needed when going into this: http://www.hanselman.com/blog/OpenSourceIsAThanklessJobWeDoI...
The specific group that I had in mind was Python; they have implemented a mentorship program at http://pythonmentors.com -- I'd recommend starting there and asking for pointers to other Python projects. With resources like http://learnpythonthehardway.org/ available you should be able to hit the ground running.
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.
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.
Until there are widely accepted competencies, the hiring process will continue to be murky. That may not be solvable just because technology has such a huge scope.
Ideally you'd want someone to be able to take a test and have it spit back "Okay, this guy's a good enough junior programmer" and then have some certificate so that the job connections and interviews only are for personality. This would reduce the burden on companies having to do their own technical filtering and hopefully get more deserving butts-in-seats to get work done.
Right now it's all guesstimation, voodoo, and a few things that seem to work on both sides of the table.
The issue is teaching them in the first place, a real apprenticeship program should be able to take someone with no knowledge of programming and convert them into a competent developer without taking up too much of the time of a senior dev who is billing $50/hr+.
The best way to do this is to outsource at least some of the learning to a classroom setting and ideally have the government subsidise this, but the government can't possibly subsidise courses in every single type of software development,
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.
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.
The content of an apprenticeship is defined on a higher level and not by technology. So it doesn't really matter what kind of technology the company uses. Examples would be: Can read&write a spec, can develop a program based on a spec and so on. The more theoretical part is usually done in school wich all apprentice from the different companies attend.
It has changed a lot how this is organized in the last 10 years so I`m not really up to date anymore. I think currently besides weekly school the apprentice will go to multiple week long sessions at the school where all the fundamental things will be thought. But besides that the rest needs to be done by the employer.
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 :)
You should flesh out your HN profile a bit; who knows who might be able to help you out. (Specifically, the email field is not publicly visible so no one can contact you right now even if you entered something there.)
Point to your GitHub or some other demonstration that you deserve better!
In many cities for many of them, with the hours they have to work, the split shifts they are forced into, and the wage theft management is guilty of, yes, many of them are essentially zombies.
Nope, they just accrue debt because there's no other way to live in this society at that pay scale unless someone has very convenient living conditions (such as not needing a car).
It also depends where you live. Every day I pass a Wendy's in Redwood City with a big sign advertising a $10.15 starting pay (which is still only $1.15 over CA minimum wage).
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.
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.)
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.
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.
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.
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.
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?
Flask. Flask Flask Flask. It's well-documented, in Python, and you can push it to Heroku easy as pie.
You can add things like templates (they're built in, and can be really simple) or just concatenate HTML the old-fashioned way. You can program very imperatively and work up to abstractions. It's very friendly.
I haven't seen it used as an introductory "language" but I feel like it would work well.
Having worked with absolute beginners, this isn't nearly as easy as you think for someone just getting started. You're adding ssh keys, getting set up with git, installing the heroku client, running things from the command line, dealing with dependencies, dealing with heroku config file issues...
These are the things that get extremely frustrating very quickly to someone who doesn't have a technical background, and they cause people to give up.
Compared with: start a shared hosting account for $2/month, connect with a gui FTP client and the password you made during signup, drag and drop files to the server, go to http://www.yourserver.com/foo.php and see if it works.
If it's about learning the most basic fundamentals, PHP just works. It will be some time before these people start building things where security, scale, separation of concerns, version control etc start to count. Introducing too many things at once is frustrating, and the fun starts when you can use the things you're building, and share them with others. There's not much that's better than PHP in that regard.
I was working on the assumption that environment would be already set up for them. Setting up Apache to test stuff locally, getting FTP set up to get into your remote server, etc is all a pain with PHP too.
Once everything is set up, it's two-ish commands to commit and push to somewhere like Heroku.
And no, I haven't taught beginners at all, I'll fess up to that. I've learned alongside them, though. PHP is a perfectly cromulent language/framework for this sort of thing, but something like Flask could be just as accessible.
We use Flask at Thinkful in our Python course for precisely this. Ran into some disappointment from folks who'd prefer to dive directly into Django, but from an instructional perspective we'd much rather introduce something comprehensible than ask students to memorize magic words or incantations.
To me? Yes and no. Yes I've taught precisely 0 students. No, I'm not at all upset with teaching PHP, I coded up my fair share of awful PHP web apps. My first favorite language was ActionScript which everyone loves to hate! But at the time, nothing beat PHP and ActionScript/Flash for simple, fun web development for beginners.
I think something like Flask might be a worthy successor. Heck it even includes a webserver, no need to fiddle with installing Apache to test stuff locally. And with services like Heroku the barrier to getting it online is almost as low as PHP.
I somehow missed your actual arguments for flask, so my impression of you over-enthusiastically praising flask was all wrong, sorry.
Still, if Flask does everything for you, what are students left to learn? A lot, i guess :)
I can imagine Heroku being easy as pie when everything works, but it is a pain in the arse when it doesn't (I have pushed 3 small Django apps to Heroku, its not easy to debug errors).
It's also easy to teach programming with BASIC. That doesn't mean it's particularly good for the students.
Setting up a web server with e.g. Python's SimpleHTTPServer is absolutely trivial, and teaches them a lot more about what a web server actually does (routing requests and building responses), and also prepares the students to use whatever hip python stuff people are doing servers in these days.
The advantage for typical PHP here is that the webserver runs the programs somewhat transparently rather than the other way around with your program creating the webserver and then managing requests. PHP/Apache provides a very simple routing model that correlates 1:1 with the filesystem.
>PHP/Apache provides a very simple routing model that correlates 1:1 with the filesystem.
Might that give students a false impression of what a webserver does and is capable of doing? The students can implement the same thing themselves in a few lines of python, rather than offload most of the functionality to a monolithic and unapproachable black box like apache or nginx.
It's useful to black box some of the things when you are first learning. The specifics of serving a request are probably not the first thing you want to teach, especially when it requires some notional understanding of threading/blocking which Apache can take care of automatically. Also mod_rewrite and .htaccess provide powerful methods of adjusting behaviour of routing and the like.
Writing web apps or servers are two different things. well, mostly ... almost, at least if you teach for productive use.
especially for anyone who just started coding, a few lines of python can be a lot, so KISS.
Routing is done by a router, not a server. a server serves. Does that really need to be said?
Edit: to clarify, I read about "routing" in "web-apps" now and then. I have problems figuring out, although it seems to be clear to anyone. And then you come and mess up terms even more, while routing is absolutely not essential to a web-server. Also, if your idea of routing is anywhere near apache's rewrite-rules, I don't wanna know it. If on the other hand routing is essential to an ftp server, I'd be curious.
Well, that's the main feature of a web server, besides the obvious sending of responses? The usual notion is of requests and responses, routing seems to be an avant-garde term, in this domain.
Another teacher with real-world experience teaching ACTUAL, normal students? We're a rare breed.
I agree with everything you wrote, of course. Kids need to learn how to CODE first with simple, non-magical tools. Experience with the other bells and whistles comes later.
>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.
There's no decent way (IMO) to learn generic problem solving skills other than solving a lot of problems for yourself. That's what worries me about these bootcamp things.
The comment about academia was a bit silly, true. I was trying to say that it's the only place where you can have the luxury of thinking about "pure" programming as a primary concern.
"There's no decent way (IMO) to learn generic problem solving skills other than solving a lot of problems for yourself. That's what worries me about these bootcamp things."
This! In my team, everyone comes to me for help with their problems. Generally, 75% of the time, I know the answer (because I've come across it before). And the other 25%, I solve their novel problem because I ask the right questions, and use basic problem-solving and problem-narrowing steps.
It really isn't rocket-science, it's just analytical, or problem-solving ability. I suppose it has many names. After burning much over other peoples' problems, I eventually resorted to guiding them towards the right direction. Asking them what they think is the problem, getting them to tell me their thought-processes. It's helped quite a bit...
Bootcamp can help folks learn to use their skill, to focus on the things that matter. As my friend Tom often says when I want to reinvent the wheel, "Joe, we CAN do anything. What SHOULD we do?" That's definitely something a bootcamp can help with.
> There's no decent way (IMO) to learn generic problem solving skills other than solving a lot of problems for yourself. That's what worries me about these bootcamp things.
Hm, though I see your point, and agree that "googling" is an actual skill you can acquire and improve by yourself, I feel it's not that different from any other skill, generic or not. I mean, before structure dawned upon playing piano or coding, to learn, the task was problem solving.
To me, there's no essential difference between "this note sounds wrong, why is that, let me try another one" to "how do I get my damn website online". If one beginner's learning process can have structure, why not the other's.
But if you could start with actually writing stuff instead of dealing with "software bureaucracy" you might be a lot more motivated to learn programming.
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.
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).
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.
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?
That's basically what we do with https://www.makeitwithcode.com, we take people through building things and teach them theory as they go along. Then we go through deploying something to Heroku etc as part of subsequent lessons, so by the end they've got a mixture of the theoretical stuff as well as the more practical "how do I make this be on the internet".
I think there's a few others which also follow the approach of each lesson essentially culminating in a new portfolio piece.
on the homepage bottom-right it says:
The course costs just $200. If, during the course, you feel you're not getting value for money, we'll give you a refund.
You'll get a lesson a week for 10 weeks. The lessons are text-format, combining a balance of challenges with instruction.
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
The deal is, there is no way for a beginner to come to that conclusion after finishing a given tutorial. The different solutions are separated. It is not a continuous flow. HTML/CSS/Javascript(/php) are luckily taught in succession and tandem, but rarely with the hosting, naming, storing, sharing aspects integrated.
It should be:
html -> css -> Javascript (-> php) -> Hover(DNS) -> AWS(server) -> Final assembly -> Live product! -> github -> promotion/advertising/fluff
By the way I kind of recommend "The Complete Web Developer Course - Build 14 Websites
Web development from scratch in 6 weeks. HTML, JS, CSS, PHP, MySQL, Bootstrap, Wordpress, APIs, Mobile Apps all covered." On Udemy.
Available for $10 until friday pm (says usual price $199 but there's usually a discount on) and includes a year or so of hosting on Rob the teachers servers. I've been doing some bits myself. He also has a how to earn money while doing it by pitching your services on elance guide. It has detailed instructions to get the stuff up on the servers, for web at any rate.
And here is my problem with both learning sites like this and search engines like Google. If I search for hosting JavaScript, appgyver.com doesn't feature in the results. In that scenario search is broken.
Because AppGyver seems to be related to some sort of JS framework called steroids.js. I'm not going to do it for you, but presumably there is a logical search chain that gets you from "javascript" or "javascript framework" to "Steroids.js".
Yes, I search a lot. It's the third most useful tool I have at my human disposal, just after "touch-typing" and "problem-solving ability".
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.
An entry level software developer with bare bones skills could be worth around $4 an hour outsourced? An individual in the first world, to command a large wage at this skill level is either fooling the employer or is strong in other areas: communications, management, design, etc.
With no data to back up my opinions, I feel like the best developers are very sharp to begin with and also highly self-motivated. They don't just take a course, they end up developing the new technologies and teaching others. If you take someone who isn't particular sharp, and has an average level of motivation, what will a coding class do for them? Will they even recall what they did? If they end up with just the bare bones skills you can't hire them because the market wage is illegal in the first world.
On the flip side, things like Code Academy would be great for grade school and high school. When I was 12 or 13 I tried learning C++. Text editor, no color syntax, b&w print book, it was a total flop.
Code Academy would have been great. Hell, even YouTube would have made a world of difference. (Also learning to use complex software like 3DSMax was a joy reading text descriptions of menus, hardly any screenshots let alone video walkthroughs.) I have little sympathy for people who complain while being hand held through learning a skill today -- programming, cooking, whatever. Such a vast library of free information compared to 15 years ago..
I think these courses are the step right before "- Validate that they have the skills to be an apprentice.". If I were going to train someone, I would want it to be someone with the chutzpah to do self directed learning for a period of time.
Totally agree. It's the great 'sword in the stone' methodology that shows if someone has the skill and ability to become a developer. But this is why I think you need both these kinds of sites/programs but also compliment them with some of your own organization's ethos of developing talent.
you have http://pythonpracticeprojects.com/ for the experience part, not many projects but a good start, especially for python, but it's usable for many other languages
Wow, I've never seen this one! And yes, this is great bridge between "learn how string interpolation works" or "here's OOP." But still, practically applying a static site generator for a business or to solve a particular client or customer problem is where I think the rubber hits the road.
these comments are always discouraging to me. i work in a different field (sysadmin), and i've been struggling to get a job programming. am i that bad at programming? or that bad at finding work?
i feel like i know the basics of several languages as well as html, css, sql and git. i wrote an IT-ticket system for a healthcare clinic in python consisting of a basic html form and a SQL database backend (i know this isn't terribly impressive to adept programmers, but i've been applying to the most entry-level programming positions). i also specialize in powershell, which is object-oriented, even if it isn't used for enterprise level web apps. and that hasn't been nearly enough to get a job, at least in pittsburgh.
Since you don't have a background in software, I would suggest specializing in the language/framework/utility of the day - something like Angular, React, etc. You will have a leg up on the vast majority of developers (the ones who don't read HN).
I work for a small startup in the NYC metro area and of course I agree with the parent post. We have a fairly terrible interviewing process. Candidates are phone screened by our non-technical manager and are usually selected for interviews based on domain experience. Nearly all of the people I'm forced to interview have the same background (bachelors in India, sole language is Java, 5-20 years experience in finance industry most coming from big banks Citigroup, BoA, etc). My interview process consists of an onsite coding problem, which is of course controversial. But when none of the people you interview have a github account (some have not even heard of github) or have any sample work, I believe it's important. The vast majority of the candidates sadly cannot create a List and populate it with integers in their language of choice.
thanks a lot for your post. input from active professionals is invaluable to me.
i've actually been working on learning angular for the past few weeks. i've stopped updating my github in that time since i'm just doing basic stuff, but once i finish some more tutorials and documentation i plan on building an angular project to display on my github. are there any particular features that would really catch your eye as someone who hires programmers?
If your algorithmic skills are good enough to ace the problems in that book, you can probably get a job at one of the big three software companies (Google, MS, Amazon). The vast majority of programming jobs are enterprise development work (think endless CRUD apps) that require nowhere near that level of skill.
I wouldn't worry too much about coding interview questions, especially if you're looking to just enter the profession. The most important aspects are showing a willingness to learn and an ability to think critically about problems.
Exactly. My previous comment may have been misleading. I don't think it's imperative to have a github account or a showcase of your work (it definitely would not hurt). I only have one public github project and I'm not exactly proud of it.
I normally start all of my interviews by trying to engage in a conversation about programming topics. But as most of the people I interview have little experience outside of Java and seemingly no interest in programming, the conversations are usually very brief. "I like Java." And the occasional "I have heard of something called JQuery. I may learn that."
Is Java frowned upon nowadays? I'm learning it as my first "real" language, especially for Android & Spring, however I've been playing with Javascript/JQuery and have a web/design background. I've also attempted deploying websites to AWS and CloudBees and failed deploying to Heroku multiple times. In any case, my original question still stands and what would it take for me to get a job with you if I don't have a degree and only the above projects to show you? What would you want to see in those projects and at the interview?
Java itself is not frowned upon - I'm a big Java fan. What is a big red flag, in my opinion, is when someone has multiple years of experience but is only familiar with a single language and has absolutely zero exposure to any other tools or languages. To me it shows that person has no interest in improving his/her craft. It just so happens that in the finance industry, Java is used heavily. Those who list JavaScript on their resume believe it's only purpose is for HTML form validation. I get a bit frustrated when I'm interviewing someone who has used Java exclusively for 15 years and is still making basic syntax errors, like mixing up angle and square brackets. It's not a one time occurrence, I may interview 4-5 people in a row making these same mistakes.
As to your main question, it's difficult to answer. Since we have a very small company with only a few developers, I personally am nervous hiring someone with little experience.
What's controversial about having a coding problem? I would assume that I'm going to write code for any position I apply to, otherwise I probably wouldn't want to work at that company. Or do the applicants just feel like you're asking an unreasonably difficult question for the amount of time provided?
In HN the general feel I've gotten for interview problems is that people prefer being given a day or two to accomplish a small coding project instead of being given a coding problem on the spot.
I agree with that approach as well, but it's probably because I consider on the spot coding problems to be nerve-wrecking.
I am looking for a new job these days. Fine if the first job you come across is ideal, and the test is OK. But its going to be frustrating if I have to dig into a lot of my personal time doing coding tests, because I want to apply for a few jobs and see what one is best.
I would rather code with the interviewer, and let him know my thought processes, and why I do things the way I do.
The problem is that paper experience is not actually a good indicator of anything, but lack of it will keep you out of a job.
Recently I've been working with a team of 3 other engineers. 2 Were average if a touch lazy. The third had ~30 years experience on paper. He was without a doubt the most incurious, unproductive, useless programmer I've ever encountered. He must have committed less than 1% of the new code over the last 10 months and most of that was wrong. He was a net drain on team productivity.
However the rest of us delivered and now he gets to put another successful project on his resume and look to a recruiter/HR person like he's a useful, productive guy. Where someone like you who likely has some raw talent and just needs some battle-hardening... you may find getting a foot in the door quite hard.
2 more things. Firstly, I suppose one solution would have been for management to pay attention to the atmosphere.on the team and do some sort of productivity assessments on their staff.
Secondly - to get a start somewhere good I would (if you don't have a tech degree or experience) show some interest in the topic and an ability to be a self-starter. Do a couple of coursera/udacity courses. Stick up a webapp or try to get started with android development or something. Doesn't even have to be exactly aligned with where you want to be, just show some ability, intent and interest.
Don't feel bad. The thing is that "good enough to get a job + that's a low bar" means that the people end up way over their heads and usually don't work out. I have interviewed lots of people. Some needed jobs badly. They came in, knowing HTML/CSS + enough jQuery to make a pretty web page, and were applying for a systems architect position. We obviously rejected them, but lots of companies cannot tell between truly qualified people and those that are not. This works both ways: lots of unqualified/underqualified people get hired and then you hear stories like "you won't believe what my co-worker did", but it also means that qualified candidates do get passed up.
Basically, don't get discouraged, and don't worry about others getting jobs. Just keep getting better at what you do, and most importantly work on projects that you can show off. I found that these where the best way to get noticed/get hired.
Entry level can be pretty different. They're looking at potential rather than ability and things can be competitive (depending on the specific skills or organisation).
I'm really thinking about programmers with 5 - 10 years of experience who still struggle to reason their way out of a wet paper bag or produce anything but the most obvious and narrowly scoped solution to problems.
Do you have a good github account? Most (decent) employers will probably take this in lieu of a technical interview.
You have to remember that its not just them testing you - it's you testing them. As a newbie coder you want to be in a good team where you can learn good practices from solid performers.
I mean put it this way - if you were in a team and everyone was at a low skill level, do you think you'd get a good time of things from sales/marketing/all the other stakeholders?
i can definitely improve it, and that is something i have been working on. thanks for the advice though; i really appreciate it. i agree with you that ideally i would be working under some more senior programmers to improve my skills.
C'mon.. No activity in the last month is not a big deal. On my github[1] I have periods where I go for months without committing a single thing, and then I'll have a flurry of activity in the course of a week.
People have lives outside of coding and sometimes they go a month or two (or 6) without pushing anything to github, it's not the worst thing in the world. I mean we're looking for quality of contributions here, not quantity, right? To me a bigger 'red flag' would be that all the django code seems to use function based views (not class based views) and doesn't really have any consistent formatting. OP I'd suggest skimming two scoops of django[2] and reading PEP8[3] so that you can get a good idea of how most shops write their code. Either way, I think your projects are mostly great and show that you're actually able to build things.
wow, awesome response, thanks for the information. i actually bought two scoops of django for 1.5, only to read that they released an updated version about a week later! i'm not sure how out-of date the 1.5 version is, but i'm going to pick it back up. when i first read it, i felt like some of it went over my head at the time.
definitely going to read up on PEP8. thanks again!
Github contributions & open source is not a "white male only" affair. I don't know if you're trolling, but you're actually lowering the bar for women which is a massive disservice.
Good coders spend time outside work keeping up to date on their skills - trying stuff out. This stuff needs to go somewhere. Why not put it in github and show me that you're regularly learning new things?
Also, "pick up" meaning I would notice. I'm not saying I expect to see a 365 day streak or anything, but I would expect to see a fair few contributions from people looking to switch from ops -> dev as they hone their skills.
In short, IMHO people that try and fail over and over until they get it right are much more likely to be good coders, than those with one or two totally pristine repos they committed to years ago.
I assume this was meant to be a response to me, even though it's not in the correct thread. I'd suggest you read the article I linked to, since it addresses each of the points you made fairly directly - with data and references, rather than empty assertions. It was also written by a woman, who would likely take issue to the claim that it's doing a disservice to women by pointing out discriminatory hiring practices.
I read your link and it was a snoozefest, and I'm not really sure twitter posts count as references.
People want to see your code before they hire you. Github is a place to share code. That's it really - white male or not.
This is especially relevant to OP because he doesn't have commercial experience coding. Most interviewers will be nervous of this, a large portfolio accessible in a familiar format will alleviate much of their tension.
Don't forget, most interviews for the interviewer are basically an ass covering exercise. Nobody wants to be remembered as "the person that hired THAT guy".
I was actually referring to the multiple listed references at the bottom of the article you "read." There are several other ways to see someone's code than expecting them to do work that they aren't getting paid for. Being "nervous" about people that don't do work for free perpetuates inequality. Try to see past your privilege and perhaps you won't hire "THAT guy."
I fail to see where I made the assumption that you were a white man. I merely assumed that you share the privilege of having time to devote to Open Source projects, based on the words that you used, and your casual dismissal of the idea that everyone might not share that privilege.
But congrats on your win, all the same. The judges were really impressed. Welcome to HN.
Basing hiring decisions on open source contribution rates contributes to the homogeneity (read: white maleness) of the industry at large. Women especially may not have as much time to contribute, since they are likely getting paid 30% less than their male counterparts and are more likely to be single parents than men. Ashe Dryden has a great breakdown of the issue, as well as some suggested alternative hiring techniques: http://www.ashedryden.com/blog/the-ethics-of-unpaid-labor-an...
This isn't a criticism of your comment, just something to keep in mind when making hiring choices. :)
> Women especially may not have as much time to contribute, since they are likely getting paid 30% less than their male counterparts and are more likely to be single parents than men.
I don't know if that's it. The undergrad population in the CS department when I was in college was 11% women (already pretty dismal) but when it came to code-heavy advanced courses like writing an operating system it dropped to 0%.
I would guess they either didn't believe they could do it or they were unwilling to put in the extra work, which in a sense was 'unpaid' since it was not a requirement for graduation. None of these women had children or had to worry about pay discrepancies.
Am I correct in assuming that your assertion here is that women don't contribute to Open Source in as high a number as men because they're "unwilling to do the extra work?" This is based on your one experience in college, and its extrapolated gross generalizations. Did you happen to survey 11% of your classmates to determine their specific circumstances? Were there, perhaps, any other offerings of those same classes which you did not attend that might have had female students?
My assertion is that women shied away from this sort of unpaid time-intensive work even when they were not subject to the disadvantages you outlined (childcare and lower income). The real reason, in my opinion, must be something else.
In response to your questions: there was a single offering of the course. All of the women I encouraged to enroll said they were uninterested due to the perceived difficulty and workload. This may or may not have been a cover due to other concerns ("am I good enough?", "I heard only boys take this course", etc.). To be clear, the vast majority of men in CS were also unwilling to enroll in this course because of the workload.
Well, I would have to disagree with your assertion that the women were not subject to any disadvantages, even the ones I mentioned. To know that outright would require something bordering on omnipotence. But feel free to believe that it must have been "some other reason," rather than the myriad entrenched disadvantages that exist in both our society at large and this industry in particular.
> None of these women had children or had to worry about pay discrepancies.
Every woman has to worry about pay discrepancies. In every industry, at every job level. That's what this whole "gender pay gap" is all about, you know?
you're definitely right. unfortunately i've been busy with a move and learning angular, which was new to me, so i haven't had much new code. i plan on adding more this week. thanks for your advice =]
I already code for a living and thus my github often goes dormant for months or even years. I also code on my free time too and many of the projects I might contribute to for free (important to stress that), or otherwise become involved in, do not accept pull requests on github.
I would like to offer you some counter-advice: don't work for an employer who bases hiring decisions solely on your github activity or any other open source contributions. These are important metrics but so is your own research, your genuine enthusiasm for the field, and your personality fit.
Some easy things you can do is get an avatar, star some projects and try to get some followers (people often follow back if you follow them). Not huge wins, but they help make you github account look more active.
Not having experience is a huge barrier to clear. When trying to get my first job I only had a minor in CS. I had 13 interviews before I got a job, and I had to continually revise my resume. Don't give up. Focus on breadth vs. depth in terms of jobs and knowledge. And don't worry about minimum years experience requirements on job postings. You can get a job that is for someone with 3-5 years experience; they just won't pay you as much.
None of the languages you listed are technically programming languages (I guess PowerShell could be considered one, but it's more for automation rather than programming actual applications). Maybe you're using the wrong terminology during your interviews.
oh definitely, i meant that i knew the basics of python, ruby, and javascript, as well as the other technologies (non-programming languages, as you said).
Start by always using the correct spelling, grammar, and capitalization. Get a senior developer to look over your code samples and give you feedback, then make sure to have a project out there that people can see and you can link to.
Soft skills are more important than tech skills, especially at entry level. It usually becomes pretty apparent in the interview whether someone is capable of problem solving or not; the interviews conducted for my department are purely to see if the candidate is a cultural fit. We don't even do technical interviews, though occasionally we'll do a code challenge to separate two very close candidates.
My point here is that you should take a look at your personal presentation and see if there's anything you can tweak to improve your interview performance.
I wouldn't take it too seriously. At the risk of sounding pretentious, the skill level of developers on HN and proggit seem to be much higher than average. For every guy who writes a sweet project in meteor and shows it off to everyone there are 1000 Enterprise Java programmers who do it as a 9-5 and scoff at the idea of hobby programming.
If you're passionate and put forth an effort to keep a relevant skill set you're already doing better than most imho.
What is your background? I know that for a lot of corporate type gigs HR is really more concerned with whats on your CV than what your actual skills are. For many, a good GPA in a programming related program will get you an interview and the rest is soft skills. So, I feel like if your background isn't directly programming related then you really have to look for smaller companies/startups or via recommendations.
Full disclosure, I just graduated and really don't know anything of value yet BUT imho building things that are functional and working outside of your dev environment should have more of an influence on your job prospects than the stupid coding exercises.
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.
I see that as a good problem to have, if Exercism gets big enough that it's an issue Katrina will be able to adapt her product to respond to the request.
Remember that this is a side, open source project, run by one person ;)
Totally agree. A completely off-topic aside (sorry) - I creeped your profile and was wondering, did you create your blog template yourself? It's pretty much exactly what I've been looking for for ages but haven't been bothered to make from scratch.
It's already happening. I've known about Exercism for a while and used it to teach myself Go. It was very effective and the feedback was immensely helpful, especially at first.
But when I went through the Ruby track (a language I'm already quite proficient at), I got almost no feedback, helpful or otherwise. Some of my entries would get one or two "thumbs up"s, but no comments, and most got no responses at all. Now that I've got a pretty good grasp on Go, my last couple of exercises there have started to follow the same trend.
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.
In fact, the article ends in mostly the same sentiment expressed by the site's creator:
"But she would like to raise money to pay people to improve it. For example, 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.”"
I'm also a little unclear on the why the site leans in a fairly technical direction. I think I'm going to try it out later so that I can get a feel for what's actually required to get going. I really like evaluating these sites to find tools to integrate into our(my company's) training program.
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.
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.
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.
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.
I work at a huge company named after a big river in South America. I don't know of anybody in my org that has a GitHub, and maybe like 1/10 of the resumes I see for interview candidates have one. Is this "expectation" a San Francisco thing?
No, NYC. But good point.
Maybe it is a 'deformation professionelle' but I feel like it is common.
I have been interviewing in adtech, financial tech, educational tech and ecommerce companies, not ones named after SA rivers (Rio Plata, Orinoco, Putumayo?).
Some applications have boxes for github, linkedin accounts. Also I have been asked for it in interviews. In 2 cases I have seen programming tests where step one was 'clone this repo...' (one a fintech the other a big data audience tracking company).
Why? I've been a coder for 10+ years, dont have a github account. Never used git. All the enterprise projects I work on chugg along just fine on local source control servers of various flavors (CC, Mercurial, SVN, etc...)
This. I have a github account, and when I wasn't working as a developer, it was more active. Right now, all my code contributions go to closed, company-hosted repos. I'm coding more now than I was before, but you won't find any of that on my github. It's the -- possibly unfortunate -- nature of private industry, but that should be a surprise to no one. Sure, I'd love to work somewhere that lets me contribute to FOSS projects during my work day, but that is a much smaller subset of all jobs that involve software development.
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 :).
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.
You are totally right, Katrina never ever said anything about exercism being a place to help you land a job. As far as I know, this has never been her goal not does she intend to make it a future goal. Articles are rated based on page views, education doesn't attract tons of reads, so journalists try to be smart and come up with "catchy headlines"
I read the headline as semi-ironic. I actually expected it to be an article about how there is (currently) no such site and how bad the vast majority are (mine excepted, of course).
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.
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.
I've been on exercism for a while and this is the first time I've ever heard such a claim. The headline seems to be based on this weaker remark in the article: "it could help the legions of people out there trying to learn to code well enough to land a job in this fast-growing field". And even that isn't directly based on any quote from anyone related to the site.
exercism is definitely a volunteer-driven, open-source operation, and the exercises come from people willing to contribute them. I was going through the OCaml exercises and found that one of them had an error[1]; I submitted a pull request and it was accepted within hours.
I think this is a case of a clickbait headline that doesn't do justice to the article nor the subject.
[1] Unlike some similar sites, exercism doesn't actually build and test your submissions. This makes the site much simpler and cheaper to run, but also makes a point that simply passing the included test suite is only the first step. But it also sometimes results in sloppily-written exercises for the more marginal languages.
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...
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.
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.
I agree, it is your age and personal bias. The content of the response strings (I can only assume that's what you're complaining about) has nothing to do with the validity of the challenge.
Furthermore, the programming world has always had a goofy and awkward sense of humor.
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?
Looks like there is a Command Prompt executable for windows, but man, it is not easy to find or use for beginners. Hell, I'm still a little confused about how to actually interface with it, (although I am far from an expert on anything).
I've had fun doing the haskell challenges. I really like the peer review aspect of it and the git style terminal submissions. But these are just small practice problems and are not geared towards "Teaching you to code well enough to get a job". It's just one of many helpful ways to learn the ins and outs of a particular language.
I myself am in a position where I'm treated like an apprentice, and it's great. I've only been programming for a couple of years and the rate at which I'm learning, and the broad swath of knowledge I feel like I'm getting from the senior developers is great.
" Exercises consisting of a test suite and a README are available in Clojure, CoffeeScript, C#, C++, Elixir, Erlang, F#, Go, Haskell, JavaScript, Lua, Objective-C, OCaml, Perl5, Python, Ruby, Scala, and Swift."
Major fail to me. I've been working on a similar project for 2 years and this may work in a classroom but going through the exercises it's tremendously underdone for the general public. I don't think this is going to go anywhere which is disheartening because I was so excited when I saw the title of the post and read the article. The actual program is a huge let down.
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.