SlideShare uma empresa Scribd logo
1 de 90
Baixar para ler offline
Polyglot and Poly-paradigm
Programming
for Better Agility
Dean Wampler
dean@deanwampler.com
@deanwampler
1
2
Co-author,
Programming
Scala
programmingscala.com
Polyglot:
many languages
Poly-paradigm:
many modularity
paradigms 3
Today’s
applications:
•Are networked,
•Have graphical
and “service”
interfaces,
flickr.com/photos/jerryjohn 4
Today’s
applications:
•Persist data,
•Must be resilient
and secure,
•Must scale,
flickr.com/photos/jerryjohn 5
Today’s
applications:
•… and must do
all that by Friday.
flickr.com/photos/jerryjohn 6
flickr.com/photos/deanwampler
Mono-
paradigm:
Object-Oriented
Programming:
right for all
problems?
7
twitter.com/photos/watchsmart
Is one language
best for all
domains?
Monolingual
8
Symptoms of
Monocultures
• Why is there so much XML in my Java?
• Why do I have similar persistence code scattered
all over my code base?
• How can I scale my application by a factor of
1000!
• My application is hard to extend!
• I can’t respond quickly when requirements change!
9
switch (elementItem)
{
case "header1:SearchBox" :
{
__doPostBack('header1:goSearch','');
break;
}
case "Text1":
{
window.event.returnValue=false;
window.event.cancel = true;
document.forms[0].elements[n+1].focus();
break;
} ...
thedailywtf.com
Pervasive IT problem:
Too much
code!
10
Solutions
The symptoms reflect
common problems
with similar solutions.
11
I need
extensibility
and agility.
Specific problem #1
flickr.com/photos/arrrika 12
Symptoms
•Features take too long to
implement.
•We can’t react fast enough
to change.
•Uses want to customize the
system themselves.13
Solution
Application
Kernel of Components
User Scripts Built-in Scripts
(C Components) + (Lisp scripts) = Emacs
14
Components + Scripts
=
Applications
see John Ousterhout, IEEE Computer, March ’98
15
Kernel Components
•Statically-typed language:
•C, C++, Java, C#, ...
•Compiled for speed, efficiency.
•Access OS services, 3rd-party
libraries.
•Lower developer productivity.
16
Scripts
•Dynamically-typed language:
•Ruby, Python, JavaScript, Lua, ...
•Interpreted for agility.
•Performance less important.
•Glue together components.
•Raise developer productivity.17
In practice,
the boundaries between
components and scripts
are not so distinct...
18
Ola Bini’s Three Layers
•Domain layer
•Internal and External DSLs.
•Dynamic layer
•e.g., JRuby, application code
•Stable layer
•JVM + generic libraries19
Other Examples
of This Approach
•UNIX/Linux + shells.
•Also find, make, grep, ...
•Have their own DSLs.
•Tektronix Oscilloscopes: C +
Smalltalk.
20
Other Examples...
• Adobe Lightroom: C++ + Lua.
• 40-50% written in Lua.
• NRAOTelescopes: C + Python.
• Google Android: Linux +
libraries (C) + Java.
21
<view-state id="displayResults" view="/searchResults.jsp">
	

 	

 <render-actions>
	

 	

 	

 <bean-action bean="phonebook" method="search">
	

 	

 	

 	

 <method-arguments>
	

 	

 	

 	

 	

 <argument expression="searchCriteria"/>
	

 	

 	

 	

 </method-arguments>
	

 	

 	

 	

 <method-result name="results" scope="flash"/>
	

 	

 	

 </bean-action>
	

 	

 </render-actions>
	

 	

 <transition on="select" to="browseDetails"/>
	

 	

 <transition on="newSearch" to="enterCriteria"/>
	

 </view-state>
</flow>
XML in Java
Why not replace XML
with JavaScript , Groovy
or JRuby??
22
Other Examples:
MultilingualVM’s
• On the JVM:
• JRuby, Groovy, Jython,
Scala.
• Ruby on Rails on JRuby.
23
Other Examples:
MultilingualVM’s
• Dynamic Language Runtime
(DLR).
• Ruby, Python, ... on
the .NET CLR.
24
Benefits
•Optimize performance where it matters.
•Optimize productivity, extensibility and agility
everywhere else.
Application
Kernel of Components
User Scripts Built-in Scripts
25
Disadvantages
Application
Kernel of Components
User Scripts Built-in Scripts
26
•More complexity with 2+ languages
(idioms, tools, ...).
An underutilized
architecture!
Application
Kernel of Components
User Scripts Built-in Scripts
27
Parting Thought...
Cell phone makers are
drowning in C++.
(One reason the IPhone
and Android are interesting.)
28
I don’t
know what
my code is
doing.
flickr.com/photos/dominic99
Specific problem #2
The intent
of our code
is lost
in the noise.30
Symptoms
•Business logic is obscure when I
read the code.
•The system breaks when we
change it.
•Translating requirements to code
is error prone.
31
Solution #1
Write
less code.
Profound statement.
32
Less Code
• Means problems are smaller:
• Maintenance
• Duplication (DRY)
• Testing
• Performance
• etc. 33
How to Write
Less Code
• Root out duplication.
• Use economical designs.
• Functional vs. Object-Oriented?
• Use economical languages.
34
Solution #2
Separate
implementation details
from business logic.
35
Domain Specific
Languages
Make the code read like
“structured” domain prose.
36
Example DSLinternal {
case extension
when 100...200
callee = User.find_by_extension extension
unless callee.busy? then dial callee
else
voicemail extension
when 111 then join 111
when 888
play weather_report('Dallas, Texas')
when 999
play %w(a-connect-charge-of 22
cents-per-minute will-apply)
sleep 2.seconds
play 'just-kidding-not-upset'
check_voicemail
end
}
Adhearsion
=
Ruby DSL
+
Asterisk
+
Jabber/XMPP
+
...
37
DSL Advantages
• Code looks like domain prose:
• Is easier to understand by
everyone,
• Is easier to align with the
requirements,
• Is more succinct.
38
DSL Disadvantages
• DSLs are hard to design, test
and debug.
• Some people are bad API
designers.
39
Brueghel the Elder
A DSL Tower of Babel?
40
Parting Thought...
Perfection is achieved,
not when there is nothing left to add,
but when there is nothing left to remove.
-- Antoine de Saint-Exupery
41
Parting Thought #2...
Everything should be made as simple
as possible, but not simpler.
-- Albert Einstein
42
Corollary:
Entia non sunt multiplicanda
praeter necessitatem.
-- Occam’s Razor
43
Corollary:
All other things being equal,
the simplest solution is the best.
-- Occam’s Razor
44
We have
code duplication
everywhere.
Specific
problem #3
deanwampler
Symptoms
• Persistence logic is embedded
in every “domain” class.
• Error handling and logging is
inconsistent.
Cross-Cutting Concerns.
46
Solution
Aspect-Oriented
Programming
47
Removing Duplication
• In order, use:
• Object or functional decomposition.
• DSLs.
• Aspects.
48
An Example...
49
class BankAccount
	 attr_reader :balance
	 def credit(amount)
@balance += amount
end
	 def debit(amount)
@balance -= amount
end
…
end
Clean Code
50
But, real applications need:
def BankAccount
	 attr_reader :balance
	 def credit(amount)
...
end
	 def debit(amount)
...
end
end
Transactions
Persistence
Security
51
def credit(amount)
raise “…” if unauthorized()
save_balance = @balance
begin
begin_transaction()
@balance += amount
persist_balance(@balance)
…
So credit becomes…
52
…
rescue => error
log(error)
@balance = saved_balance
ensure
end_transaction()
end
end
53
We’re mixing multiple domains,
Transactions
Persistence
Security
with fine-grained intersections.
“Problem Domain”
“tangled” code
“scattered” logic
54
Objects alone don’t
prevent tangling.
55
Aspect-Oriented
Programming:
restore modularity for
cross-cutting concerns.
56
Aspects restore modularity by
encapsulating the intersections.
Transactions
Persistence
Security
Transaction
Aspect
Persistence
Aspect
Security
Aspect
57
If you have used the
Spring Framework,
you have
used aspects.
58
• Ruby
• Aquarium
• Facets
• AspectR
Aspect-Oriented Tools
• Java
• AspectJ
• Spring AOP
• JBoss AOP
shameless plug
59
I would like to write…
Before returning the balance, read the
current value from the database.
Before accessing the BankAccount,
authenticate and authorize the user.
After setting the balance, write the
current value to the database.
60
I would like to write…
Before returning the balance, read the
current value from the database.
Before accessing the BankAccount,
authenticate and authorize the user.
After setting the balance, write the
current value to the database.
61
require ‘aquarium’
class BankAccount
…
after :writing => :balance 
do |context, account, *args|
persist_balance account
end
…
reopen class
add new behavior
Aquarium
aquarium.rubyforge.org62
def credit(amount)
@balance += amount
end
Back to clean code
63
Parting Thought...
Metaprogramming can be used
for some aspect-like functionality.
DSLs can solve some
cross-cutting concerns.
(We’ll come back to that.)
64
Specific problem #4
flickr.com/photos/wolfro54
Our service
must be
available 24x7
and highly
scalable.
Symptoms
• Only one of our developers
really knows how to write
thread-safe code.
• The system freezes every few
weeks or so.
66
Solution
Functional
Programming
67
Functional Programming
•Works like mathematical functions.
Fibonacci Numbers:
F(n) = F(n-1) + F(n-2)
where: F(1) = 1 and F(2) = 1
68
Functional Programming
• Variables are assigned once.
• Functions are side-effect free.
• They don’t alter state.
y = sin(x)
69
Functional Programming
Makes Concurrency
Easier
• Nothing to synchronize.
• Hence no locks, semaphores,
mutexes...
70
Which fits your needs?
Object Oriented
71
Account
deposit(...)
withdraw(...)
CheckingAccount
deposit(...)
withdraw(...)
SavingsAccount
deposit(...)
withdraw(...)
??
deposit(...)
withdraw(...)
list map
fold/
reduce
filter
Which fits your needs?
Functional
72
flickr.com/photos/deanwampler
What if
you’re
doing cloud
computing?
73 deanwampler
Is it object-oriented
or functional?
FP Code is
declarative
rather than
imperative.
F(n) = F(n-1) + F(n-2)
where: F(1) = 1 and F(2) = 1
74
… and so are DSLs.
class Customer < ActiveRecord::Base
has_many :accounts
validates_uniqueness_of :name,
:on => create,
:message => ‘Evil twin!’
end
75
A Few
Functional Languages
76
Erlang
• Ericsson Functional Language.
• For distributed, reliable, soft real-time,
highly concurrent systems.
• Used in telecom switches.
• 9-9’s reliability for AXD301 switch.
77
Erlang
• No mutable variables and side effects.
• All IPC is optimized message passing.
• Very lightweight and fast processes.
• Lighter than most OS threads.
• Let it fail philosophy.
78
Scala
• Hybrid: object and functional.
• Targets the JVM and .NET.
• “Endorsed” by James Gosling at JavaOne.
• Used at Twitter, Linkedin, ...
• Could be the most popular
replacement for Java.
79
Clojure
• Functional, with principled support for
mutability.
• Targets the JVM and .NET.
• Best buzz?
• Too many good ideas to name here...
80
Functional Languages in
Production
• Erlang
• CouchDB
• GitHub
• Jabber/XMPP server ejabberd.
• Amazon’s Simple DB.
81
Functional Languages in
Production
• OCaml
• Jane Street Capital
• Scala
• Twitter
• LinkedIn
82
Parting Thought...
Is a hybrid object-functional language
better than using an object language
with a functional language??
e.g., Scala vs. Java + Erlang??
83
Polyglot and Poly-paradigm
Programming (PPP)
for Better Agility
Recap:
84
Disadvantages of PPP
• N tool chains, languages, libraries,
“ecosystems”, ...
• Impedance mismatch between tools.
• Different meta-models.
• Overhead of calls between languages.
85
Advantages of PPP
• Can use the best tool for a particular job.
• Can minimize the amount of code
required.
• Can keep code closer to the domain.
• Encourages thinking about architectures.
• E.g., decoupling between “components”.
86
Everything old
is new again.
• Functional Programming Comes of Age.
• Dr. Dobbs, 1994
• Scripting: Higher Level Programming for
the 21st Century.
• IEEE Computer, 1998
• In Praise of Scripting: Real Programming
Pragmatism.
• IEEE Computer, 2008
Why go mainstream now?
•Rapidly increasing pace of development,
➔ Scripting (dynamic languages), DSLs.
•Pervasive concurrency (e.g., Multicore CPUs)
➔ Functional programming.
•Cross-cutting concerns
➔ Aspect-oriented programming.
88
Common Themes
• Less code is more.
• Keep the code close to the domain:
DSLs.
• Be declarative rather than imperative.
• Minimize side effects and mutable data.
89
ThankYou!
• dean@deanwampler.com
• Watch for the IEEE Software
special issue, Sept/Oct 2010.
• polyglotprogramming.com
90

Mais conteúdo relacionado

Mais procurados

Day 2 - Intro to Rails
Day 2 - Intro to RailsDay 2 - Intro to Rails
Day 2 - Intro to RailsBarry Jones
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumNgoc Dao
 
Day 7 - Make it Fast
Day 7 - Make it FastDay 7 - Make it Fast
Day 7 - Make it FastBarry Jones
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
Unobtrusive JavaScript with jQuery
Unobtrusive JavaScript with jQueryUnobtrusive JavaScript with jQuery
Unobtrusive JavaScript with jQuerySimon Willison
 
Day 1 - Intro to Ruby
Day 1 - Intro to RubyDay 1 - Intro to Ruby
Day 1 - Intro to RubyBarry Jones
 
How to write a web framework
How to write a web frameworkHow to write a web framework
How to write a web frameworkNgoc Dao
 
Eureka Moment UKLUG
Eureka Moment UKLUGEureka Moment UKLUG
Eureka Moment UKLUGPaul Withers
 
Survive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and TricksSurvive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and TricksJuho Vepsäläinen
 
Day 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application ArchitectureDay 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application ArchitectureBarry Jones
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOsNgoc Dao
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettextNgoc Dao
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
 
Introduction to Java 7 (OSCON 2012)
Introduction to Java 7 (OSCON 2012)Introduction to Java 7 (OSCON 2012)
Introduction to Java 7 (OSCON 2012)Martijn Verburg
 
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)raja kvk
 

