Failure, Resiliency, and Algorithms: My First 10 Weeks of Coding Bootcamp

Intro

In January of 2017 I was working full time as a teacher in South Florida while heavily involved in activist work. I had just written down my 1 year plan to become a junior software developer, which entailed 4 months of studying, school applications, a June/July enrollment goal, an October graduation goal, and a 3-month job hunt. If things were to go as planned I would have a job as a junior software developer by January of 2018.

Today it is September 24th, 2017 and I have just completed the 10th week of my program. The last 9 months have been quite the roller coaster and unexpected events have changed my timeline, but I’m happy to say that I feel more fulfilled, focused, and determined than ever. I’ve chosen to reflect on all the topics covered in the 9 week remote portion of my program and share a quick overview of my first week on campus. For those of you who don’t know much about computer programming, this blog post will be a great introduction. And for those of you who do, checkout everything I’ve learned up until now. If I got a concept wrong, feel free to let me know!

Dev Bootcamp Setup

Dev Bootcamp is an 18 week full-stack web development bootcamp that teaches Ruby as the primary language and then HTML, CSS, JavaScript, Rails, and SQL.

DBC is split into 4 phases:

Phase 0: 9 weeks

Phase 1: 3 weeks

Phase 2: 3 weeks

Phase 3: 3 weeks.

Phase 0 is 9 weeks of remote classwork and focuses on the fundamentals of the 5 main languages covered by DBC. It is intended to bring everyone up to a standard level before going on campus. A lot of it was review of stuff I’d already learned but a lot of it was brand new information, so it was a good mixture of challenging and easy.

Week 1 was about the Command Line, Version Control, and Github. The Command Line, also known as the terminal, is a user-interface that exists on every computer and allows you to control the operating system of the computer and/or any program that is on the computer, including programs that you’ve built. To use the command line you write “commands” which are literally instructions. For example, cd <folder name> means “take me into this folder” or mkdir <directory name> means “make a directory and call it <directory name>”. Some commands can be carried out using a mouse (ex: right-click the mouse on the desktop screen and create a new folder) but programmers use the command line for just about everything from creating a folder on a desktop to running a program. Whenever one is building a program it’s important to have multiple versions of the live or “real” program. It’s also important to keep track of the changes you make within any specific version. All of this matters because 1)you may one day need to backtrack in order to locate a bug aka “glitch” or “mistake” 2)you may want to store different versions of the same program until it’s time to pick the one you like best 3)there may be multiple people working on the same program at the same time. To facilitate all this, programmers use a process called git workflow whereby we mark “save points” and upload them to a website called Github. Github allows other people on your team to view your work history, approve changes, comment on changes, etc which is very important to making sure your code is acceptable before it’s finally merged to the master program or the REAL program.

The Command Line/Terminal Looks a little something like this

Week 2 and 3 were about the fundamentals of HTML and CSS which are front-end languages, meaning they focus on the visual design of a website. HTML is the core language that makes up all websites and web apps. It is literally the backbone of a website. It is what you use to create text, images, links, forms, tables, etc. CSS is the language used to add styles such as fonts, colors, page layout, spacing, etc. It’s important to be able to use the CSS and HTML to make responsive websites, meaning your website is able to respond to changes in the size of the screen. This is very important for accessing a website using a small laptop or cellphone.

html document
css document
Website before CSS
Website before CSS
Website after CSS
Website after CSS

The next set of images show what a website looks like with only HTML and then what it looks like after adding CSS.

Before starting the program I decided that I was going to use my assignments to create stuff that was useful to me, even if that meant going beyond the instructions of my assignment. So these photos are of a professional website that I’ve been building for myself and updating throughout my program.

Weeks 4, 5, & 6 were all about the fundamentals of a back-end language called Ruby. Back-end languages focus on functional components of a web application such as retrieving or storing data, user authentication, and other complex processes. Think of front-end as the face of a website and back-end as the brain.

First we learned about data types and data structures (all review for me). Programmers work very heavily with data which we sometimes store inside “data structures.” Every bit of data that we store is a “type.” 3 examples of data types are strings, integers, and booleans. A string is anything within quotations like “Hello World.” An integer is a number (ex: 1000). Booleans can only be 1 of two values: true or false. There are other data types but these are the most common. When we store data in a data structure it may look something like this:

Figure 1: [1, 3, 7, 15, 4, 21, 9]

Figure 2: {:name => “Iris”, :age => 25, :dbc_completed=> false}

Programmers must be able to create data structures, access the elements inside them, and manipulate those elements or the data structure as a whole. For example, I may want to determine the sum of all the numbers in figure 1. Or, maybe I want to retrieve the age of the person (me) whose info is stored in figure 2. Or maybe I want the computer to increase the age by 1 every year on a certain date, or check if the age is equal to 21 or higher. This requires being able to write algorithms — a major part of being a programmer and one of the more complex parts of the job. In computer science, an algorithm is a set of instructions that uses computer language to tell a computer how to solve a problem. Algorithms can be as simple as instructing your computer to print each element inside a data structure.

