2020/03/03 Life
Last year I became 40 and I dropped everything that I got used to in the last 15 years for my work. And I’m totally suprised by how easy was it to learn new things and how good is my new workflow.
Clojure
I started with Clojure. After 20+ years of development I totally fed up with programming languages. Especially with OOP languages. No matter what kind of language you used, how you modularized your code, after a certain complexity maintining software became hell, tools were terrible, everything was a drag. My friend said that Clojure is the language for burnt out programmer so I gave it a try.
I started with braveclojure, went through all chapters, then started solving problems on 4clojure. The first week was terrible, I needed hours just to write down the correct 6 words for a function, but with googling and reading the docs I started picking up the language.
The lack of syntax was amazing from the start, learning the numerous core functions was less pleasant but after knowing them Clojure became a super expressive language, very complex algorithms can be accomplished with just a few words.
To master clojure, I started porting my game “Brawl” to clojurescript/webGL. It was exciting to port a real-time absolutely stateful porgram to a absolutely stateless language. After it seemed possible and a working demo I wanted to learn full stack web development with clojure/clojurescript and I needed only four weeks to create this homepage thanks to clojure.
Emacs
The second thing was Emacs. I started learning Emacs along with Clojure to make the learning steep harder :) The majority of Clojure developers use Emacs so I wanted to learn it. It was hard at first but at the end you need only 8-10 key combos to learn and that’s all, it’s not that hard. You have to pick the plugins/packages that works well with you and setup Emacs once and than development is a breeze with it. Its Clojure plugin, Cider works really well, parentheses highlighting is the other thing you need for Clojure development. I really like emacs, especially because it can be run in a terminal.
Lenovo
After 15 years of Apple I really fed up with the quality problems of Apple hardware and software. The keyboards, the insane price, the more and more annoying security features of MacOS, the never changing design language of MacOS, etc made me move to Linux, and for that I had to buy a PC laptop.
So I wanted a laptop that has :
And I picked up a Lenovo Legion Y540 for 880 USD. The display density and the touchpad is not Apple quality but all the other things are top notch, for third the price of a similarly equipped MacBook. I’m amazed. The battery life is okay ( 4-5 hours ), Doom 2016 is running with 60 fps on Linux with Vulkan, development on its keyboard is a breeze, memory is enough for Clojure development, I’m super satisfied with it.
Linux
In the past 30 years I tried to avoid Linux beacuse it was a pain in the ass every time I had to touch it. I really hoped that by 2019 it reached a state where it’s much simpler to setup, maintain, use for everyday work, maybe it’s even the year of Desktop Linux already! :)
Well, it’s still not the year of Desktop Linux but it became a pleasant experience to develop on. After trying Enlightenment OS and then Ubuntu GNOME and then KDE Manjaro it turned out that the big Linux desktop environments are still buggy as hell, super annoying glitches happen every time so I decided to try a tiling window manager and it was also a life changing event, my dev process sped up big time.
Linux doesn’t have quality Desktop apps but it has everything else, the standard repo and Arch Linux’s AUR repo contains almost everything. For desktop app replacement I use google services in Chrome, Photos, Music, Drive, Docs, Sheets are just pinned Chrome windows like on Chrome OS. Electron apps work, it has Spotify, Mailsrping, Simplenote, Windows emulation works fine, Doom 2016 runs with 60FPS with Vulkan so I’m quite satisfied.
For productivity you have to learn to live with GIMP, LibreOffice, KDENLive but it’s okay, you just have to accept that they are free and open source softwares developed by hundreds of volunteers in their free time, they get the work done, and if you don’t like something in them you can always fix a bug in them :)
Tiling Window Managers
Dragging/Resizing/Minimizing windows was a drag even on MacOS all the time but I didn’t know better. But on Linux I had to move to tiling window managers because of their simplicity. It’s a super experience, you only have to memorize 4-5 key bindings to have full control over your desktop and you hardly need to touch your mouse/touchpad again. I started with i3 then I moved to Sway because of the newer graphical stack.
The drawback is that you have to configure your hardware controls, you have to select your audio volume handler, display brightness handler, wifi/bluetooth handlers, lock/shutdown screen handlers but that’s the beauty of linux, and it’s not that hard, there are dozens of dotfiles on github you can use.
Web Development
As I mentioned earlier I avoided web development for 10 years. And now I’m doing it with Clojure. Who would have thought it a year ago? I’m not :) Cool!
Android
For 15 years I was in the Apple ecosystem so I used iPhones. But now that I changed to Linux/Lenovo I had to drop my 5 year old iPhone 6S. I bought a Xiaomi Mi9T for around 300 USD and I’m amazed how far the Chinese Industry developed, it has an absolutely edge-to-edge screen, display-fingerprint sensor, 4000mAh battery, glass back, super build quality for just 300 bucks. Android is okay, it reached a quite usable state, it’s still inferior in software quality compared to iOS but its usable. For this money I’m satisfied.