Istanbul Frontend Bootcamp Retrospective

Published on 2 July 2020

This post is a compendium of my thoughts as an instructor for a non-profit coding bootcamp teaching frontend web development (JavaScript and React). It first establishes the context, then explores the best ways to maximize teaching impact based on the constraints of the context.

This post has four parts:

  1. Why is this bootcamp different from other ways people learn coding?
  2. Two teaching philosophies
  3. Concrete strategies for practitioners
  4. Miscellaneous thoughts

Differences from traditional bootcamps

In this section, I set the context for this bootcamp and discuss some important differences to keep in mind between this bootcamp and other coding class settings, primarily with respect to time and money investment. The purpose of this background is to start the reader thinking about how these might affect the students’ mentality.

The Istanbul Bootcamp

The bootcamp is approximately five months, with three months of classes and approximately two months of a final project. The students are mostly Turkish and Syrian in nationality. The class size is approximately 24. The male-female ratio is approximately 60-40.

During the application process, the students are asked to do an HTML/CSS exercise, but otherwise, no previous coding experience is required. However, some students certainly have more existing experience than others, which has the potential to demoralize students.

From universities

Compared to universities, there are two primary differences in the bootcamp:

  1. Students do not pay for the bootcamp
  2. Students are not graded in the bootcamp

I encourage the reader to consider this question: “why do students in university make an effort?”

From paid bootcamps

Compared to paid bootcamps, the students are not paying a large sum of money. The tuition of HackReactor is $18,000. That’s quite an investment.

Ramifications

We’ve established some of the differences between this bootcamp and other similar venues of teaching coding. Next, let’s consider some consequences of these discrepancies.

In this section, I won’t discuss solutions. I will simply posit some salient problems.

Ease of quitting

In this context, the threshold for quitting is much lower than in university or paid bootcamps.

Our bootcamp students frequently broach the idea of quitting during stressful times, likely because the sunk cost is low. In contrast, in university or paid bootcamps, the threshold is higher, because the student doesn’t want to lose three years of money/time invested or ten thousand US dollars, respectively.

Lack of motivation to do assignments

Consider this hypothetical: if a university had no grades and no exams, how many students would do the assignments as compared to a university that had these?

Even in considering this hypothetical, one can see the problem. There is no external motivator or metric for our bootcamps’ students. Students should only be removed from the bootcamp for particularly egregious behavior, but it is certainly not taken lightly – part of our ethical responsibility is to encourage them psychologically.

One of my favorite phrases, for all parts of life: “you can’t make anyone do anything in this world” (barring duress and so on).

Propensity to complain

In general, students in our bootcamps like to gripe about various parts of the bootcamp: homework, projects, process, class, etc. Whether this is due to a cultural or a venue difference, I can’t say.

However, I do believe that one reason for this propensity for complaining is the aforementioned lack of investment, which emboldens the students. While complaining is not inherently dangerous, a cycle of complaining potentially causes students to demotivate each other and consequently increases the risk of quitting.

Note that there is a nuance between feedback and complaining, and instructors should still objectively evaluate complaints for genuine feedback.

Summary of differences

The summary of these differences is this: for our bootcamps, the student has invested neither money nor time. The only way to motivate these students is to foster an intrinsic interest in participating in the bootcamp.

The definition of “fostering intrinsic interest” will be expounded at length below.

Outside the scope of this post: the filtering qualities of interviews are also important in influencing student motivation.

Precursors on philosophy

Before we continue into more concrete strategies, I want to discuss two of my driving philosophies for teaching.

Treating students as relationships

The first driving philosophy: the skills that I apply for teaching are no different from those that I apply for a significant other or close friends. That means understanding another individuals needs, desires, life state, past experiences in the class, etc. What will make this person happy? What is this person looking for? How can I provide these things?

I truly believe the following statement to be true: the success of this particular coding bootcamp only slightly depends on how you teach the material, it depends almost completely on how loved and motivated you make your students feel. In this particular context, when the emotional environment is correct, the students’ hard work and enthusiasm will follow.

