Learning Through Failure

Michael Jiang
5 min readMay 3, 2020

My experience getting through the first few weeks at the Flatiron School.

Coming from a counseling background, I sometimes forget to talk about my experiences or how I’m feeling because I’m so focused on other people and their perceived experiences. Despite only being five weeks into the program, it’s been a bit of a roller-coaster ride with my biggest challenge hitting me throughout week 3. For those who are not familiar with the Flatiron School, it is a coding boot camp that ultimately helps people transition their careers into one as a software engineer with some foundational level of development knowledge. Each week, different topics are taught,various labs are assigned, and projects are given to foster your creativity and coding chops. What was supposed to be a fun first project turned into an experience that really had me doubting myself as a potential software engineer.

The first project is one where, as a student of coding, you really begin to toy with your command line interface (CLI). Your first project brings the CLI to life, but also brings home some of the core concepts that are taught throughout the initial two weeks, such as domain modeling, establishing associations, utilizing class/instance methods, and understanding scope. These are some of the core, foundational skills of a programmer, and as a rookie, I had not realized I was severely lacking in one until I had developed my project almost 90% of the way through. Imagine making pizza — you buy all your ingredients/toppings, prepare them perfectly, preheat your oven, then have your pizza baking, only to realize that you had messed up the ratios in the pizza dough when there’s 5 minutes left on the oven timer. That was me on the night before project presentations.

Associations. That was the one thing I had overlooked going into project one. My project partner and I had such grand ideas and goals which we wanted to achieve that we had completely neglected the foundation. Having completed the first two weeks with some confidence, I was blinded by my present knowledge of coding and how I could utilize that to solve any bugs in the code… to the point where instead of directly fixing the bug, I simply worked around it with my limited coding knowledge. Not having the proper associations means you can’t access certain methods through other objects. In a classic restaurant example of a waiter, chef, and a customer — assigning associations is like giving them their jobs. A customer knows how to place an order, but only by talking to the waiter so that the waiter can then pass that order on to the chef. If I never tell the waiter that their job is to take customer orders, how will a customer ever place their order and get their food?

The workaround? I made the best possible menu I could ever think of and it focused only on the customer’s experience with thinking of what to order. Instead of trying to bring in the waiter and the chef, I focused only on the customer because that was the only thing that worked — I had created a single model project instead of incorporating three models. Instead of reviewing the poorly drawn out associations, I created and referenced a global variable. That’s not to say that you shouldn’t ever use global variables, but I certainly used it in the wrong scenario. Building off of a global variable meant having two sources of truth. Instead of directly accessing the order from the customer’s menu, I was referring to a copy of it that, luckily, had the same exact content. It’s easy to see how this could quickly get very messy. Just rereading through this paragraph alone makes my head spin.

My partner was my saving grace throughout this project, and I could not thank her more for how much she tried to understand my lunatic logic with the global variable. Referring back to the restaurant example, her end was to make the chef create their famous dishes. She spent hours upon hours trying to figure out what was going wrong and ultimately, reached out to a coding coach for some help. On Thursday morning, she found out we had the wrong associations for the past three days. It explained why none of the other models could call each other’s methods. It explained basically why our entire restaurant wasn’t functioning.

I had to recollect myself that night, because after such a grand mess-up, I really began to rethink my potential career as a software engineer. That was my lowest point that week. After reaching out to one of my friends who is also in the software development field, he told me about his experiences working with beginner software developers. These mistakes happen all the time and sometimes on a much bigger level. That’s part of the reason why it can take days, maybe even weeks, to debug some code. I took a step back and looked at my experience thus far. I’ve made mistakes, none of which weren’t rectifiable. I’ve panicked, but I’ve managed to recollect myself time and time again. I’ve been confident, but I was always immediately humbled. Learning to code made me realize how much I didn’t know, and how that’s completely okay. This mistake I made helped me take a deeper dive on understanding associations and drawing out my domain models. It strengthened one of my greatest weaknesses that I hadn’t discovered until that Thursday morning.

When it comes to learning code, I’m not just learning for the sake of learning anymore — contrary to how we used to in school. We memorized information solely for the sake of passing exams and getting good grades. We learned for the sake of learning, and nothing stuck. What’s the capital of Madagascar? Google can answer that now. I learn to inspire my creativity and develop a tool set which can be used to solve problems in the future. I learn not because I need good grades, but because I want to create. Failing to establish associations made me realize so much more than if I had simply just gone ahead and done everything right the first time. If I had the chance to go back and correct that mistake before it was ever made, I don’t think I would. As cliché as the saying is: keep failing until you succeed — because only through failure will you learn of all the things you need for success.

--

--

Michael Jiang

Full Stack Web Developer | Software Engineer | Counselor | Cynophilist