Frank was born in Ireland and now lives in the USA. His initial training was in Computer Science from Trinity College, Dublin (so they're really to blame for this). He also has a Ph.D. in Computational Neuroscience and after realizing that computers were still as dumb as a bag of hammers realized that he had better go earn some money and stop fooling around. Right now he likes to think he is a part-manager, part-developer, part-architect developing applications for a major telecommunications firm because "code monkey" just doesn't sound as good. Frank is a DZone MVB and is not an employee of DZone and has posted 16 posts at DZone. You can read more from them at their website. View Full User Profile

My Ideal Greenfield Development Platform: Now vs. 5 Years ago

01.31.2013
| 10013 views |
  • submit to reddit

 As I've grown as a developer (sometimes two steps forward and one step back - ha ha!) I've had the privilege to work with some very smart people - not just "IQ" intelligent but "savvy" people who saw where things were going technology wise. So I've learned a lot in the last five years about my technology preferences - sometimes by choice, sometimes by necessity - in some cases just playing catch up (e.g. JavaEE vs. Spring) and bleeding edge in others (e.g. Memcached, JBehave).

As a result of that experience, every so often I dream of starting a project from scratch and imagine what technologies I would choose to use for my Java stack based on what I know now. Admittedly what's below is a very Java centric stack and I need to work on looking into Ruby on Rails / Python & Django to broaden my skill set too etc.  

Anyway I hope you find the following table an interesting comparison of technology choices now vs. 5 years ago. In many cases the "Then" technology is still around and still viable. Typically what makes the "Now" technology more attractive is a fantastic combination of lower price and better / faster (and free) support - after that features and speed of execution are winning attributes.


Component
Then 
(5 Years Ago)
Now
(2013)
Why?
Middle-Tier FrameworkJavaEE (JBoss)SpringIn 2005-2006 I went from WebSphere to preferring JBoss because IBM could not move fast and the App Serve was slow. Then I found JBoss also had some issues - less of them - but enough. Just figuring out which JMS messaging solution they would implement in a release was a chore (JBossMQ? JBoss Messaging? HornetQ?). Spring is so much faster in terms of performance, has fewer issues and has faster release schedules and no "two tier" system GA vs. supported
Deployment EnvironmentYour Environment / Your Data CenterThe Cloud (AWS)You need to scale on demand these days and pay only for what you need - and that includes Ops folks, DBAs etc. And why AWS as opposed to someone else - simple - maturity of their offering. 
Build ToolAntMavenWhy? "Convention over configuration" although I have found Maven and its plugins a bit more buggy than those for Ant. So its not clear cut.
Build EnvironmentLocal BuildsJenkinsWhat do you live under a rock? If you aren't doing continuous builds with all your tests automated and hooked in (unit, integration, acceptance, performance) you're crazy! :-)
Relational DatabaseOracleMySQLThere's no reason to pay for a database anymore - Facebook runs on MySQL for crying out loud - InnoDB too!
Key-Value Store / NoSQL NoneMySQL or DynamoDB (or Couchbase)Sometimes you need a Relational DB and sometimes you just need a KV Store. Well since I'm all about AWS you gotta start with DynamoDB. But with AWS you gotta implement your inter-region replication yourself - however a up and comer that impressed me and one to look at is Couchbase.
Caching TierRoll your own / TerracottaMemcachedFast, cheap and great support on the web. 
Web ContainerTomcatTomcat or NGINXTomcat still rocks and I haven't built an app yet where Tomcat was the bottleneck but NGINX is getting some play and is worth a look
Unit TestingJunitJUnitJUnit always rocks! Always will!
Functional TestingWinRunner/LoadRunner etc.JBehaveAgain in the spirit of "Fast, Cheap" and hooks into JUnit JBehave is emerging as a great BDD tool. Hopefully it will keep emerging and develop some snazzy reports.
Bug TrackingRoll Your Own / ClearQuestJIRAJIRA just works . . . very well. I wish the Scrum interactions were a bit better (Grasshopper I find non-intuitive at times).
Source Code ControlPerforceGitGit is free, fast and branches are easy. It's a bit hard to get used to but once you do you'll never look back. Oh and GitHub.
IDEEclipseEclipseAs much as I'd love to switch to IntelliJ the plugins and support just don't match Eclipse (esp. for AWS)
UIWeb (HTML/Javascript/CSS)Web AND
Native Mobile
I still love the web and Javascript but HTML5 is still in its infancy. With Mobile web and app usage skyrocketing the best way to get good performance is (for now) to go Native. Still perhaps in 3 or 4 years HTML5 support will be better.
Messaging PlatformJMSSQSAgain since I love AWS I gotta go with SQS but what I really love with it is it's failover capabilities (backed by 3 copies in S3) and it's separation of read vs. delete. Brilliant. Their Pub-Sub solution (SNS) is equally great.
Testing50% Manual, 50% Automated100% AutomatedSpeed matters - automation + continuous integration (and ideally continuous release) is critical to that end.

