Do I have to learn Functional Programming to get a decent developer job?
Recently I noticed the functional programming is attracting more developers I know and most of them would like to work for big/giant development companies like Google and Facebook, do I have to learn a functional programming language or frameworks to get more decent development job?
24 comments
[ 2.6 ms ] story [ 66.8 ms ] threadI know the syntax for like 5+ languages but I've never made anything beyond simple command-line programs.
Both the book (https://mitpress.mit.edu/sites/default/files/sicp/index.html) and a series of video lectures based on it are available online (https://ocw.mit.edu/courses/electrical-engineering-and-compu...)
Knowing functional will open some doors, in terms of careers, and also some doors in your mind. Either set of doors may be helpful to have opened, but neither is required to have a long and profitable career in software.
But I'd argue it will make you a more skilled developer.
When people discuss "functional programming" they're typically discussing high-level, idiomatic functional interfaces like map-filter-reduce. Though without TCO implementing those interfaces often requires some internal ugliness, and without first-class functions and lexical closures they won't compose as well.
TL;DR: Sprinkle the identifiers "map", "filter", and "reduce" in your code and it'll magically become functional-oriented as far as most people are concerned. But if you really want to begin to think in a functional mindset, rewrite your program structure to use recursion instead of iteration. When you do that for non-trivial code you'll naturally discover and appreciate all the other functional-oriented approaches, like first-class functions, closures, currying, etc, even without being told the formal names of those concepts; and increasingly use functional- rather OOP-based data encapsulation, which in turn makes it more obvious how and why to minimize data mutation in favor of pure functions. FWIW, JavaScript supports many of these concepts quite well, but because of the TCO limitation they're applied rather inconsistently and not always in the best way.
The world will run on object oriented and imperative programming for the foreseeable future. Functional programming is more or less a novelty professionally, although a highly visible one in certain circles.
What a surprise. I really like it. It's really sooo different from any other language I've tried (C, C++, Python, JS, SmallTalk, Lisp, bash, AWK etc etc) - Most programming consists of telling the computer how to go about doing something. None of that in Prolog. You 'just' describe how the solution will look.[0] And secondly, it's unexpectedly Functional - it's impossible to change variable values, or iterate.[1] Recursion only. 'Data' is same form as 'program', the program can change the data/program while running etc. And even Lispier than Lisp in some ways.
I think I'll be regularly using it in an AWK-like way - and already have been - quickly writing programs of a couple of dozen lines or less to do things that would take longer to do otherwise. And there's something cute about it that AWK has too, maybe it's that it does well in its own unique world. Just starting that book on how Erlang was 'grown' using Prolog...
I don't know why I wrote this. Prolog was just surprisingly FPish, and if I hadn't learnt about that stuff, I wouldn't have recognized it, or appreciated it.
[0] Really, you need a new vocabulary to describe what it's doing. [1] Ok, not impossible.
What book is that?
Use of Prolog for developing a new programming language (1992) by Armstrong/Virding/Williams.
http://192.121.151.106/publications/prac_appl_prolog.pdf
http://erlang.org/download/armstrong_thesis_2003.pdf
Also, in the 17 page paper, he firstly makes a meta-interpreter, which I've since noticed is pretty standard in Prolog books, e.g. The Art of Prolog, The Craft of Prolog.