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: https://gist.github.com/bitsculpt/7780901
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: https://gist.github.com/bitsculpt/7797540#file-payroll2-rb

  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!


Wednesday, October 30, 2013

The Journey Begins ( And it's not the Navy ).




My name is David, and I've set out on an adventure to rebuild my life from the ground up.  For my particular situation, that means finding a stable career in an industry that I believe has room for growth.  Web development is my chosen path!

When I was nine years old I started tinkering with our family computer and learned about Bulletin Board Systems.  I learned how to download my first games and use pkunzip, as well as make my first social connections via computer.  It wasn't very long after those days that I found myself in a darker side of the internet, Internet Relay Chat, EFNET.  It was there that my love for technology blossomed.  Many late nights were spent trying to keep up conversation with whom I still truly believe to be the best programmers in the world in underground hacking groups like TNT, Chrome, Cult of the Dead Cow, etc.  I never had a lack of desire to become a great developer myself, only a lack of resources.  Being a child without an income, I was only able to stumble onto programming books that I could find at my library.  Often times those books were extremely outdated and very hard to learn from as a beginner who wanted to be great.

As time went on, my love for programming faded into the background of real life.  I learned that to eat you needed an income, and that dream jobs didn't come along without extremely hard work.  After a few short jobs doing tech support for Bellsouth and other such jobs, I ended up falling into the heavy civil construction industry.  After learning how to work hard I met an engineer on the job who took me under his wings and taught me how to use advanced equipment like total stations and data collectors to survey the job site's structures and underground utilities.  I moved from a laborer to field engineer within a few years and earned a comfortable living towards the end.  Fortunately, I never forgot about my real passion and I spent a great deal of time keeping up with current web development trends and hiring people to build out startup ideas I had.  Some of the projects I built were extremely successful which inspired me to leave construction, forever, and pursue my dream once and for all.  

I hope the journey through Launch Academy and beyond will award me with the ability to look back at my past struggles and shrug them off, as if the troubles were only a stepping stone to my new life.