• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Tech Talk - Things I Learned at Scala Days 2013

Tech Talk - Things I Learned at Scala Days 2013



Tech Talk I gave at my company for the things I learned at Scala Days 2013

Tech Talk I gave at my company for the things I learned at Scala Days 2013



Total Views
Views on SlideShare
Embed Views



2 Embeds 6

http://www.linkedin.com 5
https://www.linkedin.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Tech Talk - Things I Learned at Scala Days 2013 Tech Talk - Things I Learned at Scala Days 2013 Presentation Transcript

    • Scala Days 2013 by Hung Lin @hunglin
    • Scala the **** out of NYC 3 days event @ NYC Scala Sunday @ meetup HQ: 8 talks Shapeless workshop on Monday
    • Hot Topics Scala 2.10 Style of Scala* Asynchronous Programming - akka Big Data / Streaming Data - Spark Macro Play
    • Keynote: Scala with Style by Martin Odersky, creator of scala
    • What is OOP good for? Fixed APIs with unknown implementations. e.g. Simula67 for simulation, Smalltalk for GUI Objects are characterized by state, identity and behavior - Grady Booch
    • OOP v.s. FP
    • Guideline #1 Keep it simple Simple Made Easy - Rich Hichey
    • Guideline #2 Don't pack too much in one expression find meaningful names for the intermediate results. It's not easy but it's important
    • Guideline #3 Prefer Functional vals v.s. vars recursions or combinators v.s. loops immutable v.s. mutable collections transformations v.s. CRUD*
    • Guideline #4 But, don't diabolize local state sometimes, mutable gives better performance sometimes, mutable adds convenience
    • vars v.s. vals var interfaces = parseClassHeader()... if (isAnnotation) interfaces += ClassFileAnnotation val parsedIfaces = parseClassHeader()... val interfaces = if (isAnnotation) parsedIfaces + ClassFileAnnotation else parsedIfaces
    • loops v.s. combinators val totalPrice = items.map(_.price).sum val totalDiscount = items.map(_.discount).sum
    • val (totalPrice, totalDiscount) = items.foldLeft((0.0, 0.0)) { case ((tprice, tdiscount), item) => (tprice + item.price, tdiscount + item.discount) } var totalPrice, totalDiscount = 0.0 for (item <- items) { totalPrice += item.price totalDiscount += item.discount }
    • Guideline #5 Careful with mutable objects val m = ArrayBuffer[Int]()
    • Guideline #6 Don't stop improving too early shrink code by factor of 10 + make it more readable at the same time clean and elegant solutions don't come to mind at the first time it is fun to find better solutions
    • Choice #1 Infix v.s. "."
    • Choice #2 Alphabetic v.s. Symbolic val xs = List("apples", "oranges", "pears") xs.foldLeft("")((result, i) => result + i) ("" /: xs)((result, i) => result + i)
    • Choice #3 Loop, recursion or combinators try conbinators first if it becomes too tedious, or efficiency is a big concern, try tail-recursion use loop for simple case or for readability
    • Choice #4 Procedures or "=" DON'T use procedure syntax def method: Unit = { // operations }
    • Choice #5 Private v.s. nested use nested function to avoid passing parameters use nested function for small functions don't nest too many levels
    • Choice #6 pattern matching v.s. dynamic dispatch the expression problem, check out , lecture 4.5 and 4.6scala class @ coursera
    • Choice #7 type parameters v.s. abstract type members try type parameters first avoid Animals[_] a good article by Bill Venners
    • Keynote: Scala in 2018 by Rod Johnson, creator of Spring
    • in 2018 Java is still alive Enterprise apps are using Scala Startups are still NOT using Scala
    • myths / points Readability over cleverness, LOC, FP, ... Scala needs coding standard Scala needs to move slower Embracing instead of hating Java
    • Any fool can write code that a computer can understand. Good programmers write code that human can understand. - Martin Fowler
    • Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. - Brian Kernighan
    • Asynchronous Programming
    • asynchronous v.s. parallel what else? who's doing it?
    • asynchronous v.s. batching
    • pitfall: thread pool? for tomcat, one thread handles one request
    • pitfall: back pressure
    • pitfall: performance v.s. scaling issue
    • pitfall: theory v.s. reality cost of thread context switch # of threads v.s. # of CPUs where is the bottleneck?
    • Some thoughts about our system
    • Upgrade to scala 2.10
    • Use akka asynchronous programming fault tolerance modular design
    • Use case class for data model treat data as map
    • Use finagle for service modules play is not for REST API why pay the cost of HTTP? statistics separate REST and Data layer modularity
    • Questions?