choosing the right tool for the job
TRANSCRIPT
![Page 1: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/1.jpg)
Choosing the Right Tool for the Job
Polyglot Programming on Heroku
Brad Gyger, Heroku – Manager of Customer Advocacy
@bgyger
![Page 2: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/2.jpg)
Safe Harbor
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties
materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results
expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be
deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other
financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any
statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new
functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our
operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of
intellectual property and other litigation, risks associated with possible mergers and acquisitions, the immature market in which we
operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new
releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization
and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of
salesforce.com, inc. is included in our annual report on Form 10-Q for the most recent fiscal quarter ended July 31, 2012. This
documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of
our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently
available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based
upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-
looking statements.
![Page 3: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/3.jpg)
What’s a Polyglot
A person who speaks more than one language
A person who programs in more than one language
An app or a service that uses more than one language
A platform that speaks more than one language
Polyglōttus (Latin) – Many Tongued
![Page 4: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/4.jpg)
Goals for Today
Grasp Open Languages/Frameworks in “Polyglot”
Understanding of Use Cases Applications
Approach when Determining “What’s the Correct Tool?”
![Page 5: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/5.jpg)
Why It’s Important
![Page 6: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/6.jpg)
Sharp Pointy Tools
Hammer and photo credit: Ian Baker @raindrift
![Page 7: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/7.jpg)
Java & JVM-Based Languages
![Page 8: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/8.jpg)
What Makes Sense, When?
Different apps require a different approach
Leverage Open Tools as often as possible
There may never be a perfect option, but one might be close!
![Page 9: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/9.jpg)
Java: The Goodness
- Most widely adopted Open Source language
- Robust and established frameworks: Spring, Hibernate…and
Play!
- Great for Asynchronous & heavy processing apps
![Page 10: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/10.jpg)
Java: The Badness
- “The SUV of Programming Languages”
- Long in the tooth technology
- Compilation…seriously?
- Resource (time, personnel and infrastructure) intensive
![Page 11: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/11.jpg)
- Ruby / Java App
- Global Reach
- Different Usage Profiles
- Tons of UGC
![Page 12: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/12.jpg)
![Page 13: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/13.jpg)
Scala: The Goodness
- Baby steps from Java
- Leverage the JVM, write less code
- Write more efficient & less buggy code
- Leverage Functional & OOP
- Great for Asynchronous & heavy processing apps (Twitter)
![Page 14: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/14.jpg)
Scala: The Badness
- Mr. Early Adopter I presume?
- Immature Toolset
- Limited Developer Pool
- Learning Curve
- If Scala, why not Java?
![Page 15: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/15.jpg)
![Page 16: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/16.jpg)
Clojure: The Goodness
- “Lisp for Java”
- Leverage the JVM, write less code
- Write more efficient & less buggy code (moreso than Scala)
- Great for Asynchronous & heavy processing apps (Twitter)
![Page 17: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/17.jpg)
Clojure: The Badness
- Mr. Earlier Adopter I presume?
- Immature Toolset
- Limited Developer Pool
- Hardcore Hacker community
- If Clojure, why not common Lisp?
![Page 18: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/18.jpg)
Demo #1
![Page 19: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/19.jpg)
Single Threaded Languages
![Page 20: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/20.jpg)
Ruby: The Goodness
- Easy entre to world of programming
- Even the most senior devs enjoy it
- Large community and relatively mature tools
- Empowers Agile
- Super easy to get started
- “Developer Happiness”
![Page 21: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/21.jpg)
Ruby: The Badness
- Single threaded = blocking requests
- Good luck finding a Ruby dev
- Limited Developer Pool
- Most folks tooled up around Java
- Building on Windows can be a pain
![Page 22: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/22.jpg)
- Ruby (Rails) App
- Started as Team of Three
- Instant & Enormous Scale
- APIs to Social Channels
- Now part of LinkedIn
![Page 23: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/23.jpg)
Python: The Goodness
- Came from Enterprise (Publishing)
- Easy to integrate/extend with C or Java
- Very clean syntax
- Great for Content driven apps
- Myriad of frameworks
![Page 24: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/24.jpg)
Python: The Badness
- Single threaded = blocking requests
- Garbage collection is suspect
- Not the best for CPU (Process) heavy apps
- Tends to be slower than most
![Page 25: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/25.jpg)
- Ruby Front End / Python Backend
- Media Driven App
- Distributed Architecture
- Marquee Mobile App
![Page 26: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/26.jpg)
Demo #2
![Page 27: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/27.jpg)
JavaScript
![Page 28: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/28.jpg)
Node.js: The Goodness
- Server-side Javascript
- Great for websockets
- Very familiar syntax
- Small learning curve
- Holy Concurrency Batman!
![Page 29: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/29.jpg)
Node.js: The Badness
- Takes a lot more code vs. others
- Community and Resource pools
- Immature technology
- Stability
- “Rails in the early Days”
![Page 30: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/30.jpg)
A Large Web Communication App
- Node.js App
- Global Reach
- 24x7 Usage
- JSON
- Serious Concurrency
![Page 31: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/31.jpg)
Questions to ask…
Where am I currently invested (people and technology)?
What are others in my market using?
What is my team using away from work? OR What are
they asking for?
What projects are ‘quick wins’?
![Page 32: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/32.jpg)
Deeper nuance…
What can I use as a differentiator
Internally, what will pass muster?
Externally, what resources are available to succeed?
What’s my use case, and what would technologies would
suit it?
![Page 33: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/33.jpg)
Brad Gyger
@bgyger
![Page 34: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/34.jpg)
What’s Next
CodeForAmerica.org – Extreme Heroku
The 12Factor App – www.12factor.net
Heroku DevCenter – devcenter.heroku.com
![Page 35: Choosing the Right Tool for the Job](https://reader031.vdocuments.us/reader031/viewer/2022020123/55a4efcd1a28ab2b408b4793/html5/thumbnails/35.jpg)