What I Learned from Code School

By Mike Bunker

Having no idea what I was doing I decided to enroll in a Code School this summer to learn the basics of programming and web development. I decided to attend Epicodus, a 4-month full time coding “boot camp” teaching Ruby/Rails and JavaScript along with a few different frameworks. I was a Political Science Major in college, and have no experience in the tech industry before starting at Epicodus (as you will see from that wonderfully awful picture below). It was a very challenging and rewarding process to complete the classes and I am happy with my decision to attend Epicodus and be a part of this industry. Here are some of the things I learned and some of my thoughts about my experiences at a code school.

Ping Pong test website built for my Epicodus application.

Ping Pong test website built for my Epicodus application.

When you need help, it's OK to ask for it.

And I asked a lot. From the teachers, other students, to stack overflow and the never ending sea of the internet. I quickly found out that this seems to be a normal thing for developers (or so I am constantly told). Many people work in teams which are collaborative by nature. It is nice to have people to lean on for help with the code. It was great to be able to lean on other students for help when tougher problems arose, and for when those time arose that the students couldn’t solve a problem ( I am looking at you Ember.js), then the teachers were there to help sort us out.

A sign I kept during my time at Epicodus.

A sign I kept during my time at Epicodus.

Pair programming is very difficult.

Pair programming is an interesting thing. There are plenty of reasons for why it is beneficial (and I am sure a thousand blogs doing it better justice than I would), and Epicodus regards it highly in their curriculum. There were a lot of days that pair programming was awesome. I had good partners and learned a lot and contributed a lot. However that was not always the case, and I found it extremely difficult to work with people who for various reasons didn’t “click” with me as programming partners. People learn in different ways, and even those who learn in similar ways don’t always learn at the same pace. While this can be beneficial in certain circumstances, I found myself annoyed with the process from time to time.

Appreciation for tech.

Before attending Epicodus, I didn’t have a lot of appreciation for how difficult it is to be a web developer/programmer. Even things as simple as clean good looking web pages can be difficult to accomplish (like getting that form in the absolute center of a responsive page), and having worked on trying to make web pages/programs/apps that are similar to what I have thoughtlessly used most of my life I now know how to appreciate the technology that I am using.

Building something from scratch is amazing.

My time at Epicodus has culminated in me building a chess game explorer app. I am hoping to write a post specifically about that later, but it has been an incredible experience to set out with an idea of something I want to do, work to get it done, and see it come to fruition (even though there is still a lot of things I want to do to make it better.) The first time I got user authentication to work and when the chess board finally took shape were two absolutely incredible moments for me. That success only fuels my desire to learn and do more. Of all the benefits I feel I got from attending Epicodus, the ability to create something meaningful is the single greatest thing I have gotten.

Chess app taking shape.

Chess app taking shape.

The people are important.

I feel like I got extremely lucky with the group of students that attended Epicodus with me. For the most part, they were smart, fun and driven people who I have spent quite a few nights with getting to know over a pint. I have gone to a few tech meetups and events around Portland since I started Epicodus, and community seems to be important to everyone here. People are excited and passionate about not only what they do, but the tech industry in general. The energy and excitement at the PDX Tech Crawl this year blew me away.

A great group of students and teachers.

A great group of students and teachers.

Mike Bunker was a student in the Summer 2015 Ruby/JavaScript/Rails course. This post was originally published on his site Bunker's Code Blog.

Epicodus's New Office

This weekend, the Epicodus team picked up our iMacs and our standing desks and moved into a brand new space at 400 SW 6th Ave. With beautiful eighth floor views and lots of room to grow, we're excited about this next chapter. For the last few months, our three current classes have been in separate locations, so we're thrilled to have everyone under one roof again. Check out the video below for a sneak preview of the new office!

Join Epicodus for Demo Day on December 4

Epicodus is hosting it's first ever Demo Day, and we want you to be there!

Students from our most recent classes (Ruby/JavaScript/Rails, PHP/JavaScript/Drupal, Java/JavaScript/Android) and some of our alums will be showcasing apps they've built and answering questions about their projects. This is a fantastic opportunity to connect with Epicodus students as they show off their programming chops.

