Chris Heilmann (codepo8), BTConf, Munich, January 2018
twitter.com/codepo8/status/922380136531537921
money.cnn.com/2018/01/15/technology/reading-robot-alibaba-microsoft-stanford/index.html
Machine Learning and AI is hot.
Machine Learning and AI is hot.
Automation worries everybody
http://wumo.com/wumo/2017/10/28
Blanket solution:
Everybody must learn
how to code.
But we’re not immune, either…
https://twitter.com/mattrickard/status/941065444919840769
Let’s rewind for a bit…
To me, coding was a
demo scene term.
Coding in the demo scene:
Programming in a
creative fashion,
pushing the
boundaries of limited
environments
+ performance
+ cleverness
+ inventiveness
- maintainability
- readability
Coder
Programmer
Developer
Engineer
+ maintainability
+ readability
~ cleverness
~ performance
- inventiveness
Coding for a living (my idea):
This wasn’t easy…
Results that kept us busy:
Worries of the battle-
weary people of the web.
Environment optimisation
Browser $x is the new IE6!
People who optimise for it are
terrible and probably kick puppies!
Kittens will die and unloved code
will clog up the web!
Reliance on abstractions
What if $library or $framework
goes away and that’s all people
learned?
Third-party dependencies
Frantically copy your code to floppy
disks for safekeeping, that’s what!
Yes, $service is amazing, but what
will you do when it is gone?
Are you sure it doesn’t like Trump
tweets on your behalf?
Third-party dependencies
Sure, $package does solve this
problem for you, but you don’t
own it and you don’t know what it
does.
In my days all we needed was two
lines of CSS and changed it every
four days!
Generic code bloat
Generic code tries to solve too
many things you don’t need
solving.
My clients haven’t upgraded in
years, if malware developers can
support them, so should you!
Backwards compatibility
Sure, $feature of the web is cool,
but what about people on older
browsers?
Notepad and FTP was good
enough for me and made me the
person I am today!
Maintaining a simple starting point
Everybody is invited to build for the
web. You don’t need to use a
certain editor or training.
We’re good at
inventing and
advocating best
practices…
Less so at using them…
Why is that?
People are people…
The curious case of
Benjamin a Button
Story time:
Professional development:
“Wow, how did you do that?”
“Have you finished this?”
Instead we get:
Only a few of us ever hear:
Everything counts in large amounts
It is not about
building the
perfect, gorgeous,
beautiful solution.
Ubiquity demands
simpler, disposable
and modular solutions
to cover the growing
demand.
With increased complexity
and demand, any software
product will sooner or later
use pre-built components.
The natural software evolution:
▪ Easy to use
▪ Easy to keep
updated
▪ Limited pollution of
the final product
▪ Appropriate tooling
Great components:
These are
problems, but
dated ones, many
of which have
technical solutions.
▪ Environment optimisation
▪ Reliance on abstractions
▪ Third party dependencies
▪ Generic code bloat
▪ Backwards compatibility
▪ Maintaining a simple starting point
Worries of the battle-weary people of the web
Why is this all so complex?
medium.freecodecamp.org/making-sense-of-front-end-build-tools-3a1b3a87043b
Toolchains and processes:
Ensuring that large teams can
work safely together.
From code to people:
We create code that might not
be optimised, but is easier to
convert and maintain.
A common evolution:
Languages get abstractions to
solve common tasks with less
code.
A simple task:
Find the largest member
of an array
Keeping it basic…
Using built-in methods and objects…
Keeping it concise and up-to-date…
Humans rely heavily on
technology these days.
Some things to consider:
This gives us plenty of
opportunity to endanger our
end users.
Some things to consider:
Abstractions are not
inherently a “lazy way out” or
“dangerous”…
Some things to consider:
Abstractions are a consensus
to enable lots of people to
build bigger and better
products.
Some things to consider:
To play well with
others, we need to
establish rules.
We’re not code warriors
fighting the man or the good
fight.
Old approaches don’t apply:
We are engineers building
solutions in teams for people
to use.
Focusing on the end product:
It may be the warriors
who get the glory. But
it's the engineers who
build societies.
– Steve Jobs
It may be the warriors
who get the glory. But
it's the engineers who
build societies.
– B'elanna Torres
“That’s the duty of the old,” said the
Librarian, “to be anxious on behalf of the
young. And the duty of the young is to
scorn the anxiety of the old.
– Pullman, Philip. “The Northern Lights.”
It is much more
important what
you create than
how you do it.
▪ Environment optimisation
▪ Reliance on abstractions
▪ Third party dependencies
▪ Generic code bloat
▪ Backwards compatibility
▪ Maintaining a simple starting point
Worries of the battle-weary people of the web
I envy people who start now:
Good tools teach you code
while you write it.
Tooling helps us:
Open and
extensible editors
that integrate with
our workflows and
environments.
code.visualstudio.com
Linting and auto-
complete built in –
think autocorrect
for code…
vscodecandothat.com
Collaborative
editing and
education tools.
code.visualstudio.com/blogs/2017/11/15/live-share
codepen.io
jsbin.com
glitch.com
Good tools allow you to find
bottlenecks and obvious flaws.
Tooling helps us:
Browsers come with
excellent development and
debugging tools.
Linting and validation
tools tell us what to
fix – even as a
continuous
integration step.
sonarwhal.com
Thinking with reusable
components is not
only a thing for
coders.
More tools and processes
to strip the overhead
before shipping to the end
user.
The digital hoarding solution:
It flows over into the
design space. Style
guides, pattern libraries.
When we have
predictable, reusable
and well working
parts to mix and
match we can go
even further…
Computers are good at
repeating things, finding
patterns and improving
them.
Humans suck at that.
autodraw.com
quickdraw.withgoogle.com
We built an initial prototype using about a dozen hand-drawn
components as training data, open source machine learning
algorithms, and a small amount of intermediary code to render
components from our design system into the browser. We were
pleasantly surprised with the result:
airbnb.design/sketching-interfaces
We built an initial prototype using about a dozen hand-drawn
components as training data, open source machine learning
algorithms, and a small amount of intermediary code to render
components from our design system into the browser. We were
pleasantly surprised with the result:
blog.floydhub.com/turning-design-mockups-into-code-with-deep-learning/
We built an initial prototype using about a
dozen hand-drawn components as training
data, open source machine learning
algorithms, and a small amount of
intermediary code to render components
from our design system into the browser.
“
airbnb.design/sketching-interfaces
But where is the
fun in all that?
twitter.com/kurtiskemple/status/930419045769318400
Humans > Machines
Questioning the dogma:
Everybody must learn
how to code.
Questioning the dogma:
Everybody must learn
how to solve problems.
▪ To create gorgeous new components
▪ To run unencumbered pet projects
▪ To help better the tools we use
▪ To play with upcoming tech
▪ To drop out of the rat race and clear our heads
▪ To help each other when we’re stuck
▪ To help others get excited about what we do
By automating the neccessary we gain time:
Chris Heilmann
@codepo8

Sacrificing the golden calf of "coding"