Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday,...

91
Thoughts on Polyglotism Stefan Tilkov | @stilkov | [email protected] Tuesday, October 2, 12

Transcript of Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday,...

Page 1: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Thoughts on PolyglotismStefan Tilkov | @stilkov | [email protected]

Tuesday, October 2, 12

Page 2: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

7 Theses

Tuesday, October 2, 12

Page 3: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

1. Language Equality

Tuesday, October 2, 12

Page 4: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Languages are Not Equal

Tuesday, October 2, 12

Page 5: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Machine Code Assembler

C C++ Java

ScalaPython

Ruby Scheme/Lisp

Haskell

Tuesday, October 2, 12

Page 6: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Sapir-Whorf

Tuesday, October 2, 12

Page 7: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

“Copyright 2008 innoQ Deutschland GmbH

Whorf, Benjamin (John Carroll, Editor) (1956). Language, Thought, and Reality: Selected Writings of Benjamin Lee Whorf. MIT Press.

“Sapir-Whorf Hypothesis” (note: now disputed); see also http://en.wikipedia.org/wiki/Sapir-Whorf_hypothesis

We cut nature up, organize it into concepts, and ascribe significances as we do, largely because we are parties to an agreement to organize it in this way — an agreement that holds throughout our speech community and is codified in the patterns of our language.

Tuesday, October 2, 12

Page 8: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

“Blub”

Tuesday, October 2, 12

Page 9: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Blub

Features

Y

X(Hopelessly limited)

(Full of unnecessary complexity)

Tuesday, October 2, 12

Page 10: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

“Copyright 2008 innoQ Deutschland GmbH

Paul Graham, “Beating the Averages” http://www.paulgraham.com/avg.html

Blub falls right in the middle of the abstractness continuum... As long as our hypothetical Blub programmer is looking down the power continuum, he knows he's looking down. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to.

But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up. What he sees are merely weird languages... Blub is good enough for him, because he thinks in Blub.

Tuesday, October 2, 12

Page 11: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Verbosity

Type System

Ceremony

Speed

Learning Curve

Paradigm

Stability

Di!erences

Tuesday, October 2, 12

Page 12: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

“Copyright 2008 innoQ Deutschland GmbH

Steve Yeggehttp://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-anouns.html

To be quite honest, most Javalanders are blissfully unaware of the existence of the other side of the world.

Tuesday, October 2, 12

Page 13: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

package com.example; import java.util.List; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; public class SortList { public static void main(String[] args) { List<String> list = Arrays.asList("Shamelessly", "Stolen", "From", "Ola", "Bini"); Collections.sort(list, new Comparator<String>() { public int compare(String first, String second) { return first.length() - second.length(); } }); String sep = ""; for (String name : list) { System.out.print(sep); System.out.print(name); sep = ", "; } System.out.println(); } }

A Little Bit of Java ...

Tuesday, October 2, 12

Page 14: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

list = ["Shamelessly", "Stolen", "From", "Ola", "Bini"]puts list.sort_by(&:length).join(', ')

… vs. Ruby

http://youtube.com/watch?v=PfnP-8XbJao

Tuesday, October 2, 12

Page 15: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

class Project < ActiveRecord::Base belongs_to :portfolio has_one :project_manager has_many :milestones has_and_belongs_to_many :categoriesend

Tuesday, October 2, 12

Page 16: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

JavaScript/Node.jsvar sys = require("sys"), http = require("http"), url = require("url"), path = require("path"), fs = require("fs");

var dir = process.argv[2] || './public';var port = parseFloat(process.argv[3]) || 8080;sys.log('Serving files from ' + dir + ', port is ' + port);

http.createServer(function(request, response) { var uri = url.parse(request.url).pathname; var filename = path.join(process.cwd(), dir, uri); path.exists(filename, function(exists) { if(exists) { fs.readFile(filename, function(err, data) { response.writeHead(200); response.end(data); }); } else { sys.log('File not found: ' + filename); response.writeHead(404); response.end(); } });}).listen(port);

Tuesday, October 2, 12

Page 17: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

(ns sample.grep  "A simple complete Clojure program."  (:use [clojure.contrib.io :only [read-lines]])  (:gen-class))

(defn numbered-lines [lines]   (map vector (iterate inc 0) lines))

