Ask HN: How old were the most talented software engineers you've met?

195 points by diehunde ↗ HN
Talented in terms of general knowledge and practical skills

185 comments

[ 5.5 ms ] story [ 239 ms ] thread
I work with a 'rockstar' programmer in his mid 30s. This guy can hammer out good code ridiculously fast and probably does close to half the total work on our team of 8.
Old, like 50-60.
I actually haven't met many being a scientific programmer in a science with little need for programming. So, I guess I'm the most talented. I was at my best in my 40's, but at 72 I'm still very good, but slow.
Care to tell what makes you slower, compared to your 40-ies? We need to prepare ;-)
Not the OP but to me, as best as I can tell from some self-analyzing, as you get older your brain just doesn't fizz and spark like it did way back when. It works in a different way - more pattern recognition, less raw grunt. Could be because of biochemistry, or maybe just that you don't have the blissful ignorance of youth, you know there are limits, you don't tend to just hurl yourself against the fences quite as readily.

Another factor might be that the industry has changed substantially, which makes you feel slower by comparison. When I started out, there were few libraries or open source. To do anything, you knuckled down and churned out code, a lot of it. These days the first step in any greenfield project is a lot of Googling, and your job is more about identifying products, libraries, APIs and stitching them together. I personally find that a lot more frustrating because of the context switching - hence feeling of slowness, less time churning out your own code.

I think this might describe what you are referring to: https://www.sciencedaily.com/releases/2017/02/170206155947.h...

I heard somebody say that as you age, you rely more on memory to infer the correct decision whereas when you are young, memories are few and decisions based either on gut feel or the current context.

I guess that means that older people are more likely to do something they have already done because it is familiar and will work rather than do something that might be newer/better/faster but which would only be deduced by more abstract analysis?

Question: do you exercise? https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3951958/ Let's not lump all older people into the same cognitive malaise. Disclaimer: I'm in my late 20s.
I do. I climbed stairs for 45 minutes four days a week for 2 decades. At 70 I was doing 1780 steps at a time. After my metatarsals complained, I began interval training on a stationary bike. During the summers I scramble up and down the Klamath Mountains looking for gold. It won't last forever, but I'm ok for now.
There's still a lot of nature vs. nurture to that. A lot more experience = a lot more failures.
"A lot more experience = a lot more failures." YES. Your failures both form you and inform you at least as much as your successes.
They also make you more pessimistic. Maybe rightly so.
I look at that differently. My favorite epigram goes like this:

Very few worthwhile projects are ever successful on the first attempt. Failure is just another useful metric giving guidance on the re-formulation of the problem and the solution. Failure has nothing what-so-ever to do with guilt.

For the longest time as a young man I did not understand this. I though something was wrong with me because I failed so often.

Most of us from 50-75 are capable of rolling our own. We did it in our 30s and edit it. Hope that answers any questions regarding reuse, language adaptation , etc..
It's the cumulative effect of lots of things. When I pose a question to my subconscious, it takes longer to get an answer. I make a few more mistakes, especially jumping to conclusions. It takes longer to debug them. Sustaining a train of thought is more difficult as my ADHD is a little worse, but writing out my thought processes (often in Q and A form) helps tremendously. Getting a synoptic view is definitely harder. All these things slow me down.

On the other hand, 51 years of adapting to new technology has strengthened my confidence that I can cope with problems. Having lost the usual confidence of youth, I have replaced it with determination based on the repeated experience of failure and the knowledge that I have overcome them. It's a different kind of confidence.

I am greatly envious of the education you folks have, but I make do.

Thanks a lot for your answer!

I wonder whether you may be too hard on yourself, how much of this should be written off on the today's objective conditions, and not on subjective aging. I am over 50 and am genuinely interested in the discussion, as I have to maintain my employability for long time to come.

> When I pose a question to my subconscious, it takes longer to get an answer.

This! But I always felt my subconscious gives answers more eagerly the more I load it. These days I cannot load it to the same degree as when I was younger, but there are good explanations: a) the nature of the job is different, nobody will let me go off radar, people now have to take calls even on vacations, let alone in the workdays. b) the nature of issues I am solving is also different, more system-wide now, it is hard to have all the knowledge about a bigger system, and complete knowledge is required to load the subconscious IMO (I think you see what I mean).

> I make a few more mistakes, especially jumping to conclusions

