User Tools

Site Tools


java:home

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:home [2014/10/17 22:08]
127.0.0.1 external edit
java:home [2016/09/18 21:17] (current)
djo [Getting started]
Line 1: Line 1:
-====== ​On the Server Side ======+====== ​Data-first Applications ​======
  
-Server-side development ​is changing too, but differently and more slowly than on the client. ​ Some forces ​I see changing server-side development are:+This is a tutorial/​vision page describing ​the state of the art as I see it today.
  
-===== Multi-core programming =====+Data has become more important than code.
  
-Multi-core is here.  +  * Collecting it 
 +  * Analyzing it 
 +  * Storing it
  
-8-way servers ​are common these days.  ​4-way cell phones ​are here.  ​The laptop on which I'm writing this blog has 4 cores; so does my tablet.+The web plus mobile apps are the user-interface of today'​s stack.  ​Virtual Reality and Augmented Reality ​are becoming important quickly as a platform in their own right.  ​Javascript ​has become more important than Java, [[https://​github.com/​eclipsesource/​J2V8|both on the server and inside the browser]].
  
-But software development still mostly is written ​to utilize a single thread ​of execution.+[[https://​www.heroku.com|Heroku]],​ [[https://​aws.amazon.com/​|Amazon Web Services]], and similar compute and storage services make it possible for anyone with an idea to write applications that anybody in the world can use, and to take advantage ​of the data collected by those applications.
  
-The more cores we have in our hardware, the more pronounced this mismatch will become, which will pressure the industry into changing software-development practices to take advantage of the new power.+ ===== Getting started =====
  
-===== Functional Programming =====+I believe that Clojure and Clojurescript (Clojure inside the web browser) provide an opportunity to learn to develop web applications unlike anything that has come before. ​ This is because Clojure is a first-class functional programming language, and because that same language works everywhere.
  
-Functional programming is one promising means of taking advantage of multi-core processors. ​ When done in a pure manneroften the compiler ​can parallelize certain tasks automatically.  ​Other operations--such as applying ​single function over a large collection of data--can also be parallelized automatically if coded in a functional ​style.+A programmer can learn Javascript and do similar thingsbut I believe that Clojure and Clojurescript can take a programmer farther than Javascript ​can.  ​This is because Clojure is both first-class functional ​language and because it is a Lisp, which means that code is data is code is data....
  
-===== Functional Programming ​in Java =====+Here is my (current) favorite stack for building and deploying data-first applications. ​ To those who have asked me to share a "​way ​in" to modern software development,​ this is my list of topics to search on Google.
  
-I consider Functional programming here to embody not just the idea of using pure functions whenever possible, but ideas that are more commonly associated with languages like Haskell ​or Scala that are designed from the beginning ​to support functional programming.+  * Git / Github 
 +  * Basic Linux/Unix command line skills 
 +  * jitpack.io ​to share libraries with myself and others 
 +  * Clojurescript and Javascript for building single-page web applications 
 +  * Hoplon, Javlin, and Castra to create a unified programming environment on the web browser and inside the server ​using Clojure and Clojurescript. 
 +  * A-Frame for virtual reality applications delivered via the web 
 +  * Clojure and/or Scala (server) 
 +  * Boot and Leiningen for building libraries 
 +  * Pouchdb (both inside ​the browser and inside the server) 
 +  * SQL as needed. ​ Postgres is decent as a standalone database. ​ If you really have to scale to big data moving fast, consider Cassandra backed by Amazon S3 on AWS.  Use Netflix projects available on Github to wire them together. 
 +  * The j2v8 library for integrating the best of Node.js and Java inside a server
  
-Some of these ideas are cumbersome, but surprisingly--with a little creativity--we can gain quite a bit of mileage and traction by implementing and adopting them in Java. 
  
-Some--like the Option/​Maybe monad--aren'​t strictly functional programming ideas at all, but can be viewed as object oriented design patterns that happened to be discovered and cataloged by the functional programming community rather than by the "Gang of Four"​. +===== Functional ​Programming =====
- +
-Functional ​programming is officially coming to Java with Java 8.  But we don't have to wait until then to begin taking advantages of features normally considered reserved for languages that directly support functional programming. ​ This set of articles describes how we can "skate to where the puck will be" and adopt ideas from the functional programming community today. +
- +
-   * [[Trigram Generator Series Notes]] +
-   * [[blog:​Improvements on Null Safety for Java and Eclipse]] +
-   * [[blog:Duck Typing helps automatically dispose SWT Images|Motivating Duck Typing in Java]] +
-   * [[blog:Java Does Duck Typing]] - An early implementation of my type-safe structural typing library for Java. +
-   * [[blog:Java and Scala Monad Tutorials]]+
  
-===== Server-side Javascript =====+[[fp:​home|Functional programming]] (FP) helps process data in parallel--either on multiple cores or across a cluster.
  
-Javascript can be used as a functional language, and using Node.js can run on the server side.  I have little contact with it and currently work in large Java shop.  ​But to the extent that it crosses my radar, I'll make notes about that here.+That topic is sufficiently deep that it deserves ​page of its own.  ​:-)
  
 ===== General Java ===== ===== General Java =====
  
-Here are some general ​notes about Java that are applicable to server-side developers.+General ​notes about JVM development:​
  
    * [[blog:In Java 5, 0 is not always equal to 0]]    * [[blog:In Java 5, 0 is not always equal to 0]]
    * [[Code Bloat Thread from E4 mailing list]]    * [[Code Bloat Thread from E4 mailing list]]
  
java/home.1413598111.txt.gz · Last modified: 2014/10/19 21:48 (external edit)