Join us for an afternoon of light refreshments and great apps, and as a bonus, you'll get to check out Epicodus's brand new classroom space where our next round of students will be learning how to program in 2016.

Join us on December 4, from 12:00 - 4:00pm! Space is limited, so please RSVP here.

Sneak preview of our new space at 400 SW 6th Ave!

Sneak preview of our new space at 400 SW 6th Ave!

Aptitude, Attitude, and Experience

By Michael Kaiser-Nyman, Epicodus President

Over the years of teaching people to code, I often get asked what kinds of people make good programmers, or how to know if somebody's cut out to be a developer. I've certainly noticed that some people have natural talent for coding and can pick it up remarkably quickly, but I'm also convinced that it's much less important than many people think.

There are three things I've seen that determine how quickly someone can pick up coding: aptitude, attitude, and experience. Aptitude is someone's natural, unearned talent. Attitude is the way someone approaches learning to code. And experience is simply how much time they've already spent learning how to code.

Aptitude is of course important, but for most people, their attitude and experience have a much greater impact on their learning curve. Someone who can stay positive while pushing through frustration is going to learn more quickly than another person who gets discouraged. Someone who isn't afraid of learning from their mistakes will figure things out faster than another who is scared of messing up. Someone who can slow down and pay attention to the details will succeed more quickly than someone who tries to blaze through problems without really understanding what's going on.

And besides your attitude, there's just no substitute for experience. What looks like wizardry to someone who's been coding for a month often feels like boilerplate to someone with just a few more weeks of experience. And just as importantly as actual coding knowledge, most developers build good attitudes as they gain experience.

If you're a new programmer, my advice is to not worry about your aptitude - there's nothing you can do about it. Far more important is the way you approach your learning, and the amount of time you spend. Cultivate healthy attitudes, be patient with yourself, and spend lots of time coding. For most people, attitude and experience are far more important than whatever natural skills you were born with.

The Myth of the Best Programming Language

By Michael Kaiser-Nyman, Epicodus President

As an aspiring programmer, it can be hard to know what programming language to learn. You'll often hear hyperbole like "In the future, everything will be written in JavaScript," or "Ruby is the most elegant language." Programmers you meet may warn you against languages they don't like, and you'll come across stories in the tech media about how some language or technology or tool is making everything else obsolete.

My advice to you is: Don't worry - just code.

Most programming languages have more similarities than differences. No matter what language you learn first, you'll need to begin by mastering the concepts of variables, branching, and looping. Most languages use similar patterns of code organization (primarily based around object-oriented design). There are variations in the syntax, structure, and tools, but by and large, programming languages have far more in common than they have differences, especially among the languages commonly used in web and mobile development.

This point really came home to me the other day, when I was chatting with an experienced developer who has worked with many languages over the years. He told me a story of joining a new team that used a language he had never used before. A junior programmer needed help with a problem, and even though the junior had more experience with the team's language, my friend immediately knew that the language probably had a tool to solve the problem at hand. He told the junior where she could probably find it, and sure enough, the junior was able to use it to solve her issue.

When I first learned to code, I agonized over what language I should learn. I started on one language, got stuck, tried another one, heard that it wasn't a good language, went back to the first, got frustrated, and so on. Sometimes it seemed like I spent as much time trying to figure out what language to learn as I did actually coding. In hindsight, I realize that no matter what language I tried, I was going to have a tough time, simply because the basic principles underlying all languages are all difficult to understand at first.

So if you're just starting out, I suggest you aspire to be like my friend the experienced developer. Instead of getting caught up on which language to start out with, just dive in. If you come to Epicodus, you'll be required to learn at least two languages before graduating, but I'd encourage you to learn even more if possible. Every language has its place, and many of the "unhip" languages like C# and Java are actually in higher demand in the job market. The more languages you know, the easier it is to pick up new concepts, dive into new projects, and, of course, get a job.

2016 Classes: Frequently Asked Questions

We've been thrilled with the interest in our new class offerings for 2016, and with that interest has come a lot of questions! Below are answers to some of the most frequently asked questions about admissions and our new course structure. If we haven't answered the specific question that you have, feel free to reach out to us at hi@epicodus.com.

