Want to dive even deeper?

Take the course Stairway to Scala Applied II by Bill Venners and Dick Wall and become an expert!
Stairway to Scala Applied II
by Bill Venners , Dick Wall

Check it out!
You're watching a preview of this video, click the button on the left to puchase the full version from Devoxx'09.

Keynote - Scala in 2018

It's 2018. Scala is now 15 years old and the dominant programming language for enterprise apps. But how did we get here? What hurdles did we tackle and what hurdles tackled us?

Published on
  • 23.250
  • 34
  • 32
  • 96
  • 37
  • What to Talk About… ?
  • The History of Poetry?
  • The History of Poetry?
  • The Perl School  Computer language poetry proposed in 1960s  First poems written in Algol in 1970s  Perl’s design allowed for poetry:  I know it’s weird, but it does make it easier to write poetry in perl – Larry Wall on a Perl feature, 1990
  • Black Perl BEFOREHAND: close door, each window & exit; wait until time. open spellbook, study, read (scan, select, tell us); write it, print the hex while each watches, reverse its length, write again; kill spiders, pop them, chop, split, kill them. unlink arms, shift, wait & listen (listening, wait), sort the flock (then, warn the "goats" & kill the "sheep");
  • Ode to Scala I love her silken symmetry; Her supple form entices (oh yes) Enraptures - entraps – me!   I love this it's heaven; Yet import pain.                    _ Sh*t  Why     this synchronized torment?   Heaven & hell
  • Ode to Scala if (she says) "Your love is not enough” (Resist, resist, resist) "I find your lack of faith disturbing.” Be not obsessed. Relax This map suffices That way madness lies; I say "It IS enough"
  • Ode to Scala class warfare extends ghetto (filled) with suffering if (easily angered) throw under the bus object ridicule extends warfare ridicule hurts class unity extends community with joy 1000 fold Remember The     wheel is not a new idea with Scala Remember & rejoice print { money }
  • Scala in 2018 How Scala Became a Mainstream Language
  • 2018: The Leading Newer Language  Scala has broken out of the pack  Biggest thing since Java  Language fragmentation here to stay  Specialization  No new blockbuster languages
  • 2018: Java Endures
  • 2018: Java Endures  Java is regularly pronounced dead  Deeply uncool  In reality, it’s not going away any time soon  Good for Scala, as its fate is linked to that of Java
  •  Not just about Java, it’s the JVM  An amazing piece of software
  • 2018: Users of Scala  Scala’s niche: Leading enterprise language  Traditional enterprise apps  Twitter-like category of super high demand consumer apps  Part of a messy world…  Java and Scala often mixed  DSLs an important niche for Scala
  • 2018: Who Doesn’t Use Scala?  The mythical “corporate developer”  Scala is not adopted by millions  Startups less likely to use Scala  Still hate the JVM  Still love dynamic languages  May rewrite in Scala if they encounter the Twitter scenario  Front end no longer on the JVM  Predominantly JavaScript
  • How Did Scala Win?  Moved toward the mainstream  Embraced Java ecosystem  Chose to fight only winnable battles  Scala language innovation slowed down, improving backward compatibility, compiler and tooling
  • Oh No!
  • Sometimes It’s Good to Sell Out
  • Some Successful Sellouts Tony Flow and the Miraculously Majestic Masters of Red Hot Chilli Peppers
  • …some Successful Sellouts Mother Mcree’s Uptown Jug Champions Grateful Dead
  • Confession: I am Biased
  • Confession: I am Biased  Have coded purely in Scala for the last year  I love Scala more than any language since C  Doubt I will program in Java again  Chose to join Typesafe board
  • Confession: I am Biased  Have coded purely in Scala for the last year  I love Scala more than any language since C  Doubt I will program in Java again  Chose to join Typesafe board  Pretty typical background for a Scala adopter  Enterprise software experience  Java background
  • Why Scala is Awesome  Not verbose like Java  Amazingly flexible for a strongly typed language  I’ve always liked type safety  Elegant combination of OO and functional  Best code reuse I’ve seen
  • Why Java Sucks  Verbose and error-prone     Lack of default method arguments Constructor duplication Getters/setters …  Immutability doesn’t feel as natural  Comparative lack of code reuse
  • Why Java is Awesome… Reason Scala response JVM is robust and performant Scala runs on the JVM Awesome tooling • Strong typing helps tooling • Improving in Java-based IDEs Community of pragmatic programmers focused on solving real world problems Mixed community, includes purists and zealots
  • …Why Java is Awesome Reason Scala response Great backward compatibility Poor backward compatibility Powerful libraries and frameworks • Consume Java libraries easily • Ignore Java solutions and rewrite in Scala Restrictive language Flexible language a blessing & a curse Culture of readable code Culture of unreadable clever code
  • Lessons for Scala From Java’s Popularity  No accident Java is #1  Learn from Java’s successes as well as its failures  Play nice with Java, rather than totally rejecting it
  • Myths That Hold Us Back
  • Myth #1: It’s Good to be Clever def templateContent: Parser[(List[Simple], List[Def], List[Template], List[TemplateTree])] = {         (several(importExpression | localDef | template | mixed)) ^^ {           case elems => {             elems.foldLeft((List[Simple](), List[Def](), List[Template](), List[TemplateTree] ())) { (s, e) =>               e match {                 case i: Simple => (s._1 :+ i, s._2, s._3, s._4)                 case d: Def => (s._1, s._2 :+ d, s._3, s._4)                 case v: Template => (s._1, s._2, s._3 :+ v, s._4)                 case c: Seq[_] => (s._1, s._2, s._3, s._4 ++ c.asInstanceOf[Seq[TemplateTree]])               }             }           }         }       }
  • With Great Power Comes Great • Implicit conversions • Implicit parameters • Operator overloading • Ability to use unicode charset in identifiers • Renaming imports • Type inference • Powerful collection library with baffling internals • …
  • With Great Power Comes Great • Implicit conversions • Implicit parameters • Operator overloading • Ability to use unicode charset in identifiers • Renaming imports • Type inference • Powerful collection library with baffling internals • … Cannot simply deny this and argue language is simple
  • Lessons from C / C++
  • Lessons from C / C++
  • Advantages of Languages in Which You Can’t Write Poetry…  Also hard to hang yourself  Java’s success was partly due to being less powerful than C++
  • Advantages of Languages in Which You Can’t Write Poetry…  Also hard to hang yourself  Java’s success was partly due to being less powerful than C++  Java 8…  Good for Scala, bad for Java?  But we don’t want anything bad for Java
  • Dispatch “periodic table”  Need to translate into English a design smell  Good code is self documenting
  • About Readability, Not LOC
  • About Readability, Not LOC java is much better suited for big teams *because* it's a stupid language that feels like you're coding with yours [sic] hands bound. the more humans you add to a group, the more stupid each individual gets, even if they all are geniuses.
  • About Readability, Not LOC Any fool can write code that a compute can understand. Good programmers wri code that humans can understand – Mart Debugging is twice as hard as writing th code in the first place. Therefore, if you write the code as cleverly as possible, yo
  • Need Scala Coding Standards  Can do the same thing in many different ways  Poetry may not be good code  Need to converge on one good way  Something the Rails guys did well with Ruby  Need clear division between application developer and library developer roles  Martin Odersky “Levels”: http://www.scalalang.org/node/8610  Don’t make application developers do bizarre stuff
  • Myth #2: Ignorance Should be Punished
  • Myth #2: Ignorance Should be Punished If your coworkers are idiots, that's really a problem with your coworkers.
  • Myth #2: Ignorance Should be Punished If your coworkers are idiots, that's really a problem with your coworkers. You even said "avoid answering Scala questions with Haskell." Fuck you Kevin. If I feel it is appropriate to answer with Haskell, I will do exactly that -- I really don't care that you do not understand.
  • Lessons From Other Communities  Groovy  Poor language, great community  People are welcomed, not abused  It’s OK to write in Java at first  Spring  Culture of respect in forums  Karma works  Respect breeds respect
  • Facts To Remember  Most of those who will use Scala in 2018 aren’t using it today  Where will they come from?  All leading languages are similar to Java  Java community 52x larger than Haskell community  How do we welcome them?  What do they need to be productive and adopt Scala incrementally?  Make their first weeks enjoyable, not humiliating
  • Myth #3: OO is Bad  Shouldn’t feel guilty for using OO design  OO is a valuable and proven paradigm  Scala is a better OO language than Java  If you hate OO programming, go write Haskell or Lisp
  • Myth #4: We Don’t Need Frameworks Language so good we don’t need no lousy frameworks
  • Myth #4: We Don’t Need Frameworks Language so good we don’t need no lousy frameworks  It’s not just about the language  Much real world programming has little to do with elegant expression of algorithms
  • Myth #4: We Don’t Need Frameworks Language so good we don’t need no lousy frameworks  It’s not just about the language  Much real world programming has little to do with elegant expression of algorithms  Like saying we have a fast car, so we’ll use the time we save to build our own road
  • Myth #5: Java Sucks and Java Coders Aren’t as Smart as Us  Tendency to dismiss Java viewpoints and libraries  Typical arrogance of a young community  Appropriate for a while
  • Exhibit A: Scala ORM in Theory I think we really need SIQ or whatever we call it shipping as soon as possible. Being able to say here are the hundreds of lines of code you need to work with a database:   you need some classes for ORM,   dozens of annotations to describe the connection between them  dozens of lines for simple type safe queries  you need to know the quirks of Hibernate/JPA/EclipseLink and   you probably still need to write SQL for more complex tasks and here is how you do that in Scala, with a single line of code: <example> I think if we would have this, we have more or less won the whole enterprise stuff.
  • Exhibit A: Scala ORM in Practice val withAthleteAndComments = { (Workout.withAthlete ~ Comment.simple *) map { case all => all.groupBy(_._1).headOption.map { case (workoutWithAthlete, comments) => " " (workout, athlete, comment.map(_._2)) } } } That will get you a Option[((Workout,Athlete),List[Comment])]
  • Embrace it: Java Ecosystem is a Huge Benefit to Scala  A key strength  Not an embarrassment  Shouldn’t assume we can do everything better in Scala
  • Myth #6: Purity Matters What if many people are wrong? It's not as if there aren't countless examples of many people sharing the same mistake, surviving only by patting each other on the back, confirming the perpetuity of the mistake.
  • Myth #6: Purity Matters What if many people are wrong? It's not as if there aren't countless examples of many people sharing the same mistake, surviving only by patting each other on the back, confirming the perpetuity of the mistake. val withAthleteAndComments = { (Workout.withAthlete ~ Comment.simple *) map { case all => all.groupBy(_._1).headOption.map { case (workoutWithAthlete, comments) => " " " (workout, athlete, comment.map(_._2)) } } }
  • Myth #5: It’s All About New Language Features  Mainstream languages can’t progress like the wind  Backward compatibility matters  Scala will win as an enterprise language  Scala needs to be more boring
  • The Only Thing that Needs to Go Faster is the Compiler  Compiler is slow and buggy  C++ eventually solved those problems  Language is a moving target  Makes it harder for new adopters to learn
  • My 2c On Language Innovation  New language features like macros not highest priority  Need to create two language profiles  Academic experimental tool  Drive the future  Subset: Scala for working developers  Stable, small footprint  Need to be paranoid about footprint
  • Conclusion
  • A Critical Moment  Scala has a great chance of being the next big enterprise language  Less likely to appeal to startups  The Scala community will determine what happens next  What will Scala be when it grows up?  Do we want it to be mainstream?
  • How Scala Becomes Mainstream  Community needs to evolve more than the language  More pragmatic  More welcoming of newbies  Coding standards need to be developed and adopted  Need to embrace the Java ecosystem and Java  Need to stop reinventing wheels  Scala language innovation needs to slow down
  • The Journey Has Already Begun… Welcome     new era with boundless       potential   Thread sleep sweetly. Enough.  §
