A talk about the current state of java enterprise development, evaluation of the available alternatives to conventional enterprise solutions, tools and languages for the JVM, and possibly beyond.
CREATE A BETTER SOCIETY” Hadi Hariri from jetbrains - Codemotion Rome 2014 slides available here www.slideshare.net/Codemotion/developing-in-a-decade Do you still care?
COMPLEXITY, IMPERFECTIONS SOPHISTICATED SOLUTIONS TO PROBLEMS... ... NEEDED TO SOLVE THE INDUSTRY NEEDS LIKE FASTER TIME TO MARKET AND TIGHT DELIVERY SCHEDULES
HANDLE THIS KIND OF ISSUES As a personal note, I recommend to take a look at the idea underlying agile, forgetting about costly certifications and easy promises
"dbo") @XmlRootElement @NamedQueries({ @NamedQuery( name = "Person.findAll", query = "SELECT p FROM Person p"), @NamedQuery( name = "Person.findByPersonId", query = "SELECT p FROM Person p WHERE p.personId = :pId"), @NamedQuery( name = "Person.findByPersonName", query = "SELECT p FROM Person p WHERE p.personName = :pName"), @NamedQuery( name = "Person.findByPersonFamily", query = "SELECT p FROM Person p WHERE p.personFamily = :pFamily"), @NamedQuery( name = "Person.findByPersonReference", query = "SELECT p FROM Person p WHERE p.personReference = :pRef")}) public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @NotNull @Column(name = "person_id", nullable = false) private Integer personId; @Size(max = 50) @Column(name = "person_name", length = 50) source from https://groups.google.com/forum/#!topic/querydsl/4lgLx3QQqBA
Cache Disable bit of CR0 CR0_NW equ 020000000h ; Not Write-through bit of CR0 DisableCache proc pushf ; save the flags push eax ; save eax cli ; disable interrupts while we do this mov eax,cr0 ; read CR0 or eax,CR0_CD ; set CD but not NW bit of CR0 mov cr0,eax ; cache is now disabled wbinvd ; flush and invalidate cache ; the cache is effectively disabled at this point, but memory ; consistency will be maintained. To completely disable cache, ; the following two lines may used as well: or eax,CR0_NW ; now set the NW bit mov cr0,eax ; turn off the cache entirely pop eax ; restore eax popf ; restore the flags ret ; return to caller DisableCache endp code ends end
application. # ~~~~~ # Secret key # ~~~~~ # The secret key is used to secure cryptographics functions. # If you deploy your application to several instances be sure to use the same key! application.secret="..." # Global object # ~~~~~ # Define the Global object type for this application. # Default to Global in the root package. # global=Global # Database configuration # ~~~~~ # You can declare as many datasources as you want. # By convention, the default datasource is named `default` # db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play" # # You can expose this datasource via JNDI if needed (Useful for JPA) # db.default.jndiName=DefaultDS # Evolutions # ~~~~~ # You can disable evolutions if needed # evolutions=disabled source from https://github.com/yesnault/PlayStartApp
POST /login controllers.Application.authenticate() GET /logout controllers.Application.logout() GET /settings controllers.account.settings.Index.index() GET /settings/password controllers.account.settings.Password.index() POST /settings/password controllers.account.settings.Password.runPassword() GET /settings/email controllers.account.settings.Email.index() POST /settings/email controllers.account.settings.Email.runEmail() ... source from https://github.com/yesnault/PlayStartApp
get lost in cluttered technicalities Complex environments can blur the overall picture Every so often it's good to critically examine the tools we use Moreso if they result from some predetermined policy Find some time to explore new opportunities, they don't always pay back, but sometimes they do Don't be scared by the learning curve, you've been there already!
concept that source code is actually the real software design He supports the concept with an example showing how modern structured programming conveys the program flow much better than Assembly code 1000 NS% = (80 - LEN(T$)) / 2 1010 S$ 0= "" 1020 IF NS$ = 0 GOTO 1060 1030 S$ = S$ + " " 1040 NS% = NS$ - 1 1050 GOTO 1020 1060 PRINT S$ + T$ 1070 RETURN So much that we seldom need flow diagrams anymore
def version1(text: String) { val center = (LENGTH - text.size) / 2 var space = "" for (i <- 0 until center) { space += " " } println(space + text + space) } def version2(text: String) = { def recurse(space: String): String = if ((space*2 + text).size == LENGTH) space + text + space else recurse(space + " ") println(recurse("")) } Which version was easier to grok?
with some simple-to-understand attributes class Person(val name: String, val age: Int, val gender: String) //An appendable "array-like" class class ArrayBuffer ready?
val (boyz, girlz) = queued.filter(_.age > 18) .partition(_.gender == "male") val boyzIn = boyz take (girlz.size / 2) val in = (boyzIn ++ girlz).to[Set] for (boy <- boyz if !in(boy)) println(s"Go home, ${boy.name}. Better luck tommorrow, kiddo!") in } def version2(queued: Iterable[Person]): Iterable[Person] = { val girlz = ArrayBuffer[Person]() val boyz = ArrayBuffer[Person]() for (person <- queued) { if (person.age > 18) { if (person.gender == "male") boyz.append(person) else girlz.append(person) } } val in = ArrayBuffer[Person]() in.appendAll(girlz) for (i <- 0 until boyz.size) { if (i < girlz.size / 2) in.append(boyz(i)) else println(s"Go home, ${boyz(i).name}. Better luck tommorrow, kiddo!") } return in }
that shapes the violinist, we are all shaped by the tools we train ourselves to use, and in this respect programming languages have a devious influence: they shape our thinking habits.” Edsger W. Dijkstra - Letter to the budget council of The University of Texas at Austin the whole letter is here www.cs.utexas.edu/users/EWD/OtherDocs/To%20the%20Budget%20Council%20concerning%20Haskell.pdf
deeper understanding of the tools at your disposal So you can take informed decisions about the best solution to the problem at hand "Conventional" solutions are stable but sometimes best tailored to yesterday's problems Look for opportunities to explore new ideas
to get some inspiration regarding modern web development technologies here is the video www.parleys.com/play/5298cbe3e4b039ad2298c9db/ and here the slides static.raibledesigns.com/repository/presentations/The_Modern_Java_Web_Developer_Bootcamp_Devoxx2013.pdf [beware! heavy pdf]
define both, we can try to identify some core features of each OOP FP Modularity/Scoping Composability Encapsulation (reduce dependencies) Abstraction Mathematical Reasoning (pureness & immutability) both approaches have reusability and simplicity as goals
Criteria To Be Used in Decomposing Systems into Modules www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf M.Odersky; M.Zenger - Scalable Component Abstractions lampwww.epfl.ch/~odersky/papers/ScalableComponent.pdf J.Hughes - Why Functional Programming Matters www.cse.chalmers.se/~rjmh/Papers/whyfp.html H.Abelson; G.J.Sussman - Structure and Interpretation of Computer Programs mitpress.mit.edu/sicp/
figure out “what's wrong in programming”, and what kind of solutions he could come up with His reasoning is better explained on his blog www.chris-granger.com/2014/03/27/toward-a-better-programming/ where he shows the progress of a new project called Aurora Similar ideas can be found on this blog entry about Legible Mathematics glench.com/LegibleMathematics/
algorithms data visualization nlp data and visualisation from many world-wide domains everything based on symbolic functions manipulation (includes symbols, images, docs, graphs...) Wolfram Data Framework ontology
we already know about software development and asked what we can actually do with the technology at our disposal can we stop taking for granted the way we develop and focus on how we would like to develop?
the creativity of this young talented guy BRET VICTOR His area of interest is the future of computing, education, data visualization and manipulation SUGGESTED MATERIAL INCLUDES The future of programming: Inventing on principle: Magic Ink: worrydream.com/#!/TheFutureOfProgramming worrydream.com/#!/InventingOnPrinciple worrydream.com/#!/MagicInk
"explorers" from the historical or contemporary computer science research and other fields NAMES SUCH AS Alan Kay Douglas Engelbart Tony Hoare Edsger Dijkstra Alan Cooper Edward Tufte Don Norman Jeff Raskin David Hestenes
science, they're probably inspired by past research, tackling the same old fundamental issues DESIGN PATTERNS λ-CALCULUS TYPE SYSTEMS DATA REPRESENTATION BIG DATA DISTRIBUTED SYSTEMS ACTORS REACTIVE PROGRAMMING
imperative language is that you have to specify far too much sequencing. For example, if you wish to do a matrix multiplication, you have to do n³ multiplications. If you write an ordinary program to do this, you have to specify the exact sequence which they are all to be done. Actually, it doesn't matter in what order you do the multiplications so long as you add them together in the right groups. Thus the ordinary sort of imperative language imposes much too much sequencing, which makes it very difficult to rearrange if you want to make things more efficient.” P.J. Landin - The Next 700 Programming Languages, 1966 www.cs.cmu.edu/~crary/819-f09/Landin66.pdf
2009 (first public commit) support by the akka framework - 1990 (first presentation) inspired by erlang language - 1973 based on the actor model from Carl Hewitt - Hewitt; Bishop; Steiger; “A Universal Modular Actor Formalism for Artificial Intelligence. IJCAI” www.reactivemanifesto.org www.akka.io www.erlang.org
article about software design from Jack W. Reeves in his book on “Agile Software Development, principles, patterns and practices” 1985 the author published a reply to said article, after 13 years of reviews and comments - “What is software design: 13 years later” 1972 the original article - “What is software design?” 1962 the idea supported in the article, that “the code, as written by the developer, is the actual application design”, had been already clear to Reeves for 10 years www.developerdotstar.com/mag/articles/reeves_design_main.html
& REALITY” 2012 (3rd ed.) updated and commented by Steve Hobermann 2000 (2nd ed.) reprinted practically unchanged from the original edition 1978 (1st ed.) 1967 - a sentence, quoted in the book preface “We do not, it seems, have a very clear and commonly agreed upon set of notions about data - either what they are, how they should be fed and cared for, or their relation to the design of programming languages and operating systems” [G.H.Mealy] Both Kent, in the first edition, and Hobermann, in the most recent, confirm the validity of this sentence from 1967 at the time of writing!
of software, the end of apps, and why UX designers should care about type theory pchiusano.github.io/2013-05-22/future-of-software.html Jamie Brandon - Imperative thinking and the making of sandwiches http://www.lighttable.com/2014/07/18/imperative-thinking/
have changed much over the last 50 years or so code reasoning/ease of use program correctness memory allocation/GC concurrency/parallelism distributed computing artificial intelligence/data mining ... We can get a lot of inspiration from field pioneers and research material NEVER STOP LEARNING
Pictures The Wolfram Language logo copyrights belong to Wolfram Research Inc. Back to the future copyrights belong to Universal Studios The Matrix copyrights belong to Warner Bros. Entertainment Inc. Questioning The Status Quo by Ivano Pagano is licensed under a . Based on a work at . Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International License http://github.com/ivanopagano/questioning-status-quo