Fog Creek Software
g
Discussion Board




Programmer Shelf Life

The previous thread about the old geek trying to find work really bummed me out.  I started programming in my mid-twenties and now I am in my early thirties.  From my talks with other programmers and from comments made on this board it looks like I may have another 5-6 good earning yrs left in this biz and I am approching old hat status pretty soon.  It would seem to me that most  people are hitting their prime in their forties, but the software profession is ready to put you to pasture.  I guess I shouldn't be suprised with an industry that seems to have no respect for maturity & wisdom and an obsession with the latest and greatest novelty.  How many of you are still finding a fruitful career in programming after 40 yrs old? 

Cletus
Monday, February 23, 2004

I guess you and your team should approach programming the same way people approach jobs: start looking for one before your relationship with one ends. By that I mean you should probably start learning the latest and greatest before you well before you feel the current skill set becoming obsolete. Your willingness to learn new computational concepts becoming popular will take you the rest of the way. Every five years, it seems how everyone programs changes dramatically, and old skills are found to be substituted by new skills, that will always be, it's the nature of most modern industries. This isn't really limited to computer science or computer engineering, I feel that many advanced skilled work of the future will face the same fate.

Li-fan Chen
Monday, February 23, 2004

I think your maturity will only come around to serve you. You can easily take the maturity, the knowledge and the clientels you have to start ventures. Sure, any MBA fresh out of Harvard can start a dot com, but if if you learned anything in your years in the business, it just might bend the odds a little in your favor. Ultimately it depends on how you live your life, were you hidden under a rock? Nothing would have helped if you never aimed high.

Li-fan Chen
Monday, February 23, 2004

> Every five years, it seems how everyone programs changes dramatically, and old skills are found to be substituted by new skills, that will always be, it's the nature of most modern industries. This isn't really limited to computer science or computer engineering, I feel that many advanced skilled work of the future will face the same fate.

I agree this is the conventional thought, but is it really true? isn't all the 'new stuff' just useless fire and motion that prevents you from getting stuff done? Isn't the real answer to stick with procedural programming in C? I seem to get a lot done with that, though I do find Perl useful for one-off programs that don't need to be distributed. So I should learn Ruby and Eiffel next? But Perl works fine, fills the same niche and does the work! I sohuld switch to C#? And lose the ability to easily port my libraries to every platform under the sun? What's the advantage again?

Dennis Atkins
Tuesday, February 24, 2004

isn't all the 'new stuff' just useless fire and motion that prevents you from getting stuff done?

It takes 2 weeks to digest Diving into Python and Programming Python, it takes around 2 month to acquire some useful Perl to get going, to learn enough VB out of a Microsoft Press brick only really takes 3 month. No you aren't an expert after reading these books, but if you aren't interested in thumping your chest, just getting the job done as elegantly as possible, you'll have enough background behind you (especially if you have 10 years of coding experience behind you) to avoid most any stupid mistakes a college grad would. Yes, there are bugs in libraries, there are quirks to be aware of, and they do take years to learn, so I am not asking mature programmers to acquire it all: who in their right mind would try to learn all of the open source scripting languages? Who would bother with EVERY c compiler out there? No one. Some moderation was implied. Besides, when I said learn new languages, I meant real serious languages, not just languages of the day. If you never learn lisp in your 15 years of programming, go ahead and learn it.

> Isn't the real answer to stick with procedural programming in C? I seem to get a lot done with that, though I do find Perl useful for one-off programs that don't need to be distributed. So I should learn Ruby and Eiffel next? But Perl works fine, fills the same niche and does the work! I sohuld switch to C#?

*lol* Whatever.

> And lose the ability to easily port my libraries to every platform under the sun? What's the advantage again?

99% of the people out there babysit so little code anyway, and most programmers I know don't end up maintaining the same library forever, they move on to solve new interesting problems. So yes library compatibility is really important, but life will go on even if you have millions of lines of delphi.

Li-fan Chen
Tuesday, February 24, 2004

In defense of c, if you discover that by learning latin, chatting with 95% of the world is possible. No joke, but the catch was in order for you to read a children's story like cinderella, you had to deal with so much uninteresting simple words pushing the page count of the little story into 300 pages. In order for you to talk about tea with the masters in japan--you spent 6 days to get through a conversation that normally two japanese could complete in 15 minutes? But the joy is you get to write the book once and for all. I do see the benefits of writing it once, but if only the c world can figure out a way to be high level and succinct at the same time--I think the rest of us can join in.

Li-fan Chen
Tuesday, February 24, 2004