This is not to say that coherent instruction does not make a difference – it does. But in an art that requires self-research and emotional discipline from students, a caring instructor with mediocre teaching skills will be far more impactful than an emotionally-neutered instructor with excellent teaching skills.

Maximizing impact for time

The second driving philosophy: find time-cheap but psychologically-impactful ways to treat students.

Consider this question: given that I have N students, how can I make them all feel loved and motivated while minimizing the average amount of time I spend on an individual student?

The things that I describe below, for the most part, will not eat up your time. I wouldn’t do them if they did. But with this “one weird trick”, five to fifteen minutes of your time can make all the difference in the world.

For what it’s worth, this graph represents all aspects of my life, not just teaching. It makes life a bit easier, in my humble opinion, to hunt for these optimizations.

Fostering intrinsic interest

Intrinsic interest means that the student cares, in their heart, about doing well in the course, completing the assignments, and learning the material. A non-exhaustive list of where intrinsic interest comes from:

  • The student feels cared for by the instructors
  • The student feels pride in their work
  • The student respects the instructors as people
  • The student wants to continue despite hardships in coursework

In the absence of any other external motivators, our bootcamps have no choice but to rely on intrinsic interest. This section focuses on providing concrete strategies for intrinsically motivating students. Each section simultaneously posits a principle and pairs it with a description of a real, implementable strategy.

This post is not meant to be a solely theoretical exploration of what motivates students; these actions are intended to be executed by practitioners.

The illusion of individual attention

I call this the illusion of individual attention, because in a class of 24, it’s not possible for you to truly give sustained individual attention to every student. However, you can perpetuate the idea that you are trying your best to get individual attention to every student.

In a class of this size, students don’t expect individual attention. In fact, I find that most students are very understanding of the fact that the instructors are trying to juggle between the students.

Surprisingly, the students’ understanding of this is something that you can capitalize on. When you do show a student individual attention, their awareness of the resource constraints causes them to appreciate your efforts even more, consequently inspiring them.

The ultimate cost of the actions below are very low, but they mean the world to the students. Recall our efforts to maximize impact for minimal time.

Concrete actions

  • Initial one-on-ones: Have a one-on-one with each student at the beginning of the course.
  • Availability for one-on-ones: Allocate one to two hours each week for 20 minute one-on-ones with students. Even if they never capitalize on it, they appreciate the fact that it’s possible.
  • Occasional check-ins: Occasionally message students randomly to ask how they’re doing or what their thoughts are. It takes less than two minutes of time to message ten students.

Constructing a serious environment

The environment and tone that the teaching staff sets is by far one of the most important things to do. If you seem to be lax about their performance, they will certainly be lax about their performance.

I’ll cover this section with an anecdote.

The way I came to understand this is a bit amusing, in my opinion. After a few strict lectures to the class, a number of students approached me concerned about their performance or actions in the course. (Slightly unrelated note: when you give strict talks to your whole class about assignments and such, I realized that every student thinks you’re talking directly about them, even if they’re doing completely fine).

While my external self had always taken the class very seriously – and my internal self, of course, to a certain extent – I was truly surprised by how worried these students were about their performance in the class. My initial reaction was: “It was just a prank bro. I’m just a kid that likes to breakdance (not a strict teacher trying to berate you).”

The reason that this surprised me so much was that, previously, I did feel like I had trouble motivating my students to do their work. After all, recall the differences that we established in the beginning. There are no grades. There is no invested money. That’s not to say my students wouldn’t take it seriously, but why are they taking it this seriously?

But then I realized, that I had unintentionally stumbled upon something that I’ve always known in my relationships and friendships: If you are proactive about taking something seriously, the other person will be much more likely to take it seriously. Don’t sit around waiting for the other person to be the one to do so.

Concrete actions

  • Communicate your investment: “I take your education very seriously, and I expect you to take it seriously too.”
  • Show with your actions: Words only mean so much in this world. Show your students you take it seriously in the quality of your teaching and your interactions with your students (see all the other sections).

Professionalism and personalization

