A little over a week ago, I started the online software engineering/full-stack web dev course at Flatiron school. Coming into the program, I had very little coding knowledge beyond what you can learn in 7 day with the free trial of pro at Codecademy. After a couple weeks of going through the bootcamp prep and pre-work Flatiron School provides, I was able to get through the first module of the curriculum which focuses on the basics of ruby. While this past week has been smooth, I’m also bracing myself for the challenging topics ahead. Before I get into my actual project, let me give some background on how I even got here.
- May 2018 – I graduate cum laude with majors in English, Theater, and Gender Studies, ready to start my career somewhere in the nonprofit world—likely in marketing, communications, or administration.
- August 2019 – I feel completely lost in my desired fields and like my career path at this point is non-existent. Since both my parents had CS degrees and loved their careers, I decide to give coding a try with Codecademy. After picking up the concepts pretty quickly, I research information on how to get into programming with a different bachelor’s degree and apply to Flatiron School for their online program.
So soon after applying I found myself in an online coding bootcamp—granted, the decision to go to Flatiron involved a lot more research and soul searching than I’ll write about here (feel free to shoot me an email if you want to know more). And after a week of getting through a month’s worth of material, I had already arrived at the time to build my first coding project. I honestly thought the task would seem incredibly daunting, but from the material and labs I had already gone through I felt prepared and excited to get started building.
The guideline for the first project were basically to build a CLI application that scrapes info from a webpage and displays that information to the user. The application had to be able to display preliminary information (like topics, restaurants, books, etc.) and then the user is able to choose one of the options to learn more about that or explore that option further. The project had to use object oriented ruby and use as clean of code as possible with our current knowledge.
I began my project by thinking about what I could build that would actually be useful to me. I didn't want to just build something for the sake of meeting the guidelines and passing the project. So I decided to combine my learning with another subject I've been self-teaching for
the past year - the Spanish language. I took a webpage that I had already used previously to learn some new vocab and checked the css selectors of the data to see if I could parse out the data I needed. Once I had that checked off, it was time to plan my project.
Now, maybe it's because I was an English major, but I always like to outline my plans before I start coding something if it's more than just a simple task. So I set my pencil to paper and figured out what classes I'd be using (I made a Vocab, Topic, Scraper, and CLI class) and how they would interact. I then wrote down ideas for how the application would look and interact with the user. I decided to start simple by meeting the guidelines of the project: the CLI would list out the topics, then prompt the user to select one, and finally display the vocab from that topic. I then made some future plans for building a possible "test" function (I later named this 'flashcards mode' and made a separate 'quiz mode'). Once I felt I had mapped out the classes and their attributes enough, it was time to start coding.
I'll spare you from writing too many details of my process here, but feel free to skip ahead if you just want to know what I actually built. To start bringing my on-paper plan to life, I made the barebones of my classes and the functions I'd need in my CLI class. I then made sure my Scraper class was getting the right data to add to my Vocab and Topic instances. Once I had the right data, I set about building my CLI class to add all the functionality I needed. These functions basically involved a 'run' (which would be the only function called to run the application), 'list', 'display_vocab', 'make_topics' (created Topic instances using the Scraper class), and 'add_vocab' function (created Vocab instances). Once I had the basic application working, I then moved on to add more functionality and readability. Once I was satisfied with how my application looked and ran, I refactored the code according to all the standards we were taught (like keeping code 'DRY' and readable).
As it stands now, my application has a main menu, a flashcard/study mode, a quiz mode, and can list vocab by topic. The flashcard mode prompts the user to select a topic and then whether they'd like to see the words in
English or Spanish. The app then shows the user the words from that topic one at a time and asks the user for the translation. The user gets two tries before seeing the correct answer - if their first answer is incorrect they receive a hint of the first letter (thanks to the suggestion from my cohort lead - so shout out to Ally for that awesome suggestion). The quiz mode works similarly by asking the user which language they'd wish to view the word in, except in this mode the user only gets one try and doesn't see the correct answers or whether they answered correctly until the very end. The quiz mode also doesn't rely on only one topic, it pulls ten random words from all the topics (i.e. from all the instances of Vocab).
My biggest takeaway from building my first application is that I really love coding. I'm super proud of my project and I'll definitely use it, but the most important part of this whole process for me was that I know I can create tangible projects now and that I truly enjoy the process. I'm really excited to be able to look back on this project in the future and realize how far I've come, but I also feel pretty proud right now considering less than a month ago I had never even written a line of html. I hope to continue expanding my knowledge and building larger scale projects with cleaner code. No matter what I experience on this journey - frustration, joy, hopelessness, achievement - I'm just glad I took that leap of faith and to step completely out of my humanities comfort zone and learn to code.