Mais procurados (20)

Day 2 - Intro to Rails
Day 2 - Intro to RailsDay 2 - Intro to Rails
Day 2 - Intro to Rails
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
Day 7 - Make it Fast
Day 7 - Make it FastDay 7 - Make it Fast
Day 7 - Make it Fast
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
Unobtrusive JavaScript with jQuery
Unobtrusive JavaScript with jQueryUnobtrusive JavaScript with jQuery
Unobtrusive JavaScript with jQuery
 
Day 1 - Intro to Ruby
Day 1 - Intro to RubyDay 1 - Intro to Ruby
Day 1 - Intro to Ruby
 
Day 8 - jRuby
Day 8 - jRubyDay 8 - jRuby
Day 8 - jRuby
 
How to write a web framework
How to write a web frameworkHow to write a web framework
How to write a web framework
 
Web Development with Smalltalk
Web Development with SmalltalkWeb Development with Smalltalk
Web Development with Smalltalk
 
Eureka Moment UKLUG
Eureka Moment UKLUGEureka Moment UKLUG
Eureka Moment UKLUG
 
Survive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and TricksSurvive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and Tricks
 
Day 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application ArchitectureDay 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application Architecture
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
 
All of Javascript
All of JavascriptAll of Javascript
All of Javascript
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettext
 
