Ruby Week 1: “Do the labs but don’t do them?”
Week 1 started off with lectures and lab time in the afternoon. All of week one I was struggling to complete every single lab that was posted. It was daunting to see a full set of labs out, and by the time I finish those, a whole new set was waiting for me. This took a toll on me making every day a struggle to catch up on the topic of “yesterday”, and I couldn't even focus on the topic of “today". After talking to my coach about this, as well as from other people who finished phase 1, I kept getting the same answer: “Do the labs, but don’t do them”.
Basically, it was the idea of pick and choose the labs that will help you to better understand the concepts of the material, but you’re not expected to complete all of them. My response was, “Uh…what???”.
Friday finally came and with it, “Friday Feels"(a time of reflection, thoughts, and feelings shared with the cohort). Through expressing our thoughts and feelings I realized I wasn’t the only one struggling, and with that slight boost of morale, I looked upon the weekend as a time to catch up.
Week 2: Code Challenge
Monday came and we had a practice code challenge to tackle. My instructor started off by singing “Eye of the Tiger” getting us hyped up for the test and to be honest, it did lessen my anxiety a bit. After completing the code challenge, or rather, not completing the challenge; I realized just how much I wasn’t getting it. I was simply reciting the code through memorization but wasn’t getting the concepts or what the code was actually doing. Needless to say, I failed the first code challenge. I was pretty devastated with the results and almost just gave up right then and there.
In the afternoon after receiving the fail notice as well as being put into a #retake channel on the cohorts slack, one of the instructors had a discussion with a couple of us in the channel about the retake. The instructor who from now on I shall refer to as “Yoda" (because the instructor’s teaching style is amazing), explained that unlike this first code challenge, which was based on knowing certain methods in Ruby, as well as the fundamentals of Object-Relational Mapping; would be based on Active Record, and our project. “Yoda" advised that focusing on our project will be of huge help for our retake code challenge, and that’s exactly what I did.
Week 3 consisted of learning about Active Record and CRUD(Create, Read, Update, Delete), the primary basis of the project app we were going to build in the next week.
Week 4 arrived and my project partner and I brainstormed different ideas on a theme for our project and decided on a “Pokemon Adoption Center”, or “Poke’doption Center” for short(Not really short but it worked for us). We set goals for our app, deciding on these features:
A User should be able to :
- Create an account and log in with a username and password
- Delete the account if they choose to
- Change their password
- Browse through a list of all the Pokemon available(Generation 1 Pokemon only)
- Select a Pokemon to view the details of the Pokemon (species_name, type, size(m), weight(kg), and moves the Pokemon is known)
- From this selection, the User will be able to adopt the Pokemon and view that Pokemon in the “Adopted Pokemon” list
- The Pokemon adopted will gain a happiness level increase as well as a starting level of 5 like in the game
We started with our ERDs to get an understanding of our relationships. We created a Pokemon class, User class, Adoption class, and created a controller called Interface.
This is where I came to understand the importance of drawing out ERDs to visually show relationships between classes and where to put the “foreign keys”. Otherwise, there will be no way for a particular User to associate with a specific Pokemon.
For the seed data of the Pokemon class, we could have used “API’s”, but we decided to just add in the seed data ourselves with attributes we wanted to include for the Pokemon’s detail page. To be honest, this decision was made to try to keep things simple, but at the same time, we weren’t confident with our ability to add APIs into our app. Nevertheless adding the seed data worked just fine.
To get what is shown once you start up the app we researched how to use TTY Prompt, which gave the option to move the arrow keys to choose the options on the app. After creating a username and password, the app takes you to the user’s menu. Here you are given the choice to view all the Pokemon, browse your adopted Pokemon(if you have any), and the option to change your password.
- Clicking on a Pokemon gives you the details of the Pokemon, showing things like their “Known for moves" or their “Type" to name a few.
- Once adopted, the Pokemon can be viewed in the Adopted Pokemon list.
Another gold we found was the TTY::Box, which put a box frame around the text we wanted. If I had the time and the “know-how" I would have attempted some form of interaction with the Pokemon, but as of now, it was wishful thinking.
This process of creating a CRUD app, showing what we achieved within week 4 right on the CLI was a satisfying experience, to say the least. Though our project was simple, it was still an achievement considering a week ago we failed a code challenge. The most important thing I learned through this project, however, can be pretty surprising, which was “how to learn, to code". It involves a lot of Google searching, writing what I want a code to do in words before implementing it through code, lightly stepping your foot into the labs posted to see if this is the one that can help solidify your understanding of the material, as well as the importance of teamwork working on a project.
With the app finished and submitted on a Thursday, it was a time of reflection for me for the rest of the day. I knew that I had gained an understanding of the concepts in Active Record through building this app and so much more. As for my thoughts on the retake the next day, I reflected on how much I achieved this far and knew I was ready.
It was Friday the morning of the retake code challenge, and I was ready for it. I read through the README, which is very important in determining the associations correctly, and proceeded to place my “macros" in the correct classes in the models using “:has_many”, “:has_many, through:”, and “:belongs_to”. Next, I created migration files for these models consisting of the tables with the attributes I needed. Eventually, I finished the retake code challenge and waited anxiously for the results. Finally, after what seemed like ages, I got the results.
I read through what Yoda said I needed work on, which was only my understanding of ‘self’, which funny enough is kind of what I think Yoda would say.
Even though retake students weren’t required to present their projects, my partner and I decided to. It was a fun experience using Pokemon, a nostalgic childhood favorite in our app, and seeing the reactions from my fellow cohorts.
I felt so many emotions, but some of the stronger emotions I felt were happiness, pride, and satisfaction. This feeling of satisfaction you get when you work out how to implement certain codes or solving a difficult code block you come across is such an exhilarating experience; that I feel is the reason why many Software Engineers chose this path.
I learned a lot through this journey through phase 1, from struggling to finish labs, failing the code challenge, working on a project, and taking the retest. Using labs as a tool to help you understand but not trying to do them all is an important lesson learned. How to Google and search for things that can help you is important, which I realize no one expects you to remember every single thing, and “Googling" later on in your career will most likely be crucial. I think the most important thing I learned, however, is the communities you build starting with your fellow cohorts that are there struggling with you helping you out when you need it, and giving back help when they need it.
The camaraderie you feel just from going through this boot camp makes me imagine how it will feel in the workplace when you and your fellow teammates in the job create something amazing. I entered the unknown not knowing what to expect, and so far, I think I chose the right path.