====== The Server-side Scaling Evolution ====== Last Friday, I blogged about how we are undergoing a client-side seismic shift. In this article, I'll talk about the somewhat less surprising changes that I see happening on the server. However, in my opinion, these server-side changes will also have a pretty far-reaching impact on how we program that will play out particularly over the next five years or so. ===== Multi-core programming ===== Multi-core is here. As I write in early 2013, 8-way servers are common and it's not uncommon to see much larger than that. 4-way cell phones are here. The laptop on which I'm writing this blog has 4 cores; so does my tablet. But software development still mostly is written to utilize a single thread of execution. 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. ===== Functional Programming ===== Functional programming is one promising means of taking advantage of multi-core processors. When done in a pure manner, often the compiler can parallelize certain tasks automatically. Other operations--such as applying a single function over a large collection of data--can also be parallelized more automatically if coded in a functional style. And functional programming has given us the Actor model of concurrency, a promising way of managing concurrency that simplifies many of the problems typically associated with it. I believe that Java 8 will mainstream functional programming techniques, much like C++ mainstreamed object oriented programming. However, whether Java 8 will become the de-facto functional programming language or if it will just whet people's appetite for purer languages like Scala or Clojure remains to be seen. What seems clear to me is that functional programming is coming, and that it is wiser to "skate to where the puck will be" rather than scrambling to overcome a deficit later. ===== Server-side Javascript ===== 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 a large Java shop. But to the extent that it crosses my radar, I'll make notes about that here too. There seems to be a lot to be said for running the same language on the client and on the server... ~~LINKBACK~~