77
7 Topics Concerning Languages & Architecture Stefan Tilkov | @stilkov | JUG KA 2011 1 Wednesday, July 27, 11

7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

7 TopicsConcerning

Languages & Architecture

Stefan Tilkov | @stilkov | JUG KA 2011

1Wednesday, July 27, 11

Page 2: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Stefan [email protected]

@stilkov

http://www.innoq.com

2Wednesday, July 27, 11

Page 3: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

http://rest-http.info

3Wednesday, July 27, 11

Page 4: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

1. Language Equality

4Wednesday, July 27, 11

Page 5: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Languages are Not Equal

5Wednesday, July 27, 11

Page 6: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Machine Code Assembler

C C++ Java

ScalaPython

Ruby Scheme/Lisp

Haskell

6Wednesday, July 27, 11

Page 7: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Sapir-Whorf

7Wednesday, July 27, 11

Page 8: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

“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.

8

8Wednesday, July 27, 11

Page 9: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

“Blub”

9Wednesday, July 27, 11

Page 10: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

“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.

10

10Wednesday, July 27, 11

Page 11: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Verbosity

Type System

Ceremony

Speed

Learning Curve

Paradigm

Stability

11Wednesday, July 27, 11

Page 12: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

“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.

12

12Wednesday, July 27, 11

Page 13: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For want of a nail the shoe was lost.For want of a shoe the horse was lost.For want of a horse the rider was lost.For want of a rider the battle was lost.

For want of a battle the kingdom was lost.And all for the want of a horseshoe nail.

13Wednesday, July 27, 11

Page 14: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a nail, throw new HorseshoeNailNotFoundException("no nails!");

14Wednesday, July 27, 11

Page 15: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a horseshoe, EquestrianDoctor.getLocalInstance().getHorseDispatcher().shoot();

15Wednesday, July 27, 11

Page 16: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a horse, RidersGuild.getRiderNotificationSubscriberList().getBroadcaster().run( new BroadcastMessage(StableFactory.getNullHorseInstance()));

16Wednesday, July 27, 11

Page 17: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a rider, MessageDeliverySubsystem.getLogger().logDeliveryFailure( MessageFactory.getAbstractMessageInstance( new MessageMedium(MessageType.VERBAL), new MessageTransport(MessageTransportType.MOUNTED_RIDER), new MessageSessionDestination(BattleManager.getRoutingInfo( BattleLocation.NEAREST))), MessageFailureReasonCode.UNKNOWN_RIDER_FAILURE);

17Wednesday, July 27, 11

Page 18: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a message, ((BattleNotificationSender) BattleResourceMediator.getMediatorInstance().getResource( BattleParticipant.PROXY_PARTICIPANT, BattleResource.BATTLE_NOTIFICATION_SENDER)).sendNotification( ((BattleNotificationBuilder) (BattleResourceMediator.getMediatorInstance().getResource( BattleOrganizer.getBattleParticipant(Battle.Participant.GOOD_GUYS), BattleResource.BATTLE_NOTIFICATION_BUILDER))).buildNotification( BattleOrganizer.getBattleState(BattleResult.BATTLE_LOST), BattleManager.getChainOfCommand().getCommandChainNotifier()));

18Wednesday, July 27, 11

Page 19: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a battle, try { synchronized(BattleInformationRouterLock.getLockInstance()) { BattleInformationRouterLock.getLockInstance().wait(); } } catch (InterruptedException ix) { if (BattleSessionManager.getBattleStatus( BattleResource.getLocalizedBattleResource(Locale.getDefault()), BattleContext.createContext( Kingdom.getMasterBattleCoordinatorInstance( new TweedleBeetlePuddlePaddleBattle()).populate( Region.getProvince(Armpit.LEFTMOST)))) == BattleStatus.LOST) { if (LOGGER.isLoggable(Level.TOTALLY_SCREWED)) { LOGGER.logScrewage(BattleLogger.createBattleLogMessage( BattleStatusFormatter.format(BattleStatus.LOST_WAR, Locale.getDefault()))); } } }

19Wednesday, July 27, 11

Page 20: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

For the lack of a war, new ServiceExecutionJoinPoint( DistributedQueryAnalyzer.forwardQueryResult( NotificationSchemaManager.getAbstractSchemaMapper( new PublishSubscribeNotificationSchema()).getSchemaProxy(). executePublishSubscribeQueryPlan( NotificationSchema.ALERT, new NotificationSchemaPriority(SchemaPriority.MAX_PRIORITY), new PublisherMessage(MessageFactory.getAbstractMessage( MessageType.WRITTEN, new MessageTransport(MessageTransportType.WOUNDED_SURVIVOR), new MessageSessionDestination( DestinationManager.getNullDestinationForQueryPlan()))), DistributedWarMachine.getPartyRoleManager().getRegisteredParties( PartyRoleManager.PARTY_KING || PartyRoleManager.PARTY_GENERAL || PartyRoleManager.PARTY_AMBASSADOR)).getQueryResult(), PriorityMessageDispatcher.getPriorityDispatchInstance())). waitForService();

All for the lack of a horseshoe nail.

20Wednesday, July 27, 11

