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

Forgetting Java: Why Java Should Die in Flames ...

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.

Piotr Limanowski

September 03, 2015
Tweet

More Decks by Piotr Limanowski

Other Decks in Programming

Transcript

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

    its Developers Along Piotr Limanowski @peel @peel #tricityjug 1
  2. dy•ing (dīˈĭng) v. Present participle of die. adj. About to

    die: dying language. @peel #tricityjug 5
  3. 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
  4. 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
  5. val virtues = "crazy" :: "eager" :: "young" :: "passionate"

    :: "enthusiastic" :: "happy" Nil virtues.dropWhile(wat) def wat = { @peel #tricityjug 26
  6. 1. experiment in repl 2. write test 3. [opt] how

    to make test pass in repl? 4. implement 5. refactor @peel #tricityjug 33
  7. smart prompt multiple sessions session preserving quick file changes project

    generation finding files | operator microservices @peel #tricityjug 36
  8. 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
  9. $ 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
  10. Timestamp | Status | Entity Id | What happened |

    What did user do @peel #tricityjug 63
  11. 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
  12. $ 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
  13. $ 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