Why I chose Codesmith after attending a bootcamp & how I’m liking it so far.

Hello world, my name is Jonathan. I am a resident in Codesmith’s 5th cohort in New York City. I’m writing this because I believe that my journey here and my experience so far may help people find a path of their own, or may foster discussion about the software intensive community at large.

Some people might describe Codesmith as a bootcamp, Codesmith describes itself as a coding residency, I’d describe it as a socratic method code-tank. The best way I can describe what happens here is with an analogy. It’s like if someone showed you how to change the oil in your car, and then once you felt confident changing the oil on your own they ask you to change the engine of the car without their help. Naturally you struggle when the complexity of the problem you’re solving exceeds your comfort level. Eventually however, with small breakthroughs you begin to make headway on your task.

Whenever I explain that to my friends they inevitably ask: “Why pay $18k to go to a school that doesn’t really show you solutions?” It’s a valid question. Your average software intensive program teaches you every possible nuance about their chosen technology stack that time allows for. They hold your hand through each obstacle and do their best to make you confident in the tech they teach. Codesmith is a bit of a different beast and before I get too into it I’d like to explain how I got to where I am today.

I am a full-stack web developer from Miami, FL with experience building applications in Ruby on Rails and node. I’ve been coding for close to two years. I’d recently finished college and was starting a career in education when I started coding using online tutorials such as codecademy and freeCodeCamp.

As I continued coding I realized it was something I’d like to do for a living; so I left my fledgling career as an instructor to become a software engineer. I didn’t want to spend years on another degree so I began to research bootcamps. I wasn’t satisfied with what was available in the Miami market so I moved to New York to attend a program here. I was fortunate to have the help of my family in Queens without whom I’d have never been able to afford the move.

In the end everything went exactly as planned and I emerged a full-stack developer. I learned HTML, CSS, Javascript, routing, databases, view templating, and frameworks. I had the privilege of spending 14 weeks with some of the greatest & most colorful people I’ll ever meet. I exposed gaps in my knowledge I wasn’t aware of, made mistakes along the way in an environment where failure was a safe option, and emerged with the support of an institution.

Sometimes I’m a little upset that I found out about Codesmith at all; because I was really satisfied with the bootcamp I chose, and the path that I was on. I was ok with being a junior developer and doing grunt work while other people delegated tasks for me to do. I figured well why not just grind away for a few years and work my way up from there; at least until I went to my first Hard Parts meetup.

Attending Hard Parts I learned that the confidence I had in my abilities stemmed from ignorance. I was confident because I had no idea just how much there was out there to learn. My prior self-learning and bootcamp experiences made me very confident in the skills that I was practiced in. But if tasked with something outside of my comfort zone I had no idea where to begin. I needed someone to hand me the tools for success; I didn’t have the ability to start from scratch all on my own.

It was at this point I realized I needed to change my approach. What does it matter if I’m good at one or two stacks when technology changes so rapidly. The stack I know today won’t be relevant in 10 years, and may not even be used in the next 20. I need to become proficient at any technology when called on to do so. I initially had no intent to apply for the program when I was going to Hard Parts, I just wanted to glean as much information as I could. However, that perspective started changing when I began to look at the graduate production projects.

At the time I had no idea how to make software for other developers to use. I didn’t even understand most of the technologies that these projects incorporated. Eventually I learned that many of the instructors at Codesmith didn’t know the technologies used either. This is because in the senior portion of Codesmith you create your own projects using technologies that you learn yourself. It then dawned on me that all the graduates had been just like me before they entered. They were proficient within the confines of the technologies they were familiar with, and were now able to create novel tools using technologies that they taught themselves. I didn’t need to know more, I applied that same night.

The easiest part of Codesmith is the application process. I applied using a code given to Hard Parts attendees that linked to a challenge. Upon completion of the challenge I was greenlit for a fit interview. Codesmith screens pretty hard for engineering empathy, they clearly state they only select people who they believe can communicate effectively and relate to their peers.

Once I was past the fit interview I went on to a technical interview. It was in this technical that rubber really hit the road. I’d spent weeks studying Codesmith’s CSX prep material, practicing on codewars, and reconstructing built in Javascript methods. I knew that the technical interview was designed to stump you, to find the limit of your knowledge and see how you handle it, but there was no way I could have been ready for how I got stumped.

