How I’m hacking my way into Ruby on Rails web development

Stephane Mlv
16 min readDec 28, 2018
Sailors learning to code at “Station F”, near the startup incubator

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

Several times I tried to learn alone : different flavors of Basic, a bit of Javascript, I even once decided to tackle a tutorial called “Learn C the hard way”, because I was ambitious and I had heard that many students in prestigious schools (like école 42 in Paris) had to start with C (low level programming). I crashed and burnt not quite long after compiling a “hello world” program… Hell, I even did “hello world” in Assembly! Not sure how that would impress a recruiter in a webdev job interview though. Then, thanks to my background in education, I started googling the phrase “learn by doing”, because I was tired of the same old online courses with chapters on what’s a variable, what’s a loop, what’s an array, etc. I eventually found a learn-by-doing Python tutorial called Learn cryptography with Python. This was fun and motivating because I like crypto, I held on for maybe eleven lessons, until I reached the famous (simple) Caesar cypher, which I passed. As I was pretty proud, I started googling for job opportunities in cryptography to have an idea of an aim. Well, the only offer I found was a promising government “junior” position. I read the long text eagerly, it was quite exciting, they especially wanted passionate people with a strong taste for code, Python being a plus. All good… Until I started reading the minimum curriculum requirements, and that was a PhD in maths. Bummer.

Classic, expensive training

Then I got lucky with the job centre and government decisions in France : I was offered a 4 months training in web development, with a one month internship at the end. I found it hard to say “yes” because it was not Python (now I had a clear idea of what was in fashion and in demand), it was not cryptography or blockchain or big data analysis or all these fancy stuff. Just a classic web development training in a no-name school, fullstack but with a focus on the front end (Photoshop, Animate, Illustrator, CSS…). Hell, I said yes, and proceeded with the codecademy courses that were required as minimum level for admittance. It was nice to have someone pick the courses for me and to have a deadline. Then I started the training with 7 hours a day of classes in HTML5, CSS3, CSS preprocessors, PHP7, Javascript, jQuery, Photoshop, one week of object-oriented PHP, and eventually one week of introduction to the most popular PHP framework in France, Symfony. It was nice but the “learn by doing” aspect was completely absent. Many students had a background as illustrators or web designers, but most people had never done programming, so our teachers struggled to dumb everything down so that even the slowest student could follow. Which means that most classes consisted in a teacher writing code on his virtual blackboard, and us copying everything word for word on the computers in class. Then the panicked teacher, always behind schedule, would pass in the rows to debug everyone’s code, to find the missing semi colon or the fatal typo. When all the typos were eventually found and the program worked as on the virtual blackboard, it was a big “hurray!”, as if programming skills had just been sucessfully passed on to everyone.

By the end we were building nice web apps with a nice PHP backend (SQL database queried through PHP’s PDO (an object representing the database), complete CRUD (database read/write…), administrator dashboard, fancy object oriented PHP, with private, public and protected methods, setters and getters…) and a nice dynamic frontend (wireframing, Photoshop mockups, Illustrator logo, jQuery carousel, dynamic CSS with SCSS (sass, bootstrap…)), and we even had three days of SEO classes, to learn a few analytics tools and natural referencing principles. It was all nice and fun, except that by the time we had to look for a one month internship, we realized we had to start from zero and try to understand all that we had typed on our keyboards for four months, like drones. It didn’t help that most recruiters weren’t interested in hiring interns from no-name schools only for a month (even for no money at all, and we legally couldn’t propose more than a month), when they had candidates from college or renowned schools applying for 6 months internships. I finally found an internship through friends, but there was noone there to teach me anything related to coding, and after a month I wasn’t able to deliver the simple javascript quizz game I had promised, with a PHP backend to write and save the questions. I realized I was actually a grand beginner and that I never had a chance to train on simple coding tasks before starting a complete project on my own. I actually got lost trying to build on an open source quizz code I had found on github. I had tried to pick the most simple javascript code, but after days of headache I realized it was based on a Javascript framework (knockout.js) that I didn’t understand, and I didn’t have the time to learn it from scratch. I was desperate for a little bit of guidance, and I didn’t have any.

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!

First day

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.

First quitters…

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 :

  1. 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.
  2. 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).
  3. 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)).
  4. 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.

Thriller

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.

Final Project

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

“CoC!”

(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)

Peer programming

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.

--

--