Page 21: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

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 ...

21Wednesday, July 27, 11

Page 22: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

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

… vs. Ruby

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

22Wednesday, July 27, 11

Page 23: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

(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

23Wednesday, July 27, 11

Page 24: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

“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.

24

24Wednesday, July 27, 11

Page 25: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Yet ...

25Wednesday, July 27, 11

Page 26: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

... languages don’t matter

26Wednesday, July 27, 11

Page 27: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

© 2011 innoQ Deutschland GmbH

HTTP

URIs

HTML

CSS

Clients

Web Servers

Caching Proxies

CDN

Atom/RSS

Databases

27Wednesday, July 27, 11

Page 28: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

1. Language Equality

Languages di!er drastically

28Wednesday, July 27, 11

Page 29: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

2. Ecosystems

29Wednesday, July 27, 11

Page 30: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Development Environment

30Wednesday, July 27, 11

Page 31: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Libraries

31Wednesday, July 27, 11

Page 32: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Runtime Environment

32Wednesday, July 27, 11

Page 33: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Community

33Wednesday, July 27, 11

Page 34: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Culture

34Wednesday, July 27, 11

Page 35: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

2. Ecosystems

No language is an island

35Wednesday, July 27, 11

Page 36: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

3. Multi-language Platforms

36Wednesday, July 27, 11

Page 37: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

JVM.NET

37Wednesday, July 27, 11

Page 38: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

JVM.NETC#VBF#IronPythonIronRuby

DLR

JavaJRubyScalaGroovyClojure

JSR 292/DaVinci

38Wednesday, July 27, 11

Page 39: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

DevelopmentEnvironment

Libraries

RuntimeEnvironment

Culture

Community

39Wednesday, July 27, 11

Page 40: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

DevelopmentEnvironment

Libraries

RuntimeEnvironment

Culture

Community

40Wednesday, July 27, 11

Page 41: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

3. Multi-language platforms

MLVMs enable diversity

41Wednesday, July 27, 11

Page 42: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

4. Polyglot Programming

42Wednesday, July 27, 11

Page 43: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Question: What language do you use?

43Wednesday, July 27, 11

Page 44: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Question: What languages do you use?

44Wednesday, July 27, 11

Page 45: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

SQL

JavaScript

XML BPEL

AntHTML

CSS

shcmd

EL

OGNL

XSLT

45Wednesday, July 27, 11

Page 46: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

4. Polyglot programming

Nobody uses a single language

46Wednesday, July 27, 11

Page 47: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

5. Stability Layers

47Wednesday, July 27, 11

Page 48: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

See http://ola-bini.blogspot.com/2008/01/language-explorations.html

stable

dynamic

domain

48Wednesday, July 27, 11

Page 49: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Engine

Core Domain

Application

“hard”

“so"”

49Wednesday, July 27, 11

Page 50: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

“Copyright 2008 innoQ Deutschland GmbH

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

50

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

of half of CommonLisp.

50Wednesday, July 27, 11

Page 51: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

5. Stability layers

So" and hard spots suggest di!erent languages

51Wednesday, July 27, 11

Page 52: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

6. Distributed Systems

52Wednesday, July 27, 11

Page 53: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Application Architecture

vs.

Integration Architecture

53Wednesday, July 27, 11

Page 54: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

54Wednesday, July 27, 11

Page 55: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

55Wednesday, July 27, 11

Page 56: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

56Wednesday, July 27, 11

Page 57: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

57Wednesday, July 27, 11

Page 58: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

58Wednesday, July 27, 11

Page 59: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

59Wednesday, July 27, 11

Page 60: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

60Wednesday, July 27, 11

Page 61: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

61Wednesday, July 27, 11

Page 62: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

62Wednesday, July 27, 11

Page 63: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

63Wednesday, July 27, 11

Page 64: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

JRuby C#

ScalaGroovy

JavaClojure

64Wednesday, July 27, 11

Page 65: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

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

65Wednesday, July 27, 11

Page 66: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

6. Distributed Systems

Languages must not influence distribution

architecture

66Wednesday, July 27, 11

Page 67: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

7. People

67Wednesday, July 27, 11

Page 68: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Skills

68Wednesday, July 27, 11

Page 69: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Community

69Wednesday, July 27, 11

Page 70: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Prejudice

70Wednesday, July 27, 11

Page 71: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Dependencies

71Wednesday, July 27, 11

Page 72: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Frustration

72Wednesday, July 27, 11

Page 73: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Motivation

73Wednesday, July 27, 11

Page 74: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Education

74Wednesday, July 27, 11

Page 75: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

7. People

As usual, people matter most

75Wednesday, July 27, 11

Page 76: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

Summary1. 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. Languages must not influence distribution architecture

7. As usual, people matter most

76Wednesday, July 27, 11

Page 77: 7 Topics Concerning Languages & Architecturejug-karlsruhe.de/assets/slides/2011-07-20-Languages... · 2020-01-25 · Machine Code Assembler C C++ Java Scala Python Ruby Scheme/Lisp

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

© 2011 innoQ Deutschland GmbH

We will take care of it - personally.

77Wednesday, July 27, 11