Thumbnail for: Findings Revealed: 2015 State of the Software Supply Chain

Findings Revealed: 2015 State of the Software Supply Chain

WaiMan Yau

free
Thumbnail for: Gimme Caching - The Distributed JCache(JSR107) Way

Gimme Caching - The Distributed JCache(JSR107) Way

David Brimley

free
Thumbnail for: Web Application Security Reloaded for the HTML5 era

Web Application Security Reloaded for the HTML5 era

Carlo Bonamico

free
Thumbnail for: 3 Keys to Rapid Deployment Success

3 Keys to Rapid Deployment Success

Sven Erik Knop

free
Thumbnail for: The Google Cloud Plaform - Beyond simple use cases

The Google Cloud Plaform - Beyond simple use cases

David Gageot

free
Thumbnail for: The Smartwatch Revolution begins: Developing for Android Wear

The Smartwatch Revolution begins: Developing for Android Wear

Pratik Patel

free
Thumbnail for: Pushing The Limits With Java Enterprise Cloud Development

Pushing The Limits With Java Enterprise Cloud Development

Simon Ritter

free
Thumbnail for: The Cloud, an Arduino, an Application, Server, and me - Adventures In and Out of the Cloud

The Cloud, an Arduino, an Application, Server, and me - Adventures In and Out of the Cloud

