Projects For Me
Week 5, 26 Sep 2011
Listening to MGMT and grooving!
Man, I barely remember this week! I was at 8th Light the whole time, because all the devs at the client site went to Strange Loop. I'm not going to break this post into days since they all sort of ran together.
I had two iteration meetings with my client, Doug (also my mentor), where I've been working on an engine for Refinery CMS that will allow the Blue Max RC club to hold elections for president and other offices. The meeting on Wednesday was really rough, fortunately Doug was forgiving. The one on Friday went much better.
I'm really happy with my test solution for the models (Active Record) I have two engines that need to work together, so I set up a separate directory and symlink each of the relevant files into that directory. Then I have my own test helper which sets up the environment. It creates an in-memory SQLite database, runs all the migrations against it, loads in all the models mocking out irrelevant Rails stuff as necessary, and then runs my specs against it. This takes ~10 seconds, which is a huge step up from the ~40 seconds it takes to run them through Rails. This makes it much easier to test, and I'm quite confident in all of my model code.
The controllers have not been going as well, I've set up a number of specs but can't get them to run right. This kind of sucks because it means I'm really apprehensive about refactoring them.
I'm getting pretty decent at Jaywalking.
Having lots of fun on IRC, I'm competent enough to answer most questions, and I like helping people out. Entered into a few debates, as well. Might make some blogs later about the positions I took.
I've been doing a lot of thinking lately about abstractions and approaches to development. These are largely based on my experience writing my CLI to the TTT game which was something an epiphany for me. Programming that library was like meditating, and I want to spend more time reflecting and exploring the process I went through. I need to run through it about 10 more times to really get the process down. I started to do it over the weekend with a Sudoku Solver, but got side tracked. I think I'll try again next weekend. I'm not sure it will work (as in be correct), but I want to give it a shot. The process is very OO, has some pretty deep implications regarding abstraction, mocking, and problem solving.
On Tuesday I went to a talk at Groupon by Dan North about "Patterns of effective delivery". I really enjoyed this talk. He seems to be a bit of a polemicist, which, I can certainly appreciate. It means you have to take the things he says with a grain of salt, but they really make you think. For example, I really enjoyed (though I disagreed with) his definition of patterns as ways of transforming one thing into another thing (my paraphrasing, I don't remember his exacat words). This was based on the book A Pattern Language by Christopher Alexander. While I wouldn't define patterns that way, the implications of that definition did occupy me for several minutes (I would actually call that a function, and I have already been impacted philisophically by the idea of functions). I found the talk both provocative and inspiring, and really wanted to see the full length version (we only had 45 minutes).
I read Software Craftsmanship this week. Surprisingly, this book came out in 2001, but the movement is (at least as I understand it) is pretty recent. Dan North criticizes the software craftsmanship movement, but the arguments seemed rather pedantic. I appreciate his pragmatic approach to delivering what the user wants/needs as opposed to focusing on the craft of programming, but didn't really find his criticisms of Craftsmanship compelling because they didn't address that Craftsmanship's methodologies are intended to do exactly that. I'm looking forward to hearing his talk again in a year or so after it's had time to mature. (Often times an idea is presented with some good parts and some bad parts, after you have to defend it for a period of time, it evolves to lose the bad parts and be much more compelling. I think his talk represents the early stages of an idea that is already fairly string, but will be much stronger in the future).
Bindings can eval strings but not blocks, wtf -.^
During my Wednesday iteration meeting, where I mentioned that I was really frustrated, Doug made the
point that if I'm frustrated I need to keep him informed so he can help me out. This is valid, so I
agreed and told him I would. But I've been realizing that this is super hard for me. No, not because I'm
arrogant and can't ask for help. As I've thought about what I could ask for help with, I realize that
I think all questions are bad questions . The ones I really should ask are all way too fuzzy,
"how do you test Rails", whole books have been written about that! Questions should be more focused.
The answer to a question like that is "go find a tutorial". But then once they are focused "How do you
get method?", the answer is RTFM! I suppose this perspective is the result of four years of having
to figure everything out by myself, but the several times I tried asking questions this week, it was really
hard, and then the solution exposed it self really quickly right afterward, and I had to look like an
idiot saying "oh, nvm ". Weird how you can struggle with something for an hour, then within
a minute of bothering someone else for help, you find the solution.
I think what I really need is to work with real people that I can observe and see what they do and compare it with what I was expecting. It sounds like Margaret and Paul have been rockstars this week and got us a lot of work, so I suggested that I was ready to be put on these projects. I still have one more iteration to complete for the Blue Max RC club before my work will be usable, but I'm hoping to get on a real project after that.
Okay. This was a lot more stream of consciousness than usual, I'll try to be more structured next week