Professionalism

The more professional your content is, the more it reinforces students’ belief in the authority and legitimacy of the classroom.

Suppose the contrasting hypothetical: your slides are poorly written; your assignment instructions have no consistent formatting; your in-class activities are full of typos. Inevitably, your students will start learning from other content on the internet, and they’ll come to the following realization: “Wow, the teaching materials that our teacher is giving us are shit quality.”

Among my students in particular, I have noticed how captivated they are by the professional and formal aspects presented by the organization’s onboarding and branding. To capitalize on that captivation, this professionalism needs to be continued in the classroom.

Concrete actions

  • Professional content: All slides, assignments, and course material should be formatted professionally and flawlessly. Minimize typos.
  • Agenda slides: Show an agenda slide at the beginning of each class. It provides a sense of official-ness, like university.

Personalization

Students like the idea that the organization is doing something for them. Just for them. This doesn’t mean that you have to write the assignment from scratch, but it should at least be presented in a manner that suggests that you’re thinking of the student. Recall the goal: make the student feel cared for.

Compare the following two situations:

Positive impact

Teacher: We thought about where the class currently is, and the teaching staff designed this activity for you all based on your feedback and struggles. Please do this activity.

Student: Wow, the teacher put in so much effort for us!

Neutral impact (but probably negative if chronic)

Teacher: Here’s a link to this site, please do this activity.

Student: Sure.

Concrete actions

  • Revamp outside resources: Avoid chronically linking to other resources for activities. Either put them in your own document or write your own, giving proper attribution as needed. Even the act of putting it in your own document pushes this edge.
  • Emphasize your effort: Mention to your students how the material was made by your organization on their behalf. Let them know you made an effort for them.

Projects that express self-identity

In the absence of grades, one of the best motivators for effort is to allow students to express themselves through their work. Humans like expressing themselves. Humans like to build things, look at them, and say, “This is me. I did this.” This is a fact, and we can capitalize on this fact in order to incentivize students.

When ten groups of students do assignments that all look almost exactly the same, the student does not think, “This is me. I did this.”

My own students have constantly surprised me with how much effort they put into projects. For example, they come into office hours and talk about the hours working on something (styling, a special feature they came up, etc.) that was outside the stated project requirements. Part of this is because I personally would never do anything beyond the minimal requirements, but part of it is because, until I was blown away repeatedly by this phenomenon, I had never realized the power of allowing students to invest their identity in their work.

Concrete actions

Devise coding projects with open-ended interpretations (in styling or functionality).

Different project designs can have different degrees of self-identity; I would argue that some non-zero amount is necessary for every project.

For example, the final project of our course was “the board project”, which required only the very general concept of boards and items that could be put on boards. The ultimate result was a wide array of projects with a personal touch: to-do lists, cookbooks, course project trackers, and the students ultimately invested much more time than if we had assigned a “to-do list project.”

Social cohesion

When the social aspect of the class is strong, students try harder. Part of it is that they enjoy the class, but part of it is that most people don’t want to be known by their friends as the student who doesn’t try.

So the question is this: how do you encourage people to like each other? To be honest, as instructors, we don’t have much agency here; you can’t make people form bonds. However, you can try your best to facilitate situations where it can happen.

Concrete actions

  • Project partners: Select project partners with the intent of forming bonds between students of similar levels
  • Promoting thought: Ask students who their favorite people to work with are (not for any particular reason other than for them to ponder this question)
  • Allocate time for small socialization: Encourage socializing and jokes in class, allocate “empty time”
  • Use office hours: Leave time in office hours for students to chat with each other

Expression of belief

Coding bootcamps can be quite intense for some of the students. There will come a time when some students don’t believe in themselves or their ability to understand the content. And when that time comes, it’s not important whether or not you believed in them, it’s important whether or not you communicated that you believed in them.

I again emphasize the illusion of individual attention.

