Monthly Retro № 3
The last day of August always marked the end of summer for me. Yes, a tinge of nostalgia in the air.
Summer has come and gone. August has come and gone. Shoot, my birthday has passed. That’s when you know you’re done. And it has officially been three months into my residency!
If you haven’t guessed what I’ve been up to based on my blog posts, the first half of the month was spent on completing my Clojure tic-tac-toe game. I really enjoyed learning functional programming! There is beauty in its statelessness and clarity in its syntax. I incorporated the minimax algorithm for my unbeatable AI and ensured polymorphism in my code to avoid type-checking and did some major refactoring to implement multi-methods.
As an indicator that the code is modular and well-organized, I found it fairly simple to implement various game options (e.g. choosing a board size, determining the first player, selecting whether to play again or quit). I do wish that I had implemented alpha-beta pruning so that a 4x4 game would be playable. But overall, I’m really satisfied with the end result. I felt like the process made me much better and I started thinking about naming conventions and overall design/architecture.
Two weeks ago, I started on my Java HTTP server. Thus far, I’ve implemented a multithreaded server that sends a 200, 404, or 302 response depending on the request (e.g. get, put, post, head, options). I’ve incorporated JUnit, although I have a rule that I need to abide by: I need to manually mock objects.
Let’s take a look at how August has fared!
The Good Stuff
I feel like my blog writing game is strong. Okay, sometimes I get a little lazy (or inspired?) and write a sonnet instead. But on a realer level, writing has become personally helpful. For instance, I decided to pseudo-code/write about multithreaded servers to better understand them — and this process helped me with the actual implementation of it. I’ve also been using blogging as a way to document my learning and solidify my understanding.
On a more interpersonal level, I feel like I’m getting better at asking for help. I had no idea how to get started with the server — what is this Cob Spec? How do I make these tests pass? I understood fundamentally how the Internet works (requests and responses with headers and a body), but didn’t know much beyond that. By asking questions, I made sure I wasn’t getting stuck on a single point. Also, doing so forces me to articulate issues that I may have and work on conveying where I’m struggling.
Although I’m asking for help in the office, my mentors suggested that I should communicate with them where I need help. During my daily standup, I have a recap of completed tasks and a list of today’s tasks. Occasionally, I’ll have a I-need-help section. But I should convey any struggles or misunderstandings, especially if the lack of clarity on a certain subject is persistent.
When I started working on the Java server, I found it tough to comply with TDD. Heck, I didn’t even have unit testing up and running! Whereas it felt normal to TDD tic-tac-toe, I wasn’t sure how to unit test that a socket or stream closed or that I have a multithreaded server (I relied on manual testing for the latter).
And lastly, even though Sylwia insists that time estimate is a learned skill, I’d like to get better at gauging how long a single task will take me. What’s been great is that I’ve been completing tasks that I’ve set for myself on a weekly basis. What I would like to improve is getting a better estimate and assigning an accurate number of points for my realistic estimate.
In terms of communicating issues, I will start 1) creating a feature branch and pull request for review by mentors and 2) pairing with my mentors more often. I can only merge my PR after my mentors have reviewed or within 24 hours of the PR, whichever comes first. We’re off to a good start: the week following my Iteration Planning Meeting (IPM) with my mentors, I paired with both of them after work. This was helpful on a lot of levels, but especially with learning how to write tests.