Monday, December 30, 2013

19 School Days Left!

That hurts my head.   It feels like I just started, though, to be fair, in an 11-week course I suppose even the last day will feel like it is awfully close to the first.  

Quick sidebar:  this pace is starting to catch up with me and I'm taking Thera-flu like it's tasty or something, but it's what is keeping me upright at this point.  Forgiveness is requested for any typos/rambling sentences.

While the calendar proximity to the first day feels close, the knowledge proximity couldn't be further apart.  I don't step back often enough and evaluate where I am today compared to where I was on November 11th.  But, while knee-deep in Capybara testing today, my husband walked past my desk and saw 100% of my monitor real estate (and it's a 27" monitor!) taken up with Sublime and Terminal windows.  He said, in casual passing, "Do you really know what all of that means?".  I looked at my myriad of windows and replied, "Yeah.  And I wrote just about all of it".  He laughed, said 'cool' and went about his business.

But I was kind of frozen in my tracks.  I do understand it.  And I did write it.  and that, my friends, is pretty freaking cool.  

Dan Pickett, one of the founders of Launch Academy, wrote a great piece and published it on the Launch Academy website about Career Accelerators.  He discusses three phases of skill set development - dabbler, immersive and apprentice.  He pinpoints a moment, in the immersive phase, when a student can use documentation to arrive at a solution without handholding.  It is at this point where the knowledge acquisition goes from linear to exponential.  

I can confidently say I am there.  It feels like lots of things are on the upswing: confidence, ability & mental health.  My creativity is flowing, and I can finally get it out of my head, off of paper and into models, views and controllers.  Spirits are high, and each day brings a new discovery.  Dan points out, when you stop discovering, it's time to move on.  For now, there is still so much to still discover, but his point is taken.

Monday, December 9, 2013

Test Driven Development (TDD)

Test Driven Development, or TDD, is a practice used by computer programmers to approach the development of code from a very structured, linear perspective.  The goal of TDD is to write code that tests your code.  Yeah, think about that for a sec.  Said differently, it is a program (or suite of tests) that wraps around your code and validates that your code does what you expect it to do.

The first steps in TDD are so simple that they almost seem difficult, especially for a beginner programmer.  There is an interesting struggle between doing TDD and your own developing 'code-ego'.  TDD forces you to write code that you know is technically correct, but so narrow in scope that it is wrong.  Your ego screams 'I know the answer!  What are you doing? Danger, danger!  Bad code!'.

But you stick at it and you work really hard not to cheat and write fully functional code.  Baby steps, baby steps.  Red, Green, Refactor.  Rinse and repeat.

But, in the beginning, the inner code cowboy wins a lot and you find that you do cheat.  And if you are committed to the process, you delete that beautiful, apparently fully functioning code and you hardcode a method return.  And it kinda hurts the first few times.  "Why am I deleting good code?"

Because thats TDD!

When you get into a good rhythm you and you begin to watch a program take shape, when developed using TDD methodology, you start to get it.  Hmmmmm.  Maybe writing kindergarten code first will actually lead to a stronger program?  Huh.  I think so.

TDD is drafting a blueprint before buying lumber and hiring builders.  It's a map to your final code and, once you get it, you GET it.  It's a new tool in my toolbox.  Well, probably on my tool belt.  I need constant access to this one!

Cheers.

Monday, November 25, 2013

The struggle with Methods

As a novice Ruby programmer, I am constantly butting my head up against the process known as defining methods.  Defining a method means encapsulating a bit of code that you find yourself needing repeatedly throughout a program.  By encapsulating the code in a method, which has a name, you can call on that method throughout the program by simply invoking its name.  Methods help us adhere to the Ruby philosophy of DRY (Don't Repeat Yourself).

Looking at my first few programs, it is obvious that I am in violation of the DRY principal EVERYWHERE!  There are few, if any methods defined and code duplicated from top to bottom.

Going back 2 weeks, I would have spent more time understanding methods and I would have explained the process to myself like this:

Why methods?  Because they isolate problems in your code allowing a reviewer (and yourself!) to find a problem without combing through hundreds of lines of code.  You can have hundreds of lines of code written in methods, which you may still need to comb through, but you can isolate problems to a specific encapsulation and know where to search.  Additionally, keeping your code broken down by methods insures that you will not break another section of your code accidentally while trying to fix something unrelated.  

When methods?  You can define a method for ANY process in which you pass in a variable.  Sometimes you don't need to define a method.  But often times you do.   If you have a process in which you pass in a variable more than once, write a method.

How methods?  I still don't know if I can articulate the 'how' of methods.  I have written a few, and they work, but I still feel like I have a couple of different 'thought balloons' floating over my head.  I can sometimes merge them together to get a meaningful bit of information but, as soon as I apply it, the balloon is released and becomes a disparate bit of knowledge.  I'm still working to permanently merge the knowledge into a firm foundation for writing Ruby methods. 

Sunday, November 24, 2013

Breakable Toys

It's time to start talking about my "Breakable Toy".  I suppose I should first start by explaining what exactly a breakable toy is:

For Launch Academy, a big part of the learning process is practical application of knowledge, almost immediately upon grasping a concept.  To that end, we are encouraged to conceptualize a computer program/web application that we would enjoy constructing.  That is our breakable toy.  The breakable component relates to the fact that this toy provides us a safe place to experiment with knowledge as we gain it, knowing that, if it breaks, there is no harm - only a learning opportunity from which our skills will improve. 

I've decided to build a tool to help construct an autobiography.  Almost like a retro-active blog.  I would like to create something that provokes the user with specific questions, designed to stir up memories, and then capture them, along with time and place details, so that memoir pieces can be indexed and presented graphically in a timeline.  I hope to incorporate important information about what was happening in the world at the time that a specific memory comes from - i.e. headlines, top 40 hits, etc.  with the goal of providing context for the memory, and hopefully clarity for the user about details that might otherwise be overlooked.  I find that memories are often provoked by ancillary events that were happening at the same time as the memory - especially music.

In the last week I've worked with user stories about how a person would interact with my toy, and wire-framing, which is just drawing how I think the site should look, at a very high level.  User stories are not easy!  Try explaining how a person drives a car without overlooking the slightest detail - such and explaining to the user details such as knowing how to find the car in the parking lot!  Lots of details necessary to flesh out successful user stories.

Onward!

Sunday, November 17, 2013

Week One - done and survived!

The first week of Launch Academy is now in the books and it was, for me, a tremendous success.  There is a quote that summarizes my week fairly succintly:

“Isn’t it wonderful?  That feeling of not knowing too much about something… Incomplete information… Endless possibilities… When you don’t know much about something, it’s the most exciting sensation."  -Kutsnetz in Talus, by Erol Ozan

There is so very much that I don't know about the subject at hand.  But how thrilling is that?  In 7 days my base of knowledge has grown wider, and a bit deeper.  Width is easy.  Depth is more challenging.  Similar to learning a foreign language - memorizing nouns is easy and with some effort and time one can know a lot of words.  But using them in sentences, conjugating them, pluralizing them, etc. - well that depth takes considerably more time and effort. 

Each exercise and each interaction with a peer or a mentor has given me a few more words, and taught me how to use them.  Being able to use the newly acquired language either by explaining it to someone else, or working through a new problem on a white board is deeply satisfying and confirms that, here and now, I am in the right place. 

The Launch Academy approach to education is refreshing, and so different from the traditional experiences that many of us grew up with.  The objective is not to understand something before everyone else and horde that to prove that you are the 'top of the class'.  If you understand something before your peers, it is your obligation to pay it forward and help someone else understand it.  And you know what?  Explaining a concept and working through a problem with someone else does not weaken you, it empowers you!  Your grasp of the knowledge increases when you can explain it.

Onward to week two!