No questions about that one ;-). However, I managed even to extract value out of it. I am debugging issues in complex systems without expensive equipment and frequently without an access to them. Every once in a while I jump and don't land on the target, but overall balance looks good enough for my employer to keep me.

> Sustaining a train of thought is more difficult as my ADHD is a little worse,

But again, isn't the way we do things these days simply very different, prompting this? I recall in my young days there were a dozen of us in a small room, and one could hear flies, well, fly. Also (am not nostalgic of that), not having cheap direct access to the computer (it was either batch submission or the night shift), required careful planning and bracing for any possibility. Now it is much easier to "just rebuild and try", but turns out, this doesn't always save as much time as one would hope.

I saw Miles Davis play a few years before he died. His band was all young, playing hard and fast. Miles walks slowly across the stage and plays one mind bending chord on a keyboard and the entire mood changed, totally reconfigured the whole composition. Conservation of energy. Coolest MF ever.
What science has little need for programming these days?
(comment deleted)
It's a comparative thing, but I worked as a geologist/programmer. Nobody can avoid using computers. They are just so damn useful.
Late 30s up to late 60s for people who consistently do stuff right on the first try regardless of complexity ( and I only say late 60s because everybody over about 35 has a pension in our industryn so they all retire when they hit their 60s). In aerospace there isn't as much age discrimination as on startup culture, and we are blessed with a lot of these fantastic senior engineers.
40+

I always wonder about ageism in tech referenced regularly here. Without a doubt the rockstars I know are more experienced and consequently older. If you exclude older software engineers you're probably excluding the best talent and thus can't claim to hire only the top x% of talent.

Note: I don't belong to this group in age or talent.

I work out in Asia and over here a big reason for ageism in tech is a misunderstanding of development talent, there is a belief that coders are coders and that's all there is to it, young coders tend to be willing to work longer hours and basically work until they burn out so management sees them as the superior option since salaries and benefits are lower.

edit: Since I'm getting down voted for whatever reason here's an article that is along similar lines https://www.bloomberg.com/news/features/2018-05-02/china-s-t...

How does that work exactly? If no one is willing to pay higher salaries then the salaries aren’t higher. Senior people would presumably take junior pay over unemployment.
Some companies tend to hire only junior devs for junior positions. The argument is that, once hired, senior people complain about being paid lower than a less experienced dev. Some management does not want to deal with that. I know it sounds stupid, but that is what I've heard from some of my seniors.
Where in Asia? I imagine the culture is pretty different depending on the country.
This is something that doesn't seem real in your 20s, but a realization in your early 30s.

Edit: There is an important balance to keep the enthusiasm of your 20s for a long time, and keeping a little wisdom of recognizing those situations that want to take advantage of a few years of your life in your 30s and being a little more conscious about it.

One of the most talented engineers I ever met was 24. He built a 3D engine in JavaScript for fun as well as a raycaster for fun. He also enjoyed challenging himself in all sorts of interesting ways like doing Advent of Code in C++.
What's weird about doing Advent of Code in C++? You'll find a sizable number of the people on the leaderboard do it that way. I think it's partially due to competition programming habits dying extremely hard.

Of course, Python is by far the most popular, but C++ isn't that much more verbose.

it depends, I think some people do advent of code did it as sort of race every day, in which case I think C++ would be a pretty big challenge IMO.
the majority 40+, one around 38 one in early 30s
How about this 9 year old speaking at ReactNYC: https://www.youtube.com/watch?v=mbiryVTIJ4Q

edit: removed gender

WOW. What blew me away was not his programming skills, but his ability to explain. There are many levels to understanding, and you can tell that Revel intuitively understands not just how to build things, but also how the code is working on top of that. From the very beginning he speaks so confidently and concisely that you can immediately tell he's a genius. Big contrast to many other "child prodigies" that I've seen.
During the .com I was quite young, my friends were all doing nascent e-commerce in SF, I was doing Telecom stuff in the Valley.

My friends were all 'architects', while I was maybe one of only a couple of people out of 100 Engs. who were under 30!

I could walk to any cubicle and 'learn for days' from whoever was there about so many subjects. Such specialization that nobody knew precisely what their cubicle neighbours were doing!

You want to know what 'full stack' really means? We did proprietary ASICS, hardware, firmware, control plane software, networking control UI and servers! From the silicon all the way up!

The team was mostly 35-45 and they were amazing, I'll never work with people like that again.

