If you look around the Internet, you’ll find all kinds of software that claim they can make you an instant-DJ. All you have to is toss the songs into a digital blender and it’ll take care of doing all the hard work of synchronizing the beats. Some of them are automated enough to even take care of picking songs out of your collection and gluing them together. Really, they are true DJ’s in a box.
So why do we still have DJs? Why do clubs announce that some big name DJ is coming to town? Really, a computer can do this all automatically and save everyone the trouble! Hasn’t Google taught us the power of algorithms?
It turns out that the problems a DJ solves are much more subtle than that of gluing random songs together. A good DJ guides the crowd while reading their feedback to songs. Is the crowd enjoying this song? Should another one similar to that get played? Maybe the crowd is getting bored and the DJ needs to change it up a bit.
A good DJ also knows what works together and what doesn’t. It’s possible to put the long mix of Nine Inch Nails’ March of the Pigs next to Abigail’s cover of Smells Like Teen Spirit and as far as a computer is concerned, it could be a valid fit. Both have about the same tempo. Both are energetic. Both are electronic dance hits. However, a human DJ would cry foul and stop such madness – the angry Trent Reznor does not belong next to a Top 40 Eurodance Abigail.
A good DJ also knows when to get creative with how songs get glued together. Not everything should be a perfect smooth transition from song to song with predictable starts and stops. Sometimes a bombastic change over with unexpected twists, turns, fades, samples, compression, and equalizer voodoo needs to be done. Those crazy guys that still play vinyl records might even do those squiggy-squiggy sounds the crowd loves oh-so-very-much.
And those “good DJs”… well, they get paid very well. Some of them even grow up to make music of their own.
So what does a good DJ have to do with software, marketing, or even the Internet?
To use a nerd-ism, let’s push this whole DJ thing to the stack for a moment.
I know a lot of old programmer farts. We all hang out from time to time and make old programmer fart jokes about esoteric programming languages from the olden days and what it means to be a “real programmer”. And like their predecessors cried foul when programmers moved to “high level languages” like C, these guys are crying foul with the emerging generation of programmers that use “high level languages” like C#, Java, Perl, and Python.
What they’re specifically crying foul about is how these new whipper snappers don’t know what’s happening underneath the code. These new kids, they just glue a few libraries together and call it Web 2.0 and they’re done. There is no original thinking going on here…
It’s like these digital DJs… pop a couple of libraries into a digital blender and out pops an application.
The thing is with these old farts is that they are kind of right.
There are plenty of miserable examples of application programming out there. Someone learns that Visual Studio lets you design a user interface using drag and drop methods, push a button, and get an executable out the other side. Connect a few of those buttons to some libraries and the whole mess might do something.
But like any profession with millions of members, you’re going to find people that simply don’t take a lot of pride in their work and from time to time, we’re going to see applications that come out of their grubby little hands. But where the old farts are wrong is thinking that the tool had something to do with it.
The reality is that the programmer made a lousy application because he didn’t care about his work. Teaching this same programmer about how the low level constructs of the language work in a vain attempt to make him a “real programmer” doesn’t fix the root problem. Apathy applies to all kinds of programmers.
However, for every programmer that doesn’t care, there is (hopefully) a programmer that does care. A programmer that may not understand the underlying constructs, but looks at the tools that he has available and sees potential there that the original tool builders had never themselves envisioned. In other words, a programmer that proves the old farts can be wrong.
So much like how our resident DJ isn’t a machine (stack popped), our resident software engineer isn’t a punk that only knows how to glue together libraries for cute and plucky web applications. The potential for talent remains as does the benefit that comes with being talented. More importantly, the crisis that some of the old farts see with these new kids not learning about memory allocation on a heap is moot – the smart ones will figure out how to use all the time saved on dynamic memory management to do something that the old farts didn’t think was possible. Just like how a smart DJ figures out how to leverage new technology to do creative things with music.
And those low level guys? We’ll continue to have enough of those too. Market demands will keep them around. There will always be a DJ that still likes vinyl records and periodically reminds the world that there are still some things high-tech DJs will never be able to do. Just like there will always be someone that worries about compiler construction and reminds the world high level languages wouldn’t exist without him.