Day 4 - Models
Day 4 - ModelsDay 4 - Models
Day 4 - Models
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Introduction to Java 7 (OSCON 2012)
Introduction to Java 7 (OSCON 2012)Introduction to Java 7 (OSCON 2012)
Introduction to Java 7 (OSCON 2012)
 
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
 
Be faster then rabbits
Be faster then rabbitsBe faster then rabbits
Be faster then rabbits
 

Destaque

Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
PoPostgreSQL Web Projects: From Start to FinishStart To Finish
PoPostgreSQL Web Projects: From Start to FinishStart To FinishPoPostgreSQL Web Projects: From Start to FinishStart To Finish
PoPostgreSQL Web Projects: From Start to FinishStart To Finishelliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Postgresql on NFS - J.Battiato, pgday2016
Postgresql on NFS - J.Battiato, pgday2016Postgresql on NFS - J.Battiato, pgday2016
Postgresql on NFS - J.Battiato, pgday2016Jonathan Battiato
 
SIDIII 1º versão artigo betina lopes
SIDIII 1º versão artigo betina lopesSIDIII 1º versão artigo betina lopes
SIDIII 1º versão artigo betina lopesMaria Joao Loureiro
 
HSBC Apresentation Lucas May
HSBC Apresentation Lucas MayHSBC Apresentation Lucas May
HSBC Apresentation Lucas MayLucas May
 