I've run into a fair number of 'young geniuses' and astonishingly talented young folk ... but not the kind I would trust a major project to.

That said, they were a little bit more 'set in their ways'. It was a time when people 'went deep' as opposed to 'wide' generally. Very high degrees of specialization, typically only one professional grade language.

Wisest dude I've ever worked with was >50. Sharpest was probably a friend I grew up with, he was writing C before he was 12! Some mad productive cats from 30-45 too.

E: had to come back and say that the best PM's I've worked with have all been >40 year old women who have bigcorp experience. They don't take shit from anyone and protect their people.

I have also seen the same regards to engineering mangers. The best ones have tended to be older women with either bigcorp experience or have been in the current company for a long time. They know how to maximise the developers productivity and do a good job of allowing the dev to focus on work instead of attending stupid meetings and makes sure to fight for your stance when needed.
Universally 35+. Several in their late 40s, a couple 60+ (tenured professors and the like). You know how books or movies that talk about martial arts masters use phrases like "no wasted motion" and "elegant grace"? Yeah. Like that. But with architectural design docs springing fully-formed from their foreheads and data manipulations that reveal their meaning in a single line when I'd have needed a page.

Edit: Oops, forgot one. Senior PhD student in my lab while I was in college. Might've been 28 or 30 at that point?

(comment deleted)
“Talent” I would say has been invariant with age. I’ve met very young (teens) and people in their seventies who show obvious talent. It also seems to hold, those young talents are still exceptional 20 years later. For knowledge and skills (perhaps we could call that “wisdom”?) that seems roughly linear with age, perhaps plateauing somewhat as skills learned earlier become obsolete. Productivity is kind of another axis, I’ve known prolific and successful developers who I think are of only middling talent, these almost always did better while young. (For context I’m 49 now have been working in software since my late teens.)
(comment deleted)
As a general rule: Old enough that I feel that it would be rude to ask their age. Wikipedia entries for three of them indicate 41, 52, and 64, though.
Please don't treat old timers any differently than anyone else. If you're comfortable asking someone in their 20s what their age is, you should figure out what is making you hesitate for someone past a certain perceived age.
I know what's making me hesitate: In my culture it's generally considered rude to ask someone older than you what their age is. (And the larger the age difference, the ruder it is.)
Cultural factors are important. I would just challenge you a little to consider that some people who are older than you might not like this cultural tradition. I don't know if there is a polite way to find out, but I personally don't feel like an older person. Even my Mom doesn't feel like an older person! Being treated like an older person when you still have that same young enthusiastic person inside of you can feel like you are being excluded for nothing more than how you look.
I'm not comfortable asking anyone their age. Someone in their 20s, could be perceived as experience-shaming (I am in my late 30s).
One very bright guy maybe still in his 30's.

Otherwise, 40's and 50's.

Not just experience. Problem solving, including creative thought. Practicality. Reduction in B.S. -- although that can cut both ways, with age, depending upon the person.

P.S. A lack of ego/defensiveness can also be very helpful. It becomes about fixing the problem, not excessively defending one's turf and an unrealistic reputation.

P.P.S. Younger people can have these things, and be quite excellent. Maybe a bit more insecurity is still common -- whether overt or over-compensated for in expression. I spent a lot of time in BigCorps; that may have influenced the demographics of my environment and thus my observations.

Age has nothing to do with talent. Older devs tend to have more experience, go figure.
I've met two deeply talented software engineering minds in my life, and they fall on opposite ends of the spectrum:

The first I met when I was in my mid-20s and he was about 17. Gifted kid, absolutely. He'd published a programming book (!) and could do things with JavaScript that, in 2001, nobody had even thought of doing until the mid 2010s. Totally undisciplined of course -- we hired him and he refused to follow any instructions, got bored easily, thought he knew better than his engineering manager, and was ultimately fired after about 3 months on the job. Haven't kept up with him but I imagine he's gone on to do amazing things.

The second was someone I had the pleasure of working with over the past few years. He's early 50s now and far and away one of the most productive and intelligent engineers I've ever seen. Thinks about problems deeply and thoroughly, codes quickly, optimizes when and only when it's time, and is the purest measure of productivity I know. All the lessons one learns over a career in engineering put to use. Proof that hands-down, the ageism in SV is totally misplaced when it comes to skill level -- I'd work with that 50-something over any 20-something "rock star" any day of the week.

