Whether you think it's wired into the human mind or an inevitable product of society's formation, dualism defines much of our lives: Communism vs. capitalism. Savory vs. sweet. Passing the ball vs. running the ball in football. Everywhere we look, pairs are locked in an eternal battle, presenting us with myriad opportunities to define ourselves by which side of the line we favor at any given time.
This may be even more evident in the computer industry where technologies -- competing for our hearts, minds, and checkbooks -- define themselves often by the differences they offer from competing solutions. On one side there is X; on the other, definitively not X. And the fanboys line up, taunting and baiting the other side. Without these battles, without these great arguments and choices, the repositories would have merged long ago and we would have moved on, perhaps with a little less innovation than we might otherwise like.
What follows are 10 of the most interesting battles raging among developers today. With each new project we undertake, we're faced with the fundamental questions that underlie the differences in these technologies. Do we favour simplicity or correctness? Open source or corporate support? Brackets or whitespace? Like Yin and Yang, these questions define the great trade-offs enterprise developers face today.
Dev tech battle No. 1: PHP vs. Node.js
Never loved by computer scientists, PHP was embraced by the masses who wanted to add a little intelligence to a website. These hordes have given us amazing frameworks like WordPress, Drupal, Joomla, and more. Much of the Web is built on PHP.
Dev tech battle No. 2: MySQL vs. PostgreSQL
The two great open source databases have been locked in combat for close to two decades with no end in sight. On one side, MySQL has captured the lion's share of the Web's basic workload, thanks in part to its ease of installation and configuration. On the other side, PostgreSQL has long promised a better transaction mechanism for protecting data in the face of glitches. The two have been growing toward one another, as MySQL now offers improved transaction capabilities and PostgreSQL has simplified its startup hurdles.
The old differences still define today's battle lines. PostgreSQL is viewed as being more "reliable" and MySQL as more "speedy," but the distinctions are more ghosts than reality. Old habits die hard, and these two packages may be competing for mind share for another 20 years, with PostgreSQL getting a little wind in its sails of late from hipster hackers and Oracle haters alike.
Dev tech battle No. 3: Swift vs. Objective-C
Apple has always been the lone redoubt for Objective-C, the clean, lean mix of C and object-oriented programming. But times change and now Swift offers a modern syntax free of many of the annoyances that have kept programmers from building code for Apple's platform. Sure, the folks who learned C in the crib don't mind the asterixes and the multiple files, but the newcomers raised on Python, Ruby, and even Java are driven to distraction.
Will Swift's clean structure capture the mind share of Apple developers? Will Python and Ruby developers rush over to iOS and crowd out old-guard Objective-C hackers? Or will the world be dominated by the amazing efficiency of tried-and-true Objective-C programmers? Will the new libraries and features be coded in Swift or Objective-C? Apple has said publicly that both can co-exist. So developers will almost certainly cluster to the familiar. Those who love Python or Java will move toward Swift. Those who grew up with C will stick with Objective-C.
Dev tech battle No. 4: Python vs. Ruby
Long ago, a scripting language was like chewing gum for software. If you needed to glue together big programs, you could write simple code in the OS and be done.
Somewhere along the line, the people who loved these little languages started building big programs that proved useful. Ruby exploded when it was married with the Rails framework -- the combo made it simple to tie a sophisticated front end to a database with merely a few lines of code.
Python, meanwhile, found its own fan club in the sciences. It is now used frequently in labs everywhere. And with statistical analysis breaking out in every corner of the corporate world, pointy-headed Python is gaining steam with the data science labs of the business realm.
Will the next generation be drawn in by the simplicity of Python framing the code with whitespace? Will Ruby expand beyond Rails? Are Python's built-in functions a better bet than Ruby's blocks? Is it cooler to align yourself with the scientists or the Web hackers? Maybe the battle lines have already hardened for all time, with the Web gurus sticking to their Rails guns and the scientists cloistered up in Python's libraries.
Dev tech battle No. 5: SQL vs. NoSQL
On one side of the aisle are the databases that your grandparents used. The data falls nicely into tables and the database will execute exotic queries to match together the tables and find the right rows. On the other side are the NoSQL upstarts, which make grand promises about speed and parallelism, with the little caveat that every once in a while things might go south and the database will send back wrong or inconsistent answers.
Are the belts-and-suspender approaches of traditional databases with traditional transaction protection the right thing for your data? Or do you want a faster, cheaper, more modern tool that will spread the load effectively over a cluster of machines? Sure, consistency and accuracy are important to banks, but what about a table full of random blather from the Internet? Does everything need the best protection that data scientists can deliver? The answer (often): Those who need absolute consistency like banks and airlines go with traditional SQL databases with real transactions. Everyone else chooses the speedy, simpler, scalable NoSQL.
Dev tech battle No. 7: Chef vs. Puppet
Long ago, a corporation had a few servers in the backroom and installing new software was simple. Then the cloud exploded and every website worth anything ran on a cluster of machines that needed to be kept running. That meant doing things N times to the N machines and not messing up. Chef and Puppet are two tools that have arisen to help admins run an assembly line for configuring cloud machines.
Devops specialists devoted to Chef champion the configuration management tool's flexibility in letting you write instructions for creating machines in Ruby. "You get the power of Ruby for free," they say. Puppet also configures the cluster but with instructions specified in a JSON-like language focused on doing one thing well. While newer versions of Puppet allow a bit of Ruby, the basic language remains dominant. Is it better to create a custom syntax for the job or give people the power (and danger) of a wide-open, general-purpose language?
Dev tech battle No. 8: Hudson vs. Jenkins
The idea of continuous integration was a hack to automatically test and deploy all the new code committed to a repository. When it started to work well, people began to fight over its legacy.
On one side of the battle is Hudson, the branch that is officially part of the Eclipse Foundation and run by many of the people at Oracle who inherited the code from Sun. They bring top-notch, corporate attitude to building a stable, serious tool for enterprises. On the other side is Jenkins, the home of many of the original hackers who love to experiment. The Jenkins tree seems to evolve much faster with new versions appearing as often as every week.
The battle between Hudson and Jenkins is emblematic of a greater battle throughout the developer world, between a steadfast devotion to careful testing and stable code versus more rapidly evolving features, faster fixes for bugs, and greater input from the developer community at large.
Dev tech battle No. 9: MySQL vs. MariaDB
Speaking of battle lines drawn around Oracle-supported projects, let's not forget the MariaDB schism with MySQL.
When Oracle bought MySQL, open source fans were afraid of what might come from a company built on a powerful, proprietary tool. Their fears have largely been unfounded. But that hasn't stopped Monty Widenius, one of the founders of MySQL, from striking off on his own with a fork. MariaDB offers much of the same syntax and features as MySQL, but now it comes with a few new features and storage engines that run a bit faster, at least in the eyes of the MariaDB lovers.
Will the market choose the scrappy, new fork, or will it stick with the big, dominant code base that's served us so well over the years? Will the world choose a small, ragtag gang of innovators or a big, solid corporation devoted to stability?
Dev tech battle No. 10: Compiled vs. scripting
The distinction between compiled and scripted code isn't as distinct as it was before Just-In-Time compilers and optimizers, but it still matters to programmers. Do they want their code to be prodded, massaged, optimized, and translated into simple machine code? Or do they want a more casual approach where the computer interprets the code at runtime, sometimes allowing the code to modify itself?