Why the Next Five Years Will Be About Languages

ted.neward@newardassociates.com | Blog: http://blogs.newardassociates.com | Github: tedneward | LinkedIn: tedneward

Question

The question everybody asks is always the same:

What will be

the Next Big Thing (tm)

in our Industry?

Question

... which is usually just a mask for the real question:

What do I need to learn

to avoid being laid off

for the next decade?

State of the Industry: 2025

Where are we today?

State of the Industry: 2025

Architecture

State of the Industry: 2025

Languages

State of the Industry: 2025

Databases

State of the Industry: 2025

Artificial Intelligence

State of the Industry: 2025

So what's next, really?

Future Directions

I believe...

We stand on the threshold of a Renaissance in programming languages

Future Directions

Meaning...

the next N years will be all about:

State of the Industry: 2025

Because...

History

A brief discussion

History

Programming language design has historically been split into two camps:

History

Academics

History

Academic Examples

History

Practitioners

History

For the most part...

... these two groups have been uninterested in working together

History

In fact...

... they've been downright hostile towards one another

History

Practitioners complain that Academics...

History

Practitioners complain that Academics...

History

Thus, Academic languages...

History

But when Practitioners write new languages...

Lookin at you, Perl!

History

If Practitioners ever think about languages...

The Forces

Why it's different now

The Forces

Four Forces have come together into a perfect storm

The Forces

Virtualization

The Forces

Tools

The Forces

(micro)Service boundaries

The Forces

Linguistics

The Forces

Linguistics

The Forces

Linguistics

The Forces

Linguistics

The Forces

Linguistics

The Forces

Linguistics

The Forces

Linguistics: Procedural languages

The Forces

Linguistics: Object languages

The Forces

Linguistics: Functional languages

The Forces

Lisp's "Nine Ideas"

Challenges and Responses

A look....

Challenges and Responses

Challenges before us

Challenges and Responses

Challenge accepted!

You can build a toy language in a week

A substantive one in months

Challenges and Responses

Academic Responses

Industry Responses

Jolie: An Overview

What is this thing?

Jolie: An Overview

In Brief

Jolie: An Overview

From the Jolie docs:

"More in general, Jolie brings a structured linguistic approach to the programming of services, including constructs for access endpoints, APIs with synchronous and asynchronous operations, communications, behavioural workflows, and multiparty sessions. Additionally, Jolie embraces that service and microservice systems are often heterogeneous and interoperability should be a first-class citizen: all data in Jolie is structured as trees that can be semi-automatically (most of the time fully automatically) converted from/to different data formats (JSON, XML, etc.) and communicated over a variety of protocols (HTTP, binary protocols, etc.). Jolie is an attempt at making the first language for microservices, in the sense that it provides primitives to deal directly with the programming of common concerns regarding microservices without relying on frameworks or external libraries."

The Mint Programming Language

... in a nutshell

The Mint Programming Language

What is it?

The Mint Programming Language

Hello world

component Main {
  fun render : Html {
    <button>
      "Click ME!"
    </button>
  }
}

The Mint Programming Language

Counter component

component Counter {
  state counter = 0

  fun increment { next { counter: counter + 1 } }
  fun decrement { next { counter: counter - 1 } }

  fun render {
    <div>
      <button onClick={decrement}>"Decrement"</button>

      <span><{ Number.toString(counter) }></span>

      <button onClick={increment}>"Increment"</button>
    </div>
  }
}

The Wing Programming Language

... in a nutshell

The Wing Programming Language

What is it?

The Wing Programming Language

bring cloud;

let q = new cloud.Queue();
let b = new cloud.Bucket() as "Bucket: Last Message";

q.addConsumer(inflight (m: str) => {
    b.put("latest.txt", m);
});

new cloud.Function(inflight (s: str) => {
    log("Cloud Function was called with ${s}");
    q.push(s);
});

Inform

A human-friendly language for interactive fiction

Inform

Inform

Inform

Example Inform7 code


Before taking the crate:
    if the player is wearing the hat:
        now the hat is in the crate;
        say "As you stoop down, your hat falls into the crate.“

Inform

Literate Programming

Challenges and Responses

Or take an existing language and mod it

Challenges and Responses

Consider... Javascript + XML (e4x)

// Use an XML literal to create an XML object
var order = <order>
  <customer>
    <firstname>John</firstname>
    <lastname>Doe</lastname>
  </customer>
  <item>
    <description>Big Screen Television</description>
    <price>1299.99</price>
    <quantity>1</quantity>
  </item>
</order>

// Construct the full customer name
var name = order.customer.firstname + " " + order.customer.lastname;

// Calculate the total price
var total = order.item.price * order.item.quantity;

Adoption

But.... wait....

Adoption

"I Want to Use This..."

Adoption

"... but my boss won't let me!"

Adoption

"... but my team won't let me!"

Adoption

"... but what if I'm wrong?!?"

Remember: "Faint heart never won fair project"

Summary

Wrapping up

Summary

Tools were meant to serve the human; not the other way around

So should it be for programming languages

Summary

Languages, languages, languages

Credentials

Who is this guy?