The ageism in SV has very little to do with actual talent and productivity and much more with how the team feels someone can handle themselves at happy hour.
I think there's three components to every employment position:

- sufficient work ability, rarely an issue.

- teamwork - at work interface, negotiating, empathy with others. be relentlessly resourceful and useful, but get yours too.

- off-the-clock skills and interpersonal/appearance likability - a bunch of awkward single dudes can't say "no" to the socially-calibrated dude who goes out and convinces a bunch of attractive-enough females to hang-out with a bunch of random engineer dudes. be that guy, and you'll have friends bugging you all the time... turn your phone off and rock out to Spotify. :D

What if you have only the first two? Remote work only ?
How the fuck does convincing a group of women to hang out have anything to do with work? It doesn't and the idea that it should is the cause of lots of huge problems in this industry.
Don't forget be at work 80+ hours a week to impress the VCs.

"He's been at it for four days straight. He just re-wrote our core code five times and it 20% faster. never mind it still doesn't work right but man is it fast. And he works for lottery tickets."

Anecdotally I'm so curious about this 17 kid and what happened to him.
Same story here. The most talented engineers I know are either in their early 20s or in their late 40s/50s.

Of course it's for different reasons. Something many people don't want to admit is that a lot of talent comes from practice and experience, and someone in their 40s is much more likely to have 20+ years of experience than someone in their 20s.

The early-20s geniuses I know are talented for different reasons. The ones I am thinking about are people who pick up new things absurdly quickly; pick up on patterns very easily; have general experience in enough domains to make quick connections; etc. But some of them are extremely undisciplined (which may or may not be related).

Those same people with age, gain not only experience but also hopefully discipline. A combo like that yields you people like John Carmack and the like: Not just talented, but out-of-this-world "next level".

>The ones I am thinking about are people who pick up new things absurdly quickly; pick up on patterns very easily; have general experience in enough domains to make quick connections; etc.

That's my experience as well. Generalists are often the most productive people. A good generalist can often grasp the whole system faster than a niche programming language specialist. And you usually don't need those niche programming skills for 99.9% of problems. Humans are capable of much more than the small niches companies put us in.

Generalists are generally (hrhr) ignored by HR though. They don't fit any mold so have a harder time getting hired. The most successful ones I know usually freelance.

When I stopped programming I moved more into technical testing and that morphed into 'project guru' on some quite large projects. I could understand from low level network protocols up to the big fluffy clouds, I could also pick things up very quickly as I understood all the building blocks if not the latest buzz words. From my first exposure to SQL I was optimising databases better than the incumbent dba within a couple of months, and that wasn't even my job.

I loved the work, but the downside was no one ever advertised for that role despite it was very important to the project.

> From my first exposure to SQL I was optimising databases better than the incumbent dba within a couple of months, and that wasn't even my job.

That doesn't mean much, as in the not so distant past (and in some small shops even today) the resident database expert is far from experienced or even technically apt. In fact, it was and still is a job that was assigned internally to someone who happened to have anything to do with the project, who was thus forced to accumulate yet another responsibility.

As a specialist who is currently looking for a job, HR generally only seeks generalists. Almost all interview loops that have been standardized seriously prefer generalists. The mold doesn’t fit anyone and are just generic programming/system design questions that do not evaluate specialist skills and experience at all.

PL specialists are also pretty good generalists. I mean, what hasn’t Jeff Dean done and do people even remember that he has a PL PhD anymore?

I think whether or not you're a capable generalist is independent of whether or not you have a PL PhD. Jeff Dean is a generalist because he invested significant time in working across a wide variety of problems, not because of his PhD. If anything, a PhD makes you a specialist by default. You need to do extra work to gain diverse experience across the stack.

This is to say that I don't think you should use Jeff Dean as an argument for hiring PL specialists in generalist roles.

Google does this though. Whenever is PL PhDs get together, someone invariably talks about how they are doing ads for google these days. It’s actually so common that it has become a meme.
I think experience in compiler and language design is a strong signal of meta-thinking about problems and high-level abstraction. Compiler implementation requires a kind of rigorous thinking and separation of concerns to keep straight, because you're writing code that writes code, and need to model execution explicitly. Also, all edge cases and interacting features need to be considered in both disciplines - you generally can't get away with smoke and mirror demos or handwaving.

