Projects For Me
Week 3, 12 Sep 2011
It's been a good week, here's the breakdown:
Finished reading Clean Code, it was good, especially the first half. This was the pinnacle of my sickness, with sore throat, cough, and runny nose (or, since it's the worst day, does that make it the nadir?).
Over the weekend I also gave someone feedback on a gem they wrote. Someone liked my feedback enough to ask me to consult for them
Started reading Refactoring by Martin Fowler, it's also a good book, though once you understand what the refactoring is about, the process is often obvious. I find it interesting, the way he thinks about code. It seems he views it in much more discrete elements than I do, which enables him to manipulate their relationships and structure. Perhaps that's because he's worked extensively with refactoring browsers (or did this book predate them?) or perhaps it's because he's taken the time to identify and define the process.
My favourite refactorings were probably tease apart inheritance, because I feel like it's not immediately obvious, but ultimately quite elegant, and replace method with method object because it enables you to really break the method up into parts without feeling bad about polluting the class with methods that it otherwise doesn't need to know about. The one I use most is extract method, or at least that's what I found myself using frequently in IntelliJ. I also think I'll try out RubyMine when I get an opportunity, since it supports refactorings.
After work on Tuesday, I went to the Ruby meetup. I was able to get in, even though there were 30 people on the waiting list. It was hosted by ThoughtWorks, and I got to meet some people there. One of the 8th Light craftsmen was there, so we watched the presentation about MongoDB on Rails together. It was interesting, and the audience was engaged, but I didn't really understand why you would choose a document based DB like Mongo over an ORM like Postgres.
After that we went for drinks and I got to chat about movies, philosophy, vegetarianism, and programming with some people.
I figured out how Java packaging works. Fixed my package name to com.joshcheek.(and so on), and turned my projects into jars that could rely on each other. Then I combined my web server and my tic tac toe game so you could play online. Here
I went up to the 8th Light office, and we had a "Code Retreat" where we did Conway's Game of Life. I had an advantage in that I'd done it before. I was working with the other apprentices, and we would switch off frequently. I got to show off some of RSpec's magic, so that was kind of fun. After we'd done it several times, we decided to do it from the perspective of a cell. This implied that the "universe" should be a network of associated cells that the current cell can see. This was in intriguing take on the process, but we didn't get very far before we ran out of time. The last one we did, we were supposed to use metaprogramming, which was also fun, because I got to show off some of Ruby's cooler features (even if it was a flagrant abuse of these techniques).
Thursday night, I redid the command line interface to my tic tac toe game, because it wasn't tested and I was embarrassed to have to show it to anyone. It took about 5 hours, but I'm really happy with the result. I sort of took the things I'd learned about testing and factories, and mixed them with the processes that work well for me. Starting with the interface, and mocking out the objects just below it, then going to each of those objects, and mocking out the objects just below them, and so forth, all the way down to mocks of stdin and stdout.
I'm especially happy, because this is one that I've tried to solve with sufficient tests several times now, and not been able to figure out how to do it. So this sort of represents a success for me that I've been striving for for quite a while now.
I showed all my work from the last three weeks to my mentor, Doug. That includes the Tic Tac Toe library, the web server, the command line interface to the tic tac toe game, and the web interface to the tic tac toe game. Doug was really happy with my work, which was nice. I'm still not completely comfortable with everything, but it is at least a weight off my mind to know that I'm on the right track. I presented it in a test-centric way (explain the functionality by going through the tests, showing code when he asked) as I'd sat in on one of the other apprentices presenting their work to their mentor, and that was how they had done it.
I feel like I can now call actually call myself competent as a Java developer. I had previously thought I was, but this project revealed to me that I didnt know as much as I thought I did. I'm also probably on the borderline of being able to call myself proficient in it (according to the Dreyfus Model as described in Pragmatic Thinking and Learning), maybe if I learn a few more tools like Maven and Ant, then I'll be comfortable calling myself proficient (and probably I need them already, as I found myself hesitant to refactor the library and webserver as they were already jars being used by my other apps).
After that, I got my next project, I'll be designing a Refinery plugin to allow elections for the Blue Max RC Flying Club. Doug acted as a hypothetical client, and explained what he wanted, and I had to fill out story cards, which reflected the features that we agreed on. After that, we placed them into Artisan, an 8th Light internal project management tool, and then went about rating the stories based on optimistic, realistic, and pessimistic assumptions about how long it would take to complete each story. These were then ranked, and we selected three of them for the first iteration, which will be due by Wednesday.
I'm looking forward to this, I've been wanting to try Rails again (it's been about a year), I've been missing Ruby, and I've been interested in checking out Refinery for a while now, so this should be fun.
I've spent most of the weekend finishing reading Refactoring. But I did get to attend a vegan potluck that one of the craftsmen was hosting. That was nice, and several 8th lighters were there. It was my first ride on the Metra rail, too, which is the more serious train that goes between states and such. There's quite a few 8th Lighters out there, and it's about an hour ride each way, so I don't envy them having to Chicago several times a week.
I also bought my ticket to Ruby Midwest, finally. At least 3 of my friends are going, maybe 4. We're still working out the logistics.
Well, I think that sums up week 3 as an 8th Light Resident Apprentice.