Init 1

Overture

posted on 2018 Dec 02

I’ve never been a great planner for my life, I can safely say that the only planning which I usually make is strictly bound to the life cycle of software, well, sometimes not even there to be fair, but now I’m trying to face this issue or at least marginally improve in this aspect.

Meaningful self improvement is hard

As the nerdy dude I am, I like to spend lot of time learning and experimenting new things, mostly on CS field and programming. My growing interest during last months (or the year probably for what that matters) is the exploration of functional programming languages and different approaches to problem solving. Being mostly a Python guy, specially for my day to day job, I’d like to try something completely different while at the same time maintaining my modest low-level coding skills as sharp as possible on my pet projects; you know, just not to lay down too much, I’m a developer after all, I’m already lazy by definition, no need to add more laziness in my laziness. So I often happen to read a lot of documentation, tutorials etc; mostly regarding FP, like the famous Learn You A Haskell For Great Good, every time with more and more willing to go a little deeper down the Rabbit’s hole. During my last year of university I had a chance to learn a bit of Scala, but I have to admit that I’m not a huge fan of JVM languages (Java the least of them all, though I’ve found Scala being a neat alternative, much more expressive and also harder); I remember that as a pleasant experience anyway. As of now, I have a plethora of things to (try to) accomplish and so little time to invest. To add some spicy, I am that type of guy which cannot suffer the harsh and tedious process of learning a new language or framework “the right way” (e.g. the most boring one) just by reading and doing didactic and case of use related practice exercises; I need a real problem to solve, a project that give me some momentum to follow my path.

Submerged

This makes the learning process a sort of hellish fun, so much pleasing from a side with the side effect that my personal portfolio constantly grow up, but the other side of the medal is that it is often somewhat painful to find the right drive and steadiness on pet projects each time, leading to a great amount of dead code and half-finished side-projects that, fortunately, from time to time I pick again and blow some dust away from them. As a matter of fact, I’m currently developing a tiny MQTT broker in C (low-level as well, remember?) to learn how IoT communication works under the hood; I have to say, It is a great exercise which spans a lot of interesting fields, from TCP communication, protocol design and low level structures packing, reminding how it is a luxury to have automatic garbage collection, ready to use data structures and so on during my day to day activities.

In parallel, I’m aiming to refine my skills by getting my hands dirty with some FP through some not-so-mainstream things:

  • a LISP-family language
  • a distributed oriented one and ..
  • ..probably the purest of them all

The last of these 3 choices is clearly Haskell, which I already started to play with some time ago, the other two will probably be Elixir for distributed applications and…Racket for his renowned hygienic macro system and an awesome standard library, which makes it almost the Python of the LISP dialects (Yeah, I know, Python in essence could be seen as a stripped down LISP, but you had my point). So, I’ll need some ideas for new projects to learn these languages, I’m not expecting this path to be easy, but hey! There’s no rush, I can always insert another coin and retry one more time later. I’ll need lot of motivation.

Categories:  #languages