Things I Wish My Bootcamp Did Better

OK, it’s not cool to start something like this off by blasting my alma mater. General Assembly is an amazing place, and I highly recommend it. The quality of people there is simply fantastic (honestly still amazed at how beautiful the people are that I’ve gotten to know). The team that greets you everyday, makes sure you’re getting the most out of the classroom, helping you prepare for life after GA, holding events several times a week, providing breakfast/lunch/dinner on the most stressful of days (and sometimes just because they love you), offering job counseling, sending you to conferences for free, bringing in role models, mentors, advisors, and alumni to give you knowledge every night …this is a never ending list of credits to GA. They care about education and just like most bootcamps out there, it’s a very young place with lots to learn. I fully expect GA to be a leader in tech education in just a few short years. There’s that much passion, talent and compassion there.

Being on the job has really highlighted some weak areas as far as what schooling provides and what jobs expect. I expected there to be some incongruencies there because jobs don’t always align with classroom lessons. But I think these are things that would enhance any bootcamp classroom, not just the one I attended. These are skills that can serve you at any job …and serve you damn well.

At General Assembly, the learning was FAST. That’s to be expected of any immersive course. But the key word here is immersive. Immersion isn’t about the speed of lessons, but the depth and breadth of them. What can a bootcamp do to immerse you in the knowledge you need AND make it stick?

Even before graduation a student can feel what’s missing from the course by the end. It’s felt in the projects. It’s felt when you don’t raise your hand in class. It’s felt when you graduate and don’t feel confident you can actually get a job even as an apprentice. There’s a lot more bootcamps can do, especially bootcamps that focus on beginners.

I’ve taught foreign language learning and I’ve got experience with building curricula for language learning. This doesn’t make me some kind of expert, but I at least know something about what I’m discussing here. I’ll also say that spoken language and written language are also different, and teaching a spoken language shouldn’t be the same way a written language is taught. Oddly, the traditional approach to language learning in our classrooms is better suited for coding according to some research! From that perspective, there’s a few things I think are important to language learning.

Pick one …any one

I suspected this to be true at the beginning of bootcamp, but having done it I now believe it’s definitely true: a bootcamp doesn’t need to teach a spread of languages, especially not a 12 week course. Language courses tend to be specific for a reason: how much Spanish would you learn if the course taught Spanish and Chinese at the same time? That would even be confusing, right? So why do we structure bootcamps like this?

Choosing a single language to teach and focusing on fluency will do in this case. Here’s why: I was already very fluent in English before learning Arabic. My level of English was higher than the average English speaker (call it academic English). When learning a foreign language, it paid to know grammar, syntax, semantics and to have a large vocabulary. Those are language skills, broadly applicable to any language. Computer language included. To say this enhanced my ability to learn code quickly is an understatement.

And that gets to the point: a 12-week immersive course could be more powerful by focusing on the linguistics of coding rather than the languages themselves. Writing code depends a lot on how good we are with language grammar, the size of our vocabulary and our familiarity with it’s semantics. Teaching a single language becomes more optimal, in this case. Once a student has the linguistics down, they’re in a position to learn new languages much more rapidly and fluently. The language itself matters more when you already know a language, less when you don’t.

There are many course configurations for teaching a language within 12-weeks and I won’t pretend to know what the best one would be. But I would rather have graduated knowing a lot of Ruby instead of a little bit of Ruby and a little bit of Javascript. And it’s not an either/or proposition:a 12-week course can be configured to give the students a strong foundation in two languages. I’m just arguing that having that foundation doesn’t require learning more than a single language at a time. In the case of teaching a full stack, spending the next few months on a particular stack (which means a particular language and framework) gives the student a foundation for learning any stack.

Those basic skills are far more important in my current job than the languages themselves. Case in point: I’m learning Python on the job and not using the languages I learned at all at GA (though there’s some JS in our stack, I work on the backend with Python and Django). Due to my language education overall (linguistics and GA), I can function in this environment. Any programmer with more than 1 language under their belts knows the truth of this.

Any coder can learn to be a linguist during a 12-week course.