Well I know plenty of languages but few of them do me much good. following the trends is a big sap on productivity. Learn a new language, use it on one project, oh no! there's o new new language! Gotta learn that! The old new language is for grandpas only!

Avoid all that, stick with C and get stuff done. How come I get so much more done than the guys using all the latest 'super-efficient' languages? So I don't have foreach in C and I can't do template metaprogramming. Is that really a liability? Maybe the reason I am so much more productive than the C#, Eiffel and SmallTalk whiz-kids is because I don't go following all the latest wanky fads but rather focus on getting the work done instead.

Maybe it's not the language that ensures success. Maybe it's the people doing the programming.

No no, that can't be possible! The latest language fad feature is so important! We must have tuples in C++! It will make everything so much more efficient! At last C++ will be a functional language!

Dennis Atkins
Tuesday, February 24, 2004

Its also  possible your a really good progammer dennis.  I'm not saying don't learn C, but I'd guess if you actually LEARN to program with any C type language (opposed to just breezing through a book and being able to hack it out), you'll be able to do fine in any language.  Even if this isn't the case, I suspect that in 30 years, there will still be a need for C programmers to maintain and debug the "old" C programs, as with java, and c++, etc.  Sure, it may not be new and sexy, but i'm guessing the work will still be there.

vince
Tuesday, February 24, 2004

Hmmm.. interesting... so what you are saying is that people who use large languages like C#, Lisp, Perl, or Eiffel are architectual astronauts--people who are more interested in the architectual and neat new-ways-to-solve-same-x-problems (which marketing translate into neat-new-better-faster-cheaper-ways-to-solve-same-x-problems, but really?) than getting the job done, as any code grunts who wants to go home by 5pm would know to do?

That's BS--there are plenty of people out there who use just 15% of vim, 15% of .net and get a sh*t load done--they don't wait for Apache Group to release that oh so crucial XML doo dat 10 month from now. No one will force you to learn the whole thing, and no one expects you to know and use every library.

Yes, there are people who love the simplicity and power of c, but they also realize how difficult it is to write libraries that really are compatible AND usable (witness the birth of COM/DCOM and web services--which makes your software the more incompatible the more usable you make it)

I don't think most people in the industry actually get to pick languages. If they talk about a language it's not because they like it, but because they know it well despite not liking it. I don't nkow a single person out there who would like to be stuck with the same tools 10 years from now--c programmers included.

Li-fan Chen
Tuesday, February 24, 2004

> so what you are saying is that people who use large languages like C#, Lisp, Perl, or Eiffel are architectual astronauts

Mmm, no. I do understand that there are many advantages to each of those languages. What I'm saying isn't really a language feature argument; it's true that I would be more productive over the long term in C# than in C. But from a practical matter, C works well and has advantages in terms of not having to retool all the time. I guess it could be like with woodworking tools. Sure, I could get the new saw that will last a year before being displaced by an even newer hammer, or I could stick with this old one that has lasted many years and just keep hammering away. It kinda comes down to a payoff vs effort issue. I'm not convinced that the shelf life of these languages is long enough to invest in making them a primary tool. Also, from a practical standpoint, C is compatible with everything, it's the lingua franca for sure. So code I write in C lasts a LONG time. Some of the other languages may not take off. Perl I like but they are changing so much of it in the next version it is a new language, much all code will have to be rewritten. Well, I'll stick with the old Perl then. C++ demonstrates similar instability with ever more wacky features added with each release. My C code on the other hand seems to become more stable over time, not less. It just lasts longer. I fully agree that it is not the best language for things from a coding ease and maintenence standpoint. But its advantages overcome that.

Dennis Atkins
Tuesday, February 24, 2004

*picks up Atkin's saw to beat the very dead horse a little more*

Are you sure it's dead?

Li-fan Chen
Tuesday, February 24, 2004

Unfortunately Dennis, your argument that C is good enough,  that you are productive in it, and so what is the problem?  ...is exactly why older coders end up on the "scrap heap".

Times Change.

I started out with basic character interfaces, (and still do some work with them).  But the market went GUI, and I had to learn event-driven programming.

Those that didn't, or who couldn't see the point, are now trapped in a dwindling number of jobs.

Looking to the future, I see Hyper-threading, multi-processor Sparc chips, and SMP boards adding to the number of processors we have to deal with.

We're going to need to learn how to do parallel programming *properly* using techniques like dataflow concurrency.

Time to learn Oz, (check out the excellent new book "Concepts, Techniques and Models of Computation" due to be published any time now, there is a draft copy PDF available from the authors Peter Van Roy and Seif Haridi).