Presentación Team1 tecnología
Presentación Team1 tecnologíaPresentación Team1 tecnología
Presentación Team1 tecnologíaColegio Craighouse
 
Portlets: Let them make your virtual world
Portlets: Let them make your virtual worldPortlets: Let them make your virtual world
Portlets: Let them make your virtual worldelliando dias
 
Contents page plan
Contents page planContents page plan
Contents page planIndiiaa777
 
APSotW - Posicionando o Brasil
APSotW - Posicionando o BrasilAPSotW - Posicionando o Brasil
APSotW - Posicionando o BrasilCarla Puttini
 
Informação na catástrofe
Informação na catástrofeInformação na catástrofe
Informação na catástrofeRuy Ferreira
 
BPM Made Easy - 5. Business Case: Travel Request
BPM Made Easy - 5. Business Case: Travel RequestBPM Made Easy - 5. Business Case: Travel Request
BPM Made Easy - 5. Business Case: Travel RequestFrederico Cruz
 

Destaque (20)

Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
PoPostgreSQL Web Projects: From Start to FinishStart To Finish
PoPostgreSQL Web Projects: From Start to FinishStart To FinishPoPostgreSQL Web Projects: From Start to FinishStart To Finish
PoPostgreSQL Web Projects: From Start to FinishStart To Finish
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Postgresql on NFS - J.Battiato, pgday2016
Postgresql on NFS - J.Battiato, pgday2016Postgresql on NFS - J.Battiato, pgday2016
Postgresql on NFS - J.Battiato, pgday2016
 
