Projects For Me
Hello Chicago, Hello 8th Light, 29 Aug 2011
Well, it's been 8 days now since I sold my car, hopped on a plane, and flew to Chicago. Things have gone fairly smoothly, with the one exception of my credit card getting compromised my first day here, c'est la vie. I'm practically a pro at the L, and have been doing a fair bit of walking, as well.
8th Light has been pretty good so far. It's a friendly environment, everyone shakes hands when they come and go. Everyone seems to want to be there, which is nice. I like being around people who care.
My residency seems to be going well. Not spectacularly, but well, nonetheless. The first week I read the first two sections (12 chapters) of Agile Software Development, Principles, Patterns, and Practices. The first section covers the Agile Manifesto, and principles of agile software development. The second covers agile design, and Uncle Bob's SOLID principles. SRP seems to be the most important, and probably my favourite, even though it's hard to know where to draw the lines. DIP is the one I understand the least.
I also redid my Ruby TTT game in Java. Not sure how to feel about this. On one hand, this is by far the most advanced thing I've ever done in Java. On the other, I've already done TTT, and I feel I've probably already learned quite a bit of what Java has to teach. Still, I'm sure my mentor, Doug, has a reason for it, so I don't mind that much. I do think it makes a lot of the principles in the book easier to talk about. Ruby is so flexible that a lot of the things in the books don't translate very well. It also lets me work in IntelliJ, which has some incredibly powerful refactoring tools. I've found that to be rather enjoyable, and look forward to when Ruby has that level of power (I know it's hard b/c of the dynamic typing, but if SmallTalk can do it, so can we!)
I also went through the Prime Factors Kata about 10 times. I did it in Ruby the first time, and then in Java all the rest. I found it kind of difficult to predict what step was coming next, so I spent a lot of time exploring the different paradigms one could be thinking in that would result in the process shown in the video. Doug gave me a good tip there, on each step, to think about moving from specific to general. So I think about how it can handle each of the previous cases, while also making it more generalized with each addition. Another thing is to avoid thinking about the resulting goal we're aiming towards. Interestingly, the result is incredibly similar to my implementation (which, looks very ugly to me, since I've been reading Clean Code this week).
By far the best part of my residency has been my mentor, Doug. He's pulled me aside each day and gone over something with me. We hit most of the SOLID principles, and it's great to be able to say "yeah, but what about this" or "so in this situation, it would seem to imply whatever, but that's not what he did over here". Doug has also looked at my code, and given me advice for how to structure it better. I've never had that before, I don't think anyone's ever really taken the time to look at my code, and if they did, they never let me know about it. So for me, that's probably the most valuable part. The downside is that I have to interrupt him and his pair when I have questions, which I really hate, so I try to avoid that.
He also taught me about UML class diagrams, which I really enjoyed. I'ts hard to believe I never learned that in school, it's not that complicated, and allows for much more concrete discussions of the design. Also, the things the books talk about make a lot more sense when you know some of that stuff.
Last week was a day shorter for me, because Monday was spent mostly on inprocessing. The middle of the week I spent on site with him at a client's, and then on Friday we all got together for 8th Light University, where one of the craftsmen teaches about a subject. In this case, it was Brian Pratt teaching "Refactoring to CoffeeScript". I also presented the kata I'd been working on. It went nearly as well as I'd expected, but didn't seem to be what they were looking for, so I'll have to consider different approaches before doing any others.
On Friday I also got access to some of 8th Lights private github repos, and got to help fix some broken images from when we moved our blog. I enjoyed that, because I felt like I did it well, and it helped Doug out, so I felt like I was giving back. I also fixed a bug in the email generator for the 8th Light website. It was written in Clojure, so I got to work a bit with Li-Hsuan and Micah, which I enjoyed. Most of my learning so far was kind of isolated, it was nice to sit down with people and take on a problem. I don't actually know Clojure, but I went through a Lisp book before, so it wasn't very difficult.
After that, I worked a little bit on a blog entry about the Ruby load path (not published yet), since it seems there are a lot of people who don't understand it, I think that would be a useful article for the community. And then I went out for drinks with some 8th Lighters, and some of our clients' developers.
All in all, a good week. Doug said I'd done well, so that made me a lot happier about it. It is moving pretty quickly, though. I'm used to having enough time to really explore the knowledge space and exceed expectations, but right now I'm just making sure I meet expectations and don't fall behind.
Oh, and I totally got a shout out from Ryan Bates in his Railscast on Pry. That was unexpected and really really nice. It's one of those surreal things because I started watching Railscasts when I had barely any understanding about Ruby at all.
More updates soon as I'm currently building a webserver in Java that will serve up my TTT game. I'll post about that when it's complete.