I don't think it adds up to generalist though. Generalists need knowledge in a lot of different things (though one man's generalist is another man's "full stack" web app developer), or else they're just smart people who don't know much yet.

Very insightful: 'They are smart people who don't know much yet.' One thing to consider is that understanding only how a compiler organizes things or how a good assembly programmer understands the world is not conducive to anything but optimization. The true generalist, while able to perform binary analysis and understand executable file organization, is not tied to that. They are pattern people. Learn the pattern, see the relation.
None of the standardized interview looks test for that kind of knowledge however, they really are generic. Also, I’ve find that the really famous bigcorps don’t care as much about what you know than what you could learn, even for experienced hires. So by generalist, they simply mean someone who can learn to do anything rather than someone who can already do anything. Full stack job descriptions often come from lower tiered tech companies that can’t afford that and anyways don’t have as much specialized infrastructure as a place like google does anyways.

   PL specialists are also pretty 
   good generalists.
It has also been my experience that people with a PL / compiler background are often great generalists. At Google I can think of at least the following:

Jeff Dean, Fergus Henderson, Ken Thompson, Rob Pike, Ben Gomes, David Stoutamire, David Bailey, Urs Hoelzle, Hal Abelson, Martin Abadi, Peter Norvig, Sanjay Ghemawat.

There are more but can't think of them off the top of my head. Chris Lattner is a non-Google example.