Front cover
Front cover Front cover
Front cover
 
Do you speak english
Do you speak english Do you speak english
Do you speak english
 
SIDIII 1º versão artigo betina lopes
SIDIII 1º versão artigo betina lopesSIDIII 1º versão artigo betina lopes
SIDIII 1º versão artigo betina lopes
 
HSBC Apresentation Lucas May
HSBC Apresentation Lucas MayHSBC Apresentation Lucas May
HSBC Apresentation Lucas May
 
Presentación Team1 tecnología
Presentación Team1 tecnologíaPresentación Team1 tecnología
Presentación Team1 tecnología
 
H2.3 webmarketing-apresentation
H2.3 webmarketing-apresentationH2.3 webmarketing-apresentation
H2.3 webmarketing-apresentation
 
Portlets: Let them make your virtual world
Portlets: Let them make your virtual worldPortlets: Let them make your virtual world
Portlets: Let them make your virtual world
 
Contents page plan
Contents page planContents page plan
Contents page plan
 
Workshop II
Workshop IIWorkshop II
Workshop II
 
Felicidade no trabalho - Coach Juliana Emer
Felicidade no trabalho - Coach Juliana EmerFelicidade no trabalho - Coach Juliana Emer
Felicidade no trabalho - Coach Juliana Emer
 
