Monday, January 16, 2012

Top 10 Technologies I Want My Software Engineers to Know In 2012

I now have the Top 10 Technologies of 2013 posted here:
http://www.gettingcirrius.com/2013/01/top-10-technologies-i-want-my-software.html



As the Chief Engineer of Berico Technologies, one of my responsibilities is to push adoption of technologies I feel are essential to enhancing productivity or delivering value to our customers.  Over the last two years, I’ve evaluated hundreds of technologies; this is my short-list of what I consider the most valuable for our engineers to know in the year 2012:
  1. Hadoop + HBase
  2. Spring Framework
  3. Ruby on Rails
  4. Redis
  5. CoffeeScript
  6. OSGi
  7. RabbitMQ
  8. Lucene + Solr
  9. Node.js
  10. A new JVM Language
And here is my rationale:


1.  Hadoop + HBase:  if this isn’t obvious, you probably don’t work in IT.  Hadoop is the platform for storing and processing “cloud-scale” data, but that’s not the only reason why I want my engineers to learn it.  In my opinion, the most important aspect of Hadoop is that it provides a framework for the concurrent processing of data.  I know of a number of projects that have rolled their own concurrent processing frameworks, most of which turned out to be utter failures.

In addition to Hadoop, I find it essential for engineers to know how to use, and intimately understand, HBase. HBase is capable of scaling into the Petabyte range without sacrificing those low-latency read and writes.  HBase has an extremely flexible API and can do a lot of things (not all) you can do in a RDBMS. If you have the time, I highly recommend picking up Lars George’s HBase: The Definitive Guide.

 Apache Hadoop:  http://hadoop.apache.org/
 Apache HBase:  http://hbase.apache.org/
2.  Spring Framework:  even though Spring is sooooo 2003, there are still some Java developers who choose to roll their own configuration frameworks and manually instantiate their object graph.  In general, I consider not using an IOC/DI framework as an interview “turn off”, because it is a clear sign of immature software development practices.

What I really want my engineers to understand is that the Spring Framework is more than just an IOC.  Spring Java contains a bunch of really useful tools to help engineers produce and consume Web Services, interact with databases, perform batch processing, employ AOP, and integrate services like an ESB.

* For our .NETers, I actually recommend users steer clear of Spring.NET.  Spring.NET is great for Java developers migrating to .NET who are already familiar with Spring Java.  Spring.NET would not be my first pick for an IOC container in .NET, because it does not follow a lot of the .NET idioms (feels a little unnatural).  Instead, we recommend the Castle Windsor stack.

 Spring Framework:  http://www.springsource.org/


3.  Ruby on Rails:  while certainly not a new technology, having just jumped headlong into Ruby myself, I’ve had the benefit to learn the framework that has deeply inspired so many other MVCs.  Having used other non-Ruby MVC frameworks (ASP.NET MVC 3 and Spring MVC), I find that none compare to the power of Rails.  Probably one of the greatest surprises for me was the amazing ActiveRecord framework.  Needless-to-say, I’ve been emphasizing the use of Rails since I believe it provides a sustainable platform for rapidly developing web applications.  Add in JBoss TorqueBox, an integration framework for running Ruby apps (like Rails) on JBoss (via JRuby), and you have access to all the power and functionality of the JVM!

 Ruby on Rails:  http://rubyonrails.org/
 TorqueBox:  http://torquebox.org/


4.  Redis:  Redis is an extremely fast key-value store that can also be used as a cache, pub-sub delivery system, and global key incrementation-mechanism (if you need to do counting or globally manage keys).  Redis is also capable of performing set operations including intersections on multiple key-value pairs.  Redis is my go-to technology when I need to cache objects or manage counters.

 Redis:  http://redis.io/

5.  CoffeeScript: I want to first make the point that CoffeeScript wouldn’t be important if we didn’t highly value JavaScript.  When I first learned about CoffeeScript, I admit I was skeptical.  I’m probably one of the few people who actually like JavaScript in its native form.  On the insistence of one my engineers, I decided to look into CoffeeScript and immediately discovered its value.  What blew me away immediately was how concise CoffeeScript was.  JavaScript itself is concise; I already felt like I can accomplish a lot in a short amount of code, but CoffeeScript makes my JavaScript feel bloated!  For productivity reasons, in addition to making JavaScript easier to read and sometimes faster on execution, CoffeeScript has become one of my emphasized technologies for this year.

 CoffeeScript:  http://coffeescript.org/


6.  OSGi:  Open Services Gateway Interface is a specification for packaging Java libraries, as well as, a service model and runtime for applications.  OSGi provides many of the features developers will admit are missing in the Java Packaging System and the J2EE specifications.  Spring has closely aligned its platform to OSGi, and there is growing support for the specification.

OSGi is important to us because it provides the consistent application structure missing in pure (non-web) Spring applications.  OSGi is also not so heavy that it is reminiscent of EJB.  In the future, it is my goal that all of our Java-based applications be written as OSGi bundles.

 OSGi Alliance:  http://www.osgi.org/
 Apache Felix:  http://felix.apache.org/
 Eclipse Equinox (RT):  http://eclipse.org/equinox/


