My Flatiron School Experience + 5 lessons I Learned 👩‍💻💡
Tags: webdev, career, codenewbie, beginners
Published: 2020-07-29 14:32:52

I completed my Software Engineering Bootcamp last week and I am thrilled to share my wonderful experience with our *dev.to* community, as well as the five valuable lessons that I have learned that might also be useful to fellow bootcamp students.

### How It All Started 🌱
I graduated from New York University in 2018 with a BS degree in Media and Communications and a minor in Web Programming and Applications. I started my career in the digital marketing field since I would like to explore a wide range of responsibilities within the field, such as social media marketing and web design. 

While working as a Marketing Coordinator in a hospitality firm, I sought new software for building more effective marketing strategies, create beautiful websites,  measure campaign results accurately, and streamline different operations. 

With that in mind, in the Summer of 2019, I attended a Flatiron School event about Emerging Tech in the restaurant industry and was really amazed to see how programming intertwines with our daily lives. I had a glimpse of who was driving these restaurant tech innovations and I was intrigued by how such software worked.  

During the bootcamp prep, I really enjoyed learning Ruby and understanding more about how applications are built. Therefore, I decided to enroll in the part-time software engineering program in Fall 2019.

### My Learning Experience
#### Curriculum
![Flatiron School Software Engineering Cirriculum](https://dev-to-uploads.s3.amazonaws.com/i/gcslxlxzd5enupwengdx.png)
The curriculum was divided into five major modules, which was designed for students to first learn the concepts of a programming language, followed by the application of a popular framework. At the end of each module, there was a two-week project, where I developed a web application using the newly acquired knowledge.

The modules and the projects that I worked on:

> ####  1. Command Line Interface + Procedural Ruby
>   * **Concepts:** *Procedural Ruby (CLI, data types and structures, Object-Oriented Ruby, Metaprogramming, Scraping, Separation of Concerns, etc.*
>   * **Project:** I built a [Command Line Interface](https://github.com/jacqueline-lam/rain_jackets) application that uses [Nokogiri](https://nokogiri.org/) to scrape data from the [Outdoor Gear Lab’s webpage](https://www.outdoorgearlab.com/topics/clothing-womens/best-rain-jacket-womens) for Best Rain Jackets. It provides different product information to the user according to the user’s inquiries, such as pros/cons and feature ratings.

> #### 2. SQL + Sinatra
>   * **Concepts:** *HTML, CSS, Rack, Object Relational Mapping (ORMs) and ActiveRecord, CRUD, Model-View-Controller (MVC), Content Management System, and SQL*
>   * **Project:** [Bolderer v1](https://github.com/jacqueline-lam/bolderer_sinatra_app) is a web app built using the web framework Sinatra. It is designed for aspiring boulderers to log the problems that they have climbed in the gym.  

> #### 3. Ruby on Rails
>   * **Concepts:** *ActiveRecord Associations, Validation and Forms, User Authentication with Omniauth, Layouts and Partials, Helper Methods, and Nested Routing*   
>   * **Project:** Based on the idea of Bolderer v1, I created [Bolderer v2] (https://github.com/jacqueline-lam/rails-bolderer-app) with Rails and built a more complex domain with improved user authentication and features. Users can browse problems in the bouldering gym by different filters, keep track of their sends, and check out other climbers who have crushed the same problems.

> #### 4. JavaScript and Rails
>   * **Concepts:** *Vanilla JavaScript, JSON, and Fetch API*
>   * **Project:** [Umami Pantry](https://github.com/jacqueline-lam/umami-pantry) is my favorite project since it is the first single page application I have ever built and it is more interactive than my previous web applications, thanks to the use of asynchronous Javascript. In addition, the project is timely and unique since it allows users to find recipes for limited ingredients available in their apartment during a lockdown.

> #### 5. React and Redux
>   * **Concepts:** *React, Redux, JSON, and Client-side Routing*
>   * **Project:** [Portfolio](https://github.com/jacqueline-lam/portfolio) is composed of a React & Redux front-end and Rails API backend. I learned to use Redux as a state manager and Rails as a back-end JSON API. By using this set up, I can maintain my portfolio efficiently since it allows me to dynamically render updated project data and blog posts by updating my database directly.

---
I have learned so much in the past 10 months and I am glad that I was taught not only programming concepts and application of frameworks, but also the habit of continuous learning and mentality of problem-solving. Below are some valuable lessons that I have learned throughout the course.

#### Five Valuable Lessons I Learned 💡
1. Don’t Be Afraid to Ask Both 'Dumb' and Critical Questions
    - It is normal to experience imposter syndrome and wonder if you are the only person who does not understand something. Share the question with your cohort mates and cohort lead and you will find that your question may also benefit others.
![Emotional Journey of Creating Anything Great](https://dev-to-uploads.s3.amazonaws.com/i/c3rv398ndm66zuq3t3dm.jpg)
    - The bootcamp is structured to teach you programming concepts and some design and architecture patterns. Whilst you’re a student and might think you should adopt whatever you have been taught, it is important to challenge the material and research for other solutions. There will always be new patterns or frameworks so you should keep an open mind. 
   - For instance, the curriculum teaches an object-oriented design approach to JavaScript, but it is NOT the only approach and JavaScript is becoming more functional. It is important to remember that the approach or pattern that you were taught was not the only way to do things and you should always explore discourses about different approaches.
  - Technology moves quickly, so you should not get stuck on a single way of doing things because preferred patterns change rapidly. I learned to use my extra hours to research on concepts beyond existing resources provided by Flatiron School's program.

2. Start a Note-taking System 📝
    - Reading the lectures and completing the labs are not enough to help you retain the knowledge. I found it especially useful to use Dropbox Paper to take notes as I go through the lectures and labs. I could include code snippets as well since Dropbox paper supports Markdown syntax. Some of my cohort mates also recommend Microsoft OneNote.

3. Project Building: How to Plan Your Project
    - Map out your model relationships, routes, frameworks, and APIs.
    - Brainstorm your User story: Who is your user? What are their pain points? How do they use our solution to mitigate or overcome this problem?
    - Domain Modeling: I used [draw.io](https://app.diagrams.net/) to map out my model relations diagram and plan out my routes.

![Bolderer App Relationship Diagram](https://dev-to-uploads.s3.amazonaws.com/i/6u24um5ptnxd3h3p1f8k.png)
 
4\. Perfect is the Enemy of Good
- Whether it is a small debug, a feature added, or one query method solved, you should celebrate these small wins. Especially during project week, I had often started with ambitious goals with how I wanted certain features to work and look. However, it is important to learn to first build a Minimum Viable Product (MVP) before adding any of the extra flares. I realized that I had to breakdown my features into tiers of importance and slowly add features and styling after I created the MVP.
![Minimum Viable Product](https://dev-to-uploads.s3.amazonaws.com/i/e3pot9ou28n4hhc0jftg.png)

- Building out the project and flushing out an idea does not have to be mutually exclusive.
- Validation of ideas comes from hitting the ground and starting to code. You will get stuck if you try to plan out all the details of the project from scratch. Meanwhile, you can test the theory of what makes an idea good or bad by testing the committed code and MVP.

---
### Next Steps 🚀 
I will be starting my career counseling and job hunting soon, so please stay tuned for updates on technical challenges, job hunting, and interview experience, and more. 

Thank you for reading! Please feel free to head over to my profile to check out my blog posts for each project.