Forging Steel to Coding School

I recently completed the PHP/JavaScript/Drupal course at Epicodus in Portland, OR. I thought it would be helpful to others describing my career transition, boot camp experience, the tools I gained, and how I used them.

Where did I come from?

As I’m sure many of you have found, coding boot camps are a melting pot of individuals from different places, who come from a vast list of prior careers, and I was no exception. I wore many hats through the years, mostly customer service, store management and even as an audio engineer.

My last position, saw operator at a steel forging plant. It was dirty, physically brutal work with no advancement. Time for a career change! I started with Codecademy, then Free Code Camp, YouTube, Treehouse and eventually found learnhowtoprogram.com. After many late nights after work, I completed the Intro class on my own.

I finally asked myself — Do you love this? Duh. Are you happy where you are now? Nope. Then what are you gonna do about it? Immerse myself in a full-time program, an environment to accelerate my learning process, and enrich my horizon with better opportunities. That’s what!

Epicodus | A Vocational Programming School

A full-time (part-time intro class Intro available) coding bootcamp offering 27-week courses in JavaScript, Ruby, C#, .NET, PHP, Java, Android, CSS and Design. After completion you are required to attend a 5-week internship within a industry-related company.

Epicodus uses a flipped classroom structure. Pair-programming with a different partner each day, a solo project each week with a code review to advance in the course. On the final week of each track, we divide into teams for group projects that are presented to the rest of the class.

Intro to Programming

Intro was an excellent way to brush up on my HTML, CSS, JavaScript and Git chops before focusing on a specific language. First day, we setup and familiarized ourselves with Git version-control and Github as it became a part of our everyday workflow. The first week focused on writing structured markup, proper syntax etiquette and styling static pages with custom CSS. Then we began an in-depth exploration of JavaScript (OOP, constructors, prototypal inheritance, arrays, branching and looping, etc).

Now it’s time to build a front end by manipulating DOM elements with jQuery, adding responsive media queries, UX/UI design and basic form validation. As week three arrived, Portland was hit hard with an unusually long snow storm. This gave me an unexpected introduction to remote programming (no days off in boot camp!). The storm ceased just in time to get back for the final week group projects.

Fav Intro project: i Villain — A battle of good vs evil, what side do you belong?

PHP

First, we focused on PHP as a language (classes, inheritance, scope, constructors, setters/getters, etc) and setting up our local development environments with MAMP (check your versions, it will save you a headache!).

Week two, we implemented Silex (micro-framework) with dynamic routing, Twig (template engine) for views, dependency management with Composer, and a deep dive into automated TDD and BDD with PHPUnit (Organize your tests, one can be dependent on many!).

The following weeks included, integrating a relational MySQL (queries, join tables, foreign keys) database with our applications from the command line and phpMyAdmin. Now that we are equipped with the proper tools, its time to get our CRUD on! Extend a class, write a test, ship it back, update it, delete, then repeat wallah :). This was also a great way to improve upon form validation and testing.

At this point of the curriculum, every solo project is required to have explicitly written specs, a formalized MVP (minimum-viable-product), and a Git commit history to reflect so.

Fav PHP project: Shoe Store — Keep your app clean and organized with some good ol’ BDD…

JavaScript

Back to JS with a vengeance! At this point we have crafted most everything by hand, now its time to get automated, organized and live in the agile life-cycle. Node.js, an asynchronous, event-driven, single-threaded run-time environment is a fast and efficient way to maintain my file structures and attain user data.

Npm, a package manager comes along for the ride when you download Node.js (where have you been all my life?). Bower is similar, though handles my front end dependencies like jQuery and Bootstrap. Upload, update and maintain all of my dev and prod dependencies for me? Sweet!

Now we must help the browser interpret our code with Gulp, our asset pipeline task/builder. It can be tedious getting Gulp wired up, though you will save a ton of time automating your workflow! I really enjoyed our next challenge, APIs and AJAX. An introduction to asynchronous promises and how to properly test in-coming data from external resources. The process can be hair-pulling though the reward is generally bountiful.

On to the frameworks! Ember, a MVC (model-view-controller) or MTC (model-template-controller, if you will) client-side framework. Before we jump into the sleek CLI (command-line-interface) version, we first must build the files by hand to truly understand the infrastructure of a framework. This is not only great for understanding the core-concepts and practice, it is also extremely useful when debugging down the road. We used dynamic routing to display our Handlebar templates, incorporated Ember data models and Firebase for persistent data through Services. JSLint to check our code for errors and finally, create a CLI project.

I found Angular2’s (also a JavaScript MVC) file structure to be user friendly and intuitive. Typescript, a superset of JavaScript, provides Strong Static Typing, additional features from ES6, ES2016 and ES2017 (Classes, Modules, Arrow Functions), and complies easily to vanilla JavaScript.

Directives are extremely handy, they bind HTML values to application data via attributes, such as providing two-way binding with ngModel. Controllers (JavaScript objects) define scope to a piece of ‘business logic’ in a constructor. Providers create an instance of a Service, register an Injector, of which uses Dependency Injection to pass needed data to your Components. We primarily used Services to connect with Firebase and RxJS Observables to watch, retrieve, save, update and delete asynchronous data.

All of these tools are powerful, and offer a nice level of abstraction and a user-friendly interface. We ran a production build and deployed our applications through Firebase.

Fav JavaScript project: Timbers Club Manager — Keep track of the roster by sorting, hiring/firing & updating players info

Drupal

First rule, don’t hack the core! OK…now we can continue. A CMS (content-management-system) that prioritizes extensive user roles, security, modality, and scalability. Drupal is simple to get going, though has a hefty learning-curve when you begin customizing functionality.

We primarily worked in Drupal 7, using core features to create content, articles, blocks, custom content-types, and views to make MySQL queries. The second section of Drupal included, writing custom modules, extending modules with hooks for functionality, custom themes and sub-themes for design. Advanced views allowed me to control data relationships with Contextual Filters and Entity Reference Fields. Drush is a command line shell that not only speeds up development, it provides an alias shortcut that keeps my Pantheon (web development hosting platform) sandbox up-to-date.

I refactored previous projects with functional/unit tests with PHPUnit, formulated promise-based AJAX requests with graceful degradation, and explored the key differences with Drupal 8.

For the final week of Drupal we worked individually to create a personal capstone project to encapsulate everything we have learned up to this point. My project was based on requests to the Better Doctor and Health Finder APIs. It allowed a user to perform a search by medical condition and receive a related list of local physicians and resources. On the final day we presented our projects to the teachers and fellow students.

Fav Drupal project: Cipher — Not my best visually, though I thoroughly enjoyed the cryptography challenge!

Conclusion

These are called boot camps for a reason! It was a rigorous, intense, mind-melting experience and I absolutely loved every second of it! Epicodus has been one of the greatest experiences in my life. The people are fantastic, the work is engaging, and the school sits in the hub of the Portland tech community.

The best and most unexpected outcome, the amazing group of people I had the opportunity share this experience with. We share a great support system and I consider all of them dear friends today :).

Are you asking yourself, can I do this? I have already answered your question! I set my mind to it and so can you.

A Few Pointers:

  • Eat, Get Sleep, Stay Hydrated, Take Walks, Speak Up, Be Social
  • Attend Meetups (Take advantage of your support group)
  • Take Notes (Ex: Google Docs)
  • Write a README (Always!)
  • Take a Screenshot of EVERY project (You’ll Thank Your Future Self!)

Originally published at daniellauby.wordpress.com on August 15, 2017.