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

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
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 organizationRadu Cotescu
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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...apidays
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
[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
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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...Martijn de Jong
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 

Recently uploaded (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
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
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
[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
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 

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.