Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@arturaz
Last active January 23, 2019 06:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arturaz/9c4e042cc82d391e1f51c1afa5654933 to your computer and use it in GitHub Desktop.
Save arturaz/9c4e042cc82d391e1f51c1afa5654933 to your computer and use it in GitHub Desktop.
### Why
* programmers are religious people
* people seem hostile to new ideas
* "it worked for me before, why change?"
- HomeToGo JS vs TS
- JUG vs FP
### What
Languages that I:
* used extensively recently: C#, Scala
* used extensively before: Ruby (on Rails), PHP, ActionScript, CofeeScript, JavaScript, Bash, Python, Java
* played with or had some exposure: Perl, Idris, Haskell, F#, Go, TypeScript, Haxe, C, C++, AutoLisp, Pascal
* am interested to explore: Idris, Agda, Haskell, Rust
### Why #2
* Worked on different projects. New project allows a fresh start.
* Been either a freelancer or self-employed - freedom of choice.
* Started with PHP.
* Perl for GTKchat.
* Python for firewall.
* PHP to Ruby transition.
* Ruby to Scala transition.
### Tower of programming
Project1 / Project2 / ...
----------------------------------------------------------
Unity3D / Spring / Play / Laravel / ...
----------------------------------------------------------
C# / Java / Scala / Haskell / Idris / Prolog / PHP / ...
----------------------------------------------------------
Imperative / Functional / Logic
### Languages have different ideas
#### Good
Perl: objects are not magic, they are just blessed hashmaps
Python: significant whitespace, explicitness
C#: generators
Ruby: metaprogramming, convention over configuration (Rails)
Scala: typeclasses, implicit resolution, derivation, singleton types, higher kinded types, typelevel programming, immutablity, functional programming
Idris: proof values, dependent typing
F#: currying, explicit type dependency management
Go: CSP
Lisp: everything is a list. Even your code. metaprogramming.
Bash: you can only do as much without data structures
TypeScript: modelling a static typing system on top of all the crazy shit JS has
#### Bad
Java, C#: boilerplate heaven
JavaScript, PHP: horrors of weak typing
### Merits of knowing a lot of languages
* Things seem to look the same if you squint.
* Picking up a new language consists of: ideas, syntax, tools. Ideas are the hard part.
### Disadvantages of knowing a lot of languages
* You realize that JSON parsers using reflection are a terrible idea.
### Knowledge crosses language boundaries
Scala -> C#: typeclasses, higher kinded types, immutablity, functional programming
C# -> Scala: generators (there is a compiler plugin for that)
Idris -> C#: proof values
F# -> C#: currying
### Discussion time!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment