How I learned Clojure
About me
I am a polgyglot Software Engineer with experience in creating back-end APIs, front-end pages, serverless applications, and comprehensive data platform components and ETLs. I am also an AWS Certified Solutions Architect.
Why I wanted to learn Clojure
The short answer is, "Because Clojure is a modern Lisp that runs on JVM and exhibits a well thought out language design.". I did not learn it for employment but purely out of interest and desire to upskill myself.
My interest in the language was piqued the moment I heard about it. However, I struggled to get started initially due to the significant prerequisites and the immature tooling available at the time.
Clojure's simplicity, coupled with its robust interfaces and abstractions, seemed to address many challenges. Furthermore, my passion for learning Lisp was fueled by articles written by Paul Graham, Peter Norvig, Steve Yegge, Eric Steven Raymond, among others. Rudolf Winestock's "The Lisp Curse" is a particularly compelling read.
Clojure's design allows it to run on host machines, leveraging their optimization capabilities. For example, Clojure can operate on JVM and CLR, and can even be compiled into JavaScript using Google's Closure Compiler. Other targets include ClojureDart and Clojerl. It also has interoperability with Python via libpython-clj and now there is a new Clojure dialect based on LLVM jank-lang. You just need to learn the language once and can use it in multiple platforms! Fennel-lang is worth a mention as it targets Lua runtime.
The fact that Clojure promotes a functional programming approach with persistent immutable data structures, lazy evaluation, and other appealing aspects only deepened my interest in the language.
How I approached learning Clojure
As I said before I think there is some pre-requisite for before learning Clojure. Before embarking on the journey to learn Clojure, it's crucial to have an understanding of how JVM works, a tolerance for parentheses "()!", and a healthy dose of patience and determination. Some knowledge in Functional Programming is also advantageous.
Since I already worked in Java and Scala I had fair understanding of JVM and Functional Programming. Working with Emacs Lisp took away my fear of parenthesis. So I was in a good starting point already.
My learning process involved reading articles, installing cider, and setting up simple projects. Cider setup in Emacs and REPL driven development gave me new ways of problem solving and programming.
Clojure for Brave and True proved to be a great introductory book. I would also recommend The Joy of Clojure. Attending several Clojure MeetUps in London allowed me to interact with both experts and learners, which was a fun and informative way to discover new libraries and applications.
Challenges I faced
While learning from MeetUps, YouTube, and practicing on my own was useful for starting, it wasn't sufficient for me to become an expert.
My lack of experience in applying Clojure to solve real-world problems at work was a major hindrance. Although I carried out exercises and samples from websites like LeetCode and Exercism, they could only take me so far.
However, I soon landed a job that uses Clojure and the opportunity to use Clojure at work dramatically accelerated my learning. There's nothing like tackling real-world problems in a team to truly learn a programming language. Within three months, I felt confident in my Clojure skills. I wrote new code and refactored existing code and learned a lot from colleagues.
Key takeaways
Learning any programming language or technology requires time and practice. Books and examples provide a solid foundation, but real-world experience is key.
Learning is a continous process and you will need employ multiple strategies to be an expert in any field. Do not let any intial set back discourage you from learning new things. Be patient and show up again.
Ability to think in Clojure has been a great skill in my everyday software engineering arsenal.
Before learning Clojure, I thought of programming languages merely as tools for problem-solving. However, my experience with Clojure has made me realize that it's possible to have a favorite programming language.
Tips and advice
To learn Clojure effectively, leverage the wealth of resources available, including YouTube videos, articles, and books.
Getting help from an experienced engineer will go a long way, so reach out to people in your circle. Don't hesitate to seek help from experienced engineers or mentors on platforms like codementor.io.
Final thoughts and next steps
Clojure is the third most loved language. It is powerful and robust however its learning curve might be steep, but don't let that discourage you. I am here to help you learn Clojure through 1-on-1 sessions.
An essay is a structured piece of writing that presents an argument or perspective on a particular topic. It typically includes an introduction, body paragraphs, and a conclusion. Essays can be descriptive, narrative, expository, or persuasive, each https://www.phdresearch.net/help-with-writing-a-psychology-phd-research-proposal/ serving different purposes. They are essential in academic settings, helping students develop critical thinking and communication skills. By organizing thoughts coherently and providing evidence, essays allow writers to express their ideas clearly and convincingly. Whether for school assignments or professional work, essays are a fundamental tool for sharing and analyzing information.
An essay is a structured piece of writing that allows individuals to explore, analyze, and convey their thoughts, ideas, or arguments on a particular topic. Essays come in various forms, such as descriptive, narrative, or argumentative, and they require https://washingtoncitypaper.com/article/604229/college-essay-writing-service-how-to-choose-faq-our-top-5/ research and critical thinking to provide credible and well-structured content. Essays serve as a medium for authors to engage with readers, share knowledge, and express their unique perspectives while adhering to established academic or literary conventions.
Wow, thank you for such a detailed guide to Clojure starters!