I could go into more stuff like Team communication / projects (e.g. Sharepoint vs. Wikis vs. SaaS providers) but I haven't seen anything that makes me go "Wow" - although after my experience with JIRA I'd probably start with Atlassian stuff.
I'm sure in 5 years time I will be making newer and more informed choices. The great thing about Software is all parts of it are always on the move. The hard thing about Software is trying to keep up with the same! :-)
I'd like to hear people's thoughts on the above, their own personal experiences, preferences and if they are aware of anything I've forgotten or if they have questions about technology X?
Published at DZone with permission of Frank Kelly, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Aqua Drehz replied on Fri, 2013/02/01 - 12:17am

It's nice to got your opinion. Also this can be guideline for learning current tool in present.
It would be great for rookie developer, well, like me.

Anirudh Bhardwaj replied on Wed, 2013/02/06 - 10:52am

 Yes as Aqua Drenz says this is a good guide for a

rookie develper . good guide 

Pavel Kotlov replied on Wed, 2013/02/13 - 6:04am

Hi, great comparison although some things could be more based on your personal Development and less on the development of the tools in the particular sector. Gradle, PostgreSQL are my favorites.

Frank Kelly replied on Wed, 2013/02/13 - 8:29am

Thanks @Pavel - yes I agree a lot of it has been personal exposure. After working with Ant and Maven now I see neither is perfect and would love to give Gradle a try.

Now that I know MySQL (and have experience on other RDBMSs) I find more RDBMSs not very interesting and want to add some detailed knowledge of a NoSQL DB or two to my belt (e.g. Cassandra, MongoDB or Couchbase).


Best,


-Frank

Stoo Mcstooo replied on Thu, 2013/02/14 - 11:43am

Groovy plus Spock is a much more powerful unit testing mechanism than JUnit if you have the time to learn them both. Both have a relatively easy learning curve.

Jeremy Brown replied on Thu, 2013/02/14 - 9:34pm

MongoDB and PostGres are free and excellent products, why anyone would recommend  MySql over them is beyond comprehension.

Frank Kelly replied on Fri, 2013/02/15 - 10:02am in response to: Jeremy Brown

@Jeremy

For Mongo, I know I'm crazy but I like my databases to be durable ;-)

http://css.dzone.com/articles/how-acid-mongodb

I know crazy eh!?

Anyway I look at Mongo (a document DB) and MySQL (an RDBMS) as different Apples vs. Oranges - both data stores but not much similarity beyond that

PostGres I don't have much experience with but as a Team lead I find it much easier to find resumes with MySQL background than Postgres. Plus I don't have the budget for a DBA and MySQL is very user friendly.

I'd still like to play with both Mongo and PostGres and I'm sure both work wonderfully well as long as you know what you are getting yourself into.

Raul Guerrero replied on Wed, 2013/02/20 - 6:09pm

Tomcat or nginx? nginx is an async http server, it's not an application container, you still need a servlet container (or App Server depending on the features you use) for java, so choosing nginx for java is wrong, you still depend on tomcat or something like it, it would be like using apache http server, you would use it only for load balancing, reverse proxying or something like that.

Also, you get durable operations with mongoDB, as it uses memory mapped files (which is more performant than usual file I/O) you need more RAM to really get the most of it, but the case is it's not in-memory; I know it's not ACID either, it has transaction per document, so if you do CRUD on a single document, then it's transactionable. And also, if you think your RDBMS of choice (Oracle or MySQL) is truly ACID compliant, think again:

 When is ACID ACID? rarely 

True ACID compliance 

And if you really want relations, NoSQL (but with SQL syntax), truly ACID compliance, and document oriented performance, you should check out graph databases like OrientDB , you'll really enjoy it.

Cochese Smith replied on Wed, 2013/03/27 - 2:53pm

Great article. What about your choice of the following:

  • Technology for generating pages: JSP / JSTL or something else?
  • Templating framework for web pages: e.g. Tiles, Sitemesh, Velocity, Freemarker?
  • Unit test mock framework: e.g. Mockito, JMock etc.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.