2017 Wrap-up and 2018 Goals

Wrapping up a year is never is never a thing one wants to do. At least I don’t.

2017 was an amazing year; I built a full-stack app I was proud of with a course and started another. I was a perfect 12/12 months of blogging for the second year in a row. And, at the end of the year I scored an internship with The Practical Dev.

The beginning of this year has been the total opposite: I am being evicted as my apartment building is renovating and will not be renewing my lease and the shine of the internship has worn off as I struggle to find a place to live and get moved. I’ve made some pretty horrendous errors in the face of all this, after a strong start. I am probably not getting offered. I am okay with it now but wasn’t when I got my 2/3 of the way performance review. I was super depressed for a week or two.

But this is not what I want to talk about. I want to recap the year and look ahead for this one and what I can do after I move to turn things around.

2017 Highs After 2016 Lows

Isn’t it how it always is though?

The Good:

  • I completed a full course on web development without a break. I went through the colossal Web Developer Bootcamp with Colt Steele and built YelpCamp which I am not really developing anymore but am tweaking a bit here and there.
  • I started my own full-stack JavaScript app called Check Yo Self which is still in active development. If I am without a position for a little bit while I get settled into my new place so be it. I’ll continue to work on this app.
  • I got offered the dev.to internship.
  • I gained 300 Twitter followers which opened up a whole new network to me I didn’t have previously. This has been a boon to my job search.
  • I was on the Developer on Fire Podcast. It was super fun talking to Dave Rael again.

The Bad:

  • Couldn’t finish school.
  • That’s it!

Goals for 2018

I am currently looking for positions outside of dev.to. I enjoyed my time there but if I am being honest the way I utterly messed up after they gave me a chance…not even sure if I can look them in the face. I will have to, but it will be hard. Really hard1.

I am not a quitter though so while this is a setback it is a minor one and thanks to my friends and mentors Craig Lang and Pablo Rivera I am not dangling off the edge as much as I was. They’ve been instrumental in lifting my spirits.

Without further ado, goals.

  • Get hired as a junior developer working with a primarily JavaScript stack. Rails is okay as I built a Blog app in it, simple CRUD without auth or limiting certain interactions with certain users2. I’d prefer JavaScript though as I am more familiar with it3.
  • Move to a nicer home. This place is shite. So I am glad I need to move. It is just finding a place within the amount of time I am allotted that is the issue.
  • Stop worrying about vanity metrics for the blog. Pablo explained to me that if I’m not selling anything, looking at my analytics isn’t going to do anything for me. Traffic without a product is all but meaningless.
  • Learn: React, Redux, Angular, Typescript, Vue, Vuex, built-in JavaScript APIs and other JavaScript frameworks. I just bought Wes Bos’s React for Beginners course and am excited to dig into it.
  • Gain another 300 followers.
  • Finish Check Yo Self. I need to find time to work on side projects without burning out.
  • Create some interesting and useful libraries and open source them. This will be interesting considering everything I hear about women getting shut down in open source. We’ll see.
  • Dive more into animations with CSS and WebAnimations API.

There Are Probably More

But I am tired and can’t think of them right now. These are the main things I want to get done this year.

  1. Saying that made me start to cry. I’ve been crying a lot lately. It’s been really hard to know your shot at developing full time is dashed for a bit. I’m down, but not out. 
  2. For instance, anyone can delete a post by any user. Any user can delete a user. It was basically just an exercise for me to show I can navigate around a Rails app and am able to use my theoretical knowledge of OOP and MVC to a real world app. 
  3. I plan on learning other stacks as well. Learning Rails has been a fun experience even though it isn’t my preference. 

One Month of a Remote Internship: Lessons and Observations

This is a cross-post from my article on The Practical Dev.

I have been a remote intern for dev.to for about a month now. I am really enjoying myself; teammates are great, work is challenging, and the atmosphere is really relaxed and enjoyable.

These next few paragraphs are particular to who I am and how I work and not a reflection on the company.

Dealing with “Off Days”

For the past week I have been struggling to get the proper amount of sleep. I have sleep apnea, and while I have lost a considerable amount of weight, I still need a machine to sleep.

I currently don’t have the proper equipment as sometimes your mask’s velcro can become less sticky and they need to ship you a new one, which I am waiting for. This presents a problem for me as I really need it to not wake up a million times a night as I stop breathing. This means that when I wake up in the morning, I am just about dead, and unable to think.

