SlideShare una empresa de Scribd logo
1 de 85
Descargar para leer sin conexión
Technology,
a means to
an end.
Thibault Imbert
1996 - Discovered BASIC on my dad’s T07.


1998 - Started playing with Flash in my bedroom
!
2004 - Teaching programming
!
2008 - Joined Adobe (France)
!
2010 - Moved to San Francisco (PM for Flash Player)
!
2014 - Working on next-gen web authoring tools/services
projectparfait.adobe.com
CSS Shapes
Blend modes
Masking
justinjackson.ca/words.html
Technology
to serve a goal.
Focus on the goal, implementation is a detail.
detail.
C++, Objective-C, ActionScript, JavaScript, Java, C#…
Don’t place a technology.
Use the best one to do the best job.
DHTML!
Flash
Ajax!
Flash
Silverlight!
Flash
Familiar?
Native!
HTML/JS!
It is about the result, the end goal.
Technologies, come and go.
So I should not care?
Be passionate, stay curious,
and always assume you don’t know.
"The most dangerous thought you can have as a creative
person is to think you know what you're doing.” - Bret Victor
JavaScript will win.
C++ will win.
Obj-C will win.
Dart will win.
Why should one win?
There is no safe bet.
By being religious, you barricade yourself.
You stop learning and start having
preconceived ideas.
JavaScript is for “scripting” only.
asmjs.org
an extraordinarily optimizable, low-level subset of JavaScript
JavaScript is not object-oriented.
ES6
//	
  entities.js	
  
module	
  entities	
  {	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  export	
  class	
  Person	
  {	
  
!
	
  	
  	
  	
  	
  	
  private	
  message	
  =	
  "Hi	
  my	
  name	
  is	
  ";	
  
!
	
  	
  	
  	
  	
  	
  constructor	
  (public	
  name,	
  public	
  age,	
  public	
  town){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  this.age	
  -­‐	
  age;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  this.town	
  =	
  town;	
  
	
  	
  	
  	
  	
  	
  }	
  
!
	
  	
  	
  	
  	
  	
  talk(){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  this.message	
  +	
  this.name;	
  
	
  	
  	
  	
  	
  	
  }	
  
!
	
  	
  	
  	
  	
  	
  get	
  isAbove18(){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  this.age	
  >=	
  18;	
  
	
  	
  	
  	
  	
  	
  }	
  
}
But what if I want static-typing?
www.typescriptlang.org
//	
  entities.js	
  
module	
  entities	
  {	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  export	
  class	
  Person	
  {	
  
!
	
  	
  	
  	
  	
  	
  private	
  message	
  :string	
  =	
  "Hi	
  my	
  name	
  is	
  ";	
  
!
	
  	
  	
  	
  	
  	
  constructor	
  (public	
  name:	
  string,	
  public	
  age:	
  number,	
  public	
  	
  
town:	
  string){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  this.age	
  =	
  age;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  this.town	
  =	
  town;	
  
	
  	
  	
  	
  	
  	
  }	
  
!
	
  	
  	
  	
  	
  	
  talk(){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  this.message	
  +	
  this.name;	
  
	
  	
  	
  	
  	
  	
  }	
  
!
	
  	
  	
  	
  	
  	
  get	
  isAbove18(){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  this.age	
  >=	
  18;	
  
	
  	
  	
  	
  	
  	
  }	
  
}
Which will generate plain ES5 compatible JS
var	
  Person	
  =	
  (function	
  ()	
  {	
  
	
  	
  	
  	
  function	
  Person(name,	
  age,	
  town)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.age	
  =	
  age;	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.town	
  =	
  town;	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.message	
  =	
  "Hi	
  my	
  name	
  is	
  ";	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.age	
  -­‐	
  age;	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.town	
  =	
  town;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  Person.prototype.talk	
  =	
  function	
  ()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  this.message	
  +	
  this.name;	
  
	
  	
  	
  	
  };	
  
!
	
  	
  	
  	
  Object.defineProperty(Person.prototype,	
  "isAbove18",	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  get:	
  function	
  ()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  this.age	
  >=	
  18;	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  enumerable:	
  true,	
  
	
  	
  	
  	
  	
  	
  	
  	
  configurable:	
  true	
  
	
  	
  	
  	
  });	
  
	
  	
  	
  	
  return	
  Person;	
  
})();	
  