Lojas Leader
Lojas LeaderLojas Leader
Lojas Leader
 
APSotW - Posicionando o Brasil
APSotW - Posicionando o BrasilAPSotW - Posicionando o Brasil
APSotW - Posicionando o Brasil
 
Informação na catástrofe
Informação na catástrofeInformação na catástrofe
Informação na catástrofe
 
Lets talk english convers networking
Lets talk english convers networkingLets talk english convers networking
Lets talk english convers networking
 
BPM Made Easy - 5. Business Case: Travel Request
BPM Made Easy - 5. Business Case: Travel RequestBPM Made Easy - 5. Business Case: Travel Request
BPM Made Easy - 5. Business Case: Travel Request
 

Semelhante a Polyglot and Poly-paradigm Programming for Better Agility

How to really obfuscate your pdf malware
How to really obfuscate   your pdf malwareHow to really obfuscate   your pdf malware
How to really obfuscate your pdf malwarezynamics GmbH
 
How to really obfuscate your pdf malware
How to really obfuscate your pdf malwareHow to really obfuscate your pdf malware
How to really obfuscate your pdf malwarezynamics GmbH
 
Angular 2 overview
Angular 2 overviewAngular 2 overview
Angular 2 overviewJesse Warden
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceESUG
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Martijn Verburg
 
The Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance TuningThe Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance TuningjClarity
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Nilesh Panchal
 
Azure Cloud Patterns
Azure Cloud PatternsAzure Cloud Patterns
Azure Cloud PatternsTamir Dresher
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Fwdays
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...Malin Weiss
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...Speedment, Inc.
 
GR8Conf 2009: Practical Groovy DSL by Guillaume Laforge
GR8Conf 2009: Practical Groovy DSL by Guillaume LaforgeGR8Conf 2009: Practical Groovy DSL by Guillaume Laforge
GR8Conf 2009: Practical Groovy DSL by Guillaume LaforgeGR8Conf
 
Clean code, Feb 2012
Clean code, Feb 2012Clean code, Feb 2012
Clean code, Feb 2012cobyst
 
Игорь Фесенко "Direction of C# as a High-Performance Language"
Игорь Фесенко "Direction of C# as a High-Performance Language"Игорь Фесенко "Direction of C# as a High-Performance Language"
Игорь Фесенко "Direction of C# as a High-Performance Language"Fwdays
 
Ruby codebases in an entropic universe
Ruby codebases in an entropic universeRuby codebases in an entropic universe
Ruby codebases in an entropic universeNiranjan Paranjape
 
ScalaClean at ScalaSphere 2019
ScalaClean at ScalaSphere 2019ScalaClean at ScalaSphere 2019
ScalaClean at ScalaSphere 2019Rory Graves
 
The View - Lotusscript coding best practices
The View - Lotusscript coding best practicesThe View - Lotusscript coding best practices
The View - Lotusscript coding best practicesBill Buchan
 

Semelhante a Polyglot and Poly-paradigm Programming for Better Agility (20)

How to really obfuscate your pdf malware
How to really obfuscate   your pdf malwareHow to really obfuscate   your pdf malware
How to really obfuscate your pdf malware
 
