Accelerated Learning

The first week of Module-2 at Turing is pretty stressful. You’re bombarded with information the whole week. One student said it best, “I feel like the instructor just took a dump in my brain.” The first module at Turing emphasizes logic and problem solving. The second is geared more toward understanding the web and the applications that live on the web. The first Ruby framework you begin learning is Sinatra and then transition into the mother of all Ruby frameworks, Rails! Over the course of intermission week we were given a simple tutorial that taught us how to build our first Sinatra app called Task Manager.

Day-1 we were doing a bunch of HTML and CSS work, getting comfortable with styling our Task Manager before we move on to more back-end type stuff. Our homework was to style our Task Manager using bootstrap or foundation. I chose a free bootstrap template and really enjoyed doing some front-end work for a change. Below is a screen-shot of my homepage.

Screen Shot 2015-05-22 at 2.46.19 PMDay-2 introduced CRUD (Create, Read, Update, Destroy). If you think about it, from the users perspective most applications have CRUD functionality. We also discussed ‘How The Internet Works.’ In a nutshell, the internet is just a shit load of servers passing around information to other servers. When I say ‘servers,’ I mean computers just like the one you’re using. Our personal computers might run OSX or Windows, some of these servers run Ubuntu or Fedora. The software we might run is Safari, Microsoft Word and iTunes. Examples of software a server might run is Apache, Thin and Rack. Everyone who uses the internet essentially relies on remote servers that are dispersed all over the world! You can even turn your personal computer into a server if you like.

Day-3 we learned about model testing, which is really no different than regular Ruby unit testing. We also briefly covered Nokogiri. Nokogiri is some cool shit. It gives you the ability to extract and parse raw HTML from any web-page. This can be very powerful if a particular app you like doesn’t offer an API because you can extract their data and deliver that data on your platform. You can also use Nokogiri to target specific data by using that data’s CSS selector. So if you would like to extract all <li> elements from a page, you would just: page.css(‘li’). Capybara is used for feature testing. Feature testing allows you to test how a user interacts with your web-app. You can write a test that says: visit “homepage”, fill out a form, hit submit, redirect to “index page” and expect the index page to have the submitted content. After you’ve written the test, the code implementation becomes much easier because you know exactly what features you want your app to have. Now you’re just left with writing the code to get that test to pass. This is called test driven development and anyone who calls themself a developer uses this method. Our homework was to work through an SQL tutorial.

Day-4 was by far the toughest. Databases are the foundation of all web applications and being a back-end developer entails working with them extensively. Databases allow us to store, sort, calculate, and retrieve data. First we learned SQL (Structured Query Language). SQL is a programming language that allows us to interact with a database like PostgreSQL, MySQL, Oracle, MS SQL Server, and SQLite. If you’re interested, here’s a very basic hand holding tutorial. Next on the list was Sequel. Sequel is an ORM (Object Relational Mapper). In plain english, Sequel converts rows in your database into objects. Since Ruby is an Object Orientated Language, a Rubyist can quickly take these objects and manipulate them using basic ruby methods. Our Task Manager was initially set-up to use YAML:: Store in place of a database. YAML::Store allows you to store and access data in a text file. We converted Task Manager to use Sequel as our database language and SQlite3 as our database. This was super challenging because all of our controller methods and tests had to be configured. The class was super chaotic as everyone scrambled to bring their app back to life.

Day-5 well that’s today! Fridays are chill days filled with student hosted lightning talks, guest speakers, personal project work, blogging, electives, and student led study groups. Here’s a list of the lightning talk topics for today:

  • Code like it’s 1999
  • Animation with Snap.js!
  • China’s Great Firewall
  • Imposter Syndrome
  • Stuff, Things & the Internet of Things
  • The Illusion of Free Will
  • Ruby Warrior (Debugging and Refactoring)
  • Learning how to Learn!
  • Wine 101

All of them were entertaining and informative as usual. At Turing we not only learn how to code and collaborate but we also strive to improve our public speaking skills.

Deja Vu

Intermission week. My family is in town. I just completed my last week of module-1. Even though I was far more prepared for the final assessment I was still a bit anxious. How hilariously upsetting would it be if I couldn’t pass the final assessment after just repeating module-1, and after having passed it the first time! Fortunately my worries were quelled, I’m moving ahead.

I learned so much more about Ruby this module, and programming in General. I completed every single challenge and solo project without relying on others. I gained a better grasp of the Ruby Object Model, which will only aid me in learning other programming languages. I even re-built Enigma without one initialize method or instance variable, all class methods, teaching myself a functional way of programming in the process. Building Sales Engine again helped me understand the inner workings of databases, and will surely help me with Active Record in Rails. Last module I barely had time to complete any morning mini-challenges. These are small Ruby challenges, assigned almost every morning for all Turing students to tackle with their Posses. Posses usually consist of 1-person from each module and Posse time is every morning from 8:30-9. This module I was able to complete several! I even had time to start this blog which I been meaning to do forever!

