Day 1

Today was my first day at Clean Coders. Admittedly it was an anxious day as is any first day of a new job. Fortunately everyone was warm and welcoming during my onboarding process. I met some of my potential future colleagues as well as my mentors and bosses.

I spoke mostly with Micah and Gina regarding first steps. Micah purchased a Mac Mini for me to use which is exciting. I’ve never used another OS for software development, but I hope to never go back to Windows, It does not have good command line support after all. Gina helped me with getting my first assignments, one of which is setting up this very blog. I was assigned to set up a GitHub.io site however I made one years ago so all I had to do was add in this new page. Though I’m no expert UX designer, I know how to make it look decent and functional, which is perfect for this ongoing project. Gina also helped me navigate to other applications I’d need for this apprenticeship such as Tuple, IntelliJ, Epic, and Poker.

My first real challenge was the Clojure Koans assignment I was given. It serves as an educational guide for me to become familiar with clojure, the primarily used language at Clean Coders. Clojure needless to say is a steep learning curve. It appears to be a less verbose language at the expense of it being much harder to read for inexperienced persons. It also uses prefix notation which I’m no stranger to, but will still take some getting used to.

In this assignment I had to fill in unit tests and get them to pass by putting in the right code snippets or parameters. I was given 27 clojure files each with on average around ten tests in them. I got through 14 at the time of writing this entry and I hope to do a few more before I call it a day. Initially it was quite straightforward and easy, I breezed through the first five or six. Then I began hitting tests with answers that needed more understanding of the language to apply my prerequisite knowledge of coding. It was a slow trog for a few hours, I spent it really trying to learn how to read this code and understand how the interpreter read the language. I basically had an answer key by looking at the koans file, but it wouldn’t help me truly understand, so I used it for reference only.

My aha moment finally arrived on the 14th file, recursion. I know recursion, and I know it well, but that also means I know how tricky it can be, especially when learning a new language. I didn’t understand fully how loops worked yet and how to pair that with recur in Clojure syntax. It took me a good while just researching and examining these tests to understand them, and then it clicked! With that I was able to come up with my own solution to recursive-reverse and factorial that differed from the answer key. When I am able to splinter off into my own line of thinking and my own approach, instead of hugging the examples and given answers, that is when I know I’m beginning to understand at a fundamental level. At that point I stopped with a feeling of satisfaction in my mind, and believing I have done enough today to share in this blog post.

recursive-reverse factorial