7. RabbitMQ:  I’m astonished how overused web services have become.   There are scenarios where a REST or SOAP service is appropriate, but these technologies are not the only way to communicate in software architectures.  In fact, if you do your research, you will find that many of the giants in cloud computing have found or created higher-performance alternatives.  Probably one of the greatest travesties in the technology realm in the early 2000’s was the de-emphasis of messaging systems.  In many respects, we are rediscovering a technology that has been around for decades.  This is in part due to the adoption of the AMQP specification, which is a platform agnostic way to do messaging.

When we do AMQP, RabbitMQ is our broker implementation of choice for many reasons: security, scalability, stability, and maturity as a product.  We like RabbitMQ so much that it has become the foundation of our Event Driven Architecture platform called Reactive.

 RabbitMQ:  http://www.rabbitmq.com/

8.  Lucene/Solr:  when it comes to search, it seems like everything is a derivative of or inspired by Lucene.  But what most engineers don’t realize is that Lucene is not just for full-text indexing of news articles or websites.  If you want your users to be able to search the content of your forums, or documents uploaded your website, Lucene can make this happen.  Recent versions of Lucene include support for the indexing of geospatial content and numbers (meaning you can perform range-based searches for all sorts of content). For those who don’t know, Solr is the “enterprise wrapper” around Lucene.  Solr essentially adds the features you would need to implement to make Lucene useful in your architecture (like RESTful access to Lucene’s search and indexing functionality).

Building an application nowadays without basic search functionality is like building a car without side-view mirrors; you probably could get away with it, but you’ll upset your users in the process.  For this reason, practical knowledge of Lucene/Solr is considered vital in 2012.

 Lucene:  http://lucene.apache.org/
 Solr:  http://lucene.apache.org/solr/
9.  Node.js:  of all the technologies listed, this is probably my favorite.  Node.js is an event-driven I/O framework built on Google’s V8 engine.  What does that mean?  In short, Google’s extremely fast (sometimes faster than C++ code) JavaScript runtime was given the functionality to perform input/output operations on the file system and network.  With these capabilities, Node.js has made JavaScript a viable server-side alternative to traditional application service platforms written in Java, .NET, Ruby, PHP, and Python.  Why is server-side JavaScript important?  We now live in an era where one language can be used from start-to-finish in building web applications.  That’s one codebase shared between the server and browser.

The Node.js ecosystem is flourishing much like Ruby’s did a couple of years ago (not to say that Ruby’s has curtailed), and the adoption of the technology by major companies (Microsoft, Yahoo, Google, LinkedIn, EBay, to list a few) is a sign of where it will be in the next few years.  Simply put, if you are not learning Node.js now, you are already behind.

 Node.js:  http://nodejs.org/

10.  A New JVM Language:  if you are content with the Java language, in my very humble opinion, you are probably not that interested in writing software.  Java had a great run, taking enterprise computing to a new level.  But while the JVM has improved, the language has stagnated.  I can’t help but wonder what Java would look like if Sun weren’t as focused on being backwards compatible with the “dinoware” written on the platform 12 years ago.  In many respects, it should have looked a lot like what C# does today.

Even though Java has a roadmap for language improvement, we don’t have to wait to take advantage of new syntax on the JVM.  Languages like JRuby and Jython have been around for a while and are proven alternatives to Java.  There are even newer languages that show a lot of promise: Scala, Clojure, Groovy, Ceylon, and Kotlin.  There is no reason to abandon the JVM platform to become more productive, which is why I want my engineers to learn a Java alternative.

 Ceylon:  http://ceylon-lang.org/
 Clojure:  http://clojure.org/
 Kotlin:  http://confluence.jetbrains.net/display/Kotlin/Welcome
 JRuby:  http://jruby.org/
 Jython:  http://www.jython.org/
 Scala:  http://www.scala-lang.org/
 Groovy:  http://groovy.codehaus.org/

5 comments:

  1. A great post, I was exactly looking for such a post for some directions.
    I have recently began exploring MongoDB for its document oriented storage format and SQLish queries.
    Interesting to see that there is not even a single relational DB in your list.

    I was drawn into your blog for another article on Rabbit-MQ and thrift, ended up reading all your posts.

    ReplyDelete
  2. Aravindh,

    Thanks for your comment. Our company, Berico Technologies, does a lot of Relational Database work on a number of platforms: MySQL, Postgres, MSSQL, and Oracle. The absence of RDBMS's on the list doesn't reflect a deemphasis of these technologies. Most of our new work is in cloud analytics, to which we have found niche databases, more useful in certain aspects. Currently, and in the past, we've used MongoDB and CouchDB/CouchBase fairly successfully. The list above reflects where I think our organization should focus based on the type of systems we most typically produce. Speaking of RDBMS, if I were to add a #11 to this list, it would be VoltDB (an in-memory relational database).

    Thanks,

    Richard

    ReplyDelete
  3. Sofar, this is not time consuming, I got what I was looking for from that platform, certain principles and regarded information mentioned is also of the most regarded manner. Check college paper for best papers.

    ReplyDelete
  4. Really it is significant since by not necessarily accomplishing that, all other actions that you will take to improve your credit position will not be effective. Thanks for discussing your concepts. credit card processor

    ReplyDelete
  5. I do not even know how I ended up here, but I thought this post was great. I do not know who you are but certainly you are going to a famous blogger if you are not already ;) Cheers! See more pre filled party bags for best Party Bags.

    ReplyDelete

Note: Only a member of this blog may post a comment.