(defn grep-in-file [pattern file]  {file (filter #(re-find pattern (second %)) (numbered-lines (read-lines file)))})

(defn grep-in-files [pattern files]  (apply merge (map #(grep-in-file pattern %) files)))

(defn print-matches [matches]  (doseq [[fname submatches] matches, [line-no, match] submatches]    (println (str fname ":" line-no ":" match))))            (defn -main [pattern & files]  (if (or (nil? pattern) (empty? files))    (println "Usage: grep <pattern> <file...>")    (do       (println (format "grep started with pattern %s and file(s) %s" pattern (apply str (interpose ", " files))))      (print-matches (grep-in-files (re-pattern pattern) files))      (println "Done."))))

Clojure

Tuesday, October 2, 12

Page 18: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

There’s more to lifethan objects

Tuesday, October 2, 12

Page 19: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Data structures vs. objectspublic class Point {    private final double x;    private final double y;

    public Point(double x, double y) {        this.x = x;        this.y = y;    }}

Point p1 = new Point(3, 4);

(def p1 [3 4])

Tuesday, October 2, 12

Page 20: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Data structures vs. objects(def p1 [3 4])

Immutable

Reusable

Compatible

Tuesday, October 2, 12

Page 21: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Data structures vs. objectsimport static java.lang.Math.sqrt;

public class Point {    private final double x;    private final double y;

    public Point(double x, double y) {        this.x = x;        this.y = y;    }

    public double distanceTo(Point other) {        double c1 = other.x - this.x;        double c2 = other.y - this.y;        return sqrt(c1 * c1 + c2 * c2);    }}

Tuesday, October 2, 12

Page 22: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Data structures vs. objects(import-static java.lang.Math sqrt)

(defn distance  [[x1 y1] [x2 y2]]  (let [c1 (- x2 x1)        c2 (- y2 y1)]    (sqrt (+ (* c1 c1) (* c2 c2)))))

Tuesday, October 2, 12

Page 23: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Data structures vs. objects(defn rand-seq [limit]  (repeatedly #(rand-int limit)))

(take 10 (partition 2 (rand-seq 10)))

in!nite randoms

pairs of random ints

10 random points

;((3 6) (6 1) (8 5) (0 7) (3 8) (0 6) (1 6) (7 6) (0 1) (8 9))

Tuesday, October 2, 12

Page 24: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Data structures vs. objects(defn circumference   [vertices]  (reduce + (map distance vertices (drop 1 (cycle vertices)))))

in!nite repetition

seq without !rstall

;((3 6) (6 1) (8 5) (0 7) (3 8) (0 6) (1 6) (7 6) (0 1) (8 9));((6 1) (8 5) (0 7) (3 8) (0 6) (1 6) (7 6) (0 1) (8 9) (3 6))

;58.06411369758525

...

Tuesday, October 2, 12

Page 25: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

assocassoc-inbutlastconcatconjconscountcycledifferencedissocdistinctdistinct?drop-lastemptyempty?every?filterfirstflatten

group-byinterleaveinterposeintersectionintojoinlazy-catmapcatmergemerge-withnot-any?not-empty?not-every?nthpartitionpartition-allpartition-bypeekpop

popyprojectremovereplacerestrseqselectselect-keysshufflesomesplit-atsplit-withsubvectaketake-lasttake-nthtake-whileunionupdate-in

Tuesday, October 2, 12

Page 26: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Maps(def projects #{{:id "1",                 :kind :time-material,                 :description "Consulting for BigCo",                 :budget 25000,                 :team [:joe, :chuck, :james]}                {:id "2",                 :kind :fixed-price,                 :description "Development for Startup",                 :budget 100000,                 :team [:john, :chuck, :james, :bill]}                {:id "3",                 :kind :fixed-price,                 :description "Clojure Training",                 :budget 3000,                 :team [:joe, :john]}})

Tuesday, October 2, 12

Page 27: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Map access(defn all-members  [projects]  (reduce conj #{} (flatten (map :team projects))))

seq of vectors

seq of members with duplicates

set of all team members

;#{:chuck :joe :james :john :bill}(all-members projects)

Tuesday, October 2, 12

Page 28: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Map access & coupling(defn all-members  [projects]  (reduce conj #{} (flatten (map :team projects))))

#{{:id "2",  :kind :fixed-price,  :description "Development for Startup",  :budget 100000,  :team [:john, :chuck, :james, :bill]}}

Tuesday, October 2, 12

Page 29: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

Map access & coupling(defn all-members  [projects]  (reduce conj #{} (flatten (map :team projects))))

#{{:id "2",  :kind :fixed-price,  :description "Development for Startup",  :budget 100000,  :team [:john, :chuck, :james, :bill]}}

:team

:team

Tuesday, October 2, 12

Page 30: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

© 2012 innoQ Deutschland GmbH

[{:kind "fixed-price",  :team ["john" "chuck" "james" "bill"],  :budget 100000,  :id "2",  :description "Development for Startup"}{:kind "fixed-price",  :team ["joe" "john"],  :budget 3000,  :id "3",  :description "Clojure Training"}{:kind "time-material",  :team ["joe" "chuck" "james"],  :budget 25000,  :id "1",  :description "Consulting for BigCo"}]

[{"kind":"fixed-price",  "team":["john", "chuck", "james", "bill"],  "budget":100000,  "id":"2",  "description":"Development for Startup"},{"kind":"fixed-price",  "team":["joe", "john"],  "budget":3000,  "id":"3",  "description":"Clojure Training"},{"kind":"time-material",  "team":["joe", "chuck", "james"],  "budget":25000,  "id":"1",  "description":"Consulting for BigCo"}]

(json-str)

(read-json)

Tuesday, October 2, 12

Page 31: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Design Patterns are

a Design Smell

Tuesday, October 2, 12

Page 32: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Tuesday, October 2, 12

Page 33: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

“Copyright 2008 innoQ Deutschland GmbH

Mark Dominus, “Design Patterns of 1972”,http://blog.plover.com/2006/09/11/

Patterns are signs of weakness in programming languages.

Tuesday, October 2, 12

Page 34: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Patterns & Dynamic Languages

First-class typesAbstractFactory, Flyweight,

FactoryMethod, State, Proxy, Chain-of-Responsibility

First-class functionsCommand, Strategy,

TemplateMethod, Visitor

Macros Interpreter, Iterator

Method Combination Mediator, Observer

Multimethods Builder, (Visitor)

Modules Facade

http://norvig.com/design-patterns/

Tuesday, October 2, 12

Page 35: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Project Example 1

Case tool model export/import

XMI -> transformation -> Java API

Use of a Java Lisp dialect (SISC)

XML libraries from Java

:-)

Tuesday, October 2, 12

Page 36: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Yet ...

Tuesday, October 2, 12

Page 37: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

... languages don’t matter

Tuesday, October 2, 12

Page 38: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

HTTP

URIs

HTML

CSS

Clients

Web Servers

Caching Proxies

CDN

Atom/RSS

Databases

Tuesday, October 2, 12

Page 39: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

1. Language Equality

Languages di!er drastically

Tuesday, October 2, 12

Page 40: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

2. Ecosystems

Tuesday, October 2, 12

Page 41: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Development Environment

Tuesday, October 2, 12

Page 42: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Libraries

Tuesday, October 2, 12

Page 43: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Runtime Environment

Tuesday, October 2, 12

Page 44: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Community

Tuesday, October 2, 12

Page 45: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Culture

Tuesday, October 2, 12

Page 46: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Project Example 2

Large scale banking application

Java / J2EE

Numerous external DSLs, implemented in Haskell

Exchange of binary data w/ Java

Excel/sed/awk/Haskell/Java pipeline

:-(

Tuesday, October 2, 12

Page 47: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

2. Ecosystems

No language is an island

Tuesday, October 2, 12

Page 48: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

3. Multi-language Platforms

Tuesday, October 2, 12

Page 49: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

JVM.NET

Tuesday, October 2, 12

Page 50: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

JVM.NETC#VBF#IronPythonIronRuby

DLR

JavaJRubyScalaGroovyClojure

Java 7

Tuesday, October 2, 12

Page 51: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

DevelopmentEnvironment

Libraries

RuntimeEnvironment

Culture

Community

Tuesday, October 2, 12

Page 52: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

DevelopmentEnvironment

Libraries

RuntimeEnvironment

Culture

Community

Tuesday, October 2, 12

Page 53: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Project Example 2

Environmental information system

JRuby/Rails

Use of Java graphics libraries

:-)

Tuesday, October 2, 12

Page 54: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

3. Multi-language platforms

MLVMs enable diversity

Tuesday, October 2, 12

Page 55: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

4. Polyglot Programming

Tuesday, October 2, 12

Page 56: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Polyglot Programmingvs.

Polyglot Programmer

Tuesday, October 2, 12

Page 57: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

polyglot (noun): a person who knows and is able to use

several languages

Tuesday, October 2, 12

Page 58: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Question: What language do you use?

Tuesday, October 2, 12

Page 59: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Question: What languages do you use?

Tuesday, October 2, 12

Page 60: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

SQL

JavaScript

XML BPEL

AntHTML

CSS

shcmd

EL

XSLT

Tuesday, October 2, 12

Page 61: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

The right tool …

Tuesday, October 2, 12

Page 62: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

mon·o·cul·ture |ˈmänəәˌkəәlCHəәr|n.1. The cultivation of a single crop on a farm or in a region or country.2. A single, homogeneous culture without diversity or dissension.

Tuesday, October 2, 12

Page 63: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Tuesday, October 2, 12

Page 64: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Runtime

Language

Frameworks& Libraries

Business Logic

Runtime

Language

Frameworks& Libraries

Business Logic

Runtime

Language

Frameworks& Libraries

Business Logic

Tuesday, October 2, 12

Page 65: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Example Criteria

Java Mainstream

ErlangDistributed systems,

24x7

ClojureComplex algorithms,

concurrency

Ruby Productivity

Tuesday, October 2, 12

Page 66: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

4. Polyglot programming

Nobody uses a single language …

… nor should they.

Tuesday, October 2, 12

Page 67: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

5. Stability Layers

Tuesday, October 2, 12

Page 68: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Engine

Core Domain

Application

“hard”

“so"”

Tuesday, October 2, 12

Page 69: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Engine

Core Domain

Application

Java

JVM

Java + XML

“hard”

“so"”

Tuesday, October 2, 12

Page 70: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Engine

Core Domain

Application

Java

JVM

Java/DSL

“hard”

“so"”

Tuesday, October 2, 12

Page 71: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Engine

Core Domain

Application

Java

JVM/JRuby

JRuby

“hard”

“so"”

Tuesday, October 2, 12

Page 72: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

“Copyright 2008 innoQ Deutschland GmbH

Philip Greenspun's Tenth Rule of Programming http://philip.greenspun.com/research/

Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation

of half of CommonLisp.

Tuesday, October 2, 12

Page 73: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

What do you know that the developers of

{Ruby|Clojure|Groovy|…} don’t?

Tuesday, October 2, 12

Page 74: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

5. Stability layers

So" and hard spots suggest di!erent languages

Tuesday, October 2, 12

Page 75: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

6. Distributed Systems

Tuesday, October 2, 12

Page 76: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Tuesday, October 2, 12

Page 77: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

JRuby C#

ScalaGroovy

JavaClojure

Tuesday, October 2, 12

Page 78: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Modularization

Application Size Modularization

1-50 LOC 1 !le

50-500 LOC few !les, many functions

500-1000 LOC library, class hierarchy

1000-2000 LOC framework + application

>2000 LOC more than one application

Tuesday, October 2, 12

Page 79: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Necessary Rules & Guidelines

Cross-system System-internal

Responsibilities Programming languages

UI integration Development tools

Communication protocols Frameworks

Data formats Process/Workflow control

Redundant data Persistence

BI interfaces Design patterns

Logging, Monitoring Coding guidelines

(Deployment, Operations)

Tuesday, October 2, 12

Page 80: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Project Example 4

Web-based secure email service

Java/Spring/JAX-RS RESTful HTTP services

JRuby/Rails frontend

Puppet/Ruby for automation

Numerous components in C

:-)

Tuesday, October 2, 12

Page 81: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

6. Distributed Systems

Modern distribution architecture creates freedom

Tuesday, October 2, 12

Page 82: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

7. People

Tuesday, October 2, 12

Page 83: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Skills

Tuesday, October 2, 12

Page 84: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Community

Tuesday, October 2, 12

Page 85: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Prejudice

Tuesday, October 2, 12

Page 86: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Dependencies

Tuesday, October 2, 12

Page 87: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Frustration

Tuesday, October 2, 12

Page 88: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Motivation

Tuesday, October 2, 12

Page 89: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

7. People

As usual, people matter most

Tuesday, October 2, 12

Page 90: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

1. Languages di!er drastically

2. No language is an island

3. MLVMs enable diversity

4. Nobody uses a single language

5. So" and hard spots suggest di!erent languages

6. Modern distribution architecture creates freedom

7. As usual, people matter most

Tuesday, October 2, 12

Page 91: Thoughts on Polyglotism - INNOQ€¦ · Polyglot Programming vs. Polyglot Programmer Tuesday, October 2, 12. polyglot (noun): a person who knows and is able to use several languages

Q&AStefan Tilkov, @[email protected]://www.innoq.comPhone: +49 170 471 2625

© 2011 innoQ Deutschland GmbH

We will take care of it - personally.

Tuesday, October 2, 12