Debugging

I am, even now, surprised this wasn’t an actual topic or even a lesson during the course. This is so crucial that it’s almost unsurprising it’s value to a langauge course could be overlooked. Such a simple thing.

Debugging is the process of failing until you succeed. What debugging does as a teaching tool is show students *how* to solve their problems by giving them a methodology, an approach to failure. During the course, students were expected mostly to cut/paste errors into Google. Searching Google is not a methodology and shouldn’t be encouraged for people totally new to code.

Beginners will find debugging especially valuable, because it empowers them to solve their own problems. And problem solving is what the entire coding process is about.

On some level my instructors understood the value of failure while learning and they definitely encouraged us to experiment with their guidance. And they were great, because they were patient and cared about whether we learned the material. What they missed was teaching a debugging process as a formal and critical lesson in learning to code.

Documentation for various languages and frameworks will take a beginner only so far. It’s like learning a new alphabet and then having to learn to use a new kind of dictionary alongside it. For example, Arabic is written right to left, the alphabet is very different and the dictionary isn’t organized in the same way English dictionaries are. For the first few weeks of the course, we had dictionaries but none of us could really take advantage of it. It’s the same with learning to code.

There’s Stack Overflow, which is awesome and really the best thing the coding community has going in this area. This doesn’t diminish the importance of having a debugging reference and methodology.

Debugging continues to be my most valuable skill as a coder. Being able to find out why I’m getting errors, having a methodology for approaching solving errors, is probably the most important job skill a bootcamp can teach.

Testing

Related to debugging, testing is about being proactive, defining your code before you code and pre-empting (some) errors. Therefore, a beginner’s course to coding is enhanced by test driven development. Here’s why.

For a beginner, you want classroom lessons to be very, very deliberate. You want as little room as possible for interpretation. Code walk-throughs are effective because they take a person step-by-step through the process of writing code. Coding is an extremely hands-on activity for the learner, so it’s important that the process is active (doing) not passive (reading). Test driven development is all about that walk-through process. It forces the student to think about the problem, come up with solutions and then test that their solutions work. This not only gives the student an approach to coding, but builds their confidence because they can control every step of the process. It also decreases how often you get “stuck” on a problem because you have a process for working through it.

Testing was taught at GA, but it wasn’t introduced as a tool for learning to code. Instead it was taught as an additional tool coders use and that’s a completely valid perspective. It’s just not as potent as the former when dealing with a beginner’s classroom. In hindsight, I think this would have been a stronger introduction to coding, because it would have armed us with the means to solve our own problems and become better coders.

Start tiny …no, miniscule …NANO

It was a real shame that HTML/CSS was largely ignored in this course. It was on the syllabus and we got a very high level overview of what they were. Except for learning how to traverse the DOM with Javascript, HTML and CSS weren’t actually taught. This meant some students struggled the entire course with just putting a reasonably styled webpage together.

Not only is HTML/CSS the simplest introduction to web development, but the most meaningful. To write HTML feels more like editing style on a text document than it does coding, something everyone with a computer has experience with. CSS feels a lot more code-y, but is intuitive enough that it’s not burdensome in the classroom. And yet this was skipped entirely. I was mystified by this move.

A well paced immersive course won’t rush you to the “good stuff”. It’ll take a deliberate approach to teaching fundamentals so that students understand how to approach coding. I don’t think web development gets more fundamental than HTML/CSS.

Not much more I can say about that. This would be the smallest lesson to start an immersive web dev course.

I’ve got to end this by re-iterating my great satisfaction with what I got out of General Assembly. It’s not just some bootcamp I went to for a few months, but an amazing community of dedicated people who are as passionate about tech as any of us. A family (the kind you like to visit, though I’m pretty overdue for a visit at the time of this blog …). The things on this list, I think, are important to any course that invites true beginners.

Hopefully I’ll have an opportunity to impact change at GA. If you’re teaching yourself how to code, try adding these things to your lesson plan and see how it pans out.

Leave a Reply

Your email address will not be published. Required fields are marked *