SlideShare a Scribd company logo
1 of 85
Download to read offline
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!

More Related Content

What's hot

MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptCaridy Patino
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturialWayne Tsai
 
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 usageWayne Tsai
 
Fertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureFertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureMike Fogus
 
Design Patterns in Go Code
Design Patterns in Go CodeDesign Patterns in Go Code
Design Patterns in Go CodeKamil Mówiński
 
Taking Inspiration From The Functional World
Taking Inspiration From The Functional WorldTaking Inspiration From The Functional World
Taking Inspiration From The Functional WorldPiotr Solnica
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.Mike Fogus
 
Python легко и просто. Красиво решаем повседневные задачи
Python легко и просто. Красиво решаем повседневные задачиPython легко и просто. Красиво решаем повседневные задачи
Python легко и просто. Красиво решаем повседневные задачиMaxim Kulsha
 
Imugi: Compiler made with Python
Imugi: Compiler made with PythonImugi: Compiler made with Python
Imugi: Compiler made with PythonHan Lee
 
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]Dimitrios Platis
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1Ke Wei Louis
 
Naïveté vs. Experience
Naïveté vs. ExperienceNaïveté vs. Experience
Naïveté vs. ExperienceMike Fogus
 
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 6Bryan Hughes
 
Useful javascript
Useful javascriptUseful javascript
Useful javascriptLei Kang
 

What's hot (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
 

Viewers also liked

Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Thibault Imbert
 
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 endThibault Imbert
 
Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...
Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...
Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...Aatif Awan
 
Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth.
Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth. Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth.
Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth. Traction Conf
 
Solution Business As a Growth Area for Post Operators?
Solution Business As a Growth Area for Post Operators?Solution Business As a Growth Area for Post Operators?
Solution Business As a Growth Area for Post Operators?Capgemini
 
Mobile Is Eating the World, 2016-2017
Mobile Is Eating the World, 2016-2017Mobile Is Eating the World, 2016-2017
Mobile Is Eating the World, 2016-2017a16z
 
Top Digital Transformation Trends and Priorities for 2016
Top Digital Transformation Trends and Priorities for 2016Top Digital Transformation Trends and Priorities for 2016
Top Digital Transformation Trends and Priorities for 2016Charlene Li
 
What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016
What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016
What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016Lora Cecere
 
Mobile Is Eating the World (2014)
Mobile Is Eating the World (2014)Mobile Is Eating the World (2014)
Mobile Is Eating the World (2014)a16z
 
Software is Eating Bio
Software is Eating BioSoftware is Eating Bio
Software is Eating Bioa16z
 
Network Effects
Network EffectsNetwork Effects
Network Effectsa16z
 
Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)a16z
 

Viewers also liked (12)

Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013
 
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
 
Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...
Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...
Lessons learned from growing LinkedIn to 400m members - Growth Hackers Confer...
 
Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth.
Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth. Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth.
Aatif Awan, Head of Growth LinkedIn - Growth Hacking is Dead. Long Live Growth.
 
Solution Business As a Growth Area for Post Operators?
Solution Business As a Growth Area for Post Operators?Solution Business As a Growth Area for Post Operators?
Solution Business As a Growth Area for Post Operators?
 
Mobile Is Eating the World, 2016-2017
Mobile Is Eating the World, 2016-2017Mobile Is Eating the World, 2016-2017
Mobile Is Eating the World, 2016-2017
 
Top Digital Transformation Trends and Priorities for 2016
Top Digital Transformation Trends and Priorities for 2016Top Digital Transformation Trends and Priorities for 2016
Top Digital Transformation Trends and Priorities for 2016
 
What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016
What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016
What Does Customer Service Mean? - Slide deck from webinar - 20 JAN 2016
 
Mobile Is Eating the World (2014)
Mobile Is Eating the World (2014)Mobile Is Eating the World (2014)
Mobile Is Eating the World (2014)
 
Software is Eating Bio
Software is Eating BioSoftware is Eating Bio
Software is Eating Bio
 
