SlideShare a Scribd company logo
1 of 33
Download to read offline
We're Doing it All Wrong
Paul Phillips
paulp@improving.org

Source: as every single one of you already knows, xkcd.

Saturday, October 19, 13
Credentials

Saturday, October 19, 13
The Winding Stairway
• Five years on scala
• Rooting for scala/typesafe
• But I quit a dream job...
• ...because I lost faith
Saturday, October 19, 13
Um, PNW Scala
• I don't say scala is a bad choice relative to
today's plausible alternatives

• I do say that scala has issues which leave
me in doubt as to its future

• Some of them cannot be addressed
• And others will not be addressed

Saturday, October 19, 13
This Talk in a Nutshell
The nutshell I sought

Saturday, October 19, 13

The nutshell I found
"We're Doing it All Wrong"
• I thought I meant it hyperbolically
• I found it was almost literally true
• So this talk is hardly a taste
• It's a thin line between vision and
megalomania: you decide

Saturday, October 19, 13
A Token Nutshell
"Plans are useless, but planning is indispensible."
-- Dwight D. Eisenhower
"Modification is undesirable, but modifiability is paramount."
-- me
If it isn't straightforward to modify, it will never be any good.
It will never be fast.
It will never be correct.
And it will eventually be replaced by something modifiable.
...after consuming as many hours as you feed it.

Saturday, October 19, 13
Billions of Bugs
• Many, perhaps most, bugs arise from
entanglements with state and time

• Most of what we seek to express has no
need for either of them

• Why then do we trundle these deathtraps
around with us, everywhere we go?

Saturday, October 19, 13
A Big Sack for 3 Potatoes
• def compare(x: T, y: T): Int
• This relationship admits exactly 3 outcomes
• Represented as a type with 4294967296 states
• A type which is itself overloaded across
thousands of distinct and incompatible uses, all
of which are silently interchangeable

Saturday, October 19, 13
Pure of heart?
• Maybe you think the (T, T)Int example is unfair,

because the signature is for "compatibility" and/
or "performance"

• False idols upon whose altars we spill the blood
of correctness

• Your false gods do not demand that you

compromise the model or the semantics. That
we do to ourselves.