One of my fellow classmates has been meaning to start a blog for the longest time but hesitates because he feels he doesn’t have anything of substance to write about. I had the same dilemma starting out. Why write just for the sake of writing, right? Wrong! Unless you’re a gifted writer or seasoned blogger, you’re best work will come over time it’s likely not going to be your first few posts. You have to get comfortable with consistently writing. As with anything, you need a little time and practice to get good results. You can just practice writing blog posts and never publicly post them, but that’s so unlike a techy person. Mark Zuckerberg admitted how many mistakes Facebook has made to get to where they are, and it’s a very long list. But he also explains how important it is to make those mistakes and learn from them as quickly as possible. The more you expose yourself, whether it be blogging or public speaking or whatever, the faster you’ll be able to find your style of doing things (comfort zone) and what works. And let’s be honest, unless you’re a famous person it’s going to take some time for anyone to catch on to your blog and start following. Having a bunch of blog posts in inventory is also a good idea for SEO purposes, more on that in later posts.

These past 5 posts have been more personal and less educational. My goal was to blog about my experience at Turing so as to help others considering this exciting but very challenging path. Module-1 is arguably the most important module at Turing, especially for inexperienced aspiring developers. Coming into it with no experience is very tough and there’s more to learn than you can imagine. I hope I’ve shed some light on the process. Module-2 is less logically intensive. We’re going to learn web frameworks like Sinatra and Rails. I’m super excited to build web-apps. I just recently completed my first very simple app in Sinatra and launched the bad boy on Heroku, I welcome you to check it out! It’s not much but it’s my first web-baby. In essence, the internet is about sharing knowledge and information. In future posts I would like to get a tad more technical and educate you guys/gals about what I’ve learned. So… less self-reflective rant and more solid information!

Home Stretch

Enigma was a hard enough project. I was still not very comfortable turning my ideas into code. The whole week leading up to evaluations was stressful. Knowing I had to get passing grades for Enigma, Sales engine, and my final assessment just compounded my stress. I mean, 2.5-weeks to complete 2 big projects and be assessed… dude I’ve only been programming for 4 weeks!

Enigma was due on the following Monday. Most people in the class weren’t finished on Sunday night, and some were finished but still had a bunch of refactoring left. Thankfully we were given another day and I completely finished my project 15-min before my evaluation! Cutting it kinda close if you ask me. After a pat on the back we were christened with our next super fun seemingly impossible project, Sales Engine.

Honestly Sales Engine is no joke. For the newly minted developer it’s a monster of a project. Just reading the project spec may intimidate the best of us! Sales Engine is a data reporting tool. The data is merchant transactions, and it is plentiful. Six massive CSV files have to be parsed, over 12 classes have to been built, hundreds of methods have to be created, object relationships and responsibilities have to be established, and most difficult of all “Business Intelligence.” Biz intel includes calculating merchant revenue for successful transactions, determining most profitable merchant(s), determining the customer(s) that spends the most money at a specific merchant, determining what day the merchant was most profitable and on and on it goes until you get dizzy and want to vomit!

My first time tackling Sales Engine was a blur. I hardly understood how to complete the first section, Relationships. My partner was much better than me and took the reigns on pretty much the whole project. I didn’t want to hold her back because their was a time restraint and not passing sales engine meant we could potentially work on extensions(you really don’t want to know) over our break or just not advance to module 2.

The last week of the module I took my first final assessment. I failed, pretty epically in fact! The challenge was to implement an extension to a fairly simple Scrabble program. My accessor wasn’t really giving me too many clues and by the time I got comfortable with where I was heading we ran out of time. Can’t hate, I knew I had the skill to solve the problem I just approached it wrong. Turing gives you another opportunity to take the final assessment and if you don’t pass the second time you have an option to re-take the whole module.

After the first assessment I got to thinking. Am I ready to move on to module 2? Do I feel comfortable with my Ruby skills? What is the minimum? If I pass the assessment the second time do I deserve to move on to Module 2 when I can’t even complete half of Sales Engine by myself? Did I come here to just barely squeeze through the cracks and graduate as an average bottom of my class programmer? I thought about all this for the next few days leading up to my second assessment and decided regardless what happens I’m going to retake module 1. I felt very confident that if I retake the module I would improve tremendously and struggle less throughout the rest of the program. Interestingly I wasn’t the only one in my cohort who felt this way, 5 classmates chose to retake the module. That’s 25% of the class!

I told Jeff I’m contemplating re-taking the module and he asked me wether I even wanted to take the assessment again. I said Yes. I somehow had an A-Ha moment that last week and started to better grasp Enumerables, and I felt like if I’m going to re-take the whole module I prefer it to be by choice. I ended up passing with flying colors the second time around and felt good about myself. I knew I wasn’t completely hopeless. With a clear head I packed my bags that weekend for a week long surf trip to Nicaragua.