Back in 2014 Summer, I made my best decision ever of learning programming and found my first programming job, writing Ruby on Rails an Ionic hybrid mobile apps. This year, I had learnt so much things in new area and decided to start this blog to record what I learnt.
First, it has enough features for FP, including first class functions, lambda(anonymous function), closure(lexical closure). Lacking of purity is actually an advantage for beginner learning FP, it’s just too daunting for most people to learn Monad before having ability to log or manipulate DOM.
Second, its very easy to slowly apply FP concept in their daily work, especially with library like Redux, Rambda.
Things I like about Clojure/Clojurescript
- Immutable Data Structure. Although side-effect is still allowed in Clojure, immutable data structure already help us to minimize a lot of bug and reasoning code become much easier.
- Conciseness. With Lisp syntax, its very simple and allow you to write declarative and expressive code in stead of imperative.
- MetaProgramming. Meta-programming in Clojure is mostly done by macro which basically allow you to suppress evaluation and transform your code in compile time (thanks to code as data in clojure). The most useful case is defining your DSL and other use cases are probably better to handle them by high-order functions.
(defmacro unless [test then else] `(if (not ~test) ~then) ~else) (unless false (println "negative") (println "positive") => "negative" ;; this can be achived by simple high order function (def unless [test then] (if (not test) (then) (else)) ) (unless false #(println "negative") #(println "positive")) => "negative" (defmacro deftag [name] (list 'defn name ['& 'inner] (list 'str "<" (str name) ">" '(apply str inner) "</" (str name) ">"))) (deftag html) (deftag body) (deftag h1) (deftag p) (html (body (h1 "Yo")))
Things I like about Elm
- Strongly Static Typed FP is awesome. It saves you so much time for making careless mistake, espespecially during refactoring or adding features.
- Algebraic Data Type. my previoust post related to this
- Mostly Adequate Guide to Functional Programming
Reading Haskell Programming (not yet finish) Learning Elixir, understanding OTP
Coming from a statistics background, I finally spent some time learning Deep Learning and it has been fascinating how powerful it is even though the basic idea of DL is very simple which is just a universal approximation.
- Udacity Deep Learning Nano Degree
- Deeplearning.ai (first two courses)
- Neural Network and Deep Learning (half-way done)
I still can’t believe myself of ignoring bitcoin, ethererum or other blockchain-related tech untill this year April. This technology is accelerating so fast and difficult to keep pace with.
- Bitcoin White Paper
- Cryptocurrency course in Coursera
- Learning how to build Dapps in Ethereum using Truffle
Focus in 2018
- Build Dapps
- Learn more about Kubernetes
- Learn how to deploy deep learning application using Tensorflow, Keras.
- Keep learning FP, Haskell, ReasonML.
- Write more than 12 blogs
- Learn more Elixir, OTP