Saturday, January 25, 2014

Teaching Ruby

This weekend I was a teacher's assistant at Railsbridge Boston.  Railsbridge is an organization focused on getting more women involved in the software and web development scene.  It was a pretty awesome experience to be able to teach beginner programmers about ruby.

The most interesting thing I learned is that teaching is both an art and a science ( quoted from my friend and mentor Johnny Boursiquot).  It's one thing to know a subject on a deep level, it's another thing entirely to teach someone what you know in a timely manner.  It was interesting to walk up to someone, hear them explain a particular problem in their own words, then translate what they said into terms I could understand to solve a problem.  What I just said sounds like a really basic concept, but when people are counting on you to get them through a hurdle quickly, it really does add a lot of pressure to think on your toes.

Several of the questions I was not able to answer immediately, but it was valuable for me as well as the person I was helping to see how a real developer tackles problems.  As programmers, we don't know all the answers, but we are extremely resourceful and can generally find an answer pretty quickly.  My biggest impact this weekend was not teaching about arrays and hashes, but teaching people how to effectively use google and ruby documentation to find the answers they were looking for.

I am back to coding for now, I have some interesting projects I want to pump out while the night is still young.  Thank you RailsBridge Boston for the opportunity to teach at your event tonight, it was an honor and a pleasure.

If anyone would like to read more about Railsbridge, Please check their website out @ Rails Bridge Boston

Saturday, January 4, 2014

Test Driven Development and Rails

Time is flying at Launch Academy.  Consuming all this information takes almost all of my free time.  I haven't even found a chance to blog in the last month.

We've been working on test driven development and learning rails in general using a wide range of tools like capybara and rspec.  I always felt like I was doing well to just kind of keep up with core concepts and be able to code applications in rails, minus any unit or acceptance testing.  What I learned yesterday is that I'm constantly talking myself down, and have more skills than I give myself credit for.  I'm honestly not sure if I knew I had all the skills until I flexed my brain muscles yesterday and just started pulling information out of thin air or the rails guides;  even looking at the rails guides I always knew exactly where to look when I needed a reference, which was awesome!

The project assignment we had yesterday was a huge one in terms of importance.  I am the worst about doing an assignment and forgetting to turn it in, but if I ignored this assignment I wouldn't get the chance to come to career day, which basically nullifies some of the reason I came to Launch academy, job placement.  This assignment, which I will now refer to as the property management system, is a strictly individual assignment that Launch Academy uses to get an idea of where your coding skills are.  They also grant you access to career day upon successful completion of the assignment.  Thirty interviews in a day with great tech companies in Boston .. Yes please I think I'll take that seriously.

  The property management system was to be coded using a method called outside-in-development, which means I write unit and acceptance tests first, before I ever write a single line of code.  The idea is to get the tests failing, then make the changes in your code to make them pass.  This was honestly the first time I have ever done strictly outside-in-development.  Launch Academy has been teaching it for a few weeks now but I've always just put a solution together, then worried about tests after.  I learned during this assignment that taking my time with writing tests actually makes development much simpler because the tests guide you into developing the next step.  The tests take a lot of the guesswork out of traditional development where I would need to constantly think about what portion of the application to code next.

In conclusion, testing rocks.  I am confident in my ability to write tests for any size application using an outside-in-approach now and I've been converted into a Test Driven Developer.  Yes, I said it, a Test Driven Developer; you win Launch Academy.

Wednesday, December 4, 2013

OOP is a state of mind

  During the last few days of Launch Academy we've been on the topic of Object Oriented Programming.  Until now, all the applications I've built have been done procedurally, that is, line by line and in order.

  The first day of "OOP I", I pair programmed with someone who's skills were a little ahead of mine.  While the pairing experience as a whole was extremely beneficial, I missed out on deeply understanding some core concepts.  All the reading in the world will only prepare you for building real applications, however, to really grasp subjects as diverse as OOP, you really need to build, get stuck, pull hair out, cry, take a walk, have a revelation and refactor your code; not necessarily in that order.

  The second day of studying OOP,  I realized I had some shortcomings, so I built what we call "OOP II", procedurally.  I did this step in preparation for what was to come.  I wanted proof that I could take a moderately complex application and build it from the ground up in Ruby, as long as it didn't have Classes and very few methods.  You can see the result here:
The code could be better, but nonetheless, after I finished writing it, I was proud of myself.  Things were surely going to be impossible the next day, when I forced myself to write the same application object oriented.

  Sitting alone today, away from people, away from the chaos some call learning, away from the whiteboards with people collaborating, I GOT IT.  Methods, Classes, and Instance Variables were just some of the concepts that were very fuzzy to me just a short 24 hours ago from the time of this blog post.  You can find my refactored code here:

  Today was an incredible day.  Tomorrow I look forward to buzzing around the classroom teaching a few other's the concepts I was able to grasp today.  It's time to sleep, because tomorrow will be the start of Test Driven Development, something I will either love or hate, but either way learn to accept it.

Saturday, November 30, 2013

The Depot -- My plan for world domination

