I put faith in web application development as an income source like I put faith in the United States Social Security system. That is to say, it's there now, but I don't expect to be able to rely on it in its current incarnation very far into the future.
James Maguire quotes
Robert Dewar hitting the nail on the head:
Java is mainly used in Web applications that are mostly fairly trivial. If all we do is train students to be able to do simple Web programming in Java, they won't get jobs, since those are the jobs that can be easily outsourced. What we need are software engineers who understand how to build complex systems.
Although Dewar was speaking in terms of Java, the statement applies to the broader world of web apps (and many desktop apps)
in general.
That property is precisely what allowed frameworks like Rails and Django to come into existence and get popular.
Soon enough, the money will dry up for implementation because it's too easy to generate solutions for most problems you'll encounter - either using a framework, or a content management system like Sharepoint or Joomla, or even by
hiring someone to generate it for you. Yesterday I recommended a potential client just go the CMS route.
Nowadays, most of the skill involved in writing web applications amounts to gluing the disparate pieces together. How long until someone figures out how to commoditize that? Instead of knowing only how to implement solutions to problems, you need to be skilled at
problem solving itself.
Right now, you might be in a position where you can kick back and count your money while you smoke a cigar.
But if you're in the business of building web applications and you're not innovating new
kinds of them, you're doomed. You can chase
vertical after vertical and keep building the same apps for quite a while, but if you don't get into generating them, you're on the way out as people come in who can do it cheaper than you and with higher quality.
Generation is to web apps as prefabricated steel buildings are to construction. Except almost no one cares if their web application was generated or not - they just want the lower price.
I suspect that even if you
are generating applications, at some point in the future, the number applications needing to be generated will not have grown as quickly as the number of people who can generate them.
People are building complex data warehouses and doing analysis and reporting on them with GUIs and Wizards
right now. You still need the knowledge pertaining to data warehouses, but that
knowledge is becoming easier to obtain for more people with less effort than ever before. That trend, which fits in with the general trend of information democratization, is unlikely to reverse itself.
If you don't plan for change now, you'll end up shocked.
And then how long until you're pulling out the cloth-eared elephant?
What Dewar said is true:
Web applications are mostly fairly trivial. To survive,
you need to learn the fundamentals so
you are applicable in various kinds of programming and for different platforms. If you really want to be safe, you need to be innovating, not building copy-cat applications with a twist (and especially not from scratch?!?!).
Giles Bowkett put it well when he described
the effects of incompetent programmers' entry into a particular market:
Every programmer should also read Chad Fowler's "My Job Went To India" book, where he explains that as larger and larger numbers of programmers adopt a particular skill, that skill becomes more and more a commodity. Rails development becoming a commodity is really not in the economic interest of any Rails developer. This is especially the case because programming skill is very difficult to measure, which - according to the same economics which govern lemons and used-car markets - means that the average price of programmers in any given market is more a reflection of the worst programmers in that market than the best. An influx of programmers drives your rates down, and an influx of incompetent programmers drives your rates way the fuck down. (Bold emphasis mine)
The problem, in my view, is that the influx of incompetent programmers is inevitable.
So building well-known applications with twists becomes much like the would-be artist who looks at Pablo Picasso's work and says, "I could do that."
The obvious exception is that applications are not (usually) like art. Well-made knockoffs of the original aren't likely to be differentiable by customers from the cheap knockoffs, so the masses of incompetents and maybe the original end up defining the market in the long term.
After you've seen it, you
could do this:
To which we all respond, "But you didn't, did you?"
As always, I welcome your thoughts in the comments below.
Hey! Why don't you make your life easier and subscribe to the full post
or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate
wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!
Leave a comment
I think this article may be a bit premature.
The be-all end-all self building framework/generator has been the holy grail of software development since its inception, and it isn't really much closer to achieving that now than it was 20 years ago. Certainly web application development is maturing fast and getting easier all the time, but it is still light years behind compiled platform development as far as process and tools go. Even when it catches up (which is coming fairly soon), I think 30 years of FORTRAN (or pick your language) and then C, etc, development has proven that there is no "install, run a wizard, and go" solution for a lot of the work out there.
Even if this perfect platform(s) is created at some point, experience with things like PeopleSoft (or again pick your large do-it-all software suite) has proven that there is always a need for talented programmers to implement the software according to specific business needs.
Also, I believe there will always be applications like Twitter that pop up. Super simple concepts whose initial concept and implementation is easy, but that fits a particular niche and will never be drummed up by some code generator. You can take that example even further by then exploring their challenges to scaling and maybe even monetizing it eventually. In the end you have a very unique project that needs very specific implementation. Applications like that just won't stop coming.
Posted by Barry Whitley
on Jul 30, 2008 at 08:52 AM UTC - 6 hrs
Anybody remember CASE (Computer Aided Software Engineering)? It was sold as the end of software development. To build an application, a layperson would just drag and drop computer generated components onto a "whiteboard" and connect them up by drawing lines. CASE was THE buzzword in the late eighties. 20 years later, it's nowhere to be found.
Software development will become a complete commodity the moment business decides to stop using their systems as a way to gain a competitive advantage.
Posted by
Mike Rankin
on Jul 30, 2008 at 11:16 AM UTC - 6 hrs
Actually, CASE was discussed in my university quite a bit, though we never actually got to see it... I guess that is why...
Posted by
SeanJA
on Jul 30, 2008 at 11:32 AM UTC - 6 hrs
Unsurprisingly, I agree!
@Barry, The whole point of a heads up is to be a little early - if this problem was already endemic, Sam wouldn't have to post the article as everyone would have either upgraded their skills or moved onto another industry already. That said I think the tooling is *way* more sophisticated and well distributed than 20 years ago, No question that you could do anything in Lisp a long time back, but some of the DSL/DSM work and tools like openArchitectureWare and work like Intentionals on Language Workbenches is changing the cost of creating this kind of tooling. Best practices on software product lines are also being more widely shared and problems such as DSL/schema/grammar evolution are being tackled in more consistent ways.
As for implementation of the systems, the question isn't whether SPL's will replace programming (they won't) but whether they'll affect the number of programmer hours required (they will) and the skills needed from programmers (they will). Even today, imagine the career prospects for a Java programmer who wants to build web apps but doesn't know frameworks like Spring or Hibernate (which help to raise the level of abstraction and speed the process of developing apps in their respective technical domains).
A more interesting question is whether the growth of demand for more sophisticated solutions will continue to keep a balance so that while more people will be able to get a cms for $50, they'll choose to pay the balance of their budget on more customization instead of saving the money and using it on a print ad campaign or whatever. I think the drivers of that are too complex to reliably predicted upfront, but I'm pretty sure that the bread and butter work will continue to become comoditized and/or automated more quickly as we go into the future.
You're absolutely right that apps like Twitter will continue to pop up, but (a) they won't employ that many programmers and (b) the opportunity there is for entrepreneurs (who may happen to code), not for programmers looking for a paycheck for a day of debugging.
Posted by
Peter Bell
on Jul 30, 2008 at 11:40 AM UTC - 6 hrs
Oh and Sam, thanks for the mention!
Posted by
Peter Bell
on Jul 30, 2008 at 11:40 AM UTC - 6 hrs
@Peter,
Mike probably had a better example with CASE than I did with Twitter. He also summed up his thought better when he said that it is all about competitive advantage. Twitter was my attempt at a well known app that is having considerable effort thrown at it (even if that is more network effort now) because it provides an advantage over the alternative (in this case 'nothing').
I do think you are spot on and share the same opinion as me in regards to where the high paid work goes. We're already seeing that move away from rebuilding the same intranet app over and over. Most places can get those common apps for pennies.
As for the skills required, I'd actually argue that the workplace is demanding people with MORE skills than ever before. There is a lot of crap work for sure, and that market is dying out. For companies that want to be serious players, though, the demands are higher than they've ever been. Finding coders that know Spring/Hibernate (or in my case Coldbox or Mach-II) and can fit into a high-end application environment is getting harder and harder. Sure the frameworks are making the basics easier and more consistent, but that just means that companies are asking for more custom functionality that provides advantage, and they are getting it for the same dollars they spent getting a WYSIWYG CMS widget 5 years ago.
I'd only be worried for people that are making their living creating Mom & Pop aboutme.com sites from personal templates. If you approach web development as a software engineer (as opposed to the design + html view that is so common) then there is absolutely no shortage of work out there, and there probably won't be in my career lifetime.
Posted by Barry Whitley
on Jul 30, 2008 at 11:59 AM UTC - 6 hrs
@Mike, I think the reason failed was that it tried to be a general purpose modeling tool to raise the level of abstraction. If you look in the DSM community you'll see the fruits of the "death of CASE" being reborn through domain specific modeling languages and the necessary tooling support to create custom tooling easily for a given domain.
Also, a couple of other points:
1. DSM isn't about generating/interpreting ALL of the code, but of using the tooling to generate or interpret repetitive patterns to allow you to create DRY'er apps more quickly.
2. Commoditizing the tooling doesn't commoditize the apps. We may all use IntelliJ to write our Java code, but that doesn't mean that the code we write doesn't provide unique business benefit. Just because I use DSLs to more concisely describe and generate my object model doesn't mean I won't have an innovative object model solving business problems in a unique and compelling manner.
@Barry, I totally agree that the work is becoming increasingly skilled. Today if you don't know Hibernate and Spring in the Java world (specifically for web apps), you're behind the curve. In the future, more and more skills will be expected - or more depth in an area. Generalists will be expected to become more performance and security aware and functional with more paradigms and approaches. Specialists will have to continue to stay on the bleeding edge of their field to be relevant and those that do so will continue to be well paid.
Posted by
Peter Bell
on Jul 30, 2008 at 01:41 PM UTC - 6 hrs
I agree with the others. Why? Because this entry is making a distinction between developing for a website as a platform and developing for a desktop as a platform. The distinction does not exist. What you are speaking of is only a certain type of developer, not the platform as a whole.
Sure, there are already solutions for basic business or personal websites, blogs, wikis, and social group sites. And if that's all your doing, then yes, that's cause for concern. But there are also countless software solutions for the desktop that do a billion different things. This does not eliminate the need for developers. As mentioned, there is not, and may never be a magic solution to solve all your software problems. On the desktop, or on the web.
Let's not forget the recent and continuing trend of web-based applications over desktop applications. They do the same thing, the business logic is the same, they just happen to be on a different platform.
Now if all someone is doing is making basic CMS systems for personal websites from scratch and thinking that's going to be sustainable, then that's the developer's own fault. This type of foolishness is not limited to nor originated from web developers. If you took a community college class on Microsoft Access (or read a couple PHP tutorials) and think you're going to make custom Access interfaces for small businesses (or make crap websites) under the guise of a "professional programmer", then good luck to you. :)
I think the issue is just incompetent programmers that only know how to get by in one specialized area. They will be forced to learn knew things and become better programmers, or they will find new fields of work.
Posted by YT
on Jul 31, 2008 at 12:42 AM UTC - 6 hrs
Thanks for the awesome comments everyone. Some good points were made that will allow me to clarify my thoughts a bit.
Some of the points were addressed capably by Peter (thanks!), but I'd like to address some as well.
My response is starting to run a bit long, so I'm planning to wrap it into a post and will probably put it up on Monday. I'll comment here to let you know, in case you'd like to check it out.
Thanks again for the great feedback!
Posted by
Sammy Larbi
on Jul 31, 2008 at 07:49 AM UTC - 6 hrs
Leave a comment