Also take a look at pH, (parallel Haskell), which also has a very good book available for it.

Of course, those that can't see the point learning anything new will only have themselves to blame when they can't find work owing to "ageism".  This isn't to suggest ageism doesn't exist, just that it is made worse by attitudes like failing to see the point of learning new skills.

"You can't teach an old dog new tricks" as the saying goes.

So once you won't learn any new tricks, you're old.

And increasingly unemployable.

David B. Wildgoose
Tuesday, February 24, 2004

FWIW, my dad learned computers back in the 60's in Fortran, has been working on his own pretty much ever since, is 67 this year, and still having the time of his life programming.

Just be your own boss, and you'll never have to worry about being dumped :-)

Fred
Tuesday, February 24, 2004

I think it is many programmer's dream to become a master at one or two languages. C in particular seems pretty special in that it is the language of Unix which at this point, I am guessing my two year old will be using when he is my age. I know the places I have worked, the new whiz-bang language has been a directive of management and often architecture folks. It usually sounds something like this, "for the next version of Product 2.0, we will be migrating to the .NET environment and use C#." This only helps propogate the technology turnaround. Our job as programmers is to fully explain the lost productivity of a new language. Of course, some programmers I know don't seem to mind this as they are obsessed with new gadgets and technology... ugh!

m
Tuesday, February 24, 2004

If you had an application written in Delphi6, would you migrate it to Delphi .NET?

Java AWT 1.1 to Java Swing 1.4?

I would say yes, even if you are not set to gain anything in the immediate future. One day there is going to be that "new thing" that actually matters to you and you have to have, and migrating 3-4 generations is more difficult/impossible than migrating 1 generation to the next version.

Maybe it is a little bit the same with the programmers life, stay on top of the curve so that you are in a position to take advantage of the latest and the greatest. The assumption is of course that things are getting better, even if it is only a little better.

But hey, I'm "only" 28... my views will probably change once I experience a few more of the "this new thing is going to solve all our problems" waves that seem to come up every year or so.

Gauti Reynisson
Tuesday, February 24, 2004

Its not about languages any more. It has come down to architectures. .NET, COM/DCOM, EJB are concepts rather than programming languages. You can program in any (of the supported) language, provided you follow the guidelines laid down by the architecture.

C is a very good programming lanugage, but not an end in itself. Increasingly, the demands of users is for better products. Better in terms of UI/ease of use, better in terms of performance. And much of it (like it or not) internet/intranet based. You might argue that all this new fangled Web based product development is just marketing fad or that user is happy if it works, (s)he doesn't care for a fancy UI; but that's the situation today.

I cannot predict whats going to happen tomorrow. I don't know what is the shelf life of these new platforms/languages. But I know the situation today. And I know that only C (or perl or whatever) won't suffice. Some part of the application maybe. But for most part, I'll have to go in for a language that is better suited; better in terms of time to market ratios, better in terms of better looking UI development capability, better in terms of performance capability etc. etc. etc.

Learning new languages isn't bad. You'll get some really good benefits out of them. But that doesn't mean that you start learning every new language/platform/concept that comes out in the market. Keep an open mind, keep experimenting with things, keep a lookout as to whats on the market right now. And if the need arises, go in for one of them.

Sticking to old ones will either get you obsolete or keep you limited to an increasingly dwindling pool of work.

T-90
Tuesday, February 24, 2004

Okay, being only 33 I don't actually qualify as an old coot, but I'm going to come off sounding like one here.  A lot of people here sound like they missed the joys of the time when COM was going to save the world, when ActiveX was going to replace CGI, when Java was going to revolutionize the way we wrote GUIs (which it did--we were all revolted and went back to our old tools).  Try chasing a new technology fad every six months and see where it gets you. You can't build a system of any size when you change the toolset constantly.

So what's to be done?  Well, older, more experienced programmers let the young programmers hare off and play with the new toys and gush about how great they are.  They watch and see which of the new fads fall down and go boom, adn which really let people build new useful tools.  They wait, rather than investing a lot of time and effort into something pointless, and see what's worth investing the time in.

It does leave them out of the buzzword compliant jobs.  But while the young guys are haring off after the latest and greatest new toy, some of us out here are getting things done.  For instance, while you're playing around with C# web services, I'll be busy writing a web service in C++ that will beat the pants off your fancy new C# toy, using programming techniques that are at least 10 years old, adapted to the new technology (and yes, I can do this).

Clay Dowling
Tuesday, February 24, 2004