Saturday, October 19, 13
"Compatibility means deliberately repeating
other people’s mistakes." -- Wheeler
SCALA (sullenly): It was Java's idea.
SCALA'S MOM (exasperated): If
Java cut off its nose, would you....
aaagh, hypothetical!
[Next: @ TOM'S RHINOPLASTY]

Saturday, October 19, 13
Self-Inflicted Wounds
• def equals(x: Any): Boolean
• Inflicting this abominable signature on every
object in the language is indefensible

• Universal equality is so privileged in scala
(pattern matcher, collections, etc.) it's
impossible to avoid

• Scala: a capricious mistress
Saturday, October 19, 13
The Biggest Mistake in
scala.collection...
•
•
•
•
•
•

Is: trying to abstract over mutability through inheritance
An inherited implementation is ALWAYS wrong somewhere!
Example: how do you write "drop" so it's reusable?
In a mutable class, drop MUST NOT share
In an immutable class, drop MUST share
So half the overrides in collections are there simply to stave off
the incorrectness which threatens from above. This is nuts.

Saturday, October 19, 13
Wag or be wagged?
• Compatibility is Tail. Performance is Tail.
• Correctness is Dog.
• "Those who would give up correctness for
a little temporary performance deserve
neither correctness nor performance."

Saturday, October 19, 13
If Nothing is Forbidden...
• (1 to 100000000).toList filter (_ => true)
• Oops, we have to make a whole new list
because maybe they test if (x1 eq x2)

• We must assume the worst...
• ...so the worst must be less worst.
• Reference equality: inexpressible by default
Saturday, October 19, 13
What's Int.MaxValue between friends?
scala> val x1: Float = Long.MaxValue
x1: Float = 9.223372E18
scala> val x2: Float = Long.MaxValue - Int.MaxValue
x2: Float = 9.223372E18
scala> println(x1 == x2)
true

NO WONDER NOTHING WORKS
Saturday, October 19, 13
On Performance
•

"The greatest performance improvement of all is
when a system goes from not-working to working."
-- Osterhaut

•

"The key to performance is elegance, not battalions
of special cases." -- Bentley

•

"If you want fast, start with comprehensible." -- me

Saturday, October 19, 13
Contemplate Madness
•
•
•

The point is not any example in isolation.

•

Do you think bridges, airplanes, and nuclear
reactors are designed so cavalierly? (If they are,
please don't tell me.)

The point is that we are not even trying.
How do we expect the hard parts to work if we
don't even try to get the easy parts right?

Saturday, October 19, 13
Generality is Not OK
• We try to use a "general purpose" language
for everything (or near enough)

• There is no such thing as a general purpose!
• So we are, always and forever, using the
wrong tool for the job

• Does i = i + 1 really belong in the same
expression domain as type A <: B?

Saturday, October 19, 13
Power: Obvious Benefits,
Hidden Costs

•

Third law of motion: "To every action there is
always an equal and opposite reaction"

•

Every increase in expressiveness brings an
increased burden on all who care to
understand the message

•
•

Unnecessary expressiveness is the enemy

Saturday, October 19, 13

It racks up a huge body count, but its victims
have no voice - it is "silent evidence"
True Power is in Restriction

• Power's less appreciated twin brother
• "The limits of my language are the limits of my
world" -- Wittgenstein

• Inexpressibility confers immunity
• Enforce separation of concerns by construction

Saturday, October 19, 13
Good Fences Make Good Neighbors

• Fight impedance mismatches at well defined
border layers

• Defend the layer's defining assumptions
with your life. This is the Alamo!

• To have to defend against all outcomes at all
times is to abandon any hope of progress.

Saturday, October 19, 13
Leaky Abstraction is Not Abstraction

• Opacity is the hallmark of reusability
• The 90% solution is frequently worse than
no solution at all

• The 90% solution fails to meet many

needs, yet is deployed with the express
intention of preventing access to that which
underlies it - now it exists only to get in
our way!

Saturday, October 19, 13
Not Catchy Enough
Good Fences Make Good Neighbors
True Power is in Restriction
Leaky Abstraction is Not Abstraction

Saturday, October 19, 13
Catchy Enough
• War is Peace
• Freedom is Slavery
• Ignorance is Strength

Saturday, October 19, 13
Too Seldom Seen
But it was then that I saw that such a sketch of a
program still to be made, could be regarded as an
abstract version of the final program, or even,
that it could be regarded as "the program" if such
a machine were available; usually it is not
available, and actions and data types assumed have
to be further detailed in the next levels of
refinement. It is the function of these next
levels to build the machine that has been assumed
to be available at the top level, i.e. at the
highest level of abstraction.
-- Dijkstra, July 1970

Saturday, October 19, 13
What I'm after

•
•

I don't need a programming language

•

The IRs to actually be specified, and implemented via
loosely coupled, independent components

•

Why is the scala parser entangled with desugaring
entangled with type inference entangled with the
optimizer entangled with the code generator?

•

Why is the canonical code representation a STRING?

I need a coherent set of tools for creating software. A
"language" is incidental.

Saturday, October 19, 13
What I'm after, cont.
•

Two IRs at least: one purely syntactic and carrying
types. These can be submitted directly.

•

A virtual machine within the virtual machine:
designed in concert with the IRs, and designed to
interpret them directly.

•

Such a VM would free us from the many
restrictions imposed by the JVM during
development.

•

Why do we need JVMTI, JRebel, and huge
complexity for live feedback? We don't have to
base our development lives on java bytecode!

Saturday, October 19, 13
What I'm after, cont.
•

Change as a first class entity. The compiler is
pervasively designed around inputs which are
Diff[T]s against an in-memory understanding of the
last successful compilation. Cold start is the
uncommon case of diff against empty.

•

Such pervasive and instantaneous feedback to my
code changes that both "repl" and "debugger" are
superfluous as separate tools.

Saturday, October 19, 13
What I'm after, cont.
•

A language where unknowns are assumed in the
most restrictive way, so accidental behaviors don't
paralyze optimization

•

If a feature is ill-advised, why do we knock
ourselves out to make it easy to use? Reference
equality is a bad idea. Type tests are a bad idea.
State is a bad (if sometimes unavoidable) idea.

•

You can opt into these things, so we don't ALL
have to pay the price.

Saturday, October 19, 13
What I'm after, cont.
•

An editor which understands the meaning of the
code I am manipulating at a deep level, and which
offers many layers of information

•

Integration with revision control at the lowest
level. My entire life is spent working with sublime
and git: how is it that my editor, my DVCS, and my
compiler are not in constant communication?

•

Whatever you're picturing, it doesn't go as far as I
mean for it to go.

Saturday, October 19, 13
"And to a large extent, the people
that we consider to be skilled
software engineers are just those
people that are really good at playing
computer. But if we're writing our
code on a computer... why are we
simulating what a computer would
do in our head? Why doesn't the
computer just do it... and show us?"
-- Bret Victor

http://worrydream.com/

Saturday, October 19, 13
"For the present-day
darkness in the
programmer's world the
programmers themselves
are responsible and
nobody else."
-- Dijkstra (pre-1970)

http://www.cs.utexas.edu/users/EWD/

Saturday, October 19, 13

More Related Content

What's hot

L2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICES
L2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICESL2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICES
L2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICESFaelix Ltd
 
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介Kumapone
 
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックKentaro Ebisawa
 
IP/LDP fast protection schemes
IP/LDP fast protection schemesIP/LDP fast protection schemes
IP/LDP fast protection schemesSkillFactory
 
Intel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうIntel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうTakuya ASADA
 
ISPネットワーク運用で覗いてるもの
ISPネットワーク運用で覗いてるものISPネットワーク運用で覗いてるもの
ISPネットワーク運用で覗いてるものTaiji Tsuchiya
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたnpsg
 
openstack+cephインテグレーション
openstack+cephインテグレーションopenstack+cephインテグレーション
openstack+cephインテグレーションOSSラボ株式会社
 
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulationsL2 over L3 ecnaspsulations
L2 over L3 ecnaspsulationsMotonori Shindo
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜LINE Corporation
 
Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6Educática
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano
[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano
[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu AsanoInsight Technology, Inc.
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークTakuya ASADA
 
Bandwidth Monitoring - pfSense Hangout March 2015
Bandwidth Monitoring - pfSense Hangout March 2015Bandwidth Monitoring - pfSense Hangout March 2015
Bandwidth Monitoring - pfSense Hangout March 2015Netgate
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
Eventually, Scylla Chooses Consistency
Eventually, Scylla Chooses ConsistencyEventually, Scylla Chooses Consistency
Eventually, Scylla Chooses ConsistencyScyllaDB
 

What's hot (18)

L2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICES
L2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICESL2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICES
L2TP 101 ON-RAMP TO CONSUMING WHOLESALE BROADBAND SERVICES
 
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
 
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
 
IP/LDP fast protection schemes
IP/LDP fast protection schemesIP/LDP fast protection schemes
IP/LDP fast protection schemes
 
Intel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうIntel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼう
 
ISPネットワーク運用で覗いてるもの
ISPネットワーク運用で覗いてるものISPネットワーク運用で覗いてるもの
ISPネットワーク運用で覗いてるもの
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
openstack+cephインテグレーション
openstack+cephインテグレーションopenstack+cephインテグレーション
openstack+cephインテグレーション
 
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulationsL2 over L3 ecnaspsulations
L2 over L3 ecnaspsulations
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
 
Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano
[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano
[B11] 基礎から知るSSD(いまさら聞けないSSDの基本) by Hironobu Asano
 
SRv6 study
SRv6 studySRv6 study
SRv6 study
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
Bandwidth Monitoring - pfSense Hangout March 2015
Bandwidth Monitoring - pfSense Hangout March 2015Bandwidth Monitoring - pfSense Hangout March 2015
Bandwidth Monitoring - pfSense Hangout March 2015
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
Eventually, Scylla Chooses Consistency
Eventually, Scylla Chooses ConsistencyEventually, Scylla Chooses Consistency
Eventually, Scylla Chooses Consistency
 

Viewers also liked

A Scala Corrections Library
A Scala Corrections LibraryA Scala Corrections Library
A Scala Corrections LibraryPaul Phillips
 
Brief tour of psp-std
Brief tour of psp-stdBrief tour of psp-std
Brief tour of psp-stdPaul Phillips
 
Keynote, LambdaConf 2014 - The Silent Productivity Killer
Keynote, LambdaConf 2014 - The Silent Productivity KillerKeynote, LambdaConf 2014 - The Silent Productivity Killer
Keynote, LambdaConf 2014 - The Silent Productivity KillerPaul Phillips
 
Naming Things and Finding Cothings
Naming Things and Finding CothingsNaming Things and Finding Cothings
Naming Things and Finding CothingsPaul Phillips
 
Keynote, Lambdaconf 2016 - Equality is Hard
Keynote, Lambdaconf 2016 - Equality is HardKeynote, Lambdaconf 2016 - Equality is Hard
Keynote, Lambdaconf 2016 - Equality is HardPaul Phillips
 
Keynote, LambdaConf 2015 - Ipecac for the Ouroboros
Keynote, LambdaConf 2015 - Ipecac for the OuroborosKeynote, LambdaConf 2015 - Ipecac for the Ouroboros
Keynote, LambdaConf 2015 - Ipecac for the OuroborosPaul Phillips
 
Rethinking Scala Presented in San Francisco May 7, 2014
Rethinking Scala Presented in San Francisco May 7, 2014Rethinking Scala Presented in San Francisco May 7, 2014
Rethinking Scala Presented in San Francisco May 7, 2014Bruce Eckel
 
Catalogo luminarias-distribuicao-nov10
Catalogo luminarias-distribuicao-nov10Catalogo luminarias-distribuicao-nov10
Catalogo luminarias-distribuicao-nov10Marcello Pellegrina
 
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)Bruce Eckel
 
Manual de operador
Manual de operadorManual de operador
Manual de operadorlobosabio
 
Do Languages Matter?
Do Languages Matter?Do Languages Matter?
Do Languages Matter?Bruce Eckel
 
Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...
Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...
Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...Till Rohrmann
 
AWSのセキュリティについて
AWSのセキュリティについてAWSのセキュリティについて
AWSのセキュリティについてYasuhiro Horiuchi
 
Why Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldWhy Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldDean Wampler
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyBozhidar Bozhanov
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to ScalaTim Underwood
 

Viewers also liked (17)

A Scala Corrections Library
A Scala Corrections LibraryA Scala Corrections Library
A Scala Corrections Library
 
Brief tour of psp-std
Brief tour of psp-stdBrief tour of psp-std
Brief tour of psp-std
 
Keynote, LambdaConf 2014 - The Silent Productivity Killer
Keynote, LambdaConf 2014 - The Silent Productivity KillerKeynote, LambdaConf 2014 - The Silent Productivity Killer
Keynote, LambdaConf 2014 - The Silent Productivity Killer
 
Naming Things and Finding Cothings
Naming Things and Finding CothingsNaming Things and Finding Cothings
Naming Things and Finding Cothings
 
Keynote, Lambdaconf 2016 - Equality is Hard
Keynote, Lambdaconf 2016 - Equality is HardKeynote, Lambdaconf 2016 - Equality is Hard
Keynote, Lambdaconf 2016 - Equality is Hard
 
Keynote, LambdaConf 2015 - Ipecac for the Ouroboros
Keynote, LambdaConf 2015 - Ipecac for the OuroborosKeynote, LambdaConf 2015 - Ipecac for the Ouroboros
Keynote, LambdaConf 2015 - Ipecac for the Ouroboros
 
Rethinking Scala Presented in San Francisco May 7, 2014
Rethinking Scala Presented in San Francisco May 7, 2014Rethinking Scala Presented in San Francisco May 7, 2014
Rethinking Scala Presented in San Francisco May 7, 2014
 
Catalogo luminarias-distribuicao-nov10
Catalogo luminarias-distribuicao-nov10Catalogo luminarias-distribuicao-nov10
Catalogo luminarias-distribuicao-nov10
 
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)
 
Manual de operador
Manual de operadorManual de operador
Manual de operador
 
Do Languages Matter?
Do Languages Matter?Do Languages Matter?
Do Languages Matter?
 
Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...
Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...
Dynamic Scaling: How Apache Flink Adapts to Changing Workloads (at FlinkForwa...
 
AWSのセキュリティについて
AWSのセキュリティについてAWSのセキュリティについて
AWSのセキュリティについて
 
Scala
ScalaScala
Scala
 
Why Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldWhy Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data World
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very ugly
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to Scala
 

Similar to Keynote, PNW Scala 2013

Designing With Data
Designing With DataDesigning With Data
Designing With DataGeorge Oates
 
CityLIS talk, Feb 1st 2016
CityLIS talk, Feb 1st 2016CityLIS talk, Feb 1st 2016
CityLIS talk, Feb 1st 2016benosteen
 
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01Hugo Pinto
 
Howtostopsucking
HowtostopsuckingHowtostopsucking
HowtostopsuckingHugo Pinto
 
How to stop sucking and be awesome instead
How to stop sucking and be awesome insteadHow to stop sucking and be awesome instead
How to stop sucking and be awesome insteadcodinghorror
 
Future communications strategy
Future communications strategyFuture communications strategy
Future communications strategyRoland Selmer
 
The Allure of Gothic Markup
The Allure of Gothic MarkupThe Allure of Gothic Markup
The Allure of Gothic MarkupSimon St.Laurent
 
F# Eye for the C# Guy
F# Eye for the C# GuyF# Eye for the C# Guy
F# Eye for the C# Guygueste3f83d
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2rusersla
 
PWLSD.1 A critique of the cap theorem - Martin Kleppmann
PWLSD.1  A critique of the cap theorem - Martin KleppmannPWLSD.1  A critique of the cap theorem - Martin Kleppmann
PWLSD.1 A critique of the cap theorem - Martin KleppmannDaniel Norman
 
Turing Goes to Church
Turing Goes to ChurchTuring Goes to Church
Turing Goes to ChurchSteve Poling
 
Disrupt 2 Grow - Devoxx 2013
Disrupt 2 Grow - Devoxx 2013Disrupt 2 Grow - Devoxx 2013
Disrupt 2 Grow - Devoxx 2013Konrad Malawski
 
2013-06 - Eclipse Kepler Democamps
2013-06 - Eclipse Kepler Democamps2013-06 - Eclipse Kepler Democamps
2013-06 - Eclipse Kepler DemocampsMarcel Bruch
 
Humans vs. Machines (February 2017)
Humans vs. Machines (February 2017)Humans vs. Machines (February 2017)
Humans vs. Machines (February 2017)Adil Syed
 
LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...
LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...
LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...Colin Panisset
 
Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design
 Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design
Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI DesignDavid Farrell
 

Similar to Keynote, PNW Scala 2013 (20)

Designing With Data
Designing With DataDesigning With Data
Designing With Data
 
CityLIS talk, Feb 1st 2016
CityLIS talk, Feb 1st 2016CityLIS talk, Feb 1st 2016
CityLIS talk, Feb 1st 2016
 
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
 
Howtostopsucking
HowtostopsuckingHowtostopsucking
Howtostopsucking
 
How to stop sucking and be awesome instead
How to stop sucking and be awesome insteadHow to stop sucking and be awesome instead
How to stop sucking and be awesome instead
 
Future communications strategy
Future communications strategyFuture communications strategy
Future communications strategy
 
What's in a number?
What's in a number?What's in a number?
What's in a number?
 
The Allure of Gothic Markup
The Allure of Gothic MarkupThe Allure of Gothic Markup
The Allure of Gothic Markup
 
F# Eye for the C# Guy
F# Eye for the C# GuyF# Eye for the C# Guy
F# Eye for the C# Guy
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2
 
But It’s My Home‽
But It’s My Home‽But It’s My Home‽
But It’s My Home‽
 
PWLSD.1 A critique of the cap theorem - Martin Kleppmann
PWLSD.1  A critique of the cap theorem - Martin KleppmannPWLSD.1  A critique of the cap theorem - Martin Kleppmann
PWLSD.1 A critique of the cap theorem - Martin Kleppmann
 
Turing Goes to Church
Turing Goes to ChurchTuring Goes to Church
Turing Goes to Church
 
Hackers & Painters: Filosofía de la Cultura Hacker
Hackers & Painters: Filosofía de la Cultura HackerHackers & Painters: Filosofía de la Cultura Hacker
Hackers & Painters: Filosofía de la Cultura Hacker
 
Disrupt 2 Grow - Devoxx 2013
Disrupt 2 Grow - Devoxx 2013Disrupt 2 Grow - Devoxx 2013
Disrupt 2 Grow - Devoxx 2013
 
2013-06 - Eclipse Kepler Democamps
2013-06 - Eclipse Kepler Democamps2013-06 - Eclipse Kepler Democamps
2013-06 - Eclipse Kepler Democamps
 
Humans vs. Machines (February 2017)
Humans vs. Machines (February 2017)Humans vs. Machines (February 2017)
Humans vs. Machines (February 2017)
 
LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...
LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...
LASTconf 2018 - System Mapping: Discover, Communicate and Explore the Real Co...
 
Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design
 Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design
Game Design 2 (2013): Lecture 6 - Icons and Semiotics in Game UI Design
 
Robust & anti fragile
Robust & anti fragileRobust & anti fragile
Robust & anti fragile
 

Recently uploaded

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Recently uploaded (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

Keynote, PNW Scala 2013

  • 1. We're Doing it All Wrong Paul Phillips paulp@improving.org Source: as every single one of you already knows, xkcd. Saturday, October 19, 13
  • 3. The Winding Stairway • Five years on scala • Rooting for scala/typesafe • But I quit a dream job... • ...because I lost faith Saturday, October 19, 13
  • 4. Um, PNW Scala • I don't say scala is a bad choice relative to today's plausible alternatives • I do say that scala has issues which leave me in doubt as to its future • Some of them cannot be addressed • And others will not be addressed Saturday, October 19, 13
  • 5. This Talk in a Nutshell The nutshell I sought Saturday, October 19, 13 The nutshell I found
  • 6. "We're Doing it All Wrong" • I thought I meant it hyperbolically • I found it was almost literally true • So this talk is hardly a taste • It's a thin line between vision and megalomania: you decide Saturday, October 19, 13
  • 7. A Token Nutshell "Plans are useless, but planning is indispensible." -- Dwight D. Eisenhower "Modification is undesirable, but modifiability is paramount." -- me If it isn't straightforward to modify, it will never be any good. It will never be fast. It will never be correct. And it will eventually be replaced by something modifiable. ...after consuming as many hours as you feed it. Saturday, October 19, 13
  • 8. Billions of Bugs • Many, perhaps most, bugs arise from entanglements with state and time • Most of what we seek to express has no need for either of them • Why then do we trundle these deathtraps around with us, everywhere we go? Saturday, October 19, 13
  • 9. A Big Sack for 3 Potatoes • def compare(x: T, y: T): Int • This relationship admits exactly 3 outcomes • Represented as a type with 4294967296 states • A type which is itself overloaded across thousands of distinct and incompatible uses, all of which are silently interchangeable Saturday, October 19, 13
  • 10. Pure of heart? • Maybe you think the (T, T)Int example is unfair, because the signature is for "compatibility" and/ or "performance" • False idols upon whose altars we spill the blood of correctness • Your false gods do not demand that you compromise the model or the semantics. That we do to ourselves. Saturday, October 19, 13
  • 11. "Compatibility means deliberately repeating other people’s mistakes." -- Wheeler SCALA (sullenly): It was Java's idea. SCALA'S MOM (exasperated): If Java cut off its nose, would you.... aaagh, hypothetical! [Next: @ TOM'S RHINOPLASTY] Saturday, October 19, 13
  • 12. Self-Inflicted Wounds • def equals(x: Any): Boolean • Inflicting this abominable signature on every object in the language is indefensible • Universal equality is so privileged in scala (pattern matcher, collections, etc.) it's impossible to avoid • Scala: a capricious mistress Saturday, October 19, 13
  • 13. The Biggest Mistake in scala.collection... • • • • • • Is: trying to abstract over mutability through inheritance An inherited implementation is ALWAYS wrong somewhere! Example: how do you write "drop" so it's reusable? In a mutable class, drop MUST NOT share In an immutable class, drop MUST share So half the overrides in collections are there simply to stave off the incorrectness which threatens from above. This is nuts. Saturday, October 19, 13
  • 14. Wag or be wagged? • Compatibility is Tail. Performance is Tail. • Correctness is Dog. • "Those who would give up correctness for a little temporary performance deserve neither correctness nor performance." Saturday, October 19, 13
  • 15. If Nothing is Forbidden... • (1 to 100000000).toList filter (_ => true) • Oops, we have to make a whole new list because maybe they test if (x1 eq x2) • We must assume the worst... • ...so the worst must be less worst. • Reference equality: inexpressible by default Saturday, October 19, 13
  • 16. What's Int.MaxValue between friends? scala> val x1: Float = Long.MaxValue x1: Float = 9.223372E18 scala> val x2: Float = Long.MaxValue - Int.MaxValue x2: Float = 9.223372E18 scala> println(x1 == x2) true NO WONDER NOTHING WORKS Saturday, October 19, 13
  • 17. On Performance • "The greatest performance improvement of all is when a system goes from not-working to working." -- Osterhaut • "The key to performance is elegance, not battalions of special cases." -- Bentley • "If you want fast, start with comprehensible." -- me Saturday, October 19, 13
  • 18. Contemplate Madness • • • The point is not any example in isolation. • Do you think bridges, airplanes, and nuclear reactors are designed so cavalierly? (If they are, please don't tell me.) The point is that we are not even trying. How do we expect the hard parts to work if we don't even try to get the easy parts right? Saturday, October 19, 13
  • 19. Generality is Not OK • We try to use a "general purpose" language for everything (or near enough) • There is no such thing as a general purpose! • So we are, always and forever, using the wrong tool for the job • Does i = i + 1 really belong in the same expression domain as type A <: B? Saturday, October 19, 13
  • 20. Power: Obvious Benefits, Hidden Costs • Third law of motion: "To every action there is always an equal and opposite reaction" • Every increase in expressiveness brings an increased burden on all who care to understand the message • • Unnecessary expressiveness is the enemy Saturday, October 19, 13 It racks up a huge body count, but its victims have no voice - it is "silent evidence"
  • 21. True Power is in Restriction • Power's less appreciated twin brother • "The limits of my language are the limits of my world" -- Wittgenstein • Inexpressibility confers immunity • Enforce separation of concerns by construction Saturday, October 19, 13
  • 22. Good Fences Make Good Neighbors • Fight impedance mismatches at well defined border layers • Defend the layer's defining assumptions with your life. This is the Alamo! • To have to defend against all outcomes at all times is to abandon any hope of progress. Saturday, October 19, 13
  • 23. Leaky Abstraction is Not Abstraction • Opacity is the hallmark of reusability • The 90% solution is frequently worse than no solution at all • The 90% solution fails to meet many needs, yet is deployed with the express intention of preventing access to that which underlies it - now it exists only to get in our way! Saturday, October 19, 13
  • 24. Not Catchy Enough Good Fences Make Good Neighbors True Power is in Restriction Leaky Abstraction is Not Abstraction Saturday, October 19, 13
  • 25. Catchy Enough • War is Peace • Freedom is Slavery • Ignorance is Strength Saturday, October 19, 13
  • 26. Too Seldom Seen But it was then that I saw that such a sketch of a program still to be made, could be regarded as an abstract version of the final program, or even, that it could be regarded as "the program" if such a machine were available; usually it is not available, and actions and data types assumed have to be further detailed in the next levels of refinement. It is the function of these next levels to build the machine that has been assumed to be available at the top level, i.e. at the highest level of abstraction. -- Dijkstra, July 1970 Saturday, October 19, 13
  • 27. What I'm after • • I don't need a programming language • The IRs to actually be specified, and implemented via loosely coupled, independent components • Why is the scala parser entangled with desugaring entangled with type inference entangled with the optimizer entangled with the code generator? • Why is the canonical code representation a STRING? I need a coherent set of tools for creating software. A "language" is incidental. Saturday, October 19, 13
  • 28. What I'm after, cont. • Two IRs at least: one purely syntactic and carrying types. These can be submitted directly. • A virtual machine within the virtual machine: designed in concert with the IRs, and designed to interpret them directly. • Such a VM would free us from the many restrictions imposed by the JVM during development. • Why do we need JVMTI, JRebel, and huge complexity for live feedback? We don't have to base our development lives on java bytecode! Saturday, October 19, 13
  • 29. What I'm after, cont. • Change as a first class entity. The compiler is pervasively designed around inputs which are Diff[T]s against an in-memory understanding of the last successful compilation. Cold start is the uncommon case of diff against empty. • Such pervasive and instantaneous feedback to my code changes that both "repl" and "debugger" are superfluous as separate tools. Saturday, October 19, 13
  • 30. What I'm after, cont. • A language where unknowns are assumed in the most restrictive way, so accidental behaviors don't paralyze optimization • If a feature is ill-advised, why do we knock ourselves out to make it easy to use? Reference equality is a bad idea. Type tests are a bad idea. State is a bad (if sometimes unavoidable) idea. • You can opt into these things, so we don't ALL have to pay the price. Saturday, October 19, 13
  • 31. What I'm after, cont. • An editor which understands the meaning of the code I am manipulating at a deep level, and which offers many layers of information • Integration with revision control at the lowest level. My entire life is spent working with sublime and git: how is it that my editor, my DVCS, and my compiler are not in constant communication? • Whatever you're picturing, it doesn't go as far as I mean for it to go. Saturday, October 19, 13
  • 32. "And to a large extent, the people that we consider to be skilled software engineers are just those people that are really good at playing computer. But if we're writing our code on a computer... why are we simulating what a computer would do in our head? Why doesn't the computer just do it... and show us?" -- Bret Victor http://worrydream.com/ Saturday, October 19, 13
  • 33. "For the present-day darkness in the programmer's world the programmers themselves are responsible and nobody else." -- Dijkstra (pre-1970) http://www.cs.utexas.edu/users/EWD/ Saturday, October 19, 13