Holly Cummins

free
Thumbnail for: JCP, Adopt-a-JSR & You

JCP, Adopt-a-JSR & You

Heather VanCura

free
Thumbnail for: The end of server management : hosting has to become a commodity

The end of server management : hosting has to become a commodity

Quentin ADAM

free
Thumbnail for: Bringing IBM Watson to the Cloud

Bringing IBM Watson to the Cloud

Dale Lane

free
Thumbnail for: Performance Tuning, Top 10 Your Doing it Wrong!

Performance Tuning, Top 10 Your Doing it Wrong!

Kirk Pepperdine

free
Thumbnail for: Let’s Get to the Rapids: Java 8 Stream Perfomance

Let’s Get to the Rapids: Java 8 Stream Perfomance

Maurice Naftalin

free
Thumbnail for: The Future of Personal Robotics

The Future of Personal Robotics

Nicolas Rigaud

free
Thumbnail for: NOW TV and Linear Streaming: The unpredictable scalability challenge

NOW TV and Linear Streaming: The unpredictable scalability challenge

Tom Maule

free
Thumbnail for: How to lower the power consumption of your app, without affecting performance

How to lower the power consumption of your app, without affecting performance

Rick Schwartz

free
Thumbnail for: Never mind the bollocks: here's the Linux containers

