My motivation? It's not about the technology, the tools, the apps, the business, the customers, or even the money, although any of those can provide plenty of motivation. And believe it or not, it's not even about the happy dance feeling I get when something I built works for the first time.
It's about the achievements of those who use what I built. Hopefully that'll keep my busy for another 33 years.
As a consultant, I've rarely met a developer over 50 who's still interested in their job (however I wonder if they ever were).
In the few cases I have, it's been amazing. The stories someone with 33 years of quality experience can tell you about are eye opening. They can remind you of how far we've come, how what's old is new again, and how to adapt in an ever changing tech scene.
My father is 73 and still works in sales because he loves it. I'd hope to do the same thing in IT.
I have also met a lot of developers who are passionate about the lifestyle features of being a startup software developer but who are also willfully stuck in ruts like spending months cultivating positions about which testing framework best expresses the right testing methodology, or whether HTML is best generated serverside or clientside. They don't read papers, they plan on maybe one day learning C, but they wear the right t-shirt and are on the right IRC channels. These are things that might matter a lot when you're just starting out in your career but don't so much matter at all when you've got your sea legs.
There are a lot of those people and I think that may color our impression of which age bracket is most engaged.
On the other hand, I build things that are, for the most part, abstract and virtual. I enjoy what I do because it allows me to be creative using technologies and tools that I enjoy working with. (And I really enjoy building entire applications from scratch, so much so that I will be creating businesses to really scratch my itches.)
I'm proud that an application that I built half a decade ago is still being used. But, for the most part, most of my work has a limited life-span. Is that so bad?
I'm one of those guys who comes to Hacker News, reviews what others have built, and immediately thinks 2 things:
- That is so cool!
- So what?
Like most others, I love playing around with widgets and technology just for fun and to see what happens. But the satisfaction from this is usually short lived.I liken playing around with techology to running around and having lots of good sex with strangers. It's fun and it feels great, but sooner or later, you'll want something more substantial. For me, that requires the satisfaction of others. (This applies to both programming and sex.)
Quite frankly, I wouldn't want to be sitting in front of a desktop for 33 years of my own life. Not to criticize you or anything.
But coding my entire life, just doesn't feel right, well as of today and the classic cubicle/desk/chair environnement, maybe I didn't pick the right job, it just feels like a very individualistic/selfish job unless maybe your stuff is open-sourced. How much do you feel you contribute to the society , for example ?
Then again, I'm just starting in the domain, talking from 1 year of work experience and 3 of school experience.
What about a brick layer, painter, electrician, school teacher, is there anything wrong with those people if they enjoy their work and dedicate their work passions to those professions?
>> How much do you feel you contribute to the society
Society doesn't pay the bills, companies do. Society is appreciating art, going dancing or having a barbecue.
I've been in-industry for 3 years, and in that short time I have written software that:
- substantially reduced plastics, paper, and metal usage in packaging for the largest e-tailer on the planet.
- decreased fuel usage for shipments coming from said e-tailer.
- made air travel better by letting travelers know about delays, cancellations, and last-minute changes before the airlines even know about them. I even help them pick better seats on their flights.
- help people go on more fulfilling, more interesting dates.
I look forward to doing a hell of a lot more than that.
If you don't feel like your work matters, and you don't feel like you have impact on the world, do something else. Software is wonderful in that way.
2. open source # the only way to contribute
My quick & easy response is #137 of my ebook (see my profile):
137. How do you put your skills to good?
I’ve always thought that the best way to put your technical skills to the greater good is through your day job, not instead of it.
Some of my days jobs have been to write software to ensure that:
- people get the right prescription medication on time
- firetrucks and ambulances get to where they're supposed to be
- parts that go into cars and planes are properly certified
- prisoners are kept in jail
- those same prisoners get proper medical care
- electronic equipment gets assembled properly and on time
- medical supplies get dispatched to where they're supposed to
- insurance claims are processed properly
- quality data is properly maintained for food items
You don’t need to do charity work on the side in order to contribute to the greater good.On the other hand, if you don’t think that the work you do during the day contributes to the greater good, then maybe you should consider doing something else with your valuable time.
Do good and get paid. You can do both at the same time.
And also, being a programmer in open source or free software is not only the programming, its also the community and bonds you make while contributing.
Available at http://edweissman.com/53640595 and as a PDF (top of the linked page).
To summarize: Use simple tools and eliminate distractions. At the end of the day, code and refactor away from the computer (on printouts). This forms the basis of the next day's work at the computer.
My days of 48-hours-staring-at-a-screen are over. Thankfully. I enjoy code much more now. Back when it was my job, it was a job. You know what's funny? I comment my code more now than I ever did when I was in my 20's.
Why not build your own achievements?
Besides, who is not a cog in some wheel or other? In civilized countries, there is nobody who is at the top of all hierarchies, no King. It's a pejorative with no bite if it applies to all.
Achievement is what you feel inside. A large bank account is nice validation of a certain class of achievements, but not the only kind.
If you do something that gives you no kicks and only pays your bills, then yes, throwing away that nasty but necessary source of subsistence feels liberating.
But if you enjoy what you're doing every day and have no problem getting up in the morning for that, you only want more, and "retirement" feels like having your favorite toy taken from you.
Imagine someone saying: "Mr. Tesla, when are you planning to retire from your burdensome and soul-crushing experimentation and retire to enjoy some front porch whistling?"
If you want to build big things, in most cases you can't work alone. In a big team, everyone plays a part. Call them a "cog" if you want.
And, sometimes the specialization that happens in big teams allows people (err...cogs) to really push the state of the art by engaging one hard problem for a long time.
People don't get rich by simply taking from others (OK with a few exceptions); they get rich by offering something that another person/business/etc sees as a benefit worth paying for.
I'm pretty glad I realized what this article is talking about early on and started planning long term for my own exit, as I knew my tolerance for this was a finite resource that would be continually depleted.
And a programmer today earns enough to be able to do so at a good age.
1) When I started out programming, some two decades back, I did a program which was tough for me then (I believe its a pretty standard program given to people who are learning programming). It was - 'How to place 8 queens on a chess board so that they don't attack each other'.
2) A C -program which prints itself.
3) More recently I read Norvig's solving every Sudoku puzzle (http://norvig.com/sudoku.html), so went ahead and wrote my own (without looking at his solution of course).
4) Solving this ('Going Office' on Interview Street : https://www.interviewstreet.com/challenges/dashboard/#proble...) one gave me immense amount of satisfaction, when I did a couple of months back. As I had not done complicated graph stuff earlier. I game my family a treat, just because I was so happy when all my test cases passed :-)
So programming has been a joy of my life. Hope to do it for many more years. Will try.
can't wait till I retire so I can finally learn some of the fringe stuff I want to play with but have no time.
to me, being a programmer is living the life of a perpetual student.
how can anyone grow bored with that?
I actually returned to programming after years managing programmers in part because I was unhappy. I realized that the further I got from the machine and _making_ the less happy I was.
So, if you asked me whether I wanted to be 'managing' at 50, I'd say "Hell, no!".
The enjoyment of making things work, learning and shipping it real. I hope I'm still able to feel those things at 80. I never got the same satisfaction and enjoyment from managing people and processes.
It's about "actual problem solving, and building things" (which is good and enjoyable at any age) versus "navigating oceans of constantly changing APIs" and getting bitten by minuscule oversights in enormous volumes of documentation, which requires a lot of stamina, and maybe optimism, that you have less of as you get older.
I hate arcane APIs with a passion. I love programming and building things. Always have, always will.
I think one's tastes don't change much with age; what changes is your willingness to put up with things you don't like. Like a grumpy old uncle who says inappropriate things at family reunions, at some point in your life you just stop pretending.
My mother is in her late fifties and recently returned to working in a children's daycare after being a manager for many years because working with children was what she was passionate about, and she realised she had advanced away from what made her want to go to work.
I feel the same way about moving away from programming - what I enjoy is digging my hands deep into the rich code, smelling the mix of coffee and ozone, feeling the flourescent glare burn into my retinas - THAT is what makes life worth living!
I guess you can take the boy out of coding, but you can't take the coding out of the boy!
So I now have a reasonably high level job with a lot of variety but I usually spend a couple of days a week developing stuff - altogether not a bad combination for me. I do manage some people but as they are all smarter than me and very self directed it is actually a pleasure to do.
[NB By far the most stressful job I had was as co-founder and CTO of a VC funded startup]
When filling out a 'secret question' for some site, it ask what your ideal job would be. I didn't even blink, it was: developer.
Do I want to be doing this when I'm 50, hells yea.
If I had trillions of dollars, I would still code. It's who I am, it's what makes me happy. If you don't think you'll like development at 50, then you may have picked the wrong career.
Two employee candidates interview successively. One is 25, the other 53. Both are comparably conversant in technology, evince comparable cognitive capability, are equivalently literate in the problem domain being tackled by the role they're interviewing for.
Privilege: the 25 year old is not asked (overtly or subtextually) whether they "want to be doing this". It is simply assumed that the 25 year old's head is in the game. No demonstration of lifestyle commitment to the craft is required.
Take the idea and turn it around in your hands for a little while. Try this: imagine that instead of software developers, these were master woodcrafters; luthiers, say. Notice how the subtext changes: age is an asset. A lifetime spent designing guitars is a signifier of passion and competence. Flip the switch back to development and notice how age suddenly connotes something else, like "career failure forcing person to retain technical role".
You will get old someday, if you're lucky. But controlling for spectacularly unlikely values of "lucky", you are aren't going to strike gold in this field, such that you'll have no career concerns when you're 45-50. It is unfortunate that our field manages to devalue competence and experience that way it does; here's a second-time Rails gem author instead of a virtual memory system designer, see you at SXSW!
More importantly, the culture and business of instrument-making is largely the same. You have a shop in your garage or basement, or in the back of your store. You make instruments by hand a few at a time and sell them, preferably for cash, to individual buyers. You learn by apprenticing with someone who knows, or reading books and practicing like crazy for decades. Maybe you'll scale up to a factory with a few dozen journeymen cranking out instruments… like Stradivari did, three hundred years ago.
The problem with programming is that it's unstable. And I contend that it isn't even the unstable languages and platforms that hurt (as everyone says, experience makes it easier to learn new languages). Nor is it the eternal brokenness and turnover of APIs. This is not a new problem, nor does the patience to deal with it necessarily decline with age. Indeed, to an extent the opposite is true: experience has taught me not to panic when my favorite API is shot out from under me. (The first time it happens is a really awful surprise and a test of your patience, but the fifth time it happens you're probably used to it.)
No, I think the real problem is the constant turnover in culture. Programming in the late 1980s, for example, was a completely different social universe than web consulting in PHP, or iOS development: Different typical org structure, different business model, different way of learning the trade, different communities and communications channels, different career tracks, different project management styles, different constraints, different everything.
Immersing yourself in a new culture is hard. You're going to get schooled by kindergarteners, so check your pride at the door. And you're going to have to relearn your whole approach to the business, not just a new syntax or a new set of APIs. You're even going to need to learn new jokes. And the biggest challenge of all is that your old culture rarely dies cleanly, so you're never quite sure if you're doing the right thing by becoming an expatriate. Why not just go home, where you have the seniority and the contacts, where you know the old stories and can visit the old hangouts? The old way is shrinking, but is it really time for the funeral?
The contrast with other professions is so great that this age-blindness seems like age-based discrimination, kind of like a 80 degrees pool seems cold if you've just jumped out of a hot tub.
Well perhaps you are drawing the distinction between seniority and experience. There are likely some folk who have programmed in cobol as long as I have been programming. Unlikely they have equivalent experience.
The more things that I learn that don't work, the more value I offer to my clients/employers/colleagues.
But of course, this sample has survivor bias. How many people who left the profession in their forties are going to post on HN? How many people who are fifty and hate their jobs are going to post on HN?
I love what I do and try to share that love. But my advice to you is this: Don't pay attention to how much we love our jobs at fifty, pay attention to how we got to be fifty without burning out.
If I wanted to rag on programming, I'd point out how many dysfunctional programming workplaces we have, or how our tools are always 100 times more complex than they need to be, or how setting up and managing the programming environment can take the joy right out of actually doing the work. (I could go on at length here)
But overall it's a great place to be. We're the Michelangelos of the great age of machine intelligence which is yet to come. We're sketching out how it's all going to look. We're at the forefront of solving incredible problems and creating magical devices. A guy told me something back in my 20s when I was just getting started that rings true today: technology development is the one area where you can create your own reality. Not only in terms of a virtual reality, but in terms of how you want your work day to go, how you want to interact with your peers, how you get compensated, how you spend your free time. It's all up to you. This is completely unlike many other professions such as doctors where everything is tightly regimented.
I worry that as the job of programming matures, we are losing track of that fundamental insight. One of the reasons I like Agile and Scrum is, when done correctly, it liberates the teams and takes them back to the way programming should be.
It is rarely done correctly.
Reminds me of the intro to SICP:
“I think that it’s extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don’t think we are. I think we’re responsible for stretching them, setting them off in new directions and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don’t become missionaries. Don’t feel as if you’re Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.” — Alan J. Perlis (April 1, 1922 – February 7, 1990)
If there's a great age of machine intelligence to come, then one in a million of us may be a Michelangelo. The rest of us are house-painters, and the houses we paint are slated for demolition within our own lifetimes.
If you want to be able to survive more than 10 years in the software industry, you need to get manager-level clout and full autonomy over your work. That's non-negotiable. This industry destroys you if you don't have those things.
The terrifying thing about the software industry is that if you don't continue to get good work, you decline pretty quickly. Also, I honestly think 90% of what makes some engineers great and most not (once filtering for natural talent has taken place) is past experience: you need a continual stream of high-quality work to become and remain decent at this job, and the good stuff is rare.
The actual work of programming can be a lot better (more interesting, more rewarding) than anything that managers do. The hard part is figuring out a way to be a full-time engineer but retain manager-level clout.
Many engineers think that actually becoming managers will give them what they need to enjoy engineering again, but the problem is that this strategy doesn't work. If you're a manager and your reports figure out that you're taking all the interesting work for yourself and throwing them the scraps, they'll get pissed off and either underperform or leave.
I don't really know how to do that, I just got lucky. I moved into management myself about five years ago (still working for the same guy), and I'm trying to be the same kind of manager for the people who work for me.
I used to think the software industry was about programming: writing great code to solve hard problems. It's not. It's about credibility and technical risk. The software industry is 90% industry and only 10% software. Most of your time will be spent convincing people to allow you to do useful stuff, not actually doing useful stuff.
The ironic thing is that, as software jobs increasingly slide toward looking more like widget-making and less like research, programmers become a lot less effective. Valve established that open allocation works. (http://michaelochurch.wordpress.com/2012/09/03/tech-companie...) Every other software shop has proven that the alternative (still more popular) doesn't.
The Death of R&D, I think, will be looked upon as the "conscious" decision (of course, large groups such as nations do nothing "consciously"; it's a historian's metaphor) of the United States to go from a world leader to third-rate in a few decades.
Can you explain this further? I've been a developer for 12 years, never happier, making very nice money and constantly getting interest from other companies. Yet I have neither of those things, nor do I even want them.
Also, I think most managers don't have the autonomy to "do the right thing" because ultimately they're working for somebody else.
I think the author is right in pointing out that there's an ugly side to programming that includes bugs, bad API's, bad tools, bad documentation, etc.
This is what I have come to term "programmer on programmer violence". We certainly can't blame anyone else for these issues.
This I don't enjoy.
Not to single them out --because EVERYONE has these issues-- but you look at the bullshit you have to deal with when doing iOS programming and, yes, it can be down-right demoralizing. Horrible documentation, an IDE that looks more like an iTunes-styled toy than a professional development system, bugs, bugs!, no feedback, huge delays in fixing problems, etc.
Again, this isn't just about Apple, as nearly every system I've worked on over the years has some kind of bullshit that you have to deal with, like it or not.
This, I do not enjoy.
That's why, when justified, I've always gone for projects where I can "own" all of the code. Two typical cases are FPGA-based projects where you start with a blank slate of sorts and develop it into a useful signal processing subsystem. Or, embedded systems where I've had the chance to roll my own RTOS from scratch. These projects are fun. And you don't have to deal with other people's bullshit, laziness, incompetence and technical baggage.
These projects I really enjoy.
The other side of this question is: If you didn't program, what would you do?
I am an odd duck. I am equally at home designing multi-gigahertz digital circuits, programming embedded systems, FPGA signal processors, iOS apps, workstation apps, websites, doing mechanical design and even running a CNC shop. I've been lucky enough to have had the opportunity to learn tons of disciplines through hours-upon-hours of hard-work and dedication. I've enjoyed every minute of it.
What I have not enjoyed --and I'll try not to get too political here-- is when your efforts are affected or even destroyed by external --political-- forces. I recently had to close down a beautiful electronics manufacturing operation that took me fifteen years to build. Typical story: Started in the garage. Worked my ass off. Learned a ton of stuff I didn't know. Worked some more. Grew it to a 15 employee company in a 10,000 square foot building with top-notch manufacturing equipment. That's the good side of the story.
While I was busy doing this, fucking idiots, otherwise known as politicians, where busy meddling with free markets and passing laws and regs that would, ultimately, cause the economic implosion in 2008. My customers couldn't finance their purchases (this was B-to-B in a mostly leased-equipment environment) and orders went to zero or nearly zero instantly. There's a lot more to it, but that's the basics. At one point no option remained but to fire everyone and shut it down.
How does this relate to the "Would you want to be doing this at 50?" question?
Be careful about doing something or falling in love with something that external forces can seriously affect, damage or take away. For me I'll generalize and call this "manufacturing". No, I don't want to be in manufacturing any more. Not now, not when I am 50. It's a shit business in the US and, between our politicians and what's going on in China, it is getting destroyed a little more every day. Here's a case of having invested fifteen years of my life into something that the government destroyed. I did not destroy it. None of my actions caused the economic downturn. None of my employees or my customers caused it. It was government policy that allowed millions of people making $50K a year to buy $500,000 homes they could not afford. And so it went.
The software industry, as fucked-up as it can feel from time to time, can have a lot more isolation from these issues. That's not to say that it isn't affected by economic ebbs and flows, it is.
There's a fundamental difference between the nature of a software business and, say, a manufacturing business. At any given time I had to have one to two million dollars in inventory, tools and equipment (parts, assemblies, raw materials, manufacturing equipment, tools, infrastructure) in order to be a small manufacturer. And, when things go bad, this infrastructure is sitting there, right above your head, ready to squash you, ready to kill you off unceremoniously. It can happen almost literally overnight.
Software is different in that infrastructure is minimal and there is no real inventory investment. You can do software from your bedroom and build a nice lifestyle business or million dollar venture. Most importantly, software is incredible in that you can pivot overnight. You can be doing children's educational apps one day and a real-time process monitoring system the next. This allows for great security and potential stability for years and years. This is a huge advantage and, yes, this is something that would be desirable to have in your life at fifty and beyond.
A little old, but it captures the spirit of the thing.
Look for Peter Schiff videos on youtube from 2005/06/07 when he talks about it and everybody laughs at him.
Read it. It's an eye opener.
I had a large portion of the 'middle' of my career in management, including a couple CTO/VP Eng positions, with the traditional increasing stress.
So I moved to Hawaii for nearly a decade, got rid of the stress, rediscovered programming, and I'm happy again.
The main thing that looks unappealing to me about being a hacker decades from now is the constant cycle of learning. I'm on probably my 3rd generation upheaval. I've worked on a daily basis in a team of programmers with C, C++, C#, Java and Python. Getting familiar enough with those languages to do more than just tinker took a lot of effort - even for the languages that are pretty similar e.g. C# and Java. I'm now looking to do more front to back website coding (away from pure desktop/server stuff) so I'm trying a few things out before choosing on the main stack of technologies I need to master.
In my early thirties I still have the enthusiasm to do this but I find it hard to picture doing the same ten years from now with the same smile on my face.
>>They were never given big, important or new projects<< Basically you have answered the OP's main angst. There are names for this kind of thing, you know ("Ageism"?). Also, because of these kinds of actions, these people are simply losing their 'relevance' within the context of the organisation's overall strategic direction. Now how bad do you think it is for one's morale and self-actualisation? In a way, damned if you do, damned if you don't, isn' it?
Also, in some orgs, the "seniors" are "expected to understand the architecture" (read: more arcana and API call memorisations) so they can "guide"/"mentor" the "juniors" and "participate" in "propelling" the organisation, blah blah. And this invariably leads to what the OP's saying >>It's about skimming great oceans of APIs that you could spend years studying and learning, but the market will have moved on by then and that's no fun anyway<<
There are many different kinds of programming, some are fun and some are not.
If you really want to be doing this when you're 50 make sure you get good enough that you can pick the projects that are fun. If by the time you are 50 and you've been doing this for 3 decades you are still gluing api's that's not the fault of 'programming', that's a direct result of choices made earlier.
And one more thing: on the scale of things that you could be doing, look at your parents, grandparents and their grandparents and what they were doing when they were 50. Suddenly that api gluing doesn't look so bad at all.
But what you mentioned here is what I would consider "Let them eat cake instead" advice. :)
Not well thought out.
Nostalgia is a very powerful emotion, and besides historical perspectives are based on whatever set of lenses you choose to wear. Actually, our grandparents (even parents) had more time in their lives, more variety in their lives that was completely unrelated to their 9-5 routines, their professional lives were (mostly) on autopilot, so they had more free time to pursue all kinds of hobbies and tinkering, while still working on a daily job! So, yes I am looking at grandparents too, but I chose to wear different lenses.
In my case the stress sort of waned by itself. I think I moved a bit towards Wally character from the Dilbert series. I don't overcommit anymore and I certainly gained resistance to "aggressive schedules" and visions of doom and gloom tied to deadline skips. So I stress out less and less and I believe it comes naturally with age.
In an ideal world, I'd be set financially by the time I'm 50 and I would work in my own stuff exclusively or almost exclusively.
The other part is renegotiating timelines when they make changes to stuff you've already built.
Financial security helps but the real key is being skilled enough to accomplish a lot without breaking a sweat. As much as possible, build reusable components with nice APIs, even if it means putting in some extra time up front. Always think about how to make your own job easier down the road, and after a while you'll have an easy job.
You nailed it. +1 :)
My own comment further down below was exactly on similar lines.
There are some underlying concepts, foundation ideas which didn't change much since 1960-70-80s, the time when they have been discovered, studied and defined.
Yes, people are piling up tons of crap in order to get money, and this is how we got a millions lines of meaningless Java code which no one could understand or maintain, which seems to work well only because most of unit-tests passed and hardware is so cheap.
I don't even want to mention current Javascript madness.
At the same time, however, almost nothing were added to the ideas expressed by John McCarthy, and followers.
Yes. They are stuffing tons of useless crap into new Scheme standard, as they did with Common Lisp, but, the underlying ideas and the principles of "less is more" and "good enough" remain unshaken, like mountains in Nepal.)
In a very rare occasions we still can witness some miracles. For example, the source code of this site - the engine and the language translator in which it written is less than one megabyte. (just imagine what amount of traffic it handles and how much money already created).
There are also Plan9, nginx and few other wonders.
So, in ones 50s one, perhaps, should enjoy knowing and applying these principles and ideas and produce ones own small wonders. Or teach others, as enlightened people like Gerald Jay Sussman or Brian Harvey do.
I've been able to pull many programming lessons from the other activity I enjoy, woodworking. When I first started, I was overwhelmed by the sheer number of items in catalogs and stores. I didn't know where to begin!
And then I discovered Japanese woodworking, and traditional woodworking, and people like James Krenov and Roy Underhill.
It is impressive what people have built with a small set of simple, sharp tools.
I love seeing these gems, regardless of the domain!
(Hell, every few months I find something new to feel obsolete about, usually to do with the fact that most programming nowadays seems to be web-dev and I'm just not into web-dev.)
On the other hand, I'd love to keep being a computer scientist until.... I don't even know what age. Sure, eventually I'll have a family and other priorities to take care of, but the wonderful thing about the scientific frontier is that it doesn't actually move that quickly. In science, ideas have to actually be tested and percolate through for a while before they become something ever single practitioner has to know.
Don't do the work because it's expected of you, because it's sexy, or because it's "interesting". Don't do it because your friends are impressed, because the pay's good, or because your friends are there.
Do it because it enables you to do what you love.
It can happen with any profession, and I can't see that it's any more likely for programmers.
[Personal note: I'm my late 40s, and have been a professional programmer my entire working life. I still love it, and can't think of anything else I'd rather do.]
I hope to mitigate the frustrations by simplicity - the idea of a few great tools I know inside and out
Because I seriously would like to see myself retired by 40. Not even 50. Would I like to code in my spare time? Yes! But I'm dead sure and certain the nature of programming is likely to have changed so drastically in so many years I might find myself a losing horse in such a race. Not that I cannot compete,but after looking at my father I can say for certain priorities in life at 50 are very different than what they are 25.
Solving problems is something that I would love to do even after retirement. But solving problems doesn't always mean programming.
I love programming, but I just like money a little more!
See my comments elsewhere.
That's a lot different from "hacking on your homepage" or throwing together a quick Ruby script utility to do some scraping.
Back in the day, protocols (tools, languages, ...) were designed by people who thought very hard about the implementation, the required resources and the programmers whom these were inflicted upon.
In contrast, entities like the W3C display complete ignorance for the implementation details (look how they've failed to provide even a half-assed implementation of a browser as proof-of-concept for their "designed by committee" standards). Whatever builds on top of such lackluster work is doomed and will frustrate programmers endlessly ...
For instance, the STEP AP203 standards document is 500+ pages long. (That's the old edition, I don't have a printed copy of the second edition handy.) But those pages don't tell you how to use the hundreds of classes they define to actually create a meaningful file. For that you need the supplemental "recommended practices" document (http://www.steptools.com/support/stdev_docs/express/ap203/re...), which has been marked "preliminary" for the last 14 years and is itself not particularly clear. (On the bright side, at least it's free!)
Of course, that only applies to one of the many different STEP application protocols, and while I did find a reference to an AP214 (which I also need to support) recommended practices document, the link to it was dead.
Also I deeply feel the mental bubble that forms around me when i'm programming. It makes it scarily easy to just start withdrawing from other people and the world around me.
> ... a problem domain you don't fully understand and don't have time to understand.
One resolution is to create products that address problems. Then, you can justify time in understanding and improving, because it's amortised over many users.Of course there's still pressures, and technology still moves, but it's not cut and paste and pray.
Being a good software engineer still puts you in a large group. Being a good software engineer with good domain specific knowledge instantly puts you in a much smaller group.
It can also be much more satisfying work. And an awful lot more secure (depending on the firm) compared to starting out on your own.
Trying to be a rockstar competing on your coding merits alone is going to be damn hard to keep going for 30+ years.
Well stated. Man, do I feel like that. But I think this is a universal problem now. Information is freely available, and there's so much of it. An endless buffet, and it doesn't matter what field you get in to.
Not saying that would be an easy job or not stressful but it's a better use of that persons skills and experience.
"To me, there's an innate frustration in programming. It doesn't stem from having to work out the solutions to difficult problems. That takes careful thought, but it's the same kind of thought a novelist uses to organize a story or to write dialog that rings true. That kind of problem-solving is satisfying, even fun.
But that, unfortunately, is not what most programming is about. It's about trying to come up with a working solution in a problem domain that you don't fully understand and don't have time to understand."
If this is a problem that affects you don't do 'most programming'. Nothing really stops a developer from learning a problem domain with economic potential. Sure you may have to go to school or read some books or get some experience, but so what?
The idea that a programmer always has to work in a half understood domain transforming some one else's ideas into code is just that, an idea. It is a dominant idea, but nothing really stops anyone from mastering an interesting domain in addition to programming.
Knowing how to program is like knowing how to write (in a largely illiterate society, so your knowledge has economic value). Or like knowing how to cast spells. Yes, if you spend all your life scribing other people's thoughts or casting spells to manifest other people's wishes, it could get boring. Could, but doesn't have to be. You don't have to be a scribe just because you know how to write.
There is programming, writing code that helps computers do what people tell them to do.
Then there is the experience of programming that this author seems to have, which involves a lot of long hours, and nights until 2 AM.
It is rare for competent and experienced people to be tolerant of the toxic environment that was assumed for programming. Over time you learn that there are lots of professional programmers with reasonable lifestyles, and you'll want to become one of them.
However programming itself, if it is enjoyable for you, is likely to remain enjoyable for a long, long time. (Mid-40s here. Didn't learn that I liked programming until around 30.)
2.5 yrs out of college. Code monkey. Really, really good at monkey programming. Used to get upset when people made claims that it can't or shouldn't be done. "Of course it can be done you lazy #$%*$%. You call yourself a software engineer??" Then I pull it off. A couple more people love me, a couple more hate me. I become the monkey programmer. I am the one who brings designs to life the quickest.
That's the gist, and it's getting old. Requirements change. Social issues. It's like trying to drive a ferarri up switchbacks of a mountain. No wonder companies love hiring new grads.
The largest benefit from this is: reading & writing a lot of code. There is no substitute for this. It has helped me identify design areas that I need experience with. It has also helped me reason about code more efficiently, which is a very useful skill when interacting with other programmers.
Edit: And then I go home and read HN and /r/programming and play with other programming languages and build stupid little programs and read my books and try to figure out my next move...
Hm, maybe the solution is to have people in their 50s design APIs, so they can make sure the bullshit doesn't get in?
BTW, I'm not a coder but I Follow several on Twitter and too often see their frustrations with bizarre APIs and things not working as documented -- and these guys are young!
I'm not looking for advancement, since advancement would be out of programming and into management, nor a pay raise, since programmer salaries are already plenty high. I just want to be doing exactly what I'm now doing in thirty years.
Add to my above para, this other gem of an observation:
<blockquote> If you're fresh out of school, there are free Starbucks lattes down the hall, and all your friends are still at the office at 2 AM, too...well, that works. But then you have to do it again. And again. It's always a last second skid at 120 miles per hour with brakes smoking and tires shredding that makes all the difference between success and failure, but you pulled off another miracle and survived to do it again. </blockquote>
That article really resonated with me. And, no I can't see myself doing it at 50 :-)
EDIT: One more thing to add with regards to context of operations, rewards are also skewed in favour of management rather than "engineers", so at some point mortgage, loans, education and medical expenses will overshadow 'fun'.
I think we're lucky to be in such a creative and interesting profession where you get to learn lots (and it pays comparatively well too).
I've written about the joy of programming in "Why I Love Coding" http://henrikwarne.com/2012/06/02/why-i-love-coding/
I made a long (5 year) detour into management because "I was supposed to" and it took me 4.5 years to realize that I hated 80% of my job. That isn't to say management is "bad" but you need to understand what makes you tick and what doesn't and then find a role that matches that. Don't worry about the money - the money will find you if you love your job.
That said, I sure hope it's not my day job by then. Programming is much more fun when you're just doing it for yourself than when you're solving other people's problems to extract money.
Although even those projects can be made fun by making a valid business case about cool things to clients.
Hrm... it's like that for me, but it's not like that for others I know. Some people I know have worked in the same industry for several years and have a good grasp on the problem domains they address. That doesn't mean they know the solution to everything off the top of their head, but it does mean they'll likely have time to figure it out, as they're in that business for the long term, and have incentives to get it right vs 'fire and forget and move to the next project'.
I'm in my 40s and have been programming, for 30 years. Initially as a hobby (obviously) but getting paid to do it, first part time, then full time, for about 20 years. I had this same conversation with an uncle last year - shouldn't I be doing something else (OK, not quite the same tone as the OP, but we had the discussion).
I have skills that allow me to solve problems for people. Many people do as well, but with software, I do it with electrons, and can do it wherever and whenever I want. In contrast to many other types of work which dictate location, tools, timing, software work is incredibly flexible. But... more to the point, as more of the world continues to become software-based, the opportunities to offer my problem-solving skills to people increases at a rate few other industries/skills have enjoyed (or will continue to enjoy).
Even if I switched focus to work in "company X" vs "company Y", my core ability will still be "problem solving with software" - I just don't see that changing for me over the next 20-30 years. The 'how' and 'who' may change, but probably not the 'what' so much.
One thing I get an odd pleasure out of is when other programmers use phrases and styles I came up with years ago. A recent example is the $ prefix on a JavaScript variable containing a jQuery object:
// Set $test to a jQuery object and test to the DOM object
var $test = $('#test'), test = $test[0];
I just saw someone explaining that on reddit last night and it gave me a smile.Much longer ago, I coined the phrase "fire an event" back in the 80's when I was designing the VBX interface for Visual Basic (then called Ruby). Alas, not all the names I coined for that project survived: VB Controls were originally called Gizmos, which I thought was a much more fun name. But still it's neat to see people talk about firing an event.
A quick glance through the posts here reviews a lot of folks here have better luck and it is a good thing. To put things in perspective, I have been working in Asia Pac and now in China. Now I am in the business dev turf where a technical background is proven useful.
And before people throw a hissy fit about being called 'stupid', look back at 10 years ago and tell me you weren't stupid with regard to what you think is important now.
No one is saying you can't (or shouldn't) code in your 50s or beyond, but the older you get the more particular you get about what you work on and what your working conditions are.
It's about getting derailed by hairline fractures in otherwise reliable tools, and apparently being the first person to discover...
I actually live for these moments. When I google the error, in quotes, and get 0 responses. Its a total rush to know that I'm the first one there. Its even better when I figure out a decent fix and then light out across the forums to share my new-found knowledge.
I'll be 42 in November, and my experience gives me a guided path to understanding and solving problems, independent of technology, language or API.
I don't need to chew through espresso and lattes until 2am, because I've gotten smarter over time. I can identify patterns and problems faster than I did 20 years ago. I work more efficiently and don't need to take a scatter-shot, unfocused approach to work.
I don't disagree that software is a continual source of frustration to develop, but I think that's because we expect at some point to be super-experts for any problem domain.
Yes, tools and frameworks change. Sometimes they suck. Sometimes they don't. If you don't love learning new things and investing yourself in continually keeping up to date, then you doom yourself to being miserable in this profession at any age.
I think one point that's maybe not stressed out enough here is that the passion for the activity itself doesn't necessarily have to do with a passion for the job related to that activity. I very often do things at my work I honestly wish I didn't have to do, a lot of it is really, really numb. Consequently, sometimes I think I wouldn't want to do that for too long, but then I realize the problem is the job itself, not programming.
There's also the question of whether I'll still be able to keep up with all the new stuff when I get older. I've often relied on the fact that I can adapt and learn things pretty quickly. Then I think back and it turns out that it's not so much a 'mechanical' problem, it's more of motivation problem. So I suppose as long as you can keep yourself motivated, you'll keep going.
Still happily coding away @ 37 here.
Writing books, consulting on multiple interesting projects, and being well-remunerated is a very rewarding way of making a living. Can't complain.
But, that is the issue: enjoyment. The author of the article is not enjoying himself (apparently) so time to try something else.
I enjoy the tech and helping people. My only frustration with my work comes when occasionally projects, for whatever reason, don't work out well.
I did get "lucky" in that I was a member of the founding team of a publicly traded company and am now a technical co-founder and chief software architect of an up-and-coming engineering software startup. I've written 3 blog posts in career and, except for LinkedIn, I participate in no social media/networking. I've never posted on StackOverflow. Outside of my niche industry, I'm sure that no one has ever heard of me. And, that's exactly how I like it.
Just my $0.02
The author here doesn't seem to be particularly passionate about learning from his battles with Hard Problems. I don't blame him, because it's hard and painful to be in a constant battle. But for my part, I hope that I still have a taste for the pain of learning when I'm 50; the day I stop wanting to learn is the day I become bored & boring.
(I'm not sedentary, I walk 3 km/day, 8 on week-ends).
If I'm working on a projects/products I care about I think I could easily do that for the rest of my life.
At times, it's the enthusiasm of others which pushes me along, while I provide technical expertise / experience. Other times I will have a silly idea of the way the world should be, and I can use that to gather others around me and make their lives better.
Programming at its best, for me, is vision enabling :) How could you ever grow out of that?
However I hope that by then I won't be working for a boss and stressing to meet deadlines. I hope that I will be conducting research and working with fellow hackers to seek out the next frontier of the future.
While I think the present we live in now is full of wonders, I don't get a very gratifying sense that it's going to last. It seems more to me that we're finally able to apply the things we've spent enormous amounts of time and money learning over the last thirty years -- we're not out seeking the future so much as we're claiming a stake in the present.
They don't know what is happening behind the scenes like how code gets compiled, how inter machine, inter process communication happens. How browsers work, what is the work involved when someone requests a web page from a server. How to debug issues? Effective debugging requires great knowledge of the components involved and creative thinking and above everything else lot of patience.
I'm a Ruby on Rails specialist at the moment, and I absolutely love the framework and community. GitHub and rubygems are amazing. Google and Stack Overflow are like all-knowing genies. I'll go out on a limb and say that right now is the best time in history to be a developer, and tomorrow will be even better.
I doubt I will always program for someone else, solving their problems. I'm sure I'll do it for another 8yrs at least. Which will put me at 50.
I'm still learning. I'm an ACM member and read at least a paper a week from one of the journals. I keep trying to improve my skills. (A couple months ago I realized I hadn't done much work with trees in a few years, so I spent a week going through tree balancing algorithms from several books. It was fun).
Hardest thing: Having to learn new stuff that isn't designed right. I'm going through a fair amount of that now. Having to move in with a large, not very well designed system and make serious additions to it is . . . irritating.
For example, I've just learned a new vision algorithm that came up couple year ago that makes one of the vision problems solvable with modern hardware, that opens up the possibility to build solutions for this kind of problem.
We are slowly but surely automating life with software, and we developers are in the middle of it. Why stop just because you've aged?
I've been building planes for my first 20 years and herding cats for the rest of my career and there is probably nothing in the world I'd be happier doing.
Note: those may be obscure references for some. http://www.youtube.com/watch?v=Y7XW-mewUm8 and http://www.youtube.com/watch?v=m_MaJDK3VNE should help.
He also mentions something to the effect of not being able to take the time to completely understand everything. But the problem is, it doesn't matter if you are being paid or not. Your lifetime will always be a constraint. You will never completely understand everything you are working with.
I just hope my wrists hold out that long.
Nothing wrong with being a craftsman, using your intellect, and making others happy. In some ways, pursuing the elusive "big win" seems a little shallow by comparison.
It's not that I am getting any smarter. There are so many new tools and so many new techniques with thoughtful discussion to back them up, that creating cool new stuff is becoming a piece of cake.
My world is all about 3D.
WebGL and libraries like Three.js are breakthrough tools.
Stuff that would have taken weeks to code gets dashed off in hours.
I would not stop coding even if you paid me to stop.
It's way too much fun right now!
As a side note, I work with a well-known researcher/developer in his 70's, and it's like working with Yoda. There is so much to learn from him.
It isn't just a matter of trying to have a fulfilling life -- it's a matter of survival. People who don't look up once in a while and consider their larger place are the people who get steamrolled when a new technology kills their entire industry.
This statement verges on ageism, which I forgive you for because it is common in the tech industry. Ask Rob Pike (b.1956) if high impact programming is for young men.
1. You're doing it wrong. 2. You work for some sort of agency / programmer-for-hire outfit where you never work on the same project for longer than a few weeks or months.
Was there a reason to use "man" instead of "person" here? Being a man doesn't seem important to the article.
Im only 20 and if I can program/code/solve problems for the rest of my life, I know i'll be content until I die.
of course I do
I'm currently 24.
I do still love programming, and I'd like to think i'm pretty damn good at it. But do I want to be doing it as a job in 30 years time? I'm not so sure anymore.
I've been through one software job at the very loose-and-fast end of software development, but the pace (and a huge amount of overtime) burnt me out. I got to the stage where I couldn't get myself out of bed to go to work the next day. Over time I recovered somewhat, but I just wasn't enthusiastic about the work anymore.
My current job is at the complete opposite end of the spectrum. Medical software development is very slow, conservative, and methodical. To be honest I can see why most of the companies in this industry are at the thousands-to-tens-of-thousands scale; you literally need that critical mass in terms of staffing to deal with all of the overhead associated with a medical product. Reports, standards, committees, meetings, audits. And yet this company is doing it with less than 10 people.
It's really feel-good work, but it is really easy to get bogged down in the day-do-day drudgery and overhead, to the point where you completely miss the big picture of helping save peoples' lives. Do I want to be doing this when i'm 50? I don't think so.
In general in software development there's a couple of things that I've realized you have to work really hard at to have as a software developer. I've also discovered that both of these are much more important to me than I used to think:
-- Physical health and fitness: if you're sitting statically in a chair for 8-16 hours a day you have to really watch your diet and make continuous conscious efforts to exercise at every opportunity: it's going to catch up with you eventually (especially by the time you get to that 50 mark).
-- Varied and changing environments: both of my parents have "desk jobs", but both have extensive trips out of the office to visit customers or other sites. As a programmer I don't get this variety (the spice of life), so it's very easy to get bogged down and forget the big picture. I think this also leads to getting stuck in mental and emotional loops, due to a lack of external stimulus (kind of like what people who work from home report).
Nothing prepares you for actually being in a 9-5 programming job. At university it was obvious that there were people who were able to pass tests well enough, but would obviously struggle to code their way out of a paper bag. What about the people like myself, who are competent and practical, but are not prepared mentally to handle the rigors of 9-5 programming? Maybe that's why there is a shortage of labour in this sector: not only are we struggling to find people who are excited about programming and skilled at it, but we also struggle to find people who can handle working in these commercial scenarios?
There are also a number of companies that aren't like the examples above, especially in SV. But the problem with that is that not all of us are, or want to be, in Silicon Valley. Could I start my own company? Maybe, but that's not where my competencies or passions lie, at least currently.
Some deep thought is required about where exactly I will go next, given the time and effort I've invested up till this point into electronics, computers and programming.