Recurse Center: Week Three

January 26, 2022

This post is about my third week at the Recurse Center.

Functional Programming and Clojure

During this week, I continued reading Clojure for the Brave and True, and completed the next two chapters (Clojure Alchemy: Reading, Evaluation, and Macros, and Writing Macros). Reading about how Clojure syntax is read and evaluated was very interesting! It reminded me of my first project, Crisp: a simple Lisp interpreter.

During the previous week, while reading Brave Clojure’s 4th and 5th chapters, I was briefly introduced to some of the key tenets of functional programming. I found these concepts very fascinating. This week, I spent a considerable amount of time reading about them. While I would like to write a separate post on my findings, here are some of the points I have taken on my notebook:

RemindMe: My First Clojure App

Now that I was getting slightly familiar with the world of Clojure, I thought it would be the perfect time to embark on a journey to build my very first app using Clojure. I decided to build an online version of flash cards, called RemindMe.

Given that it would be my first project in Clojure, I thought it would be useful to first build the app using JavaScript, the language I am most familiar with.

So, I spent a day writing the server-side logic of RemindMe, using Node.js. I then proceeded to build the front-end part of the project. To implement the front-end part, I used the Bootstrap framework. This Bootstrap tutorial was very helpful, to get started. (Side note: Long after finishing the front-end part, I realized that the hamburger menu on the navigation bar is not working on a mobile display. I’ll need to fix this; would love to pair with anyone who is good with Bootstrap/CSS!).

The Node.js version of RemindMe is hosted on this GitHub repository.

After completing the app in Node.js, I proceeded to re-implement the backend of RemindMe, using Clojure. I used the Ring framework and it’s jetty-adaptor to build my web service. I chose Compojure as a routing library, for better handling of requests.

RemindMe is deployed here:

Here’s a detailed account of how I built RemindMe, using Clojure, Ring and Compojure: