Pro Yearly is on sale from $80 to $50! »

Forgetting Java: Why Java Should Die in Flames and Take its Developers Along

Forgetting Java: Why Java Should Die in Flames and Take its Developers Along

Video available from here: https://www.youtube.com/watch?v=LOcLwnV4Z2k
Java is old. Java is verbose. Java is ugly. Java is mocked and ridiculed by everyone and their dog. Hell, Java is dead. Well it's not but I'm preaching to the choir. Or am I? However convenient to say so, it's not exclusively Oracle to blame for Java's current state of the art. Java developers are guilty of laziness (the wrong kind), not questioning the tools they use (wrong again), following patterns (pretty much the right kind) they believe are blessed upon them yadda yadda yadda. Yet the communities around languages we find to be even lesser than Java offer world of a difference. The talk shows the tools, experiences and mindset we lack in the Java world. The virtues present elsewhere but needed here for Java to wipe the "enterprise-grade" solutions off the face of the world. Let's do this people. Let's do the right thing and get rid of the "enterprise" Java developers.

7cc972b7f87c78767e66045d03e85c9a?s=128

Piotr Limanowski

September 03, 2015
Tweet

Transcript

  1. Forgetting JAVA Why Java Should Die in Flames and Take

    its Developers Along Piotr Limanowski @peel @peel #tricityjug 1
  2. PART I IS JAVA DEAD? @peel #tricityjug 2

  3. Nope. @peel #tricityjug 3

  4. Java might be @peel #tricityjug 4

  5. dy•ing (dīˈĭng) v. Present participle of die. adj. About to

    die: dying language. @peel #tricityjug 5
  6. dying by "verbosity" "poor type inference" "weak type system" "low-level

    support for concurrency/parallelism" "dependency hell" "OSS mostly comes from android & enterprises" @peel #tricityjug 6
  7. If programming is going to be the thing I spend

    my time on, it damn well better be awesome. — David Heinemeier Hansen @peel #tricityjug 7
  8. But, really... @peel #tricityjug 8

  9. Is Java dead? @peel #tricityjug 9

  10. COBOL @peel #tricityjug 10

  11. TO @peel #tricityjug 11

  12. OTHER LANGUAGES @peel #tricityjug 12

  13. COBOL TO JAVA TRANSPILER @peel #tricityjug 13

  14. Why? @peel #tricityjug 14

  15. Java does not change. @peel #tricityjug 15

  16. Why not C then? @peel #tricityjug 16

  17. source & binary compatible since @peel #tricityjug 17

  18. FOREVER @peel #tricityjug 18

  19. type erasure @peel #tricityjug 19

  20. let's change @peel #tricityjug 20

  21. attract those crazy, eager, young, passionate, enthusiastic — someone, somewhere,

    someday @peel #tricityjug 21
  22. Y U NO CHANGE? @peel #tricityjug 22

  23. missing: happiness @peel #tricityjug 23

  24. PROFFESSIONAL SINNERS @peel #tricityjug 24

  25. PROFFESSIONAL ENTERPRISE SINNERS @peel #tricityjug 25

  26. val virtues = "crazy" :: "eager" :: "young" :: "passionate"

    :: "enthusiastic" :: "happy" Nil virtues.dropWhile(wat) def wat = { @peel #tricityjug 26
  27. PART II THE SINS @peel #tricityjug 27

  28. IGNORANCE @peel #tricityjug 28

  29. shell @peel #tricityjug 29

  30. multiplexer tmux shell ZSH w/ prezto editor spacemacs sane defaults:

    skwp/dotfiles @peel #tricityjug 30
  31. test feedback REPL @peel #tricityjug 31

  32. REPL driven development @peel #tricityjug 32

  33. 1. experiment in repl 2. write test 3. [opt] how

    to make test pass in repl? 4. implement 5. refactor @peel #tricityjug 33
  34. gui git client? @peel #tricityjug 34

  35. then how about... @peel #tricityjug 35

  36. smart prompt multiple sessions session preserving quick file changes project

    generation finding files | operator microservices @peel #tricityjug 36
  37. CLI ALL THE THINGS @peel #tricityjug 37

  38. Java can't into shell. Properly. @peel #tricityjug 38

  39. Grass is always greener: codegangsta/cli @peel #tricityjug 39

  40. package main import ( "os" "github.com/codegangsta/cli" //THIS ) func main()

    { app := cli.NewApp() app.Name = "greet" app.Usage = "fight the loneliness!" app.Flags = []cli.Flag { cli.StringFlag{ Name: "lang", Value: "english", Usage: "language for the greeting", }, } app.Action = func(c *cli.Context) { name := "someone" if len(c.Args()) > 0 { name = c.Args()[0] } if c.String("lang") == "spanish" { println("Hola", name) } else { println("Hello", name) } } app.Run(os.Args) } @peel #tricityjug 40
  41. Commander.rb Shell scopt.scala @peel #tricityjug 41

  42. version management @peel #tricityjug 42

  43. $ rvm install 2.2.3 $ rvm use 2.2.3 $ cd

    .. $ rvm install 2.2.4 $ rvm use 2.2.0 --default @peel #tricityjug 43
  44. jenv.io @peel #tricityjug 44

  45. distribution @peel #tricityjug 45

  46. OS packages self-contained fatjars containers @peel #tricityjug 46

  47. App Servers are DEAD @peel #tricityjug 47

  48. Server version dependency? @peel #tricityjug 48

  49. Server monitoring? @peel #tricityjug 49

  50. Call home @peel #tricityjug 50

  51. Dead man's switch @peel #tricityjug 51

  52. Status page @peel #tricityjug 52

  53. DEV W/O OPS @peel #tricityjug 53

  54. snowflake dev @peel #tricityjug 54

  55. every hour is Ship It hour @peel #tricityjug 55

  56. Continuous Delivery — Humble, Jez; Farley, David, Addison-Wesley, 2011 @peel

    #tricityjug 56
  57. Release It! — Nygard, Michael, Pragmatic Publishing, 2007 @peel #tricityjug

    57
  58. 2007 @peel #tricityjug 58

  59. bulkheading @peel #tricityjug 59

  60. circuit breakers @peel #tricityjug 60

  61. @peel #tricityjug 61

  62. Logging (frameworks) @peel #tricityjug 62

  63. Timestamp | Status | Entity Id | What happened |

    What did user do @peel #tricityjug 63
  64. EASY NOT SIMPLE @peel #tricityjug 64

  65. Build tools @peel #tricityjug 65

  66. Maven <project xmlns="http://maven.apache.org/POM/4.0.0" ...> ... </project> @peel #tricityjug 66

  67. Maven 17 <project xmlns="http://maven.apache.org/POM/4.0.0" ...> ... 1565 </project> @peel #tricityjug

    67
  68. 1565 @peel #tricityjug 68

  69. <PARENT> ! Separation? @peel #tricityjug 69

  70. Gradle 1 apply plugin: 'java' @peel #tricityjug 70

  71. GREAT SUCCESS @peel #tricityjug 71

  72. $ ls gradlew/ src/ build.gradle gradle.properties gradlew gradlew.bat settings.gradle @peel

    #tricityjug 72
  73. Ant 25 <project name="Lang" default="compile" basedir="."> ... 233 </project> @peel

    #tricityjug 73
  74. If I knew then what I know now, I would

    have tried using a real scripting language — James Duncan Davidson (creator of Ant) @peel #tricityjug 74
  75. XML @peel #tricityjug 75

  76. Grass is always greener: Rake @peel #tricityjug 76

  77. rails/rails 67 lines of code @peel #tricityjug 77

  78. task default: %w[test] task :test do ruby "test/unittest.rb" end @peel

    #tricityjug 78
  79. Sample @peel #tricityjug 79

  80. Grass is always greener: Mix (Elixir) @peel #tricityjug 80

  81. mix new my_project --module MyProject vim mix.exs mix deps.get npm

    install @peel #tricityjug 81
  82. Dependency management @peel #tricityjug 82

  83. 1565 XML @peel #tricityjug 83

  84. Grass is always greener: Bundler @peel #tricityjug 84

  85. $ gem install bundler $ bundle init source 'https://rubygems.org' gem

    'nokogiri' gem 'rails' gem 'rack', '>=1.0' gem 'thin', '~>1.1' gem 'globalid', github: 'rails/globalid', branch: 'master' @peel #tricityjug 85
  86. Grass is always greener: Mix (Elixir) @peel #tricityjug 86

  87. $ mix phoenix.server defmodule Chat.Mixfile do use Mix.Project def project

    do [app: :chat, version: "0.0.1", elixir: "~> 1.0", elixirc_paths: ["lib", "web"], compilers: [:phoenix] ++ Mix.compilers, deps: deps] end def application do [mod: {Chat, []}, applications: [:phoenix, :phoenix_html, :cowboy, :logger]] end def deps do [{:phoenix, "~> 0.17"}, {:phoenix_html, "~> 2.1"}, {:phoenix_live_reload, "~> 1.0"}, {:phoenix_ecto, "~> 0.9"}, {:postgrex, ">= 0.0.0"}, {:cowboy, "~> 1.0"}] end end @peel #tricityjug 87
  88. Web Frameworks @peel #tricityjug 88

  89. (Don't) fight the HTTP @peel #tricityjug 89

  90. Java EE is a dead fish ! @peel #tricityjug 90

  91. @Spring @peel #tricityjug 91

  92. Thanks to @Annotations, @Progress is @Unstoppable! — annotationmania.com @peel #tricityjug

    92
  93. spring boot w/ velocity @peel #tricityjug 93

  94. Dropwizard no magic involved @peel #tricityjug 94

  95. Grass is always greener: Phoenix @peel #tricityjug 95

  96. $ mix phoenix.new hello_phoenix $ cd hello_phoenix $ mix phoenix.server

    @peel #tricityjug 96
  97. FALSE IDOLS WAY TOO OFTEN @peel #tricityjug 97

  98. GOF Design patterns @peel #tricityjug 98

  99. It's good to know them. @peel #tricityjug 99

  100. It's essential to understand them. @peel #tricityjug 100

  101. FINALE @peel #tricityjug 101

  102. Update your tools Look beyond the fence Question everything Kill

    the old Have fun @peel #tricityjug 102
  103. One last thing... @peel #tricityjug 103

  104. _INASWAN @peel #tricityjug 104

  105. HAVE FUN @peel #tricityjug 105

  106. HAKUNA MATATA THANKS @peel #tricityjug 106