Flexiana Interview
I enjoyed the interview with Flexiana team this week, they are very friendly and it we had some very interesting discussions. I included my interview preparation notes which were mosty the same as shared in the video.
A blip with Emacs 29.4 release stopped the which-key menu from showing when in a major mode. This affected both the leader and local leader key. Within a couple of hours the issue was resolved before I really figured out the cause. I installed Emacs 29.4 on Termux to replicate an issue that was reported in the #spacemacs channel of the Clojurians Community slack community.
Flexiana Interviewλ︎
Flexiana inquired about an interview and I suggested they send through some questions they wanted to ask. It was a video interview and I find it very useful prepare for the questions so I know what I can say during the video call. Without questions up front it can take much longer to form my replies and is very easy to miss interesting things to say.
I felt the call went very well and there was scope for some additional questions around Spacemacs. I also got in a mention of Neovim too.
The interview will appear on the video Flexiana YouTube channel
The questions and notes I made for the questions follow:
How did you transition to working with Clojure?λ︎
I fell into Clojure by accident. I had attended a talk by Rick Hickey in London at SkillsMatter in 2009, but it took a while before I really understood why I would invest time in Clojure. The language did seem quite strange compared to what I was use too.
I was developing an interested in functional programming at that time, as the Object Oriented design approach seemed to be less appropriate for some of the data intensive systems I was trying to model. I remembered how intriguing Haskell functional programming was from course at university and how I was starting to get a good grip of the language by the time the course ended, although more than a decade had passed since then.
Scala was very popular at that time and I was friends with people organising the London Scala User Group. I wanted to organise a event where we could practice the language, so started a Scala code dojo event. Having never run such a code dojo event, I went to the London Cojurians code dojo events to see how it was done.
After several months of going to the Clojure code dojo I woke up one day and felt I had 'got' Clojure. I had finally found a language and community that cared about simplicity and had a language that could easily represent that simplicity.
It took many years to get my first commercial Clojure role, but learning Clojure through the community was very rewarding.
I started an event called Hack The Tower in the Salesforce / Heroku offices, running once a month on a Saturday. People from the Java Scala and Clojure communities were invited and I organised them into groups to the could collaborate on projects or simply learn together. I started running an all day Clojure workshop as I discovered trying to lead others into Clojure was a great way to learn Clojure myself. Hack The Tower ran for 5 years, until I left Salesforce (and had no office or budget anymore).
Eventually I was accepted for a commercial Clojure role in 2017 at Citi (large international finance institute) and since then have worked for a variety of startup companies using Clojure.
Are you an active Clojure developer or a manager?λ︎
I have been an active Clojure engineer commercially since Citi.
After my health was significantly impacted by Covid I felt more useful by taking an engineering manager role. This is the role I currently have at Griffin.
I write Clojure code for community projects, especially Practical.li. I can do this work at my own pace and to satisfy my own high code standards, without the pressure of deadlines.
What do you see as the best on Clojure?λ︎
Simplicity is the most important characteristic to me, both of the Clojure language itself and the design approach to building systems with Clojure.
All other languages I've worked with try to model the complexity of the world, leading to complex systems that are very hard to maintain and extend.
A simple approach to design creates code that is far easier to maintain and extend. A large number of code libraries can be combined to make a complex system whist still retaining the maintainability and extensibility of the code.
Data as a central design tool is also incredibly important. A Data approach supports simplicity and helps break down complex requirements into simple models. When that data is immutable, then it is really easy to reason about the behaviour of code that is transforming that data.
And the Clojure REPL is a unique experience I have never had with other languages. To instantly get feedback on what the code does or to quickly deconstruct code and evaluate its parts in a live environment has been invaluable for optimising learning.
What types of people Clojure attracts ?λ︎
In the early days of Clojure it was predominantly experienced Java engineers that wanted to do something different or saw the advantage of the simplicity of Clojure.
Around 2013-14 ClojureScript really started to take off, widening the audience and also making front end development more accissible for engineers that only had back-end experience. Figwheel, Reagent and Reframe projects really help in the early days of ClojureScript.
Over the last 5 years I have seen much more diversity in those using the language. I've met many people using Clojure as their first commercial programming language. There are many people from Data Science community using Clojure or Clojure / Python combinations.
I believe Clojure is now seen as the general purpose language it truly is and a language that anyone can readily adopt.
If you didn't use Clojure what language would you use?λ︎
If I wasnt able to use Clojure I would look for a commercial role that didnt include coding. Or invest some time on open source Clojure projects and see if I could raise enough sponsorship that I would not need a commercial role. Or I could retire and live a very modest life.
I am not aware of any programming language that has the emphasis on simplicity that I get with Clojure.
Java is a great language for a career and will remain so for the foreseeable future, but feels very verbose after Clojure. Python has a lot of advantages for data science, although there are lots of Clojure projects too.
Important skills sought when assembling an engineering team?λ︎
Learning and communicating. Without these fundamental skills and motivation to want to apply them every day, then a team is only ever a collection of individuals and rarely excels.
Learning is important as you are always creating something new, something that does not exist already (as if it existed already, why would you create it again). Team members need to appreciate that they can learn from anyone and everyone, no matter if they are technical or business focused or what level of experience they have.
Communicating effectively is vital to avoid becoming your own silo. Actively communicating builds relationships within and outside the team and unless the company is only every 1 person, you need strong relationships to get anything significant done.
What are your current personal projects?λ︎
You have a long history of daily commits on GitHub, so what are the personal projects you currently work on ?
I founded Practical.li
I also write a journal capturing the thoughts, discoveries and activities each week. The journal helps to give me a sense of progress and supports self-motivation (I know I have done meaningful things and often surprise myself how much I have achieved).
Perspectives gained from career breaks ?λ︎
You had a career break where you worked as a courier, cycling about 100km per day. How did that experience impact your perspective on work and life?
There is more to life than working, which is very easy to forget when your personal interests and work are very strongly aligned.
Stepping away from the software industry also allowed a chance to reflect on what I really enjoyed and what value I could bring to a commercial company or open source project. In essence, stepping away for a year gave me perspective.
There were some unexpected challenges being a cycle courier. Essentially each courier is continually solving the "Travelling Salesman" puzzle. The controller tells the courier which packages to collect and the courier has to decide when to deliver each parcel, as they are collecting more parcels. Typically a courier would have 5-10 parcels "on-board" at any time during the day, if they were to make enough money to live on.
As a courier you are self-employed, so it gave me some insight into the world of finance and taxation.
As it was difficult to make a comfortable amount of money as a cycle courier, it did make me appreciative of the good salaries that can be obtained as a software engineer.
Thank you.