(As an aside, I see a similar phenomenon -- albeit at a much lower level of ability -- in my undergratuate students, and I've supervised a large number: top students almost always do well in / and have enjoyed their compilers course.) Why would that be the case? I can offer 3 hypotheses for discussion.

1. PL / compiler stuff is so trivial that everybody can be good at it.

2. PL / compiler stuff is so difficult that only the smartest can be good at it.

3. PL / compiler stuff forces you to think deeply about the most important tools in programming, namely the CPU and programming languages, and the bridge between them (the compiler).

I'm inclined to go for (3).

People are often into PL because they are into programming and want to improve the tools and languages used for programming. For us, programming isn’t just a means to an end, it’s an end also.
Or 4.: Most problems are about transforming A to B like in a compiler. Many of the techniques in compilers are also applicable elsewhere.
I hire at a FAANG for two roles where we specifically target generalists: Solutions Architect (design solutions for complex real-world problems) and Technical Solutions Engineer (last line of support for really gnarly cases). Both need people who can cover a lot of ground, and it's hard to be good at either if you don't have significant practical experience and can't traverse the stack from source code to tcpdumps if needed. That said, being just a generalist is not going to cut the mustard, you're going to need depth in at least one field, plus you need to be able to talk to customers too.

Mandatory plug: if you think you'd fit the bill and are keen to explore, find me through my HN profile. Bonus points for being anywhere in APAC, although I can refer you elsewhere too.

Do you (or anyone else) know of any more resources of what a Solutions Architect is doing day to day at that company? What artifacts are they producing, how much hands on are they, do they belong to teams etc?

I have the title right now but it is a new one in the company and it is up to me to navigate really what it means for us.

EDIT: And are there any books or other resources you or you see Solution Architects recommend?

Do you happen to hire co-ops for these type of roles? I have recently had interest in consulting
> Generalists are generally (hrhr) ignored by HR though. They don't fit any mold so have a harder time getting hired. The most successful ones I know usually freelance.

I think as you gain experience you naturally become more of a generalist over time.

I've been a freelance developer for 20ish years and I would consider myself a generalist at this point, but it took many many years to get to this point.

Everything from learning the Linux basics, how networking works, various programming languages and web frameworks, database modeling, dealing with the ops side of things, and the list goes on and on. Basically I spent a majority of my life learning all of these things in a lot of detail, but most of it ended up being on a need to know basis.

Basically once you become somewhat proficient in something, you naturally start learning about some other related topic. Even today I still think I know almost nothing in the grand scheme of things.

I don't know if I'd call that talented though? I mean, I also got the right number in the IQ and motivation lottery, but not only is that like 80% biochemistry, it's not a differentiator in the sense of doing qualitatively different things. I do all the same things as everybody else, just faster and without guidance.

But I work with people who are extreme specialists. (I don't mean in React. I mean in computer vision or non linear optimization, that kind of thing.) There is an entire class of problems that only those people can address properly; I could learn to but it would take me a couple years and the output from these years would be significantly below state of the art. In general they're skilled, not just talented, but they also work with mental models that require some amount of essential ability to grasp and that plenty of people will never be able to fully understand.

Although, the most successful developers I know (of) are both generalists and extremely talented. Their special talent is "people understanding"!

That begs the question then, what happens to these early-20s geniuses once they are late 20s/30s?
Whilst half joking I've had children around this age and I don' claim to be a genius but the time afforded to technical exploration and learning has dropped significantly while they are young.
Well, one of them now works at Facebook, another at Google, another at Amazon. The youngest one is still at a smaller company but I suspect he'll end up finding a job at a Big Five or some such.

To answer your question, they get swallowed. Google etc hoard talent, and those that can fake it. I don't know if that's good, but they definitely end up with resources to produce incredible things. Then again what would they do alone, I wonder.

Life gets in the way for a while: Kids. Spouse/partner. House. Hobbies. Cynicism. Burnout. Health. Elder care. Then things settle. You work through the life thing, and in your 50's you get a fresh perspective and new energy.
All of the above, plus, at most (non-FAANG) tech companies, as an individual contributor your salary will plateau when you’re around 30-35. During your 20s you’ll get used to double digit pay raises and then all of a sudden that will stop. Even changing jobs won’t give you more than a 1-2% bump as some point.

I’ve had that surreal “we really want you to stay but we can’t give you a raise” conversation too many times in my career.

Yes, this. So then those young brilliant individuals move into management because it's the only way to continue some semblance of career progression in your 30s.

Then a subset of the gifted technical individuals grow tired of management, step down and go back to the tech to do what they really loved all along.

I've met a fair amount of brilliant engineers in their 40s/50s who have been through management and decided it's not for them and are now shining as engineers again after a decade lost to leadership roles

I would also add massive family debt/mortgage to this list. I saw so many star engineers fear-driven and stagnating in their tiny comfort zones to the burn-out or layoff.
Genius isn't a static quality. These things come with expiry dates.

Learning is the key to flying high when it comes to a knowledge intensive career like programming.

Its hard to do that a while. Also early 20's you just exit teenage, and a have degree of naivety and foolishness. That spark goes with time. And you become more intelligent, calculative and serious to stop experimenting the way you are before.

But mostly, they stop learning. That's what causes the downfall.

Younger programmers: know less, but are more flexible learning new things; broad yet shallow

Older programmers: tired of having to be "flexible" for decades; extremely deep knowledge, siloed

Most clever programmer I saw was a guy in his 40's (in early 2000). He was a layout engineer who wrote a PowerPoint+VBA design rule checker for extremely rapid prototyping of layout ideas.

Most clever team I met was a group of 30 somethings (mid-1990s) who wrote a CPU architectural simulator that was essentially a tweak of the first linux kernel.

Most "how the fuck did you do that" was a 25 year old out of Russia who wrote a Windows 10 hack for hooking system calls for performance monitoring. He did things Windows docs said you couldn't do. All un-commented assembly. Glad I left before I had to own it!

It would be interesting to know what the 50-something was like when they were younger. Did they have the characteristics of the 20-something rock star.
I was something of a rock star when younger, but I like to think that even if it turned out I was not Paul McCartney in talent I was at least Paul McCartney in affability.
Please don't say "rock star". It's such a tired term, right behind "ninja".
Please don't police other peoples' speech.
I've worked with fortysomething guys that were "10x engineers" or "rockstars" when young a few times. One of them was very smart but really kind of a one trick pony engineer, he kind of always wanted to use the same hammer to solve every problem and that got in his was of self improvement and awareness. The Dunning Krueger effect was strong with him.

The other guy is kind of a legend and never ever stopped being a rockstar and kind of rockstared a few new fields and technologies again. He's also really humble but at the same easy knows exactly what he can do and what he can't do and is very good at always being at 100%.

I'm a 50-something, recently retired but still programming for fun and non-profits. "Rock star" meant something different 30 years ago. Less was expected of you, but also the tools and technologies weren't there to help you. No databases in the cloud, no google or stackoverflow. You had to wait for books to come in and hope they had the information you needed, otherwise you took a week and figured it out for yourself. My very first job, my IBM PC clone had two floppies. My code was on drive b:. I would put the editor floppy in drive a:, edit, then put in the compiler floppy, then the linker floppy. Programming in C, manual memory management. I was good then, I'm good now. Lessons learned then no doubt honed my skills in general, but I don't know if I "use" those skills nowadays.
Uhg, I'd love to be that 50 year old when I arrive at the age. Sadly, I feel like I'm sliding backwards. Oddly, I feel like I was a better, more thoughtful, certainly more energetic developer in my 20's.

I think some of it may be that each job I've taken has forced me to change language / platform multiple times. I'm an iOS, android, C++, C, Java, and python developer. All on production level code. Never an expert of any.

I think programming is one skill it doesn't change much by language if at all. So if you have a good grasp of OOP principles you're on a good path.
I decided early in my career to specialize on a technology stack so I could generalize over the entire stack. About a decade ago I got my first job on the Microsoft stack, and since then I've done 98% of my work on it.

It has it's disadvantages I'm definitely looked at as an old fuddy duddy because of my language choices. I'm pretty locked in, so if .net dies I'm gonna screwed while I come up to speed on the next big thing.

But it has its advantages too. I'm able to go deeper on a bunch of different parts of the stack than I would if I were having to jump around more. Web, desktop, services, database, mobile and even vba in Excel. There's no way I could be as proficient across the stack as am if I had to be proficient in different technologies. And it's allowed me to feel pretty confident addresssing any business problems as long as it's on the right stack.

I did the same thing for the first half of my career - ASP.Net and C#. But with the fall of WebForms and the rise of MVC, I had to spend a lot more time on front ends (mainly cheap clients didn't want to pay the licenses on Telerik and the ilk), so I had to learn real html and javascript (albeit only jQuery at first).

Now I primarily use those tools on personal projects, and spend most of my day consulting on HOW to develop a project, and only able to get my hands dirty a couple of hours each week. The rest of the time is spent with management "architecting" solutions.

I was wondering if you could give me a little advice as to what I should focus on to more specialize in the Microsoft stack?

I'm on a bit of an unusual track into software engineering, having started in finance and first teaching myself to code via VBA and SQL. That coding led to me getting a second degree in computer science, which I'll be finishing this year (and I now know way too much about VBA).

All that of that preamble to say that I've had a ton of experience with SQL Server, VBA, Excel in my old life. I think I could be a pretty good candidate to fully immerse myself in the .NET stack. However, my school doesn't touch much on the .NET technologies, focusing more on JavaScript, Python, and C++.

Would it make sense to focus on C# and move on from there? Or there other things I should know well? Do you use much PowerShell? Javascript?

Thanks! Sorry if this was a bit long.

I'd be familiar with c# but it's an easy language, and there are tons of devs with c# experience.

But I'd mainly focus on JavaScript/TypeScript. And if you're about to graduate then focus really heavily on react or angular. Microsoft shops are drowning in .net talent/experience but are starving for good front end devs with deep angular or react experience.

And I wouldn't bother with powershell at all, unless you have wanted to move away from development and towards infrastructure.

This is really helpful, thank you. I've been diving into heavy doses of JavaScript lately -- I'll continue with that and augment it with TypeScript and React too.
I can attest to this. Having worked in an finance shop myself, there were numerous .NET engineers there but none of which had relevant experience with Angular/React + Typescript.
This makes sense. MS office is moving to the “cloud” and extensions are now programmed in JavaScript or TypeScript (also a Microsoft project).
I wonder if this loosely follows the whole Dunning-Kruger graph: https://i2.wp.com/thephysicianphilosopher.com/wp-content/upl...

Except when you're young you're full of confidence because you know you're good. It just takes you ten years to realise that in order to use it efficiently you have to learn how to get the most from others / let them get the most from you? By the time you're in your 40s/50s you're coming up the other side - still just as talented, but now you can work with people as well?

Totally undisciplined of course -- we hired him and he refused to follow any instructions, got bored easily, thought he knew better than his engineering manager, and was ultimately fired after about 3 months on the job.

Or in other words - apparently quite talented as a coder; but as an engineer not so much.

To be fair, he was 17. I think you learn a lot about how to be an employee on the job.
I remember when I was 17, honestly even if I was a genius, I would have been horrible to work with.
I was exactly like that at 19, sans genius. I spent way too much time on the "fun" parts of my work and not terribly much at actually getting work done. I'd also push-back on managers pretty hard. As a result, my first two jobs involved me coding alone on projects of negligible importance.
I'm not damning his character. Or even questioning his character.

Just saying, from the thumbnail description given of his work habits - you couldn't quite call him an "engineer".

Nope, sorry, but being an asshole doesn't make you less of an engineer. It makes you a poor choice for a team and a bad hire, but that's a different story.

In other industries it's better defined, you pass the exams, you get the right to use the title. The software industry on the other hand is using the term engineer too liberally - we basically just invent those titles for ourselves, consultant, engineer, architect - but being an engineer still primarily means having a certain level of technical expertise in the field.

And btw, in every industry you have those lone-wolves characters who are arrogant and hard to work with, but they get tolerated because they can solve hard problems better than others. I think you get even more of this in other lines of work, because in programming those types are usually not as crucial resource as in say maintaining some old machines that only they know how to keep running properly. May dad was a civil engineer and he had quite a few colleagues like that, and while no one enjoyed working with them, they certainly respected their expertise and would never say that they're not engineers, just bricklayers.

being an asshole doesn't make you less of an engineer.

The issue wasn't that he was an "asshole"; but that he was undisciplined.

He was undisciplined when it came to listening to authority. He was not undisciplined for learning or for solving hard problems, which is what make you a good engineer.
I think the missing word here is “insubordinate”.
Totally same experience.

Young gifted hackers and old experienced veterans.

There aren't much to say about old veterans. They write bullet-proof code. They are stable. They are good.

The young hackers... they are so unstable. Their code is unmaintainable. But they can achieve things we thought impossible or too difficult to even consider implementing it.

They are usually mentally unstable. They usually suffers multiple mental issues like sleep disorders, development disabilities, bi-polar disorders, ADHD etc.

Looking at them, they are like burning their life to achieve short-term gain.

I have a strong bias: the university crowd (haven't seen old programmers yet).

One guy who was about 24/25. He came in already experienced in creating extensions for clang and LLVM. He wanted to do a masters in cyber security. I told him to get a job, but we became friends instead.

When I wrote my first if-statement for an operating system course, he finished the entire program. It was unreal to see. Funnily enough I was quick enough to read his code and to see where he'd be sub-optimal in his architecture.

Why do these people even go to uni when its such a waste of time. I went to uni for a year and learned absolutely nothing because it was all so incredibly basic that its only useful if you don't know how to learn on your own.
Some people use the university not only as an opportunity to learn but to nurture friendships and connections that last for life. You are only young once, why you have to hurry to jump into the rat race? Especially someone whose identity is so tied with their ability to "be a good programmer" it might be a great chance to digest new perspectives towards life. Also if the bachelor level courses felt too easy you should probably haven take some master's level stuff.

The most annoying type of people in CS studies I encountered were those who thought they "knew it all" yet in fact, in the large scale, they knew very little. And whatever knowledge they had they often communicated poorly, perhaps disparaging others for not knowing what they did.

I wasn't aware that there was any way to skip the basic stuff.
If you followed only the first year then yes, you've wasted your time. Things start to get interesting in the years after that.
17, ~25, ~30, ~40, ~45, ~65 and even ~70. I think it depends on the personality property of curiosity to delve into the software-hardware stack turtles of details all the way down and not see anything as a real barrier that can't be overcome with effort.

There's something to be said for lots of experience shipping product under a deadline, politely questioning technically-expensive features that wouldn't be good for the user and managing stakeholders' expectations.

May I recommend “The Talent Code”?

It’s an excellent book discussing the concept of “talent” in the context of practice and quality attention.

The word talent implies something one is born with. Turns out that how good one is at something has much more to do with the quality of the neuropathways generated by specific practice habits.

Talent exists, and is very real. [0] Talent is immensely important, and I find that there's a growing movement to dismiss it and pretend it's all about hard work.

Most people can get pretty good at a particular task if they dedicate enough time. But you're never, ever going to be as good as Magnus Carlsen, Terrence Tao, Michael Phelps, Euler, or DaVinci just by hard work and a positive mindset.

[0] https://slatestarcodex.com/2015/01/31/the-parable-of-the-tal...

You don't need talent to be successful. Not every chess player is as talented as Carlsen but there are several thousand chess players making a living as professionals. Using talent as a prerequisite to success in a field is just dishonest.
Put two people on equal effort paths, the talented one is going to come out ahead. 100% of the time.
"equal effort" in your sentence is very important. Effort is rarely equal and life is not a simulated situation like a race. Success is not a one-variable equation that can be solved with "talent".