sample_array = [0, 1, 2, 3]

sample_array.each {| i | p i }

>>

0

1

2

3

Or as complicated as instructing a computer to sort through a data structure and either retrieve an element, perform operations (addition, multiplication, etc) using elements, or manipulate the value of an element (or all elements). Below is an example of manipulating a very small data structure in a very simple way (multiplying each element by 10). But imagine doing a more complex operation on a data structure with dozens, or hundreds of elements. Or trying to perform this operation on only ONE element inside the structure. How do you locate the element?

sample_array = [0, 1, 2, 3]

sample_array.map! {| i | i * 10}

p sample_array

>> [0, 10, 20, 30]

My assignments during weeks 3, 4, and 5 were super fun and sometimes really challenging like when we had to design a guessing game or build an algorithm that prints the first x numbers in the fibonacci sequence. Of course any experienced programmer would be able to do this very quickly. Even I can now write an algorithm for the fibonacci sequence in a few minutes. But it took many hours to get there. In addition to data types and structures we covered classes, modules, methods, and rspec tests which perhaps I’ll write about another day.

Week 7 covered JavaScript which is both a front-end and back-end language. It is similar to Ruby in some ways but also different so we mainly looked at JavaScript syntax and practiced writing JavaScript algorithms.

Week 8 covered databases, another back-end tool and one of my favorite topics. Back-end seems to be where I am most passionate and learning about databases made that very clear. We used a language called SQL (pronounced “sequel”) to build, access, and manipulate database tables. Databases are basically what programmers use to store large amounts of information. For example, when you log into Facebook you use an email address and a password. Facebook has a database somewhere that is storing the email addresses and passwords of all of its users along with trillions of other data from photos, to comments, to posts, to likes, etc. Each table is somehow connected to another table and figuring out how to connect tables to each other can be very complex.

Week 9 covered servers, my least favorite topic. Servers are physical devices that respond to HTTP requests. For example, when you attempt to log in to Facebook by submitting your email and password, your browser (on your computer) sends a request to Facebook’s server. Facebook’s server then performs an action which is to lookup your information in a database. Once the server confirms that your email and password matches what is in the database, the server then sends a file back to your browser. This file is of course, the file for your Facebook home page! There’s a lot more going on than just that but you get the gist. This is called the request-response model and it’s not particularly interesting to me but I have to learn how to configure a server in order to do all the other cool shit.

So that was Phase 0. . . 20–30 hours a week of very fun but sometimes not-so-fun assignments all done from home and sometimes with a partner (through Google Hangouts).

Phase 1

Last week I started Phase 1 which is a gruelling and time-consuming on-campus experience. Classes are from 9am-6pm Monday through Friday but that is simply not enough to absorb all the information or complete all the work.

Every day we are given a list of challenges to complete along with prep work for the next day (usually videos and readings). The challenges must be done with a pre-assigned partner and each one takes at least an hour but often times many hours. The average number of challenges per day has been around 6, and that doesn’t include the “optional stretch challenges”. You are lucky if you get through 3 challenges by 6pm which means that at 6pm you have to choose between calling it a day and continuing to work. Of course, I’m not here to play around so each day I’ve continued to work until around 10:30pm with the exception of Friday when I went home around 8.

There are weekend assignments as well and we have 24 hour access to the DBC building so on Saturday I was back on campus from 9:30am till 9pm. Right now, it’s Sunday evening around 9pm and I’m hurrying to finish up this blog post so I can complete my prep work and get to bed.

Phase 1 has been quite the challenge emotionally, intellectually, and physically. Every day feels like there’s a new mountain to climb because they give us more work than is possible to finish no matter how hard I work. I get stuck multiple times a day which can be so frustrating. At first I thought I’d avoid asking for help until I had no choice, but now I ask for help very quickly. It expedites my learning and allows me to finish more assignments. My classmates and I can all attest to the intensity of this program. The feelings of self-doubt, comparing ourselves to our classmates, etc. But the instructors and mentors are incredible and many of them have been former students so they understand what we’re going through.

Thriving in this program will require lots of humility, not being afraid to look “stupid”, and being 100% committed to giving it my all. I’ve had to sacrifice sleep, fun, and free time and even then I don’t accomplish everything I hope to but I am determined to make the best out of this program.

I’ve come to understand that failure is a large part of being a software developer. Developers fail all the time. It’s just how the job goes. They make mistakes, they discover bugs, and they get huge complex problems that can take weeks or months to solve. DBC has intentionally designed this program to make us comfortable with failing, able to think under pressure, and resilient as fuck so that by the end of it all we can be teachable, adaptable, and ultimately — hireable.

If you like this article please share and send some claps =)

Written by Iris Nevins, a self-taught software engineer

Follow my stories at: https://medium.com/@cosmosiris

Contact me at: nevinsiris@gmail.com