Concrete actions

  • Individual messaging: Identifying students that are struggling, and telling them, directly to their face (via Zoom, this is 2020), that you believe in them. Offer them the option to meet one-on-one.
  • Humbling your journey: Show that you, too, come from humble beginnings. Whether that means you went through a bootcamp yourself, or that you struggled a lot when you started coding, show the students that their struggle is normal. For example, I showed my students emails from my first two months in coding where I sent emails to my friend raging about bugs in my code. I had multiple students tell me that this humanized my journey despite the pedigree.
  • Inspirational speeches: Be liberal with the inspirational speeches in class. They never stop feeling weird to me, but it matters.
  • Emphasize first exposure: Tell your students that when you show them something for the first time, they’re not expected to understand it. A phrase my students are familiar with: “This is just a first exposure.”

Other takeaways

These are miscellaneous addenda that don’t belong in the categories above, but these are points I would tell myself if I could travel back in time. In the end, these happened naturally, but I didn’t codify them into thoughts until the middle of the course.

Teaching a way of thinking

I encourage you to ask yourself this question: “at the end of the course, who do I hope my students to be?”

It’s not my place to say what the right or wrong answer is. If you’re a teacher, you set the goals. But by the way, there is a wrong answer, and that wrong answer is: “a student that knows JavaScript and React.”

The right answer is that the student:

  • is no longer scared to learn a new technology or tool
  • never compares himself or herself to other people again
  • is unfazed by setbacks, even when a small bug costs five hours of time (instead of thinking, “programming is not for me”)

I’m certain this is not a novel idea I’m proposing; most successful introductory computer science courses, such as CS50, operate along the same mentality.

But I’d like to note something interesting here. None of the things above have to do with specific knowledge of a subject; they all pertain to how the students think as people.

With these goals in mind, here are some modes of operation:

  • Constantly introduce new things: Spend the course bombarding students with new things. Just as they start to feel comfortable with something, you introduce something (perhaps only slightly) new on top of it.
  • Demo your thought process: When feasible, walk the student how you thought about the problem. “You see, I just Googled this thing.” “I worked backwards from this variable to find the issue.”
  • Comfort your students: When your students finally fix a bug that took them forever, comfort them psychologically. Tell them it’s normal. Emphasize your belief in them.

Trust the process

The students will learn the material eventually – trust the process. I’ll admit that even I wasn’t sure whether my students were learning anything at some point. There were times in the course when almost all of the students seemed completely lost in all of the in-class activities (to be fair, I was also pushing the pace very quickly).

Luckily, I had my trusty teaching partner Ammar, who informed me that these struggles were normal. In the same way that I tell my students, “Hey, this is normal,” Ammar’s evaluation sealed away any concerns I had. In the end, I trust Ammar’s judgment completely, given that he’d experienced two bootcamps before me.

I’ll also say this: in-class activities are a very short amount of time to exercise real exploration beyond basics. The core of the learning will come from the multi-week projects that students do. That’s the real shit, pardon my French. And if the students are invested in completing projects, the learning will follow.

Conclusions

At this point, I’d like to highlight a critical observation: none of these actions take much time. They are simply small flourishes to the interactions with students.

But if you’ve ever played any skill-based game, then you’ll be familiar with this concept: the people who are the best at anything in life are those that push all the smallest advantages. The best chess players leave no tradeoff unpunished. The best football players leave no misstep unexploited. Capitalizing on small edges differentiates one who is the best at something and one who is average.

Finally, achieving anything in our lives is a function of our goals, and it’s good to recall our broader goals. In whatever context you teach in, I encourage you to refresh your goals. For Re:Coded, they would be this:

  • To teach students the programmer mindset (how to learn, debug, etc.)
  • To empower students to obtain and excel at a development job

And to achieve these goals, we should not simply be settling at teaching our students React and JavaScript. The question is not where can we take the students, but how far can we take them?

And for that reason, I urge you to never be complacent with your students.

One hour of your time per week could be the difference between your student hating or loving the course.

Two hours of your time per week could be the difference between your student landing a frontend job or not.

Three hours of your time per week could be the difference between your student landing a job on a weak currency or a strong one.

Calculate the margins, and remember the graph.

Comments