Never mind the bollocks: here's the Linux containers

Patrick Chanezon

free
Thumbnail for: The First IoT JSR: Units of Measurement

The First IoT JSR: Units of Measurement

Leonardo Lima , Chris Senior

free
Thumbnail for: Devoxx4Kids

Devoxx4Kids

Dan Hardiker

free
Thumbnail for: Level Up your Dev Skills with Static Analysis

Level Up your Dev Skills with Static Analysis

David Lindsay

free
Thumbnail for: Diversity Rules!

Diversity Rules!

Amali de Alwis

free
Thumbnail for: Combining R with Java for Data Analysis

Combining R with Java for Data Analysis

Ryan Cuprak , Elsa Cuprak

free
Thumbnail for: Let’s Get to the Rapids: Java 8 Stream Perfomance

Let’s Get to the Rapids: Java 8 Stream Perfomance

Maurice Naftalin

free
Thumbnail for: CDI 2.0: what is in the work?

CDI 2.0: what is in the work?

Antoine Sabot-Durand , José Paumard

free
Thumbnail for: Ceylon from here to infinity: the big picture and what's coming

Ceylon from here to infinity: the big picture and what's coming

Stephane Epardaud

free
Thumbnail for: Microservices Made Easy with Spring Cloud and Netflix OSS

Microservices Made Easy with Spring Cloud and Netflix OSS

David Syer

free
Thumbnail for: WildFly 9

WildFly 9

Kabir Khan

free
Thumbnail for: Flyway - Database Migration made easy

Flyway - Database Migration made easy

Axel Fontaine

free
Thumbnail for: Predicting the Future with Machine Learning

Predicting the Future with Machine Learning

Amy Nicholson

free
Thumbnail for: Top 10 Real-life WebSocket Use Cases and Experiences

