Is it becoming easier or harder to be a solo software developer? I see two trends flowing in opposite directions.
Matt Heusser argues in his article The Boutique Tester that it’s easier to be an independent software developer now than it was a decade ago. You don’t have to burn CDs and ship them; you just put your software up on the web. You don’t have to maintain your own server; you can rent a server cheaply.You don’t have to buy expensive development tools; good tools are available for free. All these things are true, but there are other issues.
Software developers are required to know more languages than ever. A decade ago, you could make a career writing desktop applications in Visual Basic or C++ and not need to know any other language. Now in order to write a web application you need to know at least HTML, CSS, JavaScript, and SQL in addition to a programming language such as Java, C#, or Ruby. However, just knowing these languages is just a beginning. You need to learn a web development framework such as JSP, ASP.NET, or Rails. The list seems to never end. See Joe Brinkman’s article Polyglot Programming: Death By A Thousand DSLs. Programming language proliferation is not the only new difficulty in software development — security anyone? — but I’ll focus on languages.
Can one developer learn all these languages? The surprising answer is “yes.” You might think that such a menagerie of languages would lead developers to specialize, but programmers are not nearly as specialized as an outsider might expect, even in large organizations. On the other hand, most developers don’t entirely understand what they’re doing, having to work with more languages than they could possibly master. This is no doubt the root cause of many bugs.
Going back to the original question, is it easier or harder to be a solo developer these days? Software development itself has gotten harder, but the external difficulties have been greatly reduced. Programmers have to know more programming languages, but programmers have a knack for that. They don’t have to spend as much time on distribution, system administration, etc. Even sales and marketing, the bane of many developers, is easier now. So while software development itself has become harder, being an independent software developer may have become easier.
Many people disagree that software development has gotten harder; my opinion may be in the minority. Software development tools have certainly improved. It would be much easier to develop 1999-style applications in now than it was in 1999. But I believe that developing 2009-style applications with 2009 tools is harder than developing 1999-style applications was with 1999 tools, particularly for high quality software. Throwing together applications that sorta work most of the time may be easier now, but developing quality software is more difficult.
Related post: Programming language fatigue
Programming’s gotten easier, but I’m not sure that expectation inflation hasn’t actually made writing 2009 apps with 2009 tools harder than 1999 apps with 1999 tools. 1999 doesn’t seem that long ago — the real difference I feel is when considering 1989 apps, with 1989 tools (about when I first started distributing software). And your mileage may vary — what I write commercially now, which is statistical natural language processing software, is definitely easier now than it was 10 years ago.
I don’t know that learning CSS+HTML is any harder than learning, say, Swing, even though Swing is part of the standard Java libs, or learning X windows graphics, which could be called from C. These whole secondeary languages, like Javascript, aren’t much harder than a complex library that you’d call from C. And back in the day, I either had to write platform specific code for X11, Mac, or Windows or NeXT, or learn another language, like Tcl/Tk.
When I do threading now, it’s a whole lot easier to use Java’s util.concurrent than it was to try to throw together my own Posix thread implementations in C. But that’s just a lib issue. Ditto with socket and HTTP code, which is way easier to deal with now. Double so with clustering from tools like Hadoop and Amazon EC2/S3; it’s way easier to do that way than to figure out how to install your own hardware and software.
Back in the day, it was sed/awk/grep and unix command lines, and then it became Perl, and now Python. You always had to know a mix of this stuff to be productive.
Take XML as another example. Back in 1999, we had to write parsers for specialized languages by hand. I’d use lex and YACC, which I’d argue were no easier to use and/or learn than SAX or DOM for XML. And the advantage of the latter is that the character encodings and escaping and DTDs are all uniform, so you only have to learn them once.
For software developers, learning new programming language is not a difficult process, still, what the difficulties are in understanding what these languages should provide – HTML + CSS should result not just in an application, but in a usable and accessible piece of software. Server-side languages should be blended in with a proper server architecture, like REST, they should be optimized and understand multiple threading and processing (which does not exist with JavaScript). Basically, it is not difficult to learn a language’s syntax, the problem relies in understanding the language’s semantics
We do have to be competent in more languages than are comfortable to master. I just had a reminder of that yesterday when I took a skills test as a part of an interview for a job at a small company. It required knowledge of seven languages plus the ability to set up and administer several environments and servers. The test was extremely well-written, and it brought me to realize how weak I really am in a couple of those areas — areas where I had thought I was getting fairly strong; I definitely found some places where I “don’t entirely understand what [I’m] doing.”