Last active
January 23, 2019 06:18
-
-
Save arturaz/9c4e042cc82d391e1f51c1afa5654933 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### 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