Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How I Spent All My Savings Reinventing Programming

Luis Solano
September 14, 2017

How I Spent All My Savings Reinventing Programming

I'm sure you've had the same question too: what is "The Best Way™" of programming? Agile? TDD? Haskell? Pair programming? I believe the answer has nothing to do with that. I've spent the last two years thinking exclusively about this question and working towards a solution. Do silver bullets exist? Let's find out.

Luis Solano

September 14, 2017
Tweet

More Decks by Luis Solano

Other Decks in Programming

Transcript

  1. !

  2. PROGRAMMING WAS NEVER INVENTED PROGRAMMING WAS NEVER INVENTED PROGRAMMING WAS

    NEVER INVENTED PROGRAMMING WAS NEVER INVENTED PROGRAMMING WAS NEVER INVENTED PROGRAMMING WAS NEVER INVENTED PROGRAMMING WAS NEVER INVENTED PROGRAMMING WAS NEVER INVENTED
  3. ESSENTIAL ACCIDENTAL Inherent complexity of the problem that exist before

    adding computers to the mix The rest of the complexity, added by the computer
  4. "

  5. domain Twitter { entity User { username : String email

    : String tweets : Many[Tweet] following : Many[User] timeline <= Tweet.where(author in following) } entity Tweet { text : String author : User } } DOMAIN MODELLING
  6. persistance { domain Twitter { database: MySQL query User.timeline {

    materialize: true consistency: eventual database: Cassandra } } } ACCIDENTAL STUFF
  7. Source editing ViewController.swift import UIKit class ViewController: UIViewController { override

    func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } Source editing
  8. Projectional editing MyProgram.ast Editor render if (a > 2) {

    performA() } else { performB() } E1 update
  9. if (a > 2) { performA() } else { performB()

    } Projectional editing MyProgram.ast Editor render if (a > 2) { performA() } else { } update E1
  10. Projectional editing func myFunction() -> Int { return 2 +

    2 } 123 728 662 918 331 092 MyProgram.ast
  11. E1 E2 E3 E4 E5 10010010110010100 10011011101100101 00100100100101011 00100101100101001 00110111011001010

    010010010010101 Compiler executable 10010010110010100 10011011101100101 00100100100101011 00100101100101001 00110111011001010 010010010010101 DB migrations 10010010110010100 10011011101100101 00100100100101011 00100101100101001 00110111011001010 010010010010101 Deploy scripts
  12. domain Twitter { entity User { username : String email

    : String tweets : Many[Tweet] following : Many[User] timeline <= Tweet.where(author in following) } entity Tweet { text : String author : User } } DOMAIN MODELLING