Just turned 50 yesterday. Wrote my first contract program in 1982 when I was 17.
Today I teach teams how to rock-and-roll. I also keep coding, but mostly as a hobby. It has nothing to do with programming -- I simply have too many irons in the fire to do all of the things I love as much as I want to.
If I may derail the conversation a little bit, may I ask if/how you use the things you've learned today?
I mean, is it things like paradigms that have stuck with you like OOP/functional/w\e, or do you always structure your exception handling in a certain way, no matter the language? Are there skills/technologies you've been using since you've started? For example little scripts of basic that you've never let go off that automate things like setting up build servers and the like?
Once you grok Lisp, everything else is easy. You come to realize that the vast majority of what passes for "new technologies" is really just a re-discovery of something that exists (or is easily implemented) in CL. That makes it a lot easier (if a tad frustrating at times) to keep up.
EDIT: CLOS, and generic functions in particular, are a HUGE lever that no other language has co-opted yet.
Check out Dylan, Julia, and my old hobby language Magpie[1].
So much this. (From a soon-to-be geezer who's staring down 40 soon.)
I highly recommend guile to anyone who wants the battery included nature of common lisp. I know that racket is also a great choice here, I just have little experience with it.
The tech changes - I don't use BASIC or Z80 machine code day to day. The skills that I can speak to, and the skills I see from others with this level of experience, are problem solving and communication, and secondarily the confidence that comes from having made mistakes. Few projects fail miserably solely due to technical issues and skill; in my experience failures come about because of poor communication (including documentation, but also speaking, reading body language, office politics, etc).
Not sure I have any specific sources to share (others might) but after working with all types of hardware, languages, business realms and what not... you start to see patterns. Human behavior patterns, mostly; the same sorts of needs were there 30 years ago as are here today. People need stuff done yesterday, don't know how to describe what they want, oversold a client on something, etc. The numbers may be bigger, the gigahertz faster, and the memory far greater than people could have imagined, but the problems of translating what people say in to what they want via code is ... fundamentally still the same.
A 16k RAM module was ... $200 in my early days. Then a few years later I got 512k for only $150. Today I can get a 16 gig USB stick for $10, at at a local grocery store checkout aisle no less.
No doubt technology has changed and become more ubiquitous. Peoples' expectations of what's possible and what's normal are somewhat different today than 10-20-30 years ago, but the communication problems are still largely the same. Who's in charge of a project? What are the parameters? What defines "success"?
I'm not sure there's any real silver bullet here - most of the "mythical man month" stuff (from even before my time!) is still largely true (speaking in generalities because I can't think of every single line right now).
Learn to figure out how to communicate better - emails, phone, IM, paper, phone, f2f, etc - they all require different skills, and have different impacts on different teams.
Happy to answer more specific questions here or via email - mgkimsal@gmail.com - not sure if I'm just rambling now or not.
The main thing I learned was to be able to look at code and determine if it was going to actually do what I wanted it to do without having to run it through the debugger a couple times.
It's important to spend time thinking about and reviewing code when edit, compile, and test cycles start to get long. There are a lot of instances where that still applies, such as with multi-threaded programming, integration testing or long running jobs.
I also learned the value of having muscle memory for APIs. Sure you can look things up in a jiffy, but actually rote memorizing stuff that is used often can speed development up.
There's plenty of languages I've used over the years that I have no use for today, or hardly even remember: Basic, FORTRAN, assembler, Pascal. None of those languages even had exception handling, so it's hard to say that it influenced my thinking on the subject, except by forcing me to be familiar with the alternatives.
Today it's C++ and C# that pay the bills, with as much Python as I can sneak in. Next up in the queue is Javascript, for which I'm admittedly overdue, but that one's entirely on my own time.
Python is the interesting one of the bunch. I was exposed to it about 1995, when a coworker selected it as an embedded scripting language for our product. I didn't pay much attention to it at the time, as it was outside of my immediate responsibilities. It was selected again as an embedded scripting language at my next employer around 2003. This time I paid attention, and came to love it. It's the language that lets me turn my thoughts into results the fastest.
Thanks for asking the question, I've never stopped to think about my programming history in this much detail.
Throughout this thread, I've noted a distinct lack of dogma about everyone's evolution as a programmer. While I imagine there was some of it during the popular phase of many of these languages, it's nice to see mostly pragmatism in everyone's career journey.
For me it's always been about problem solving rather than simple fascination with some particular technology. If I can solve a problem with a keyboard macro in Emacs, great. If it requires Perl or Java or javascript, so be it.
I try to use the tool that's appropriate. If I can solve a problem quickly and move onto something more interesting, one-and-done.
If I have to stop and learn something new (e.g., WKWebView in iOS ObjC) to get my task done, so be it, and I'll put in some late nights to get there because at my age, I'm a bit paranoid about looking bad so I try to give the good folks at HQ no reason to doubt me. I spend a lot of time on Stack Overflow and Youtube doing concentrated learning.
But the real thing is what others have also mentioned: properly defining a problem that needs to be solved, proper communication, keep good records, and try to maintain transparency, honesty, and pleasant comportment at all times.
Honestly the older I get, the less I notice people's age. If someone half my age knows something I don't, then the way I see it, they have something to teach me. I've been to many conferences and watched many youtube tutorials where the teacher was very young (from my wizened perspective) but the information is why I'm there and that's all I care about.
What do I think about young people? (you didn't ask but I'm saying it anyway)
I love young people. They have so much spirit, so much energy and creativity. I keep hearing critical (snarky) things about millennials this, X-gen that. But I don't see it. The young people I've been around (for a while I was back in school full time, surrounded by 20-somethings and a few 30-somethings) were a joy. Fun, humorous, inquisitive.
Everyone has his faults, not least myself, and I believe as we get older we become more tolerant of others' faults and shortcomings. In fact that may be the single hallmark of growing older (apart from physical issues).
1 8 + A 5 + 0 0 + 6 5 + 0 1 + 8 5 + F A + A 9 + 0 0 + 8 5 + F B + 4 C + 4 F + 1 C
I remember how much like some kind of incantation it was. I still get that feeling. And I've had the good fortune to work some fun, powerful, and interesting magic with those incantations.
I suspect that most younger people haven't yet seen their tech choices slip into decay and disuse. And they hang on tightly, hoping to expend less effort in learning as time goes by and they master that tech. It's a vain hope. The essential part of the experience is the underlying creativity, the joy of getting to the next ledge, and really understanding what a marvelous thing a computer is.
I can clearly that each year more and more interesting things appear. The speed is also increasing, in way I can't digest it all. It's difficult what to choose, to prioritize is the key to deal with it.
I always get myself wondering how much new things I will see next years.
I'm 30 now, and I started with 17.
So now when I sometimes think of my mortality, the thing I regret is the programming I can't do when I'm gone. Or maybe there is programming after death? I'm hopeful. :)
In the meanwhile, the free time that's opened up from not programming as much is being wisely invested. I'm working hard on my guitar, and before I go dammit, I'm going to shred like a pro!
Edit: seriously, what is your env like? Are you into windows, osx, unix, linux?
I sometimes find myself getting tired of technology and while I love software development, I often think about not doing it anymore. After a while it gets old constantly dealing with other people's decisions.
An easy example is working with Powershell Remoting can be a nightmare if you're not intimately familiar with both Windows itself and Windows Remoting specifically. It's extremely hard to simply use it as a shell without so much deep knowledge, something I don't find to be the case on unix systems.
Absolutely not an attack on Windows, just a recent example I've come across where I don't want to have such a deep knowledge of Windows, but I'm forced to in order to deal with a tech that, in theory, should help me be productive without having such deep knowledge.
I have my days where I just get tired of it all. The day I realized IIS forces you to load DLL's in child applications because the parent loads a DLL (even though they can use separate app pools) is one example. I can't imagine why that's the default.
I find myself having to go home and work on things like homegrown emulators and the like just to keep up my love of technology.
I feel like you have the beginnings of an entrepreneur here. You should start something that solves this problem you're seeing. The last 2 people I've heard make similar comments ended up starting their own tech-consulting firm. :)
1. "Hate it when X becomes Y and you actually just wanted Z"?
2. "Make an app or start a company that can assure people that X will become Z as quickly and painlessly as possible"
3. ??? (Something to do with YC).
4. "Become a millionaire"
I feel you here. I've been the go to sysadmin at every startup I've worked it. Whether it's Windows Servers, vSphere clusters, VLANs on HP or Cisco, it gets old doing the same thing at a different datacenter every couple of months. Especially when you have to learn some vendor specific crap that will almost NEVER be relevant to anything else outside that specific use case.
Thankfully I've been able to move (push? ;) my clients onto more open technologies like Linux, LXC, Openstack etc. all of which means the skills I learn doing this sysadmin stuff are at least tangentially relevant to my main job (unified comms development).
Ultimately like a lot of oldies here (myself included ;) working on the stuff you really want to do in your spare time is where you learn the cool stuff that helps you land the next great gig.
I also like the way open source options have completely eliminated the necessity for me to work with commercial languages and technologies, which I always found a bit tedious.
It truly is an exciting time to be a software engineer. Barring any serious illness or accident, I'm looking forward to doing it for another 30 to 40 years.
I find it fascinating that the gradual adoption of new technology maps onto human time spans like this. This makes me optimistic that even technology that is far ahead of its time can succeed when developed with patience.
Maybe I should do a graybeards Meetup group or something. Get some reverse-discrimination going...
Yes, the field can be insular, yes, there's benefit from cross-pollination from other disciplines, but the field is vast, and it's reach is still expanding. There are plenty of people immigrating and emigrating from CS that are sharing ideas, you don't have to be one if you don't want to be. If you're happy with what you do, and you can make a living doing it, enjoy it. It's privilege, not a curse.
I am in the opposite side, I am also very excited about computer science so I focus now on sales and business development because I can earn much more than developing software. Now coding is a hobby again and a complementary knowledge to sales.
I.e. There are plenty of 20-somethings that learn one tool and don't want to switch. Don't blame age on a 50-year-old being stuck using the tools they know; blame the person.
You see, in this career you have to be willing to drop everything and learn a new thing. All the time. Make learning new things part of your career.
My strategy is to watch for the “next big thing” and stay at the leading edge of that. 10 years ago, for me, it was the Ruby language, and that has borne much fruit. Now it looks like it’s becoming Elixir, so I’ve been building up a portfolio in that language… just for fun (and maybe profit. Well… Probably profit, down the line.)
Are there 20 to 50 times more Ruby jobs than Elixir jobs right now? Probably. Were there 20 to 50 times more Java jobs than Ruby jobs 10 years ago? Yes. (See where I'm going with this strategy?)
I may not stay as fast as the newest coders, but I will write better code in less time than the guy who writes faster code with more embedded technical debt (which must be paid off in spades, with time, later on), and I’m pretty sure that my ability to mentor others is top-notch, and any good company with 40+ cohorts in management (if also including younger on the front lines) is going to recognize all of that.
I also think that (like it or not… and yep, I struggle with this too) it’s even more important as you age to stay on top of your health… especially in a sedentary job like engineering. It may be a conflating variable here- the demands of family and career (in addition to the effects of age) may add to an engineer’s waistline and double-chin and consequently reduce his “oomph” (or to put it blunter, his T), and ALL of this may contribute to a distaste by the younger teams in hiring the 50+ engineer… Not the age itself, per se, but the impression and deleterious health effects that may typically come along with it. It would be interesting to see statistics which took fitness into consideration.
It may of course seem inappropriate to mention, but the statistics are out there-
http://www.canada.com/health/Bias+against+obese+people+incre...
http://listverse.com/2013/09/27/10-frightening-ways-we-discr... (scroll down to #8)
http://business.time.com/2012/05/02/why-being-overweight-cou...
I DO NOT condone this (heck, I'm a bit overweight right now and these stats are working against me... I'm just aware of them), I'm just wondering if this is a conflating variable.
To all you budding and early-career engineers- If you're doing it because you love it... Don't worry too much. Just stay on your toes, be willing to learn always, and by all means DO NOT EVER "marry a company." The age of the 30-years-at-one-company committed engineer is DONE. You need to look out for #1. Your career will benefit greatly if you switch jobs every so often... Employers do not have your best interests at heart. Don't believe me? http://www.forbes.com/sites/cameronkeng/2014/06/22/employees...
Lastly, if you're 5+ years into this career, NEVER settle for 2 weeks' vacation to start. It's not only a load of bullshit, it's institutionalized hazing AND it hurts the employer (because you'll be less productive overall for the same pay)! http://www.theatlantic.com/business/archive/2012/08/the-case...
What do you think about golang or rust?
I went into my thoughts on Go here, a week or 2 ago
https://news.ycombinator.com/item?id=9409803
I went into my thoughts on Elixir here, around the same time
So far I love it. It's bent my brain into pretty shapes.
It borrows a lot from Erlang, which it sits on top of, such as incredibly fast process spawning, and the OTP library.
But its syntax is sooooo much nicer (at least coming from Ruby).
The potentially extreme fault tolerance ("nine nines" is not unheard-of), and things like hot code deployment, appeals to me as a web developer.
It also has some unique features as far as languages go, I believe... such as full-fledged macros in a non-homoiconic language.
If you want to dabble in it, Dave Thomas' book on it is awesome: https://pragprog.com/book/elixir/programming-elixir
from time to time, i would see our team hiring engineer with gray hair and requiring special mechanical keyboard, and we all thought "mm.. interesting."
Well youngster, you seem to be falling behind the latest trends. Maybe you're not as young as you think. Don't you know all the fashionable programmers/gamers are using mechanical keyboards?
And I've found that you start wanting to type faster, to create even more noise. So it might actually make you more productive, in a weird way.
RSI is no joke.
People wonder why I don't trust doctors, it's not that I don't trust all of them, just most I've dealt with are suspect. There really needs to be a better physician review resource online.
I guess now people think I'm a crank; I posted here that I thought doctors just don't spend enough time with their patients and it's worrying and I was downvoted and mocked pretty hard.
Unfortunately I'm not confident that online resources would allow better decisions. I'm not convinced that patients would, by and large, do a much better job evaluating the quality of their doctors' care. The doctor who just gave patients antibiotics whenever they asked for them, whether or not it was appropriate, would probably be more popular in such a service than the doctor who took the time to understand their condition and explain that that wasn't an appopriate treatment.
Go ahead and aspire to management if you want, but don't assume everybody wants the same as you. And I hope your attitude changes before you achieve it.
PS: mechanical tenkeyless keyboards ROCK!
I like when the older programmers are more hands on, because I can learn a lot from them.
I also use mechanical keyboards.