Top 10 Real-life WebSocket Use Cases and Experiences

Richard Cullen

free
Thumbnail for: Software Architecture as Code

Software Architecture as Code

Simon Brown

free
Thumbnail for: How to Rock your Web Apps with Spring and Vaadin

How to Rock your Web Apps with Spring and Vaadin

Sami Ekblad

free
Thumbnail for: From Requirements to Deployment: Implementing a Microservice in Java using BDD and TDD

From Requirements to Deployment: Implementing a Microservice in Java using BDD and TDD

John Ferguson Smart

free
Thumbnail for: Akka Streams with Scala and Java

Akka Streams with Scala and Java

Jamie Allen

free
Thumbnail for: Functional patterns for scala beginners

Functional patterns for scala beginners

Clément Delafargue

free
Thumbnail for: Building Cloud Powered Android Apps with Azure

Building Cloud Powered Android Apps with Azure

Chris Risner

free
Thumbnail for: 5 reasons why developers should pay attention to robotics

5 reasons why developers should pay attention to robotics

Nicolas Rigaud

free
Thumbnail for: HTTP/2 comes to Java. What Servlet 4.0 means to You

HTTP/2 comes to Java. What Servlet 4.0 means to You

David Delabassee

free
Thumbnail for: Java EE changes design pattern implementation

Java EE changes design pattern implementation

Alex Theedom

free
Thumbnail for: Java is dead, long live Ceylon, Kotlin,…

Java is dead, long live Ceylon, Kotlin,…

Russel Winder

free
Thumbnail for: Programming at any Scale

Programming at any Scale

Andrew Harmel-Law

free
Thumbnail for: Ludicrously Fast Builds with Buck

Ludicrously Fast Builds with Buck

Simon Stewart

free
Thumbnail for: Android Testing: A New Hope

Android Testing: A New Hope

Zan Markan , Nicholas Jackson

free
Thumbnail for: From 0 to 60 million users: Scaling for speed and high availability

From 0 to 60 million users: Scaling for speed and high availability

Aviran Mordo

free
Thumbnail for: Making Enterprise Java Architecture Sustainable

Making Enterprise Java Architecture Sustainable

Markus Eisele

free
Thumbnail for: Comparing different concurrency models on the JVM

Comparing different concurrency models on the JVM

Mario Fusco

free
Thumbnail for: In-Memory Computing - Distributed Systems

In-Memory Computing - Distributed Systems

Christoph Engelbert

free
Thumbnail for: Is your profiler speaking the same language as you?

Is your profiler speaking the same language as you?

Simon Maple

free
Thumbnail for: The 10 Golden Rules of Mobile UX

The 10 Golden Rules of Mobile UX

Emilia Ciardi

free
Thumbnail for: Java 9: Make Way for Modules!

Java 9: Make Way for Modules!

Mark Reinhold

free
Thumbnail for: 50 minutes to develop a full Java EE application with Forge? Is that all?

50 minutes to develop a full Java EE application with Forge? Is that all?

Antonio Goncalves

free
Thumbnail for: Developing iOS applications with Java and Eclipse

Developing iOS applications with Java and Eclipse

Grant Ronald

free
Thumbnail for: Welcome Keynote

Welcome Keynote

Mark Hazell

free
Thumbnail for: Refactor your Java EE application using Microservices and Containers

Refactor your Java EE application using Microservices and Containers

Arun Gupta

free
Thumbnail for: Making Events for Local Dev Communities

Making Events for Local Dev Communities

Celestino Bellone , Federico Yankelevich

free
Thumbnail for: Decoding the air around you with Java and $7 hardware

Decoding the air around you with Java and $7 hardware

Bert Jan Schrijver

free
Thumbnail for: Finally, Security API JSR 375

Finally, Security API JSR 375

Alex Kosowski

free
Thumbnail for: Nuts and Bolts of WebSocket

Nuts and Bolts of WebSocket

Arun Gupta

free
Thumbnail for: Java EE 8, a snapshot overview

Java EE 8, a snapshot overview

David Delabassee

free
Thumbnail for: Practical Continuous Deployment