How to really obfuscate your pdf malware
How to really obfuscate your pdf malwareHow to really obfuscate your pdf malware
How to really obfuscate your pdf malware
 
Angular 2 overview
Angular 2 overviewAngular 2 overview
Angular 2 overview
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)
 
The Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance TuningThe Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance Tuning
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
 
Azure Cloud Patterns
Azure Cloud PatternsAzure Cloud Patterns
Azure Cloud Patterns
 
CQRS recepies
CQRS recepiesCQRS recepies
CQRS recepies
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
 
NoSQL and ACID
NoSQL and ACIDNoSQL and ACID
NoSQL and ACID
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
 
GR8Conf 2009: Practical Groovy DSL by Guillaume Laforge
GR8Conf 2009: Practical Groovy DSL by Guillaume LaforgeGR8Conf 2009: Practical Groovy DSL by Guillaume Laforge
GR8Conf 2009: Practical Groovy DSL by Guillaume Laforge
 
Surge2012
Surge2012Surge2012
Surge2012
 
Clean code, Feb 2012
Clean code, Feb 2012Clean code, Feb 2012
Clean code, Feb 2012
 
Игорь Фесенко "Direction of C# as a High-Performance Language"
Игорь Фесенко "Direction of C# as a High-Performance Language"Игорь Фесенко "Direction of C# as a High-Performance Language"
Игорь Фесенко "Direction of C# as a High-Performance Language"
 
Ruby codebases in an entropic universe
Ruby codebases in an entropic universeRuby codebases in an entropic universe
Ruby codebases in an entropic universe
 
ScalaClean at ScalaSphere 2019
ScalaClean at ScalaSphere 2019ScalaClean at ScalaSphere 2019
ScalaClean at ScalaSphere 2019
 
The View - Lotusscript coding best practices
The View - Lotusscript coding best practicesThe View - Lotusscript coding best practices
The View - Lotusscript coding best practices
 

Mais de elliando dias

How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 
From Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn IntroductionFrom Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn Introductionelliando dias
 
FleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in ClojureFleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in Clojureelliando dias
 
Clojure and The Robot Apocalypse
Clojure and The Robot ApocalypseClojure and The Robot Apocalypse
Clojure and The Robot Apocalypseelliando dias
 
Clojure - A new Lisp
Clojure - A new LispClojure - A new Lisp
Clojure - A new Lispelliando dias
 
Clojure - An Introduction for Lisp Programmers
Clojure - An Introduction for Lisp ProgrammersClojure - An Introduction for Lisp Programmers
Clojure - An Introduction for Lisp Programmerselliando dias
 
Clojure - An Introduction for Java Programmers
Clojure - An Introduction for Java ProgrammersClojure - An Introduction for Java Programmers
Clojure - An Introduction for Java Programmerselliando dias
 
Clojure and Modularity
Clojure and ModularityClojure and Modularity
Clojure and Modularityelliando dias
 
Clojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVMClojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVMelliando dias
 

Mais de elliando dias (20)

How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 
From Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn IntroductionFrom Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn Introduction
 
FleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in ClojureFleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in Clojure
 
Clojure and The Robot Apocalypse
Clojure and The Robot ApocalypseClojure and The Robot Apocalypse
Clojure and The Robot Apocalypse
 
Clojure - A new Lisp
Clojure - A new LispClojure - A new Lisp
Clojure - A new Lisp
 
Clojure - An Introduction for Lisp Programmers
Clojure - An Introduction for Lisp ProgrammersClojure - An Introduction for Lisp Programmers
Clojure - An Introduction for Lisp Programmers
 
Clojure - An Introduction for Java Programmers
Clojure - An Introduction for Java ProgrammersClojure - An Introduction for Java Programmers
Clojure - An Introduction for Java Programmers
 
Clojure and Modularity
Clojure and ModularityClojure and Modularity
Clojure and Modularity
 
Clojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVMClojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVM
 

Último

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Último (20)

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

Polyglot and Poly-paradigm Programming for Better Agility