I usually just fake it through the day, watching Rails or JavaScript tutorials and pecking away at the feature I am working on. It is difficult, and I sometimes find myself needing a break.

Dev.to is flexible enough that I can take a break whenever I need to. This doesn’t really reduce the anxiety I feel that I may not be pushing features fast enough.


I should be getting my equipment tomorrow which means I will finally be able to think and be 10x more productive. Additionally, I need to communicate better with the team and let them know where my head’s at.

Learning When to Quit

I have a hard time, especially when in that flow state, of not quitting work. I can go for hours at a time, especially if I am close to finishing a feature or working on a bug. This isn’t a great way to behave, especially as a remote. Blurring the lines between work and home can be hazardous, and knowing when to quit is crucial to not burning out.

I found that I was wanting to work until 9, 10pm when I really should have been unwinding. And early on, Mac reminded me to slow down and not burn myself out. This is not a good way to start any job or internship.


I found an app called Freedom that allows me to not only put a block on social and news sites, but allows me to block desktop apps from a certain time to another. If I am feeling particularly feisty and in the flow state, I put a block on VS Code from 7pm till 8am. I also put a block on places like Udemy and Treehouse though I may cut myself some slack.


Programmers know back pain more than any other type of knowledge worker. We sit and stare at a screen for 8 or more hours daily. This can lead to all types of problems, not just for your back but your overall health.

Coming in I already had a bad lower back. The team was nice and got me a lumbar cushion which helped at first. Adjusting it is hit or miss, and now my back is getting bad again.

I have a Slackbot reminder to stand up that I sometimes heed and sometimes ignore. Regardless, standing is crucial as well as getting enough exercise.


The internship here at dev.to allows me to be able to do things I wouldn’t have been able to do financially. This means I can buy a bus pass now, and get around. I have a gym membership, a couple of them, actually. Now I can finally utilize them. I plan on hitting the gym again, and doing things like Jefferson Curls or bent-legged good mornings and deadlifts to strengthen my back. I used to lift a lot of heavy weights– that’s how I lost the amount of weight I lost a couple years ago. So it only fits that I continue on that path to get stronger and become pain free.


I am a shameless introvert. I am also shy. I find being remote a benefit in this regard. But there are times when I need to reach out and talk to the team, to interact with them outside of just work stuff, and I find that extremely difficult to do.

I did it one day! I felt so proud of myself. But with the sleep issue and the feature I am working on taking longer than my first and the shame that comes with that, I haven’t really been communicating with the team. Jess, Andy and Mac have been great in this regard. Coming out of my shell is a bit hard. I am rather serious and reserved around new people. Once I get to know someone, then things begin to loosen up.


Just talk. As difficult as that is, it is a must. I need to communicate with the team. I need to be social. I am trying. This is a thing I need to overcome, either with a therapist or someone else as social anxiety is a thing for me (it’s even worse IRL). We all have to do what is difficult to actually do great things. So tomorrow, I plan on jumping in the conversations and letting myself be known.


This past month has been seriously enjoyable and I couldn’t ask for a better team to learn with. I need to keep up my end of the bargain. Here’s to another two months!

JavaScript Template Literals

Photo credit by Hongkiat

Traditionally, strings in JavaScript were limited, especially if you were working in languages like Ruby and Python. In both of those languages string interpolation meant that you could substitute strings and have multiline string concatenation without wonky hacks.

In JavaScript, there wasn’t anything like this until ES6. Now, we have JavaScript Template Literals or template strings.


Template strings use back-ticks rather than quotes to denote a string. A template string could look like this:

let hello = `Hello World!`;

String Substitutions

What’s nice about string substitutions is that you can take any JavaScript expression and place it inside a Template Literal and it will be output as part of the string.

The syntax for this:

let name = “Tiffany”;
console.log(`Hey, ${name}!`);

Since string substitutions in Template Literals are JavaScript expressions we can evaluate any type of expression we want in the Template Literal. We can evaluate a mathematical expression such as:

let a = 13;
let b = 20;
console.log(`The Mac first launched ${a+b} years ago. I, for one, welcome my bitten fruit overlord.`);

//  => The Mac launched 33 years ago. I, for one, welcome my bitten fruit overlord.

console.log(`I am old, but not ${2 * (a+b)} yet.`);

//  => I am old, but not 66 yet.
// I know. It doesn’t make sense. Bear with my pitiful examples.

You can even put functions or method calls inside a Template Literal:

