Everyone can learn to code, and they won’t be a nothing anymore. Yes, sure. Everyone has a computer. There are tons of online resources. But where to start? How not to give up? How to get a certification when you are self-taught? Is there really still a shortage of programmers? How do I compete against the college kids? When am I ready to apply for my first job as a developer? What programming language should I learn? Are online courses and MOOCs worth anything, or should I wait to save money for a “real” training, IRL, with professionals?
For all these questions, there are also lots of online resources. And you can ask online communities, and many coders are happy to help. But there are too many answers, and the more information you gather, the more you realize that “just learning to code” won’t be as easy and straightforward as you thought, especially if your aim is to become a professional coder.
Learn C the hard way
Classic, expensive training
So then it was almost back to zero, I didn’t feel ready at all to apply for webdev jobs after a catastrophic intern experience. I thought it was back to online courses, codecademy and all, to level up. But again, I was not sure where to go, I was wondering what was the point of going on learning stuff that any freelancer with simple Wordpress knowledge could do in a day, frontend and backend. Anyway, I still needed to learn by doing, and I had realized that learning in a real school was the other extreme of learning totally alone : too much guidance gave us the illusion we had become fullstack web developers, while we had just copied code on the teacher’s screen and hunted for typos in “our” code.
The Hacking Project
So I went on looking for the Graal of how to learn coding outside of expensive schools or engineering programs, and that’s when someone told me about The Hacking Project (aka THP), whose teaching method relies mostly on practice. Again, it was not Python or cryptanalysis or big data computing, but it was free of charge (with a deposit) and it looked new and mysterious (the tagline was along the lines of “learn to code for the web from scratch, in Ruby, without teachers but in peer-programming with other learners from your town”). So I tried to start their “week 0”, supposedly for complete beginners, a week you have to pass and finish if you want to be accepted in the program. Consistant with the “hacker” spirit of the program, we were told to drop the Windows environment and switch to the Linux (or Mac) command line. I already knew Linux and as I was not really a beginner in web development, I thought week 0 would be easy. It was at the beginning, but the last day (and night) was a big challenge, namely when I had to make a Ruby program to draw a pyramid in the Terminal, letting the user choose the number of stairs of the pyramid. This time, no teacher writing the code on his screen and explaining the code, and I couldn’t even find the solution online : I’ve had to… think. What happens in the case of one stair? 2 stairs? 3 stairs? n+1 stairs? Finally it worked and I was like whooha, eurêka! I had done it myself!
So I left my 300€ deposit and I was in. Big day a monday this October, like a first day of school, The Hacking Project had rented a large meeting room for an exceptional live-in presentation (we knew that afterwards we’d have to fend for ourselves, but with a small team (and a tutor from a previous session)). I didn’t know anyone, so I appreciated that the managing team didn’t let us choose our team : we had had to talk about our background and aims in our applications, and they took charge of building the teams for us. Everyone was younger than me, but I appreciated that my teammates weren’t total geeks, and we quickly found common interests besides web development. After that first morning of team-building games (in a relaxed, californian-like spirit, I found), we were left with our tutor, who told us to find a place (library, or whatever bar or coworking space) to start week 1, day one.
After lunch, we ended up in a Starbucks, having to clone the frontend of the Google homepage in html/css, on a common github repository for the team, by pairs. Thanks to the THP Slack channels (online chats for all the teams in France, that was about 250 people, plus previous sessions’ “alumni” stil hanging around), we soon found better places to work together everyday, from morning (sort of…) to late in the evening. The typical day was reading resources in the morning, then coding one or more projects as a team. The typical week was a couple free projects (one per day), two validating projects, and two mornings of peer reviewing (or grading) by phone (required), where the Hacking Project would give us two persons to grade, and two persons to be graded by, usually from another town or city in France. Well, just when I thought coding was nice for introverts, I had to shoot the shit with total strangers twice a week, and grade them, or be graded by them… I found this particularly difficult, but as with everything you fear, doing it anyway gives you a great feeling of achievement. Basically, you’re not alone : you realize that other beginners (total beginners or not) have struggled on the same projects, often made the exact same mistakes, had the same bugs, had the same impression that everything in coding was harder than it seemed at first.
As a non-total beginner, I appreciated that the learning curve was quite steep (in fact, one guy in our team gave up the second week, and another near the end : the program is not for the faint of heart). Only a day for basic html/css, then little ruby projects (including the famous Caesar cypher that I mentioned above, I had already done it in Python), then object-oriented Ruby, then simple web applications running on a local server using the Sinatra gem (“gems” are the name of the Ruby optional libraries), then the first steps on the Ruby on Rails framework (a fullstack webdev framework, where we were told to choose SQLite as the database engine, then PostgreSQL), before ending on a near professional environment : Ruby on Rails webapps hosted on heroku.com (the switch to a production environment being much more tricky than it seems, as always).
Fitting in a team
I noticed several things while working with other coding beginners, and by comparing the learning method with my previous training :
- I’m not stupid, but I’m more scared than most people. I remember in my classic training that I was fascinated by complex (relational) databases, as explained by a very good teacher from the renowned CNAM in Paris. But we weren’t forced to practice until the final project (which I never finished), so I chickened out and remained afraid of the inner joins, left joins and “n, n” relationships between database entities. With the Hacking Project, we had carry out simple projects, run simple queries in SQLite console, before tackling bigger Ruby on Rails projects, with “simple” relational databases and then not so simple “polymorphic” data tables, like when you want to let your web app user comment on comments below an article. I tend to like theory so much, that left alone I’d read and read and stay fascinated and always procrastinate before the moment to really design the damn database, and see in console through simple queries if it works or not (like, does the database return the correct answer when you want all of shakespeare.books, or all comments on Johnny’s comments). Left alone, I thought relational databases were very complex things that only great minds could design correctly, but when I realized that more adventurous beginners could make it work rather quickly with repeated trial and error, I felt challenged, and I realized that reading all the history of databases was a waste of time, a simple fear to try and play with the damn thing. I tackled the damn thing and conquered my fear of relational databases and SQL joins.
- A second difference with my more classic webdev training with teachers, was the heavy team working with github, a skill that apparently makes all the difference in the eyes of a recruiter between someone with no work experience, and someone with experience. Learning to handle merge failures with friends is already difficult (hey pal, you just erased all I had done…), I don’t imagine learning it as an intern trying to add a bit of code in a professional project, handled by people who actually make a living with the code you’re not too sure what you’re doing with, when you try to git push, git merge or git rebase… In the hacking project, we learnt everything by doing, as a team, synchronized on github for all the big projects (those projects would be git cloned locally by other students in charge of grading us as peers).
- Another difference with classic learning is how fast we went from simple html/css to a full on web development framework. In my classic training, after 4 months, only a handful of students were selected for the class on the Symfony framework. Still, the teacher took us by the hand (the ubiquitous principle of mostly copying the code explained by the teacher on his screen, on a Vagrant virtual machine he had prepared for us), and writing a route for the Model / View / Controller architecture seemed like wizardry. By the end of the week we had coded a Twitter-like application, but the teacher had done almost everything. Of course that experience later helped me grasp the Ruby on Rails MVC architecture, but other students at the Hacking Project have had to learn all of this on the fly : how and why make routes, how to send dynamic data from the Postgres database to the dynamic views through a dedicated controller (all in object Ruby…). Noone was there to tell us “it’s highly advanced” or “it’s only for the best, advanced students”, or “you’ll see that next year”. Nope, we had a deadline, usually for the same day at midnight, with a high motivation knowing the morning after someone from another part of France would grade us, and we could lose a life (a joker) if the project didn’t work well enough. (you start with 3 lives, and you can only recover them with community work (work for the Hacking Project community, living on Slack, a big supportive family, sort of)).
- The Rabbit and the Turtle. Again on the aspect of team work, I found an occasion to discover my assets and flaws in a context of programming. I thought programming was purely intellectual : it works or it doesn’t. But I realized that personality, even in coding, plays a large part in team work. You have to find your place, be able to help (but not too much, lest someone wonders by the end of the day what the hell you did on your own part…), deal with conflicts, drop an idea, push another that really seems woth it… Sometimes you’re at the center, sometimes you feel stupid, left out, or guilty for leading everyone astray, or for a nefarious git reset --hard that had seemed like a great idea in face of deadline emergency... I realized I tend to help a lot, but I count too much on myself (and stack overflow) when I’m stuck. I’m never out of ideas to try, but the hours pass, and the beginners who had the courage or humility to ask Ruby seniors for help, have moved on long ago, while I was still there sweating on my code and hiding where I was, rationalizing that it was more important to understand things by myself. At other times, I was coding an exercize project at the speed of a turtle, while everyone in my team was far ahead. But when they got stuck with messy code, unable to get help on Slack or Stack O, I would sometimes catch up, having read all the theory, with a very neat organized code following most of the good practices (ahem), and I’d be able to put them back on track, as sometimes my great respect for complexity and fear to make bad coding choices would turn out to be an asset, while more adventurous coders would sometimes rage at code that should have worked, but didn’t, for some mysterious reason. Sometimes the guy who says “wait, it’s more complex than you think” was right. Sometimes he’s slow and a chicken. Depends. Another aspect of my calm, rational, cautious, repectful and organized personality that proved precious in coding is when I managed to teach my fellows some debugging basics, like, don’t try to desperately make all the code work at once, break it down into parts, comment out all the complex stuff and let’s start by seeing if the most simple stuff does work, then let’s build on it. But to be honest, I ended up taking a lot of inspiration from them : try and fail, try and fail, and ask for help, a lot. I eventually asked some more advanced coders for help so much that they ended up sometimes saying “no, sorry, I’m too busy with my own code”, and well, my pride didn’t die. I asked someone else, or used good ol’ Stack O, or found another way.
One thing I especially liked at the Hacking Project, that I just finished, was the frequent impression to be in a movie, namely a thriller. Two deadlines per week at midnight, a team of beginners, struggling with github, struggling with the switch to the production environment necessary to deploy our projects to heroku… High stress, high tension, despair, then little miracles, or just sheer holding on and working our asses off to have the damn thing work. And eventually, it works at the last minute after a 12 hours day of work, and the (free of charge) co-working place we were occupying still sells beer by midnight, and it’s magic.
Wo- wo- working together,
as Gonzales would have it. Also the pleasure to know that the morning after, you’d grade someone from another city and there would be a good chance you would be able to lift his or her deep depression, by finding what was the damn thing that didn’t work in his team’s project, and tell him this is not the end of the world, and one way or another, we both learnt something. And even if you lose a life, you can still recover one by doing extra work for the community.
For the last 2 weeks, this time we had to choose our project and our team (but by now we knew all the sailors in town (a sailor at THP being a beginner, as opposed to alumni known as “corsairs” (lawful pirates, following the hacker namespace principles))). I was actually picked by a sailor from my own team (it was one of the guys who wouldn’t give up and work late until the deadline, with the aforementioned thrilling moments of victory). Long story short, we made a (mobile first) web app to help parisian night owls find cheap booze at night, allowing shopowners to make an account and add their shop. We called it alim-alo. We passed the jury, who was not as harsh as expected (still a bit) but gave us precious advice for the future. By the way, the motto I remember from developing on Ruby on Rails is
(convention over configuration : stay in the rails and it will be easy). Then we were selected to present our site to all our peers (in a conference hall offered for the night by high up employees of famous french unicorn Xavier Niel (huge portrait in the hall), famous for “Free” web and cloud hosting and “Iliad” etc)
In the end I don’t have a degree (not possible for them for now) but I have the invaluable experience of working in a team of programmers, on concrete projects. We might rage sometimes when we feel that a Wordpress freelancer managed (apparently) to do better than us with only 3 days of Wordpress, but the ability to code a dynamic website in Ruby, backed by a Postgres database means you have almost total freedom to tailor the web app to your needs or the client’s needs. As for the Ruby on Rails framework, it’s pretty complex when you have to learn it so quickly, but most difficulties are linked to security enforcement. In today’s web development, either you don’t code and you do Wordpress (Wix, Drupal…), or you do code but unless you’re a security expert, you have to use a modern framework, that enforces security for you. The clients wants that.
And above all, The Hacking Project pushed me to focus on finishing tasks and pushed me to conquer my fears. Now I don’t feel like just a student with a degree, but like a problem solver who knows his limits and knows what he can bring to a team. I liked the community spirit of this school and writing this article is actually the last mission I picked as a mere “sailor”, soon to become an alumni aka “corsair”, with the other duties that go with it, like tutoring young sailors. Next step for me, as someone motivated to soon find a junior position in web development, is try the experimental “THP Next” curriculum, where the focus will be to become really proficient in Ruby on Rails, ready for employment as a web developer. For someone with not a lot of time or money, and high levels of anxiety and self-doubt, this looks, for now, like a damn good hack of the classic curriculum, a damn good hack into web development.