I think this picture is pretty accurate as to how I feel right now. A pawn crowned king. I passed my final assessment the first time through and have officially been a graduate of Flatiron School for a week now. I’m also lucky enough to have a full-time job right out of school. A full-time job looking for a job that is :-p. It’s amazing how in depth the job search can be. However, when you are provided with a solid framework to follow it’s nice to see the pieces just start falling into place. With my choice of the Full Stack Web Developer Program through Flatiron School, I receive a job guarantee if I follow some steps. Obviously there is a little more to it, like following my career coaches advice, but in general I must have 8 git commits per week to GitHub, write one blog post per week, and perform 8 job search activities per week (ie. apply for a job, meet someone at a user group, follow up thank you notes, networking outreach to meet for coffee, etc…).

These are things I think I would do anyway but having a structure that I am being held accountable to is definitely pushing me to get out of my comfort zone some in this process. I also have a better pace to do my outreach. If I had done it myself I probably would have blown through EVERY contact I have in this first week and now be dealing with scheduling conflicts and such going into next week. Now I am pacing it and staggering how I contact people some. If you’re like me you’re already thinking of ways to track this type of job search. Maybe build an app, or utilize Trello, or a Google Sheet. Luckily, the Flatiron School curriculum is open source so you can just find it right here (look for the embedded link).

Staying Active Coding

While this seems like a standard practice I know it’s not. I’ve watched many boot camp graduates GitHub accounts go from consistent commits to zero after graduation. This is something I prepared for as I worked on my portfolio projects. I always knew ways that I wanted to extend them. Although, now that I have the freedom to learn ANYTHING I need to stay on track. As soon as I became a graduate a Node.js track opened up for me in my courses listing. This is attractive as I could round out some full stack JS knowledge. I also purchased Wes Bos’ Learn Node course while I was going through the boot camp so I have that too.

It’s easy to become lax though. It’s nice to take a breath and relax. I’ve worked hard and I deserve a break, right? Well, no I don’t. I still have to work my butt off. I’m at the bottom right now and the climb is hard. However, the job search is pretty much full time in and of itself so now I need to find time to code too? Yes. Here’s the plan:

  1. Refactor my React with Redux project to pull from the Yelp API instead of from the Rails API I built it on. Then implement comments being persisted in the DB.
  2. Finish the TODO items I left open for the rest of my projects. Work on the Ruby CLI Gem first, then my jQuery front end, then my Rails project, then my Sinatra project (maybe).
  3. Node.js is next. First the Flatiron track then Wes Bos’ course.
  4. If I’m still looking for work at this point I’m not sure what I’ll dive into. I might choose to build my React app using other frameworks to acquire familiarity and demonstrate my ability to learn other things.

Ultimately, I don’t want my GitHub to go stale. I’m also working on algorithm challenges to prepare for technical interviews. I’m mostly working on CodeFights currently as they have an Interview Prep set of problems. However, I’ve done problems on Codewars which are fun and I hear a ton of good things about exercism.io which I’ll probably dive into once I’m done with CodeFights stuff.

Networking

While this might seem like a natural thing for me, former restaurant manager, bartender, meetup co-organizer, meetup attender, etc… It’s always awkward to reach out to someone for the first time. Luckily, I have help with this. There are some awesome resources for this in Nashville as well. I’m sure if you look around there are resources in your city as well.

Meetup.com has to be the #1 resource for networking around shared topics. There are so many user groups and these are open to the public. So, everyone at a meetup event is already a warm contact. They expect to be approached and talked to. Adding to that the topic should hopefully be something that you are interested in and can speak somewhat about. I’ve had some great conversations, met some awesome engineers and established friendly contacts that I hope to maintain long-term.

Another great place to check out, and meetups will help you find these, are Slack networks in your city. Nashville has the NashDev Slack network which is a central place for people in IT in Nashville to chat. I’ve asked questions there and learned a ton from the responses from lead engineers and seasoned developers who have helped me with no strings attached. The best part is, some of these people I’ll probably end up interviewing with. Now I’m not a random name but someone that they have conversed with and taught before.

In addition, look for groups specifically for people to extend their learning. Started in Nashville and slowly spreading I found Penny University. I think they describe the idea better than I can paraphrase:

The name “Penny University” is a reference to the early coffeehouses in Oxford England. These coffeehouses held an important association with the European Age of Enlightenment. For the price of a penny, scholars and laypeople alike would be given admittance to the coffeehouse, enjoy an endless supply of coffee, and more importantly enjoy learning through conversations with their peers. Thus these coffeehouses came to be called “Penny Universities”.

Our new group, Penny University, serves as a modern take on this old tradition by connecting those who desire to learn with those who are willing to share what they know. This can certainly be at a coffeehouse, but anywhere else as well, including just a quick Google Hangout.

There are no mentors or mentees, leaders or followers. We are all peers and we are here to both learn and to teach.