// Functions inside expressions function func() { return “I am the result of foo” } console.log(`bar ${func} baz.`); // => I am the result of foo bar baz. //Method calls let hacker = {name: ‘Elliot Anderson’} console.log(`You forgot to quit Vim, ${hacker.name.toUpperCase()}`); // => You forgot to quit Vim, ELLIOT ALDERSON

Multiline Strings

Multiline strings in JavaScript required hacks like the backslash hack and string concatenation like:

let greeting = “Hello “ +

Template strings make this a whole lot easier. Add new lines where you need them and the whitespace inside the backticks inside the Template Literal will be included inside the string like so:

console.log(`I'm a string on one line
I’m a string on another line`);

Tagged Templates

Tagged Templates can be used for powerful string transformations. You create a Tagged Template by placing a function name before the template string. Here’s an example of auto escaping an HTML function such that:

html`<p title="${title}">Hello ${name}!</p>`

returns a string with the appropriate variables substituted but with all the unsafe characters replaced.

Nicholas Zakas goes over this in detail in his book Understanding ES6.


Template Literals or Template Strings are a powerful addition to the JavaScript language that brings it much needed string interpolation and transformation.

Use Cases for the Spread Operator

One of the coolest features of ES6 is the Spread Operator. The syntax looks a bit like:

let a = [4, 5, 6];
let b = [7, …a, 8];


This will give us:

View post on imgur.com

The spread operator replaces the concat function in ES5:

“use strict“;
var a = [4, 5, 6];
var b = [7].concat(a, [8]);


This is a great little feature, but what can we do with it?

Some Uses for the Spread Operator

We can do a lot with the spread operator.

Combine Arrays

You can use the spread operator to combine arrays:

