Five Pervasive Myths About Older Software Developers
lessonsoffailure.com
lessonsoffailure.com
That's because we like to create applications, not program computers. Memory management is programming for the sake of programming, it doesn't do anything user-visible. The computer can do it automatically, so why pass it off to the human?
(Also, C does have automatic memory management. Ever "free" anything you allocate on the stack? I thought not.)
By the way, I'm actually fairly young myself (23), but I've always loved the down and dirty, close-to-the-metal details of programming. And I also have the soul of a 50 year old (a la: "I need a lawn so I can yell at kids to stay off it." http://xkcd.com/479/).
OK, sure, I agree.
> Just because a platform manages memory management doesn't mean you can create 1 million objects.
Yes, you still have to watch out. Only your example is not crass enough. A million objects does not have to be very much. And e.g. a Haskell program compiled with GHC can churn through a Gigabyte of memory in a second (see http://blog.interlinked.org/tutorials/haskell_laziness.html), and this isn't a bad thing. (As long as the memory is immediately reclaimed, and you do not actually use the whole Gigabyte at once.)
Why is allocating your own memory in Objective-C "better" than letting, say, GHC, do it for you? I may be a young whippersnapper standing on your lawn, but my programs run as fast or faster and are more reliable. And it takes less time to write them.
Here's the disconnect I'm seeing: Allocating your own memory in Objective-C is not necessarily better. But all other things equal, a programmer that understands how GHC manages memory is better than one that does not. You're arguing the utility of this knowledge, as it pertains to your usual use case, is minimal. This is not the same as saying that the utility of this knowledge is minimal.
Sure, but I never said this. The original post, now many levels up, said "kids bitch about how hard it is to manage memory". It is hard. That's why people bitch about it, and don't want to do it.
I say that it's conceptually very simple. But in practice, it's very difficult to type the code to do this yourself at the right place. (It doesn't sound difficult, but most C programs either leak memory or use memory they didn't allocate, so clearly it is difficult.) There is a reason why C++ has things like the boost pointer library (and even auto_ptr). It's because memory management is for computers to do, not for humans to do.
I think people have trouble realizing that a human can know both "high-level" and "low-level" things, but that a programmer needs to stick to one level or the other -- don't write low-level concepts (memory allocators) in your high-level application program. The same person can write both parts, but the programmer writing the high-level app shouldn't be worried about the low-level details ("of course it works"). When you mix the levels of abstraction, you write bad code.
(I wrote a toy language once. I found that writing a garbage collector was much easier to get right than manually managing my own memory. When writing the collector, the details of memory allocation was all I needed to think about. When writing the high-level application code on top, all I had to think about was my high-level application. That's the whole point of abstraction, and it's what C-level languages fail to provide.)
Having used lots of languages and frameworks I think that Cocoa/UIKit is very elegant despite the manual memory management.
It might even be true that most of the big Cocoa applications will continue to use manual memory management.
Maybe the ageism thing is more of a lack of understanding on both sides than a directed bias against only the older people?
I'm not trying to say that young people won't end up being better programmers in 10 to 20 years; if that weren't the case, there'd be no point in pursuing it as a career. However, to assume that comparative ignorance at 20 is the same thing as global ignorance is unfair.
As someone pointed out in the "when an engineer goes to Google, a start-up dies" thread, there's an great value to having people with vast technical knowledge and experience: they'll be able to bring new concepts vs. merely new technologies to the table.
Being a founder is a different matter (the risk factor is much more significant once there's a family), but I don't see a reason to not hire older engineers (all else being equal). Disclaimer: I'm <30 myself, but benefited tremendously (earlier in my career) from contact with older engineers.
The one thing that's different is my attitude.
Sometimes I feel that I know too much about programming to be employable as a programmer any more. So much of our industry is about foolish waste. Half of all projects fail. Most of the other ones are rotten ideas that make life worse for everyone. Few managers (or markets) really have the patience to build good software, or the maturity to listen to advice about what might be better.
When I was in my 20s, I was dumb enough to commit crazy overtime hours to making projects work, even if they were ultimately doomed and stupid. And this served me well in the job market.
In this environment, experience may not be an asset. It seems to me that the ideal programmer, in an economic sense, is someone who obediently writes unmaintainable code quickly and is unaware of the future pain they are creating for themselves and their customers, or is unaware that all their work is likely to be forgotten in a few months.
I think that's the problem (I'm also not a technology bigot: you can do s/scripting languages/J2EE/ and s/MySQL/Oracle/). Doing simple things may pay well at some point, but there's no technical career growth path.
There's also no security: there's no experience/education/intelligence based barrier to entry. In the end, there's nothing to differentiate a 40 year old CRUD-screen developer from an 18 year old one. You can't say the same thing about a (for the education/domain knowledge angle) search relevance expert or kernel hacker.
That said, 90% of the jobs out there do seem as futile as I described.
And is anybody making their living doing CRUD from scratch any more? I mean, not counting corporate Java programmers? (rimshot)
Then wouldn't this invalidate your comment about doing nothing different between 1995 and 2010?
> And is anybody making their living doing CRUD from scratch any more? I mean, not counting corporate Java programmers? (rimshot)
Plenty do, I know lots taking high pay contracts doing nothing but CRUD. Many start-ups exist that do nothing beyond CRUD in PHP.
I have nothing against scripting languages (I tried to make it clear by including J2EE/Oracle in the same category as LAMP). For when you have to do CRUD, at least for webapps, scripting languages are many times less painful than Java and C++. The "Hello World" Chapter in the Hibernate book is sixty pages, compare it with Perldoc for DBIx::Class (http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class.pm). Not to mention Hibernate is actually considered "light weight" compared to EJB and other enterprisey technologies (which luckily I've never been exposed to).
Intelligent comment. Does it break down when you do startups? In all the products I've worked on you start off doing simple CRUD but pretty quickly move into doing other deeper things.
What differentiates those that grow from those that don't is whether they go deeper or just keep doing more CRUD and more GUIs on other people's deeper code.
Good point.
CRUD is actually just what were called 'expert systems' in the 80s. Once you realize that, you can see that it is actually the most interesting type code.
The real problem with programmers is that they don't specialize in a specific type of application and become domain experts in it. Choose a field, such accounting, or hr, or finance, and become an expert in it throughout your career, so that you develop the most featureful CRUD application of that type in the fastest time (or base a startup around it).
Knowing java, php, sql, etc. is like an accountant claiming he just knows bookkeeping. A really valuable accountant is someone who might be a specialist in taxes for medium sized manufacturing firms in california for example.
No. CRUD was a programming style that arose from relational database technology. CRUD = (Create, Read, Update, Delete) corresponds to the SQL CREATE, SELECT, UPDATE, DELETE statements. CRUD was popularized by Oracle. For example, Oracle's program generators IIRC used the acronym CRUD as part of their program generator's specification.
"Expert systems" in contrast, were a specific outgrowth of AI technology in the 70's and '80's and were defined loosely as systems that mimicked human expertise.
There is no necessary conceptual overlap in the two terms.
If you are experienced you can determine what is necessary and make good recommendations accordingly. If you are good at what you do, you should be able to get a job working with other people who are good enough at what they do to listen to you.
Maybe you'll be involved with a few projects that fail for various reasons, but I think it's possible to navigate the morass of failure and come out with a good track record at the end. Your production code may not last a long time, but if it served its purpose at the time then you should be proud.
The ones that are left are more likely to be good, simply because the poor ones with better opportunities have left.
Edit: "better opportunities" from their point of view, of course.
I only ask because all the places I've worked at have had a lot of older programmers, at least in their mid 30s up to mid 50s being the typical range. Then of course there's the slew of non-quite-programmers-anymore but who still make tech decisions (managers).
Then there's the very frequently uttered "Well he doesn't really have enough experience but we need to fill this position ASAP" and "He worked for Corp XYZ for 5 years?! Get him now!"
I'm not saying it's tough to be a younger programmer because it's not, but strictly IME (internet companies) older devs are a rare and valued commodity.
Now that I think about it, could it be because most of the senior devs don't have much web-related experience, due to it being relatively new?
Regarding the article, I wish it had some actual empirical evidence to back its claims.
Losing interest in technology is like tires losing their grip on the road. You keep going in the same direction, no matter which way you point the wheels.
Often age-related decline is masked by working in a static technical environment that a person has already mastered. It's like sliding uncontrollably down a straight road. Then, when the person needs a new job, they find that they haven't learned anything new in five years, are hopelessly out of date, and can't muster enough interest to learn anything new. The road finally curved, and they're in the ditch.
Personally, I've come to value my ability to be interested in the technical details of computer systems. It's embarrassing sometimes, but it's the key to my livelihood. (I've gone from being ashamed of it to occasionally wishing I had more of it.) I know I can't really be satisfied without an aspiration, or at least a connection, to grander things (fame, the mysteries of the universe, or boatloads of cash, depending on who you ask) but now I treat my geekiness as an asset instead of a distraction.
It's interesting that some patterns do not seem to change very quickly though. I'm reading "This Time is Different. Eight Centuries of Financial Folly" right now. It's a rather dry empirical study of debt crises. The conclusion is that these crises have certain patterns that recur again and again, but each time there are people pointing at new factors convincing themselves that this time is different and loads of debt are OK.
So it would appear that a minimum of eight centuries on the job experience would be appropriate for any banker.
But even if, as in this case, experience would lead to the right conclusions, I would argue that sometimes it's folly that actually creates value and innovation, even if 3/4 of it is later destroyed in a crisis. The dot com bubble is a prime example of that.
The real myth is that older developers work based on experience. Sometimes experience is just a convenient excuse for laziness. Younger developers find other excuses for that.
I have 20 years of programming experience but I'm still struggling with the urge not to jump on each and every new fad that's out there, at least when it comes to things like programming languages and paradigms. What I can do way better than any recent college grad is to explain in a very reasoned, professional and well informed way why it is absolutely critical to use that fancy new language or paradigm now ;-)
My father-in-law was hacking C until he retired at 67.
Keep reading, learn something really new every year. Best continuing education I've found is access to the ACM journals online.
Someone able to write C64 assembler games/demoes 25 years ago, will still be a great programmer today, even if he didn't touch a computer since then. The basics haven't changed that much, nothing that cannot be learned within a few weeks.
Older programmers are probably less likely to jump every new hype. For them it's just the nth way to do same, only without the already collected/own written libraries and tools. That could be a disadvantage when looking for a new job.
All I can say is that I'd have no problem hiring an older developer if I was in a position to, and I have trouble understanding ageism. As always, you do have to be careful to pick the motivated ones, but this isn't a problem that varies significantly across age groups.
Don't worry about people wondering about you.
http://www.amazon.com/What-Care-Other-People-Think/dp/B000S3...
And you know? not everyone values confidence. I know I don't, mostly because I am very confident myself, to me, having an employee willing to take huge risks is pretty worthless, because you know what? I can do that myself. I want someone smarter than I am. Besides, people who are confident don't stick around very long.
I'm 54 and "just a programmer". A few thoughts:
- I've done all the other jobs. Now I'm doing what I love best.
- There has never been a better time to be a programmer. I can't imagine doing anything else right now.
- I'm on the critical path. Of all the things I could be doing, programming is where I'm needed most. It's much easier to find people to do all those other things that to build the software. (Not a judgement, just an observation based upon many instances of supporting data.)
- I don't care what other people think.
- If I did care what other people thought, I'd just tell them that I don't remember the last time my boss made as much as me. That usually shuts them up.
I have been programming for nearly 44 years. I have done a little bit of management during that time, and I can assure you that spending much time as a manager will erode your programming skills.
In many contexts, managers are more expendable than programmers. in fact, these days, apparently more than ever, highly talented programmers are hard to find at any level. Managers are a dime a dozen, and can get whacked just as easily as anyone.
I did have that nagging feeling about being old and "still a programmer" or some sort, like I was going to stuck in my career path... but then again, some people are meant to be like that so I decided not to worry about what would happen in 10 years and move forward.
Besides, Linus is technically still a programmer :).
Seeing from yesterday's buzz regarding how hard it is to find a good developer, one can only hope...