Not surprisingly Penny U has their own Slack network.

Look for ways that you can donate time to coding. It’s a great way to work next to Senior developers and learn. In addition, the contacts are great. You’ll demonstrate not just what you know but how you can interact in a team setting. An awesome place to start is [Code for America] and then track down your local [Brigade] that does civic projects. I recently attended a [Code for Nashville] meetup and got hooked in with them. Was told to join their Slack network and learn some Node.js for the project they’re getting ready to start.

A final piece to networking is meeting people for 1 on 1 conversations. While these can be the most intimidating hopefully they aren’t completely cold. I know that I’m only asking people that I’ve met in person at a meetup or have spoken with via Slack to some extent. I’m meeting some great people this way and as soon as I’m done with my project refactors I’m going to start asking for code reviews which will help level me up as a developer too.

Let’s see if I can beat the odds and land a job quicker than the average bear through these efforts.

stairs

It’s been about 3 weeks since I last blogged. I put my head down and sprinted towards the finish line. I can’t say that I’m 100% done, yet, but I will be soon. I have completed my final portfolio project and have my assessment for it tomorrow. I must say, Redux threw me for one while working on this project. I hit many stumbling blocks building this project. I think my sprint was a little ambitious and I ended up not knowing the Redux stuff as in-depth as I wanted to. I definitely created some of my own frustration because of this. However, I hacked away at it and got it. I watched YouTube videos, Wes Bos’s Redux Course, and I even used HackHands a couple times thanks to the Github Education Student Developer Pack $25 credit I received.

HackHands was an interesting experience. Getting help from people who were not native English speakers (I assumed that’s who I’d get considering I was doing this on July 4th) and being able to communicate how I was stuck. The two times I used it I didn’t get a direct answer to my question. However, I did see someone debug my code live and in the end the source of my problem was illuminated by the help.

So one problem I ran into was not getting the data from my API when I called fetchPlaces(). I was stumped. By all accounts, it should be working. My API was returning proper JSON formatted data. I had:

// fetch places
function fetchPlaces () {
  return (dispatch) => {
    dispatch({type: 'FETCH_PLACES'})
    return fetch('http://localhost:3001/api/places')
      .then(response => {
        dispatch({type: 'RECEIVED_PLACES', payload: response})
      })
      .catch((err) => {
        dispatch({type: 'FETCH_PLACES_ERROR', payload: err})
      })
  }
}

I couldn’t for the life of me figure out why I wasn’t getting the data that I needed back. I considered using parseJSON() but I didn’t think I needed to since the data being returned was already JSON. I was going to use it just like that as well. I wasn’t accounting for the fact that I was using fetch() to retrieve the JSON from my API. For more about the small, but important piece, that I was missing take a look at Using Fetch followed by Body.json() on MDN. With that knowledge, I was able to fix my call by implementing .json() on line 7 below followed by another .then which now has the proper data to pass into the payload.

// fetch places
function fetchPlaces () {
  return (dispatch) => {
    dispatch({type: 'FETCH_PLACES'})
    return fetch('http://localhost:3001/api/places')
      .then(response => {
        response.json()
        .then(json => {
          dispatch({type: 'RECEIVED_PLACES', payload: json})
        })
      })
      .catch((err) => {
        dispatch({type: 'FETCH_PLACES_ERROR', payload: err})
      })
  }
}

Another issue I ran into was a CORS violation. CORS stands for “Cross-origin resource sharing” and can be described as:

Cross-origin resource sharing is a mechanism that allows restricted resources on a web page to be requested from another domain outside the domain from which the first resource was served. A web page may freely embed cross-origin images, stylesheets, scripts, iframes, and videos. Certain “cross-domain” requests, notably Ajax requests, however, are forbidden by default by the same-origin security policy.
Wikipedia

If that doesn’t make sense, don’t worry. Just know that CORS is implemented for security on the web. However, it also meant that unless I explicitly stated that my React app could talk to my Rails API I wasn’t going to be able to get the data. Luckily, there is a pretty easy way to enable this and it only took a few lines of code. I first added gem 'rack-cors', :require => 'rack/cors' to my Gemfile and ran bundle. Next, I had to add some code:

# /config/initializers/cors.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'localhost:3000'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

This enabled my React application running on localhost:3000 to talk to my Rails API server running on localhost::3001 with no problems.

Ultimately I learned A LOT doing this project. I’m not 100% happy with where my app is at currently. However, to my understanding, it fulfills all the requirements of the project and that’s what I was shooting for. I can see abstracting it away from the back end and setting it up to pull all data from an external API call instead. Having built the back end though I know that it’ll always work the way I want it to and thus is a more stable project to include in a portfolio.

Check out Foodie View and see what you think for yourself. I’ll get it up on Heroku soon and will link to it from GitHub.

Time spent total: 457:50
Lessons completed total: 689