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!