I got stuck on a problem that required me to use the built in reduce method, something I had used many times before. However, I’d always used reduce to evaluate numbers and now I was tasked with implementing it on an array of non-numbers. I realized I didn’t understand the concept as well as I’d thought. My interviewer nudged me in the direction of MDN documentation, and I quickly learned that I didn’t understand how to read documentation either. Here I was a developer with a portfolio of full-stack applications under my belt and unable to read basic Javascript documentation.

Eventually I interviewed again and got in. But the difference between the person who failed that first technical and the person who made it through the next time was the ability to gather information myself. That first guy needed to watch YouTube videos or ask a mentor to provide information for them, the second iteration of myself was able to find information straight from the documentation. During that second interview I got stumped again while being asked to use reduce in yet another novel way, but using documentation I was able to find an approach that worked.

Now that I’ve rambled at length about who I am and how I got here, I can actually talk about my actual Codesmith experience.

To put it succinctly every day at Codesmith has been more challenging than the most difficult parts of the bootcamp I attended prior. I am challenged, even with material that I am comfortable with, to push the boundaries of my abilities every day. But I look forward to going every single morning. The stress and frustration of wrestling with novel concepts is counteracted by an amazing space filled with amazing people.

Arriving on the first day there was a breakfast meet and greet for our cohort; 12 strangers getting to know each other over muffins and croissants. That same week we were treated to Ice Cream on a group outing to Washington Square Park. Every Monday we have dinner together to talk about the week that came before and recognize all the special effort put forth by our peers. Most importantly every Thursday we have Codesmith drinks, which is basically a beer fueled social event that goes well into the night once the coding is over for the day.

This is all separate from the actual curriculum, which is where the program really shines. If you remember my earlier oil changing analogy, I’d like to provide an actual example of what really happens. Codesmith separates instruction into 2-day units. For each unit we are paired with another member of our cohort and we have to problem solve together.

If it is the first day of a new unit then there is an hour long lecture on the new topic. These lectures are usually pretty abstract conceptually, but can sometimes include examples of actual code. After the lecture is dismissed we are assigned material based off the day’s lecture. We have roughly one hour to complete this individual assignment before we are paired with our partner for the remainder of the 2-day unit.

In one of the units we were tasked with making things move around the screen on the browser, DOM manipulation. The lecture itself went over basic Javascript methods such as createElement and appendChild. From this cursory explanation we then had to create an interactive game on the DOM. These are the kind of challenges that happen on a daily basis, we’re given a general overview of a concept and then asked to expand on that general understanding and find out how to apply it with our paired partner. I’d manipulated many a DOM before but never actually made an interactive game using only Javascript. This challenge was the simplest one for me and it still took me the better part of two days to get the functionality I wanted.

I could go on about the facilities or the curriculum but I credit the overall quality of my experience to the selective candidate vetting process. No amount of snacks or challenging material could make up for unpleasant company. I have been in rigorous programs before, and I have been in selective programs before. It is not strange for me to be in a room with outstanding individuals, but this is the first time in my life where I am in a room where everyone is a true standout.

Beyond being paired with truly exceptional people everyday I am also impressed by the level of knowledge of the staff as well as their ability facilitate our own internalization of that knowledge. Note that I didn’t say a transfer of that knowledge. The help from the staff comes more in the form of questioning that leads you to the answer on your own.

The best part however are your partners that you are paired with. You never know the experience level of the person you are going to pair with. They may match your skills, they may be less adept, or they may eclipse your abilities entirely. You still have to be able to take direction and give direction to your partner in a way that is concise, effective, and polite. It is the single-most important skill that I practice every day at Codesmith.

When I work with a partner that matches my skill-set I get to practice my technical language. When paired with a partner less comfortable than I am, in a given technology, I get the opportunity to convey the concepts that I’m using through conventional language and analogy. When paired with a partner that is more skilled I get to learn from their process and see how they overcome problems in a different, and likely more-effective, manner than I would.

Everyone here is very dedicated, not just to themselves and their own personal growth, but also to facilitating the growth of the people around them. We spent all day together (did I mention we’re here over 60 hours a week, 6 days a week and that it is awesome?) and still hangout on our free time. When 8PM comes and the coding day is officially over we still hang and play ping-pong, sing karaoke, or just help each other tweak our code to make it a little bit better.

So far Codesmith has been simultaneously the most difficult, stressful, and enjoyable experience I have ever had. I know I’m going to be a totally different version of myself when it’s all over. I’ll miss the people, I’ll miss the process, but not the old me watching YouTube tutorials.