Speaking of old saws, how about "use the right tool for the job" or "horses for courses".

I little form based app might be best written in MS Access and VBA but you wouldn't think about writing a real time embedded app to control a mars rover in VBA.

Or the contrary, C would be perfect for the embedded app, but would take five times as long to do a simple db and forms app as doing it in VBA and MS Access.

I submit someone of what ever chronological age is "old" when they insist on using their favorite languate to solve all problems.

pdq
Tuesday, February 24, 2004

Clay, in trying to define "beat the pants off" myself, last night I spent 2 hours looking through sourceforge.net for the following:

site:sourceforge.net C++ web services

site:sourceforge.net c web services


What I saw didn't look like it would beat anything off. On the other hand, the same search for "python web", "java web" and "perl web" pointed to numerous architectures that has a passing chance of flooding a gigabit network (provided there wasn't a RDMBS ball and chain).

. There's really no reason for someone to write a web services in C++, even in the worst conditions of scalability. XML is the bottleneck, the business logic is the bottleneck, and the database is the needleneck. I still think it would be a big mistake to spend too much extra time coding it in low level c. Although C++ has a passing chance (amazon.com seems to use it alongside FastCGI), there's really no interest in C++ based web development anymore, and as a result many possible architectures are either 1) never implemented or 2) gathering dust under piles of PHd papers.

Li-fan Chen
Tuesday, February 24, 2004

Well, if you are embedding your web stuff into the Apache code itself, use C. But for 99% of the cases where you don't need that performance, Perl is the solution. As I said before. C and Perl. Gets things done.

Dennis Atkins
Tuesday, February 24, 2004

Absolutely Dennis, at the linux kernel and network stack level, there are some "frontier" work that's begging for some quality c programmers to really make a splash. For example, if you have a farm of 6000 virtual reality state servers (each server say maintaining so and so many concurrent users inside a virtual acreage).. a random load balanced web access from user 384871576 will probably not be accessing the server that's containing his state--forcing the server (say server 516) serving his connection to make another connection to (server 2986)... by writing a c library that filters what comes to iptables in linux, you can do this instead:

massively linux concurrent switch (handling 50,000 connections concurrently) receives request A, smart switch broadcast request A to directory servers, directory servers says which of the 6000 servers has the user data for request A, concurrent switch then opens a connection to the RIGHT SERVER.

An architecture like this (http://citeseer.nj.nec.com/vanhensbergen02knits.html) has no time for perl or c# or whatever, low-level soft realtime efficient c/c++ all the way. This is the stuff you'll see backing some of the largest web and presentation farms in the world.


There is a right place for everything, hence I recommend people to open themselves up and learn more about the field they are in.

Li-fan Chen
Tuesday, February 24, 2004

IMO most programming is grunt work, which is why you can hire a bunch of people straight out of college and get them to work insanely long hours.  This gets tiresome after a few years.  This is also the reason so many people insist on lumbering languages like C++.  What does the language matter if you have to work crazy hours anyway?

But you can advance by switching to languages that let you get more done and are more fun to boot.  Python, Perl, Ruby maybe Lisp or ML or Smalltalk, for a certain group of purists.  C# to a much lesser extent.  These languages remove all of the low-level pain and fiddling that many computer science majors seem to enjoy.  They let you switch to a much higher form of programming.

I should add that I've seen plenty of sharp programmers over 40, even using old languages like C and C++.  It's more that they don't want to live the "office == life" lifestyle.

Junkster
Wednesday, February 25, 2004

http://www.lazarusid.com/notes/archives/Article-20.shtml

That's the article on my website where I describe using C++ to write web services.  For somebody experienced in C or C++, the development time isn't any longer than a PHP program.  Experienced is the key word though, and C and C++ do take a lot longer to master than other languages. 

The advantages of using C and C++ come in when the load will be high.  I haven't done actual benchmarks against C# or Perl, but compared to PHP, a C CGI program is much faster, especially if any complex processing (like XML parsing) is involved.  My own experience with C# suggests that there is a heavy startup cost for execution, but I'd want to see benchmarks from a server setup by a professional administrator before I'd wager anything on it.  The faster execution of C and C++ mean that server loads stay lower, and more can be done with less hardware.

That doesn't matter for a script that gets run only a few hundred times a day.  When the numbers get higher, the faster execution and lower load does become very important. That's why you see it used for Amazon's web services, or why large web hosting companies and major universities use  programs like SqWebmail (a webmail client written in C).

Clay Dowling
Wednesday, February 25, 2004

*  Recent Topics

*  Fog Creek Home