1. What are the requirements for graduation?
We want to make certain that students wishing to go through our entire program, from the introductory course through the internship course, have a clear picture of the requirements and expectations for graduation. For students who are not attending our program on an a la carte basis and wish to complete the full program, please note that two courses from the Level 2 section will be required in order to be eligible to take a Level 3 class and then an internship. In other words, you will need to take a minimum of five courses to graduate: Intro to Programming, two Level 2 courses, one Level 3 course, and the internship course.

2. What does the whole program cost?
The discounted tuition for the complete track is $850/class * 5 classes = $4,250. If you pay the up-front discount, any additional courses are $850 apiece, which you can pay as you go. (Part-time Intro to Programming students pay a different rate for that particular class.)

3. Does the Internship course have a tuition price? Have you changed the cost of the program?
Yes, the internship course does cost the same $850 as the other classes. (The internship has always been considered a course with that tuition price, and dividing the program into its 5-week modules has simply made that more apparent.) What has changed is the addition of the Intro to Programming class, which lengthens the whole program by five weeks.

4. Can I call you or drop by to talk?
Since we are a small staff and are usually busy with the current students during the day, we offer a monthly drop-in hour for potential students to come by, meet with a member of the staff, see the facility, and ask questions. These drop-in sessions are usually held the first Tuesday of the month from 5:30pm to 6:30pm. They are well-attended by potential and newly-accepted students. Potential students who cannot come to the drop-in hours and want to speak with us in person or by phone should email us at hi@epicodus to schedule an appointment.

5.  What if the courses I want to take are not offered in the order I prefer? I don’t want to lose momentum by waiting 5 weeks for it to be offered again.
As you plan out your time with us, please pay attention to the dates courses begin to avoid having a downtime while waiting for your preferred class to start. (For example, if you are interested in the Winter 2016 Java track, it would be best to start the whole program in March so that you could take those classes in succession.) That being said, we encourage new students to consider all the languages we offer as viable means to creating a successful career transition into coding.

6. What are the Course Tracks? What classes should I take?
We no longer have prescribed tracks for students to take, as we have now divided the program into the 5-week course blocks, allowing enrolled students to choose among the courses that are being offered at a given time. Enrolled students are now also able to take more than the minimum required 5 courses, if their time and budget allow.

That being said, there are courses that combine well together, and students are certainly welcome to take the courses we've traditionally offered together, such as: Ruby, JavaScript, Rails; PHP, JavaScript, Drupal; Java, Javascript, Android; C#, JavaScript, .NET; CSS, JavaScript, Design. The frameworks do need to come after the base language, so you should expect to take Ruby before Rails, PHP before Drupal, Java before Android, etc.

Student Project Feature: Building a Static Website with HTML and CSS

Class: Intro to Programming

Task: Build a static website

Amount of Training: 4 weeks

Languages Used: HTML, CSS

Working in teams of four, our Intro to Programming students used their newly-minted HTML and CSS chops to create a great-looking static website. Each team needed to use Git to track their website’s progress, and each project needed to include the following elements:

  • A main page and 2-3 subpages that are linked to the main page
  • All of the HTML tags the students had learned so far (p, h, ul, ol, li, em, strong, a, img, div, span)
  • A custom made stylesheet that used selectors, properties, and values
  • Divs and spans to keep the page organized
  • At least one float
  • Use of the box model to create custom border, padding, and margins around an HTML block element
  • Nesting in the stylesheet to add different styles to each child element

The group whose project is featured here, decided to build a website for a restaurant. Using a combination of Bootstrap and their own custom stylesheet, the group built a sleek website with a rotating gallery of images on the home page and subpages for the restaurant’s menu and contact information.

You can check out the full project on GitHub Pages
 

Accidentally Sexist

By Michael Kaiser-Nyman, Epicodus President

I was chatting with a friend of a friend the other day who mentioned she was thinking about taking Epicodus. Out loud, I said "Oh, that's awesome! I really hope you do it." But in my head, I was worried. What if she wasn't good at programming? What if she didn't do well in the class? What if she didn't get a job afterwards?

I noticed these thoughts bouncing around and then stopped for a moment. Why was I so concerned? We have really high completion and employment rates, and I've had several friends and acquaintances take Epicodus before. What made me worried about this person?

