Polyglot Architecture:
A Rational Approach to
Software Design
Richard Minerich
Senior Researcher at Bayard Rock
@Rickasaur...
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese an...
Presented at QCon New York
www.qconnewyork.com
Purpose of QCon
- to empower software development by facilitating the sprea...
Research and Development Perspective
▪ A focus on long term solutions to
complex problems
▪ A lot of room for experimentat...
Why do we use the languages we use?
▪ I always use the same one or two languages.
▪ Pseudo-Technical management picks all ...
Considerations (oh god)
Safety, FindingTalent, CPU Performance,Training, Platform
Limitations, Compiler Support, Community...
Considerations (fixed)
Safety – “In the limit”, cost of unexpected changes, testing
burden, sanity of core libs, dependenc...
Case Study: 0install (by Thomas Leonard)
Choosing a Replacement for Python
Language OCaml PythonHaskell Rust ATS C# Go
Spe...
What is Safety? (My favorite topic)
Imagine your goal is perfect bug-free software (in the limit)
▪ Is the compiler your f...
Context is everything
▪ Projected lifetime, time to market, burn rate
▪ Explicit requirements, technology interop, custome...
It Usually Comes Down To Unique Features
▪ JavaScript – Do we really have any other choice?
▪ C# – Great GUI builders, cod...
Isn’t writing your own language
generally a bad idea?
What I found for scripting options on .NET:
IronPython, IronRuby, Ir...
Barb?! (github.com/Rickasaurus/Barb)
It’s a simple .net scripting language
Name.Contains "John“ and (Age > 20 orWeight > 2...
Barb in Action: Safe Alert Manager
Slots to fill (Safe Alert Manager)
▪ User Interface
▪ User Behavior Model
▪ Data Access
▪ DataTransform
▪ Algorithms / Dat...
Key Insight: Reverential Transparency
Matlab C++ Haskell R Python
F# Type Providers
Typed Access to Data and Languages
MAP: Secure Distributed ML
UI (JS),Analysis (JS & SQL)
& Computation (F#)
Glue (F#)
Data
Computation in
F# or viaType
Prov...
MAP Language Choices
▪ User Interface / Model – Javascript/Type Script
▪ Analysis Data Access – BRSQL in the UI
▪ Analysis...
On the Horizon: Asm.js (with emscripten)
is.gd/cool_asmjs_demos
On the Horizon: Rust
www.rust-lang.org
On the Horizon: Julia
julialang.org
Thanks for Coming!
@Rickasaurus
RichardMinerich.com
Come visit the NYC
Haskell and F# User
Groups!
Upcoming SlideShare
Loading in …5
×

Polyglot Architecture: A Rational Approach to Software Design

2,170 views

Published on

Video and slides synchronized, mp3 and slide download available at http://bit.ly/14UCkPI.

Richard Minerich discusses design considerations when building a polyglot software architecture with the tools at hand.Filmed at qconnewyork.com.

At Bayard Rock, Richard Minerich works tirelessly to apply cutting edge research to anti-money laundering and fraud. In the F# community he's been speaking, blogging and writing for over four years. He runs the NYC F# User Group and helps run the NY Haskell Users Group. His most recent work is "Professional F# 2.0" and he is an F# MVP.

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,170
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Polyglot Architecture: A Rational Approach to Software Design

  1. 1. Polyglot Architecture: A Rational Approach to Software Design Richard Minerich Senior Researcher at Bayard Rock @Rickasaurus
  2. 2. InfoQ.com: News & Community Site • 750,000 unique visitors/month • Published in 4 languages (English, Chinese, Japanese and Brazilian Portuguese) • Post content from our QCon conferences • News 15-20 / week • Articles 3-4 / week • Presentations (videos) 12-15 / week • Interviews 2-3 / week • Books 1 / month Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations /polyglot-architecture-design
  3. 3. Presented at QCon New York www.qconnewyork.com Purpose of QCon - to empower software development by facilitating the spread of knowledge and innovation Strategy - practitioner-driven conference designed for YOU: influencers of change and innovation in your teams - speakers and topics driving the evolution and innovation - connecting and catalyzing the influencers and innovators Highlights - attended by more than 12,000 delegates since 2007 - held in 9 cities worldwide
  4. 4. Research and Development Perspective ▪ A focus on long term solutions to complex problems ▪ A lot of room for experimentation, but decisions must be justified ▪ Very small teams, and so few resources for maintenance, and little time for production issues ▪ Talented people who are generally excited about learning new things
  5. 5. Why do we use the languages we use? ▪ I always use the same one or two languages. ▪ Pseudo-Technical management picks all of our technologies. ▪ I need to Maximize Synergy by Hadooping the Big Data Analytics. ▪ I am fanatically obsessed with a particular language. ▪ Weighted random sampling fed by the benchmark game. ▪ We came up with a set of criteria and judged several candidates empirically in context.
  6. 6. Considerations (oh god) Safety, FindingTalent, CPU Performance,Training, Platform Limitations, Compiler Support, Community, External Libraries,Tooling, Debugging, Primary Community Focus, Unique Features, Simplicity, Development Environments, Familiarity, Cross Platform Support, Asynchrony, Hype, Industry Standards, Algorithms,Tutorials, Data Structures, Stability, Memory Usage, Garbage Collection, Syntactic Flexibility, CompilationTargets, Language/Platform Interop,Taste, Core Libs, Code Clarity, Licensing, Error Messages, BuildTools, Testability, Requirements,Type Systems, Embeddability, Scalability, FaultTolerance, Parallelization, Binary Package Size, Permissions, Algebraic DataTypes, Obfuscation, Peer Pressure,Technical Debt, Does it have what plants crave?
  7. 7. Considerations (fixed) Safety – “In the limit”, cost of unexpected changes, testing burden, sanity of core libs, dependency handling Community – Support options, library quantity and quality, training, hiring, enthusiasm, culture of craftsmanship Performance – Relative dimensions include cpu, memory and network Tooling – Debugging, static analysis, linting, test frameworks And they’re all tradeoffs based on Context. i.e. Requirements, Platform(s),Team Skills, Available Funds
  8. 8. Case Study: 0install (by Thomas Leonard) Choosing a Replacement for Python Language OCaml PythonHaskell Rust ATS C# Go Speed 4 2 4 3 5 1 3 Dependencies 4 5 3 2 5 1 3 Bin. compatibility 4 5 2 2 4 5 3 Bad stdout 1 1 1 5 1 1 1 Missing env 5 5 5 5 5 3 1 Memory safety 5 5 5 4 3 5 5 Diagnostics 1 5 3 3 2 1 1 Ease of coding 4 5 4 3 1 4 3 Shared libraries 1 5 2 2 5 5 1 Static types 4 1 4 5 5 3 2 Privilege bounds 5 1 5 1 2 5 1 Mutability 4 3 2 5 4 4 4 C interoperability 3 3 4 4 5 4 4 Asynchronous 5 4 5 5 1 5 5 Total 50 50 49 49 48 47 37 http://is.gd/0install_language_shootout
  9. 9. What is Safety? (My favorite topic) Imagine your goal is perfect bug-free software (in the limit) ▪ Is the compiler your friend? ▪ Is it easy to write correct code? ▪ Will it “fail fast” when in an unexpected state? ▪ When things fail will it get up and keep going? ▪ Can you trust external libraries?
  10. 10. Context is everything ▪ Projected lifetime, time to market, burn rate ▪ Explicit requirements, technology interop, customer systems ▪ Current talent, willingness to learn, and training expenditure ▪ Previous purchases and existing platform limitations ▪ Domain problems that are helped greatly certain unique features
  11. 11. It Usually Comes Down To Unique Features ▪ JavaScript – Do we really have any other choice? ▪ C# – Great GUI builders, code generation tooling ▪ F# –Type providers, data modeling and transformation ▪ Matlab – Fast linear algebra, tons of high quality algorithms ▪ C++ (/CLI) – Library selection, managed-unmanaged interop Currently Under Consideration ▪ R – table structured data analysis and visualization, type provider ▪ Haskell – Unique libraries, fantastically safe ▪ Scala – Beautiful and concise leverage of Spark/Hadoop, quite safe
  12. 12. Isn’t writing your own language generally a bad idea? What I found for scripting options on .NET: IronPython, IronRuby, IronJS, DynamicLinq… DynamicLinq was almost exactly what I wanted. Almost… …If it weren’t for the darned manual conversions… … So after much consideration, I wrote Barb.
  13. 13. Barb?! (github.com/Rickasaurus/Barb) It’s a simple .net scripting language Name.Contains "John“ and (Age > 20 orWeight > 200)
  14. 14. Barb in Action: Safe Alert Manager
  15. 15. Slots to fill (Safe Alert Manager) ▪ User Interface ▪ User Behavior Model ▪ Data Access ▪ DataTransform ▪ Algorithms / Data Structures ▪ Ad-Hoc Behaviors ▪ Glue UI (C#) & Analysis (C#) Glue (F# and Barb) Data & Config In Data Out Algorithms (F#)
  16. 16. Key Insight: Reverential Transparency Matlab C++ Haskell R Python
  17. 17. F# Type Providers Typed Access to Data and Languages
  18. 18. MAP: Secure Distributed ML UI (JS),Analysis (JS & SQL) & Computation (F#) Glue (F#) Data Computation in F# or viaType Provider in: Matlab, R, Python Goal: Experts and users coexist in the same system with different tools. Typed Dataset Representation
  19. 19. MAP Language Choices ▪ User Interface / Model – Javascript/Type Script ▪ Analysis Data Access – BRSQL in the UI ▪ Analysis DataTransform – Javascript in the UI ▪ Glue – Almost entirely F# ▪ Algorithms / Data Structures – F#,Type Provider, C++/CLI
  20. 20. On the Horizon: Asm.js (with emscripten) is.gd/cool_asmjs_demos
  21. 21. On the Horizon: Rust www.rust-lang.org
  22. 22. On the Horizon: Julia julialang.org
  23. 23. Thanks for Coming! @Rickasaurus RichardMinerich.com Come visit the NYC Haskell and F# User Groups!

×