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.
(5 Years Ago)
|Middle-Tier Framework||JavaEE (JBoss)||Spring||In 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 Environment||Your Environment / Your Data Center||The 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 Tool||Ant||Maven||Why? "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 Environment||Local Builds||Jenkins||What 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 Database||Oracle||MySQL||There's no reason to pay for a database anymore - Facebook runs on MySQL for crying out loud - InnoDB too!|
|Key-Value Store / NoSQL||None||MySQL 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 Tier||Roll your own / Terracotta||Memcached||Fast, cheap and great support on the web.|
|Web Container||Tomcat||Tomcat or NGINX||Tomcat 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 Testing||Junit||JUnit||JUnit always rocks! Always will!|
|Functional Testing||WinRunner/LoadRunner etc.||JBehave||Again 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 Tracking||Roll Your Own / ClearQuest||JIRA||JIRA just works . . . very well. I wish the Scrum interactions were a bit better (Grasshopper I find non-intuitive at times).|
|Source Code Control||Perforce||Git||Git 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.|
|IDE||Eclipse||Eclipse||As much as I'd love to switch to IntelliJ the plugins and support just don't match Eclipse (esp. for AWS)|
|Messaging Platform||JMS||SQS||Again 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.|
|Testing||50% Manual, 50% Automated||100% Automated||Speed 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?