let test = () => {
  let arr1 = ['foo', 'bar', 'baz'];
  let arr2 = ['fizz', 'buzz'];
  arr1.push(...arr2); // Will append the contents of arr2 to arr1

test(); // Runs function

Copying Arrays

We’ve used Array.prototype.slice to make copies of arrays. Now we can do that with the spread operator.

let arr = [7, 8, 9];
let arr2 = […arr];
arr2.push(10); // Will return a deep copy of the array with 10 appended to the end
//of the values

More At the MDN

You can find more uses for the spread operator at the MDN

Things I Am Cooking Up

I am thinking of starting another podcast.

Most of the shows will be 15 > minutes as I really, really, really hate audio editing and cannot afford a dedicated editor for a weekly, seasonal show.

I am also not sure if I’ll hop on the S01E01 bandwagon or not. Seems it is all the rage in the podcast community but I am not certain it works for developer podcasts though one of my favorites works that way.

On Developer on Fire

I recorded an episode of Developer of Fire. It will be out sometime at the end of the month or beginning of next year.

First Feature and Pull Request


I spent a good week working on our CodePen Liquid Tag feature. It was my first time working with a team on a feature for an app that wasn’t solely mine.

I was nervous. But it was really fun.

Mac, our Senior dev instructed me. He remarked that it didn’t take me long to pick it up and off I went, getting the feature built with time to spare1.

Shortly after, I created my first PR. I can’t tell you how long I’ve waited to make a PR on a project I believed in. I got that chance and it went well.

Feature and PR

I find that, since I spent a lot of time learning JavaScript, Mongo, Mongoose, Node and the like, that digging into Ruby, Rails, ActiveRecord, and things like this aren’t too difficult.

One of the things that helped me was when Mac and Ben told me to look at another file. I was able to discern what to do, and cobbled together a basic framework of the feature. I then built upon that and continued to ask Mac questions which he patiently answered.

I submitted the PR and it was merged shortly after.


I submitted a PR to another project but it wasn’t merged. I wasn’t ready then. But now, I have had two PRs merged and am working on a third feature.

Work Is Fun

The team is great. The perks are great, even for an intern like me. And I absolutely believe in what we’re trying to build.

  1. We don’t have hard deadlines, though, unless it is a critical bug or security flaw. 

The Simplicity of Ruby

When I first started this blog, I was learning Ruby and I loved it.

This was before starting freeCodeCamp or Zed Shaw’s Learn Python the Hard Way series 1.

When I decided I wanted to program for a living, I found some meetups and went to my first one in 2014, Code & Supply where Ruby was the topic; getting it set up on our systems and writing a pretty simple Ruby program.

Ruby was so simple. Take this, for example:

class MyClass
  def initialize(name, age)
    @name = name
    @age = age

If you know anything at all about OOP, you know what is happening here.

Where the beauty of Ruby lies is in its eerily easy to read syntax.

class MyClass

creates a class where we’ll hold all our objects and methods.

def: define. Here we are defining a method initialize with two local variables
name and age. We assign them to the instance variables @name and @age in order to use them outside of the object’s scope. We end the method and class with the end keyword.

Outside of the OOP instance variable syntax, this is super easy to read and understand.

First Day Feels

It is 10pm and I really need to get to bed soon. But I just wanted a chance to write about how patient the team at The Practical Dev has been with me as I learn the ropes.

On-boarding was a breeze and I have already started digging into the codebase.

My first day was fraught with nerves and expectations that I had for myself 2.
Remembering that I am not the sole developer on a project and I have a team to refer to is taking some getting used to. The team is great and I definitely ask questions: have never been shy about that. I am just so damn shy and quiet. This is something I am working on.

They even purchased a lower lumbar cushion and keyboard for me, which I can purchase when I move on.

It has been a great first week so far and I am looking forward to the weeks to come.

  1. LPTHW is quite opinionated and I am not sure if it is still recommended to new developers. 
  2. And very little sleep. Trying to fix that. 

I Am Now Doing This Thing For Real

I have recently joined the The Practical Dev as an apprentice software developer.

Remember when I said that good things were happening? That was one of the things.

Ben reached out in a Twitter DM and it kicked off.

I filled out the required application. We had a video conference yesterday and today they made the offer.

I can’t tell you how excited I am to be joining the team 1. This transcends just being in tech or having a career.

There is so much I would like to day, to be quite honest. There are some things I can’t or don’t want to explain but.

I have lived a miserable existence, from the day I popped out of my mom’s womb. She was an addict. I was adopted but that drug use left me with some residual side effects.

I spent my youth and teenage years in a very bad state. Emotionally I was a mess. I was a bright kid, a great student. Things came super easy to me. But because of trauma and emotional issues, I couldn’t really go to college after high school. I eventually went as a 24 year old. But, as it was, emotional issues, depression, angst. All that prevented my from being successful.

When I was 22 my grandmother died. She was my rock. She was in my corner, even when I was a little shit. She was there. She protected me.

I was in a place where I could remain safe when I was in my early 20s. I was poor and out of it. She died and I felt like I let her down; I wasn’t much of anything. I was just another listless 20 something black girl from the hood drifting in and out of placements and falling through the cracks. I always felt like I let her down. I couldn’t help it, but the guilt has followed me.

I didn’t start feeling like I had something to live for until I was 28. I had been through hell and back, an emotionally violent relationship, I had been through the ringer. But something came around for me as a 28 year old young woman starting to realize that yeah, life is shit. It really is. But you literally crawled out from the jaws of death and now what are you going to do with your life?

30 Something…

I went back to school when I turned 30. I was a humanities major. I was still pretty poor. Making ends meet was hard.

I went to school, making good grades for a while. I decided that tech was where I wanted to work. As much as I liked to write, I liked tweaking my sites even more. I also knew that I would remain poor as a humanities major because I didn’t want to teach.

I got a Mac in 2014, a code editor, and I was off to the races.

I went to Pitt from 2015-2017 as a CS major. You may remember it.

Starting the University of Pittsburgh

Had a breakdown in the middle of those two years.

I couldn’t go back to school this year and instead dove head first into every project on my GitHub that isn’t for school.

I’ve built some pretty cool things that I am proud of and am working on even more things.

But now I get to do it for real.


I have not been eating much. That is how bad it has gotten for me. I am not complaining though. I have good friends and family. They have helped me through the rough times I have been having. I have been really coding for my life, not just for a cushy job. It means so much more to me because of that.

I have been searching for a couple months now. I was using a little Chrome extension called Streak CRM to track the process. Rejections would come in. Now, I have a CRM with an offer that I accepted.


My mom is 71. She told me she would like to stick around long enough to see me be something. She qualified that with, “Well, you are already something but. Still. You know.”

I knew what she meant. We haven’t always been on good terms. But I love her and I, too, wanted her to see this. I didn’t want another regret of letting another important woman to me see me floundering.

I bought my mom a little something from Amazon and added a note and gift bag that said:

“Mom, I did it. From now on Xmas for you will be special. I’m grateful for your support. Love you. Tiffany”

Makes me feel good.

Thanks, Ben and Peter

I mean, really. You two have taken a chance on an old lady who doesn’t have a degree but has a fire in her belly to actually learn and grow as a developer. I can’t thank you two enough. Truly. Thank you.


Everyone has a story. I am glad mine is ending up like this. I hope for happiness and success for anyone who is on the outside looking in in tech. You got this. ???

  1. I am old. I am the oldest person on the team. Haha. I am young at heart though. Goes to show someone pushing 40 can break into the industry if they work their asses off. 

Update: Lots of Things Happening

I thought I’d post a short update about why I haven’t been blogging as much.

These past two months have been a whirlwind for me. I am looking for jobs and I have gotten some interest. I can’t say too much right now, but things are looking up.

The tweets that started it:

It was during a #DevDiscuss Twitter chat. Initially, Pablo Rivera tweeted to Stephanie Hurlburt about getting me a job. She tweeted back to tweet to her my portfolio, resume, etc and that I am looking for work. She would then retweet it to her large following of potential employers and companies.

I did:

And awesome…things…started…happening.

That’s all I can really say but I have honestly just been trying to process what is happening and how, when it comes together and tries, the tech community is the best there is…

Finishing YelpCamp and Lessons Learned

So I have finished The Web Developer Bootcamp and the final project, YelpCamp, a full-stack Yelp clone built with Node, Express, Mongo, Mongoose, Passport.js, and Bootstrap.

It took me four months and some change to completely go through the 45 hour course and finish YelpCamp. Here are some of my thoughts on the process.

Reviewing the Basics

A lot of what I learned in the beginning was a refresher on topics I have already learned. I did it anyway, just to make sure I was completely solid on my understanding of the basics.

I thought this was a very important step: there were some things I wasn’t exactly clear on, like DOM manipulation and CSS classes, etc, things I should have mastered before taking the course. It was evident right from the beginning I should continue to go over these introductory parts, as I really needed it.

Meat and Potatoes

Eventually we started going over things like Node, Express, etc. I found that, while these are intermediate topics, these libraries make working with JavaScript much, much easier. They abstract away so much of tediousness of writing JavaScript that I wished I had learned them first which is never a good idea 1.

These sections were the longest and the most hastily explained. For newcomers, this might be a turnoff but Colt has one of the highest rated courses on Udemy 2 so I am sure newcomers won’t be too scared of these sections.

Building YelpCamp

First, let me say: I am somewhat happy with it. It is my first full-stack app, I built it right alongside Colt. I have recently added modifications and with Ian Schroover, I am going to add even more modifications. It is also helping me in my other full-stack app, Check Yo Self as I can apply what I learned in YelpCamp to that app.

The problem is, the course came out almost three years ago. Web dev changes at a breakneck pace. Everything was out of date. Take this snippet for example:

//INDEX - show all campgrounds
router.get("/", function(req, res) {
  if (req.query.search && req.xhr) {
    const regex = new RegExp(escapeRegex(req.query.search), 'gi');
    // Get all campgrounds from DB
      name: regex
    }, function(err, allCampgrounds) {
      if (err) {
      } else {
  } else {
    // Get all campgrounds from DB
    Campground.find({}, function(err, allCampgrounds) {
      if (err) {
      } else {
        if (req.xhr) {
        } else {
          res.render("campgrounds/index", {
            campgrounds: allCampgrounds,
            page: 'campgrounds'

This is a mess of callback hell that doesn’t 3 exist anymore in 2017. There are promises in ES6, and async/await in ES7. I am sure Colt knows this now and has references to these features in his new course. However, this app is probably over a thousand lines of JavaScript over several modules. I don’t have the time, or the want, to refactor this. I didn’t come up with this idea but it does look good on my portfolio.

End Game

My mission in all this was to learn the basics of full-stack web dev in a pace and learning style I could be successful in. I have done that. Now, it is taking what I learned and working it into Check Yo Self. Pop on over to YelpCamp and give it a look. Tell me what you think.

  1. Some people think you can learn libraries right away without learning the basics. This is erroneous thinking. If you are a junior, like I am, learning the basics will get you hired. There are concepts you need to fully understand before calling yourself a professional JavaScript developer. It’s that simple. 
  2. His newest course, The Advanced Web Developer Bootcamp has a similarly high rating though it isn’t as well-thought out, and it shows in ratings from his previous course’s students. The course uses several teachers but is more up to date and uses React, ES6 and so much more. I plan on buying it when it is on sale again. 
  3. And shouldn’t