Challenge, run the original Space Invaders ROM in JS
Ported in an hour to JavaScript
Chose the best option (for me)
to get the job done.
C# is for Windows developers only
Xamarin
C++ is way too low-level.
C++11
#include	
  <iostream>	
  
#include	
  <stdint.h>	
  
#include	
  <iostream>	
  
#include	
  <vector>	
  
#include	
  <algorithm>	
  
!
int	
  main(int	
  argc,	
  const	
  char	
  *	
  argv[])	
  
{	
  
	
  	
  	
  	
  std::vector<uint32_t>	
  data	
  =	
  {	
  234,	
  76767,	
  43,	
  343,	
  4322,	
  33,	
  122	
  };	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  std::sort(data.begin(),	
  data.end(),	
  []	
  (uint32_t	
  a,	
  uint32_t	
  b)	
  {	
  return	
  a	
  <	
  b;	
  });	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  for	
  (auto	
  i	
  =	
  data.begin();	
  i	
  <	
  data.end();	
  i++)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  std::cout	
  <<	
  *i	
  <<	
  std::endl;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  class	
  MyClass	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  public:	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  MyClass(size_t	
  size)	
  :	
  m_size(size)	
  {	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  MyClass(const	
  char	
  *str)	
  :	
  MyClass(strlen(str))	
  {	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  size_t	
  Size()	
  {	
  return	
  m_size;	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  private:	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  size_t	
  m_size;	
  
	
  	
  	
  	
  };	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  MyClass	
  obj("Hello!");	
  
	
  	
  	
  	
  std::cout	
  <<	
  obj.Size()	
  <<	
  std::endl;	
  
	
  	
  	
  	
  return	
  0;	
  
}
I am a web guy, doing scripting, cool
native stuff is hard.
Starry Night by Petros Vrellis
openFrameworks
Functional programming languages are not for real world usage.
Imperative programming is:
I want a latte.
Heat some milk.
Put it into a cup.
Brew some coffee with a stovetop Moka pot.
Pour the coffee into the heated milk.
Thank you.
Functional programming is:
I want a latte.
Thank you.
Have a look at F#
let numbers = [ 0..2..20 ]
!
val numbers : int list = [0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20]
var value = Math.abs ( Math.round ( Math.sqrt ( 3.56 ) ) );
let result =
3.56
|> System.Math.Sqrt
|> System.Math.Round
|> System.Math.Abs
let numbers = [ 0..3..30 ]
let square x = x * x
!
let sumSquare nums =
let mutable buffer = 0
for i in nums do
buffer <- buffer + square i
buffer
!
let result = sumSquare numbers
let sumSquare nums =
nums
|> Seq.map ( fun x -> x * x )
|> Seq.sum
Multicore and web apps? No way.
&
myPA	
  =	
  [1,	
  2,	
  3];	
  
	
  	
  
//	
  incrementation	
  is	
  parallelized	
  on	
  the	
  GPU	
  
myPlusPA	
  =	
  myPA.mapPar(val	
  =>	
  val	
  +	
  1);	
  
myPA	
  =	
  [1,	
  2,	
  3];	
  
	
  	
  
//	
  incrementation	
  is	
  parallelized	
  on	
  the	
  GPU	
  
myPlusPA	
  =	
  myPA.mapPar(val	
  =>	
  val	
  +	
  1);	
  
OpenCL (behind the scene)
Multicore and web apps? No way.
River Trail
bit.ly/qme8BY
You may never use these, but they will
make you a better developer, so keep
learning new stuff.
Creativity, but stepping back from technology.
Goal
Experiment
Fail
Iterate
Not good!
Not good
Looks good!
Looks good!
Success is not an event, it is a process.
James Clear.
@thibault_imbert
Thank you!

Más contenido relacionado

La actualidad más candente

Fertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureFertile Ground: The Roots of Clojure
Fertile Ground: The Roots of Clojure
Mike Fogus
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
Mike Fogus
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
Lei Kang
 

La actualidad más candente (20)

MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScript
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturial
 
C++ L01-Variables
C++ L01-VariablesC++ L01-Variables
C++ L01-Variables
 
Coscup2021 - useful abstractions at rust and it's practical usage
Coscup2021 - useful abstractions at rust and it's practical usageCoscup2021 - useful abstractions at rust and it's practical usage
Coscup2021 - useful abstractions at rust and it's practical usage
 
Fertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureFertile Ground: The Roots of Clojure
Fertile Ground: The Roots of Clojure
 
Design Patterns in Go Code
Design Patterns in Go CodeDesign Patterns in Go Code
Design Patterns in Go Code
 
Taking Inspiration From The Functional World
Taking Inspiration From The Functional WorldTaking Inspiration From The Functional World
Taking Inspiration From The Functional World
 
C++ L05-Functions
C++ L05-FunctionsC++ L05-Functions
C++ L05-Functions
 
ProgrammingwithGOLang
ProgrammingwithGOLangProgrammingwithGOLang
ProgrammingwithGOLang
 
Lambda expressions in C++
Lambda expressions in C++Lambda expressions in C++
Lambda expressions in C++
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
 
Python легко и просто. Красиво решаем повседневные задачи
Python легко и просто. Красиво решаем повседневные задачиPython легко и просто. Красиво решаем повседневные задачи
Python легко и просто. Красиво решаем повседневные задачи
 
Imugi: Compiler made with Python
Imugi: Compiler made with PythonImugi: Compiler made with Python
Imugi: Compiler made with Python
 
ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview
 
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
 
Naïveté vs. Experience
Naïveté vs. ExperienceNaïveté vs. Experience
Naïveté vs. Experience
 
The Lesser Known Features of ECMAScript 6
The Lesser Known Features of ECMAScript 6The Lesser Known Features of ECMAScript 6
The Lesser Known Features of ECMAScript 6
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
 

Destacado

The Shifting Nature of FED Role
The Shifting Nature of FED RoleThe Shifting Nature of FED Role
The Shifting Nature of FED Role
FITC
 
Functional Web Development
Functional Web DevelopmentFunctional Web Development
Functional Web Development
FITC
 

Destacado (20)

Means end chain
Means end chainMeans end chain
Means end chain
 
Beyond the Waterfall: Rethinking How We Work
Beyond the Waterfall: Rethinking How We WorkBeyond the Waterfall: Rethinking How We Work
Beyond the Waterfall: Rethinking How We Work
 
Managing Responsive Design Projects
Managing Responsive Design ProjectsManaging Responsive Design Projects
Managing Responsive Design Projects
 
21st Century Crystal Ball
21st Century Crystal Ball21st Century Crystal Ball
21st Century Crystal Ball
 
Front-end Tools: Sifting Through the Madness
 Front-end Tools: Sifting Through the Madness Front-end Tools: Sifting Through the Madness
Front-end Tools: Sifting Through the Madness
 
The Shifting Nature of FED Role
The Shifting Nature of FED RoleThe Shifting Nature of FED Role
The Shifting Nature of FED Role
 
Functional Web Development
Functional Web DevelopmentFunctional Web Development
Functional Web Development
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
 
Accumulations with Nicholas Felton
Accumulations with Nicholas FeltonAccumulations with Nicholas Felton
Accumulations with Nicholas Felton
 
CSS: A Slippery Slope to the Backend
CSS: A Slippery Slope to the BackendCSS: A Slippery Slope to the Backend
CSS: A Slippery Slope to the Backend
 
Your UX is not my UX
Your UX is not my UXYour UX is not my UX
Your UX is not my UX
 
Graphic Designer to Object Designer: Your 3D Printing Evolution
Graphic Designer to Object Designer: Your 3D Printing EvolutionGraphic Designer to Object Designer: Your 3D Printing Evolution
Graphic Designer to Object Designer: Your 3D Printing Evolution
 
Creating Content that Captivates
Creating Content that CaptivatesCreating Content that Captivates
Creating Content that Captivates
 
Kickstarting Your Stupid Magazine
Kickstarting Your Stupid MagazineKickstarting Your Stupid Magazine
Kickstarting Your Stupid Magazine
 
Building Tools for the Next Web
Building Tools for the Next WebBuilding Tools for the Next Web
Building Tools for the Next Web
 
Unleashing the Power of 3D with WebJS
Unleashing the Power of 3D with WebJSUnleashing the Power of 3D with WebJS
Unleashing the Power of 3D with WebJS
 
The Future is in Pieces
The Future is in PiecesThe Future is in Pieces
The Future is in Pieces
 
Everydays
EverydaysEverydays
Everydays
 
Squishy pixels
Squishy pixelsSquishy pixels
Squishy pixels
 
Gamify Your Life – My Epic Quest of Awesome - Eric Boyd
Gamify Your Life – My Epic Quest of Awesome - Eric BoydGamify Your Life – My Epic Quest of Awesome - Eric Boyd
Gamify Your Life – My Epic Quest of Awesome - Eric Boyd
 

Similar a Technology: A Means to an End with Thibault Imbert

JavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeJavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your code
Laurence Svekis ✔
 

Similar a Technology: A Means to an End with Thibault Imbert (20)

Extreme Swift
Extreme SwiftExtreme Swift
Extreme Swift
 
JavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeJavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your code
 
Effective Object Oriented Design in Cpp
Effective Object Oriented Design in CppEffective Object Oriented Design in Cpp
Effective Object Oriented Design in Cpp
 
.NET Foundation, Future of .NET and C#
.NET Foundation, Future of .NET and C#.NET Foundation, Future of .NET and C#
.NET Foundation, Future of .NET and C#
 
Clean Code Development
Clean Code DevelopmentClean Code Development
Clean Code Development
 
Kotlin : Happy Development
Kotlin : Happy DevelopmentKotlin : Happy Development
Kotlin : Happy Development
 
NetPonto - The Future Of C# - NetConf Edition
NetPonto - The Future Of C# - NetConf EditionNetPonto - The Future Of C# - NetConf Edition
NetPonto - The Future Of C# - NetConf Edition
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
Practices For Becoming A Better Programmer
Practices For Becoming A Better ProgrammerPractices For Becoming A Better Programmer
Practices For Becoming A Better Programmer
 
Game Design and Development Workshop Day 1
Game Design and Development Workshop Day 1Game Design and Development Workshop Day 1
Game Design and Development Workshop Day 1
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
Pick up the low-hanging concurrency fruit
Pick up the low-hanging concurrency fruitPick up the low-hanging concurrency fruit
Pick up the low-hanging concurrency fruit
 
University of arizona mobile matters - technology, a means to an end
University of arizona   mobile matters - technology, a means to an endUniversity of arizona   mobile matters - technology, a means to an end
University of arizona mobile matters - technology, a means to an end
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
How much performance can you get out of Javascript? - Massimiliano Mantione -...
How much performance can you get out of Javascript? - Massimiliano Mantione -...How much performance can you get out of Javascript? - Massimiliano Mantione -...
How much performance can you get out of Javascript? - Massimiliano Mantione -...
 
Community-driven Language Design at TC39 on the JavaScript Pipeline Operator ...
Community-driven Language Design at TC39 on the JavaScript Pipeline Operator ...Community-driven Language Design at TC39 on the JavaScript Pipeline Operator ...
Community-driven Language Design at TC39 on the JavaScript Pipeline Operator ...
 
How do you create a programming language for the JVM?
How do you create a programming language for the JVM?How do you create a programming language for the JVM?
How do you create a programming language for the JVM?
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Es6 hackathon
Es6 hackathonEs6 hackathon
Es6 hackathon
 
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
TypeScript - All you ever wanted to know - Tech Talk by Epic LabsTypeScript - All you ever wanted to know - Tech Talk by Epic Labs
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
 

Más de FITC

Designing for Digital Health
Designing for Digital HealthDesigning for Digital Health
Designing for Digital Health
FITC
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript Performance
FITC
 
HyperLight Websites
HyperLight WebsitesHyperLight Websites
HyperLight Websites
FITC
 
Everything is Terrifying
Everything is TerrifyingEverything is Terrifying
Everything is Terrifying
FITC
 
Post-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanPost-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future Human
FITC
 

Más de FITC (20)

Cut it up
Cut it upCut it up
Cut it up
 
Designing for Digital Health
Designing for Digital HealthDesigning for Digital Health
Designing for Digital Health
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript Performance
 
Surviving Your Tech Stack
Surviving Your Tech StackSurviving Your Tech Stack
Surviving Your Tech Stack
 
How to Pitch Your First AR Project
How to Pitch Your First AR ProjectHow to Pitch Your First AR Project
How to Pitch Your First AR Project
 
Start by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerStart by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the Answer
 
Cocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryCocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s Story
 
Everyday Innovation
Everyday InnovationEveryday Innovation
Everyday Innovation
 
HyperLight Websites
HyperLight WebsitesHyperLight Websites
HyperLight Websites
 
Everything is Terrifying
Everything is TerrifyingEverything is Terrifying
Everything is Terrifying
 
Post-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanPost-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future Human
 
The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)
 
East of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameEast of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR Game
 
Creating a Proactive Healthcare System
Creating a Proactive Healthcare SystemCreating a Proactive Healthcare System
Creating a Proactive Healthcare System
 
World Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignWorld Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product Design
 
The Power of Now
The Power of NowThe Power of Now
The Power of Now
 
High Performance PWAs
High Performance PWAsHigh Performance PWAs
High Performance PWAs
 
Rise of the JAMstack
Rise of the JAMstackRise of the JAMstack
Rise of the JAMstack
 
From Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFrom Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self Discovery
 
Projects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForProjects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time For
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Technology: A Means to an End with Thibault Imbert

  • 1. Technology, a means to an end. Thibault Imbert
  • 2. 1996 - Discovered BASIC on my dad’s T07. 
 1998 - Started playing with Flash in my bedroom ! 2004 - Teaching programming ! 2008 - Joined Adobe (France) ! 2010 - Moved to San Francisco (PM for Flash Player) ! 2014 - Working on next-gen web authoring tools/services projectparfait.adobe.com
  • 6.
  • 9. Focus on the goal, implementation is a detail.
  • 11.
  • 12. C++, Objective-C, ActionScript, JavaScript, Java, C#…
  • 13. Don’t place a technology. Use the best one to do the best job.
  • 18. It is about the result, the end goal.
  • 19.
  • 20.
  • 21.
  • 23. So I should not care?
  • 24. Be passionate, stay curious, and always assume you don’t know.
  • 25.
  • 26. "The most dangerous thought you can have as a creative person is to think you know what you're doing.” - Bret Victor
  • 27. JavaScript will win. C++ will win. Obj-C will win. Dart will win. Why should one win? There is no safe bet.
  • 28. By being religious, you barricade yourself.
  • 29. You stop learning and start having preconceived ideas.
  • 30. JavaScript is for “scripting” only.
  • 31.
  • 32. asmjs.org an extraordinarily optimizable, low-level subset of JavaScript
  • 33. JavaScript is not object-oriented.
  • 34. ES6
  • 35. //  entities.js   module  entities  {                    export  class  Person  {   !            private  message  =  "Hi  my  name  is  ";   !            constructor  (public  name,  public  age,  public  town){                      this.name  =  name;                      this.age  -­‐  age;                      this.town  =  town;              }   !            talk(){                      return  this.message  +  this.name;              }   !            get  isAbove18(){                      return  this.age  >=  18;              }   }
  • 36. But what if I want static-typing?
  • 38. //  entities.js   module  entities  {                    export  class  Person  {   !            private  message  :string  =  "Hi  my  name  is  ";   !            constructor  (public  name:  string,  public  age:  number,  public     town:  string){                      this.name  =  name;                      this.age  =  age;                      this.town  =  town;              }   !            talk(){                      return  this.message  +  this.name;              }   !            get  isAbove18(){                      return  this.age  >=  18;              }   }
  • 39. Which will generate plain ES5 compatible JS
  • 40. var  Person  =  (function  ()  {          function  Person(name,  age,  town)  {                  this.name  =  name;                  this.age  =  age;                  this.town  =  town;                  this.message  =  "Hi  my  name  is  ";                  this.name  =  name;                  this.age  -­‐  age;                  this.town  =  town;          }          Person.prototype.talk  =  function  ()  {                  return  this.message  +  this.name;          };   !        Object.defineProperty(Person.prototype,  "isAbove18",  {                  get:  function  ()  {                          return  this.age  >=  18;                  },                  enumerable:  true,                  configurable:  true          });          return  Person;   })();  
  • 41. Challenge, run the original Space Invaders ROM in JS
  • 42. Ported in an hour to JavaScript
  • 43.
  • 44. Chose the best option (for me) to get the job done.
  • 45. C# is for Windows developers only
  • 46.
  • 47.
  • 48.
  • 49.
  • 51.
  • 52. C++ is way too low-level.
  • 53. C++11
  • 54. #include  <iostream>   #include  <stdint.h>   #include  <iostream>   #include  <vector>   #include  <algorithm>   ! int  main(int  argc,  const  char  *  argv[])   {          std::vector<uint32_t>  data  =  {  234,  76767,  43,  343,  4322,  33,  122  };                    std::sort(data.begin(),  data.end(),  []  (uint32_t  a,  uint32_t  b)  {  return  a  <  b;  });                    for  (auto  i  =  data.begin();  i  <  data.end();  i++)  {                  std::cout  <<  *i  <<  std::endl;          }                    class  MyClass  {                  public:                          MyClass(size_t  size)  :  m_size(size)  {  }                          MyClass(const  char  *str)  :  MyClass(strlen(str))  {  }                          size_t  Size()  {  return  m_size;  }                  private:                          size_t  m_size;          };                    MyClass  obj("Hello!");          std::cout  <<  obj.Size()  <<  std::endl;          return  0;   }
  • 55. I am a web guy, doing scripting, cool native stuff is hard.
  • 56.
  • 57. Starry Night by Petros Vrellis
  • 59. Functional programming languages are not for real world usage.
  • 60. Imperative programming is: I want a latte. Heat some milk. Put it into a cup. Brew some coffee with a stovetop Moka pot. Pour the coffee into the heated milk. Thank you.
  • 61. Functional programming is: I want a latte. Thank you.
  • 62. Have a look at F#
  • 63. let numbers = [ 0..2..20 ] ! val numbers : int list = [0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20]
  • 64. var value = Math.abs ( Math.round ( Math.sqrt ( 3.56 ) ) ); let result = 3.56 |> System.Math.Sqrt |> System.Math.Round |> System.Math.Abs
  • 65. let numbers = [ 0..3..30 ] let square x = x * x ! let sumSquare nums = let mutable buffer = 0 for i in nums do buffer <- buffer + square i buffer ! let result = sumSquare numbers
  • 66. let sumSquare nums = nums |> Seq.map ( fun x -> x * x ) |> Seq.sum
  • 67. Multicore and web apps? No way.
  • 68. &
  • 69. myPA  =  [1,  2,  3];       //  incrementation  is  parallelized  on  the  GPU   myPlusPA  =  myPA.mapPar(val  =>  val  +  1);  
  • 70. myPA  =  [1,  2,  3];       //  incrementation  is  parallelized  on  the  GPU   myPlusPA  =  myPA.mapPar(val  =>  val  +  1);  
  • 72. Multicore and web apps? No way.
  • 74. You may never use these, but they will make you a better developer, so keep learning new stuff.
  • 75. Creativity, but stepping back from technology.
  • 76.
  • 77.
  • 79.
  • 80.
  • 81.
  • 82. Not good! Not good Looks good! Looks good!
  • 83.
  • 84. Success is not an event, it is a process. James Clear.