It is Saturday, and I'm on Thanksgiving break from Launch Academy.  I took Thursday and Friday completely off; and didn't look at a single line of code.  48 hours is too long to be away from Ruby, I'm in love with the language and I'm in love with learning.
  My breakable toy is a notepad, which I talk about in detail in a previous blog post.  However, my real expertise is e-commerce.  In a previous life, the life before committing 100+ hours a week to learning ruby and rails, I owned a company that built extensions and did custom development for the Magento platform.  I helped a lot of businesses ( 300+ ) take their online stores to the next level.  I managed projects ranging from installing an extension all the way to integrating a custom developed ERP into Magento with multi retail store support using geolocating API's like MaxMind and, later in the project, if (navigator.geolocation) { }, switched to HTML5 geolocation for more accurate results.
  My thought process is that I'd like to build a lot of open source extensions for the spree e-com framework, to give back to the community and to help improve my skill set at the same time.  To get to that point, though, I need to take a step back and focus on learning rails.  The program at Launch Academy is only 10 weeks so in order to build two breakable toys I'm going to need to stay ahead of the assignment workload.
  I've picked up Agile Web Development With Rails 4 and I will start building a simple e-commerce system in rails today called "The Depot". I'm already 150 pages in and I finally get to start building the application in the book.  I plan to challenge myself by starting the application with zurb foundation so that I can make it look nice.  Throughout the process of building this application, I'll make a few blog posts with hurdles I run into or things I've accomplished that are outside the scope of the book.
  After I finish the ecommerce application, I'm going to dive straight into spree and start contributing.  Already at first glance, I see a lot of room for improvement when comparing spree to a more established, better funded alternative such as Magento.

Thanks for taking the time to read my rants.  I like to blog now to keep my thoughts organized, and perhaps someday, I'll make my freshman college english professor proud by taking the time to write well thought out paragraphs.  Until then, though, I'm back to coding!

Monday, November 25, 2013

Persistance is the key.

This past week at Launch Academy taught me a lot about coding; hashes, arrays, and a lot of other critical topics in computer programming.  One of the main assignments this week was a cash register program that reads products from a csv file, and allows the user to run reports on the data.  This was quite a challenge for me.  Instead of approaching the topic with the techniques we have already learned, I decided to try to build the whole program using OOP ( Object Oriented Programming).  Launch Academy has a tight schedule on assignments so I'm not awarded the luxury of taking my sweet time with a project.  With that in mind, I set myself a personal deadline where I would halt my work using the OOP design.  Unfortunately, I hit my deadline and only had a half working program.  However, I learned quite a few OOP techniques along the way, and felt strongly that if I had a little more time, I could've finished out the cash register.

With my deadline passed, and only 24 hours to finish the assignment, I knew I needed a creative way to solve the problem.  Most of my classmates were using hashes and arrays to store the data, but I wanted to use only a CSV file to store all of the data, and then use the csv file to run reports from.

I went straight to work and was able to tackle a real world programming problem within just a few hours, and it felt amazing!  In a few short weeks, Launch Academy took me from knowing almost nothing to building a completely functioning program on my own.  I can't wait to see what the next 8 weeks bring.

Until next time, adios!

Wednesday, November 20, 2013

My Breakable Toy Project

Today I picked my "Breakable Toy", which is a project I'll use to demonstrate the skills I learned during my time at Launch Academy.  I chose to work on a notepad-like application to help people keep track of things important to them.  I often find myself on the train thinking of or reading about a subject that I want to look up later, when I'm back on my laptop instead of my phone.  Building this web application will enable me and others to keep track of their thoughts.

Technically, my hardest challenges will be designing and building a chrome extension, and designing the site.  The chrome extension will allow a user to highlight a single word or block of text, and export it to the notepad website with one click.  I'll need to build a REST api for the notepad application so that I can send data from the chrome extension back to the website, so this could be a challenging situation.  Due to the complexity of the main website, I will build the chrome extension as the last phase of the development cycle, only after the website is fully functional.
  In terms of design, I intend to use bootstrap 3 and get a great UI kit from the folks at Pixel Kit to help make the design look high quality.  Design is an extremely important topic and one that I will need to study intimately so that my product will be useful to the end user.

It's back to programming for now, so until next time!

Monday, November 18, 2013

Week One Complete

Launch Academy week one is complete, and it was a week of learning about code but a lot about myself as well.

Prior to launch academy, my last educational experience was in 2009 at a community college studying computer science.  During that single year of college, I felt like a drone with no real direction on how to learn.

Launch Academy is an extremely intense learning experience, and because there is so much information distributed at once, I was basically forced to figure out how I learn so I can keep up!
I've found that my learning style is a mix of many things spread through the day.  I like to watch a video on a concept, then read about it, then have it explained.  Once I understand a concept, I never forget it.

Another thing I've learned about myself is to not compare my current skillset with the other students, but simply to compare my skillset with the coursework to make sure I'm on track.  Luckily I learned this valuable lesson within a single four hour timespan.  I was working with a student who was further along than myself in his learning, and I got really discouraged that my skills didn't stack up to his.  After a few hours of staring at a blank screen, and some teaching from my mentor, I realized that there are lots of smart people in the world and it's ok to not be the best all the time.  After speaking to my mom, a licensed professional counselor, I now understand that a simple thing like that can take a lifetime for certain people to understand.  Hearing that made me proud that I can learn a hard life lesson in just a few hours and move onto the next trial, whether it be academic or about life.

Until next week, peace out!