And then I realized that it was because she is a woman. 

It was pretty surprising and I felt pretty terrible to catch myself thinking that way, especially since Epicodus has been working hard to encourage more women to get involved in tech. I shared my train of thought with a female friend of mine who's worked in tech for a long time, and I was really surprised when she confided to me, "I catch myself doing that all the time."

Our assumptions about other people based on their gender, race, and other groups characteristics are embedded really deeply in our minds, and often come out without us even realizing. I know I can feel really ashamed when I realize I've had a sexist or racist thought, and often my first instinct is to try to pretend that it didn't happen, or justify it in some way. But recently I've been trying to embrace the idea that those thoughts are going to be there, whether I like it or not. I think it's better that I acknowledge them and correct them, than to try to ignore them while they continue to secretly undermine my attempts to treat people equally.

It can be difficult for many people, myself included, to talk about racism, sexism, and other forms of discrimination, and even more difficult to acknowledge that I can contribute to them, even when I'm trying not to. But the first step towards making something better is admitting you have a problem. And it's comforting for me to know that I'm not the only one with this problem, that even my female friend who's long been involved with promoting diversity in tech has this problem.

So, I'm accidentally sexist, probably more often than I realize. We all probably are. Let's try to acknowledge it to ourselves and each other, try our best not to be, and work hard to make up for it.

Why We Pair Progam at Epicodus

One of the most unique aspects of how the Epicodus classroom works is that our students practice pair programming, where two people use the same computer at the same time. One person drives, controlling the keyboard and mouse, and the other person watches and talks. Typically, students are pairing with a different partner each day.


Why is this practice beneficial? We’ve found that there are several reasons why pair programming can be more effective than soloing:


Programming is less about writing massive amounts of code and more about solving difficult problems. When two people solve a problem together, they often come up with better solutions, more quickly than each working alone.


Usually, each person in a pair will have different sets of knowledge and different strengths. Pairing allows you to learn from each other.


When you work alone, you’re often tempted to take shortcuts that will come back to haunt you - such as writing code without tests. When pairing, you can hold each other accountable to writing high quality code.


When you watch somebody else code, it’s easier for you to see their mistake and catch their bugs than for them to see their own.


You don’t check your email, social networks, news, text messages, and so on when you’re pairing; as a result, you’re much more productive.


Even though pairing has many advantages, it can still be frustrating. You’ll usually be working with someone who is either more or less experienced than you, and you’ll often feel like you’re slowing down your pair, or they’re slowing you down. You might want to explore how something works, while your pair wants to focus on actually finishing the project at hand. Or, you’ll run into a nasty bug, and you’ll have different ideas about the right way to try to fix it.


Every day at Epicodus, before students start programming, we ask pairs to check in with each other. The pairs discuss what each of their personal goals is for the day or the lesson, they share their strengths and weaknesses (both in programming and in pairing), and they talk about what they need for a happy and safe work environment. At the end of the day, the pairs ask each other for feedback on how the day went.


Pairing is challenging because each student is bringing a different set of experiences, interests, and backgrounds into the classroom, not to mention different communication and learning styles. In the long run, embracing those differences helps to enhance learning capacity and problem solving skills, creating more well-rounded programmers. 

What's Ahead for Epicodus in 2016

2015 has been an amazing year for Epicodus so far. By the end of the year we will have trained and helped find jobs for more than 200 students. Looking ahead to 2016, we're excited to switch up our course format and add some new classes to the mix. 

New Courses

Starting in January, we will be offering several different languages and frameworks including Intro to Programming (full-time and part-time options), Ruby, PHP, Java, JavaScript, C#, CSS, Rails, Drupal, Android, .NET, and design courses.

How the Classes Work

Each language or framework will be its own class and will run for 5 weeks. Classes will generally run back-to-back. You can mix and match 5-week classes to learn the programming skills that meet your needs. On each class page, you'll see that we've made some recommendations about course pairings.

After being accepted to Epicodus, you'll automatically be enrolled in our Intro to Programming class. To participate in the Epicodus internship program, you will have to complete prerequisites.

If you have any questions about the new program structure, feel free to leave a comment, or send us an email at hi@epicodus.com.