Network Effects
Network EffectsNetwork Effects
Network Effects
 
Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)
 

Similar to FITC '14 Toronto - Technology, a means to an end

Extreme Swift
Extreme SwiftExtreme Swift
Extreme SwiftMovel
 
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 codeLaurence Svekis ✔
 
.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#Bertrand Le Roy
 
Clean Code Development
Clean Code DevelopmentClean Code Development
Clean Code DevelopmentPeter Gfader
 
Kotlin : Happy Development
Kotlin : Happy DevelopmentKotlin : Happy Development
Kotlin : Happy DevelopmentMd Sazzad Islam
 
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 EditionPaulo Morgado
 
Practices For Becoming A Better Programmer
Practices For Becoming A Better ProgrammerPractices For Becoming A Better Programmer
Practices For Becoming A Better ProgrammerSrikanth Shreenivas
 
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 1Troy Miles
 
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 8tdc-globalcode
 
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 fruitVaclav Pech
 
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 -...Codemotion
 
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 ...Igalia
 
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?Federico Tomassetti
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionHans Höchtl
 
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 LabsAlfonso Peletier
 
Priming Java for Speed at Market Open
Priming Java for Speed at Market OpenPriming Java for Speed at Market Open
Priming Java for Speed at Market OpenAzul Systems Inc.
 

Similar to FITC '14 Toronto - Technology, a means to an end (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
 
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
 
Priming Java for Speed at Market Open
Priming Java for Speed at Market OpenPriming Java for Speed at Market Open
Priming Java for Speed at Market Open
 

More from Thibault Imbert

How to Hire the Right Growth Team
How to Hire the Right Growth TeamHow to Hire the Right Growth Team
How to Hire the Right Growth TeamThibault Imbert
 
Why and how you should build a growth team?
Why and how you should build a growth team?Why and how you should build a growth team?
Why and how you should build a growth team?Thibault Imbert
 
How to build a framework for customer empathy
How to build a framework for customer empathyHow to build a framework for customer empathy
How to build a framework for customer empathyThibault Imbert
 
Growth Hacking Conference '17 - Antwerp
Growth Hacking Conference '17 - AntwerpGrowth Hacking Conference '17 - Antwerp
Growth Hacking Conference '17 - AntwerpThibault Imbert
 
Growth Marketing Conference '17 Atlanta - Creating a Company Wide Growth Culture
Growth Marketing Conference '17 Atlanta - Creating a Company Wide Growth CultureGrowth Marketing Conference '17 Atlanta - Creating a Company Wide Growth Culture
Growth Marketing Conference '17 Atlanta - Creating a Company Wide Growth CultureThibault Imbert
 
Growth in unexpected places
Growth in unexpected placesGrowth in unexpected places
Growth in unexpected placesThibault Imbert
 

More from Thibault Imbert (6)

How to Hire the Right Growth Team
How to Hire the Right Growth TeamHow to Hire the Right Growth Team
How to Hire the Right Growth Team
 
Why and how you should build a growth team?
Why and how you should build a growth team?Why and how you should build a growth team?
Why and how you should build a growth team?
 
How to build a framework for customer empathy
How to build a framework for customer empathyHow to build a framework for customer empathy
How to build a framework for customer empathy
 
Growth Hacking Conference '17 - Antwerp
Growth Hacking Conference '17 - AntwerpGrowth Hacking Conference '17 - Antwerp
Growth Hacking Conference '17 - Antwerp
 
Growth Marketing Conference '17 Atlanta - Creating a Company Wide Growth Culture
Growth Marketing Conference '17 Atlanta - Creating a Company Wide Growth CultureGrowth Marketing Conference '17 Atlanta - Creating a Company Wide Growth Culture
Growth Marketing Conference '17 Atlanta - Creating a Company Wide Growth Culture
 
Growth in unexpected places
Growth in unexpected placesGrowth in unexpected places
Growth in unexpected places
 

Recently uploaded

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 

Recently uploaded (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 

FITC '14 Toronto - Technology, a means to an end

  • 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.