Practical Continuous Deployment

Steve Smith

free
Thumbnail for: The Dark arts of building your own framework

The Dark arts of building your own framework

Andrey Glaschenko , Konstantin Krivopustov

free
Thumbnail for: Level up your Android Build

Level up your Android Build

Volker Leck

free
Thumbnail for: The Seven Deadly Sins of Microservices

The Seven Deadly Sins of Microservices

Daniel Bryant

free
Thumbnail for: Destination: Cloud. Deploying Applications To The Cloud With Docker

Destination: Cloud. Deploying Applications To The Cloud With Docker

Ryan Baxter

free
Thumbnail for: All Change! How the new economics of Cloud will make you think differently about Java

All Change! How the new economics of Cloud will make you think differently about Java

Steve Poole

free
Thumbnail for: Powering real-time web apps with Hazelcast

Powering real-time web apps with Hazelcast

Andrejs Jermakovics

free
Thumbnail for: What is your build telling you about your application structure?

What is your build telling you about your application structure?

Abraham Marin-Perez

free
Thumbnail for: Practical Challenges of moving from CI to CD using Maven

Practical Challenges of moving from CI to CD using Maven

Jatin Bhadra

free
Thumbnail for: Design Patterns in the 21st Century

Design Patterns in the 21st Century

Samir Talwar

free
Thumbnail for: Accessibility and how to get the most from your screenreader

Accessibility and how to get the most from your screenreader

Edd Sowden

free
Thumbnail for: Not my department?! How our privacy is broken and what you can do about it.

Not my department?! How our privacy is broken and what you can do about it.

Anna Biselli

free
Thumbnail for: The Hidden Gems of PDF

The Hidden Gems of PDF

Michaël Demey

free
Thumbnail for: Keynote: The Extraordinary Team of Developers

Keynote: The Extraordinary Team of Developers

Trisha Gee , Daniel Bryant

free
Thumbnail for: goto java;

goto java;

Martin Skarsaune

free
Thumbnail for: Java Generics: Past, Present and Future

Java Generics: Past, Present and Future

Richard Warburton , Raoul-Gabriel Urma

free
Thumbnail for: STOP BREAKING MY STUFF

STOP BREAKING MY STUFF

Katharine Fitzpatrick

free
Thumbnail for: Building securely with agile

Building securely with agile

Michael Brunton-spall

free
Thumbnail for: Java 8 in Anger

Java 8 in Anger

Trisha Gee

free
Thumbnail for: "Catch me if you can" - Java on wearables

"Catch me if you can" - Java on wearables

Gerrit Grunwald

free
Thumbnail for: Experimenting with ServiceWorker

Experimenting with ServiceWorker

Sandro Paganotti

free
Thumbnail for: What Were You Doing In 1995? A 20 Year Retrospective of Java

What Were You Doing In 1995? A 20 Year Retrospective of Java

Simon Ritter , Steve Elliott

free
Thumbnail for: SQL’s back: querying document databases the old fashioned way

SQL’s back: querying document databases the old fashioned way

Matthew Revell

free
Thumbnail for: Miniboxing: Fast Generics for Primitive Types

Miniboxing: Fast Generics for Primitive Types

Vlad Ureche

free
Thumbnail for: TestOps - Chasing the White Whale

TestOps - Chasing the White Whale

Ioana Serban

free
Thumbnail for: Building the UKs biggest IoT network

Building the UKs biggest IoT network

Romanas Sonkinas

free
Thumbnail for: Never Mind the Devoxx

Never Mind the Devoxx

David Blevins

free
Thumbnail for: One Framework, No Dependencies: Using Frameworks to Avoid Common Pitfalls of App Development

One Framework, No Dependencies: Using Frameworks to Avoid Common Pitfalls of App Development

Lee Boonstra

free
Thumbnail for: Express yourself with Java 8

Express yourself with Java 8

Benjamin Weber

free
Thumbnail for: Five Ways to Not Suck at Being a Java Freelancer

Five Ways to Not Suck at Being a Java Freelancer

Roberto Cortez

free
Thumbnail for: Java EE Game Changers

Java EE Game Changers

David Blevins

free