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.
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".
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.
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.
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?
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.
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?
PL specialists are also pretty
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).
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.
This is to say that I don't think you should use Jeff Dean as an argument for hiring PL specialists in generalist roles.
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"!
I loved the work, but the downside was no one ever advertised for that role despite it was very important to the project.
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.
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!
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.
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
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.
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.
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%.
Specifically, "Be civil. Don't say things you wouldn't say face-to-face. Don't be snarky. Comments should get more civil and substantive, not less, as a topic gets more divisive. "
Or in other words - apparently quite talented as a coder; but as an engineer not so much.
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.
The issue wasn't that he was an "asshole"; but that he was undisciplined.
Just saying, from the thumbnail description given of his work habits - you couldn't quite call him an "engineer".
"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."
- 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
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.
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'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).
Thanks! Sorry if this was a bit long.
And I wouldn't bother with powershell at all, unless you have wanted to move away from development and towards infrastructure.
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.
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.
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?
The single smartest person I worked with, the guy who wrote a h265 decoder by himself and did Project Euler problems for fun, was also in his mid-30s and worked 4 days a week to spend more time with his family. He was a mathematician by background though, and they tend to peak early; intellectually I think he would have been capable of doing all the same things at 16 given time to learn the prerequisites.
From exposure to a lot of smart people at Cambridge, not just in software, I would say that the biggest impairment to turning smartness into results was depression. The second biggest was lack of common sense - it's very easy to be convincing as a smart person, and if you're convincing to yourself and others about some piece of unconventional wisdom that turns out actually not to work, it can go very wrong.
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 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.
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...
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.
Let me list few points:
# Tend to deviate from task and try to fix functional things which they think are not elegant engineering
# They are motivated to learn new technology so they will squeeze one without thinking about long term side effects like shipping delays and maintenance issue
# They think they will be productive working alone and mostly avoid collaboration which can be very costly down the road
# Failing to understand that trade offs to achieve business goals is a good trait to have
# Code maintenance doesn't motivate them like new shinier stuff
# Can slowly turn the business to be people dependent
# Going over board with code reuse and in the end introducing too many dependencies
Elon Musk is another good example. Someone who is so much a victim of his behavioral impulses and savior complex that he’s a catastrophically negligent leader, as recounted by Tesla employees in a recent story.
I’m of the opinion that you’re not truly intelligent if you are unable to recognize and correct for your own character flaws.
Eventually most with the tag will mellow down with experience. But when that switch slowly happens - many would hardly notice anything but a seasoned bankable asset.
The first was a 65-year-old DBA I had the honor of working with on Aviation Logistics Systems for the Coast Guard. He was a brilliant architect who re-engineered our database to accommodate any asset and any business rule the organization could throw at us. He had been programming from the days of typing out code on paper and then renting time on IBM mainframes to see it run. He did one thing, database administration, but he was a genius at it. He was a hedgehog.
The second is a 20-something full-stack developer I worked with for six months. He built a laboratory information system that was visually dazzling. It blew customers' minds. I found supporting the code was overwhelming. There were dozens of frameworks at play with layer upon layer of abstraction. Making even small changes to the business model would take me hours to implement. I bowed out of the project, and watched him put in 80-hour work weeks developing it for years. He eventually sold it for a good deal of money, but there was definitely a tax on his health because of it. He was a fox who knew a lot of different solutions and how to patch them together.
Both of these were brilliant developers with very different approaches. I know foxes in their 40s who know how to balance work-life (I consider myself one), but all the 60-plus developers I currently know are hedgehogs with a deep institutional knowledge that makes them invaluable to their organizations. That said, I think we will see foxes in their 60s in the future as full-stack developers age.
Does that really make him a good software engineer though? Clearly a smart fellow, but in my experience, code maintainability is absolutely crucial. A system that isn't maintainable, no matter how clever at the time, will quickly become old news if non-genius level engineers (like myself) can't get their head around it.
Edit: Oops, forgot one. Senior PhD student in my lab while I was in college. Might've been 28 or 30 at that point?
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 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?
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.
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.
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.
The second one was the CTO of a company we acquired. Truly the intellectual superior of nearly every person I know. Mid 30s. Helped write a well-used standard.
Funnily enough, while both were great at the leaps of logic often necessary to build new exciting things, both were also remarkably well-disciplined in code. People often tell me that writing good commit messages or variables, indenting their code, writing tests get in the way of their expression or iteration. These guys just did it in passing. I’ve watched them work and they didn’t consciously do it. Like a Navy SEAL and trigger discipline. It wasn’t exceptional. It was the default.
Oh and, the young chap who was 21 or so when I was a grad student who wrote lots of cool utilities at uni. Once, in my insecurity, I remarked that I’d love to work on stuff like that if I had the time (being a grad student). He told me I should make time if I actually loved it that much. Graybeard wisdom from a child. Well, it was good advice.
Sadly, he had his own demons. One day we were all called into a meeting and were told he wouldn't be coming back. He had been battling drug issues that had resurfaced due to the heavy amount of painkillers he was taking for past injuries. Work had discovered that he hadn't done anything on a project he had been working on for a month, and when challenged on it he quit. This was a number of years ago, and by all accounts he's still without a job and lives with his parents.
One other is smart, but in a different way. I met him when he was a contractor at one of my old work places. At the time, he was brought in to do some Flash work, and after a work night out he told us that he didn't enjoy programming, so he made the decision a few years back to learn legacy tech. He had no interest in learning the best/most popular languages, only the most lucrative, because "you won't earn shit as a standard dev (in the UK)". I still talk to him a few times a year, and it's a gamble that paid off very well for him. He travels across the country and the continent working on things like ActionScript for shop kiosk displays, enterprise-grade Salesforce builds, and ColdFusion support and development. In terms of smarts, he's not the best developer in the world, but you have to have something about you to decide to go against the grain and back technology that many developers actively fight against.
Now it is people who consistently deliver high quality, well thought out software. The speed matters far less to me (or my clients). These are over 40.
But I don't actually know any developer above the age of 40. If they do anything it's code challenges like Advent of Code, but they've long moved on from software development to e.g. architecture, management, coaching, etc and making more money through that - and giving off an air that they're much more content and at peace with it - than they could with software development.
I'm in my early to mid 30's myself and I'm pondering what I'd like to do beyond software development, I've had enough and ten years of making websites without an opportunity to branch out wears on you.
There’s a lot of people like that - the best blogs are from devs in their late 30s or 40s. The answer is basically that older is almost always better.
edit: removed gender
The other one is around 40, I think, and he's both one of the best business people I've ever met, easily the best manager and best developer as well. I have a suspicion that he never sleeps, as I've never seen him asleep.
I would be interested to know the trajectory these engineers had as they aged. Were they average until they got some experience under their belt? Genius from day one, but productivity improved? How did they develop over time and what were the predictors of greatness?
There was one programmer in his mid-20s that many co-workers thought was amazing, but I thought he was full of himself and produced overly complicated work that even he had trouble fixing and those around him found impossible.
Below that, I know of programmers who are very quick to learn things but just don't have the raw experience to really take care of things on their own yet.
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.
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.
Some of them weren't coding until 25 or so but in that case same applies -- they were noticeably very competent at 25, and better at 35 than they were at 25.
Obviously motivation, desire to stay in tech, specific technology stack, etc, varies.
http://ayende.com is him. Have infinite respect for him.
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.
Best person I worked with was in their 20's, second best in their 40's.
I think it matters less about age and more about mentality.
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.
The kid was the most active person from the audience when it came to QA sessions after the talks. He asked genuine and interesting questions and spoke from his own experiences about building web apps and browser extensions.
I've never met anyone like him, even though I worked with some really good engineers in their 20s and 30s.
The one who was around 60 would think through problems at a much deeper level then the entire team. I remember one instance where most of the senior members of the team had been trying to figure out a pretty complex problem and we had little luck. He walked in, we explained the problem, then we went for lunch. Once we got back to the office he submitted a PR a few minutes later, essentially avoiding the problem all together. This guy knew everything from low level computing, to the newest JS trends.
The second young guy was a front end specialist. I have yet to meet a developer who could write code as quickly as this guy. He wrote an entire front end in 2 days for a project I had budgeted a month for. 0 tests, but I could not find a single bug. I taught him how to write some tests, and 24 hours later the entire thing had unit tests, integration tests, and he had refactored some of the code so it would be easier to test. My jaw dropped. He had no formal education, attended a boot camp, and in my opinion was more valuable to the team then I was (at near 3x his salary and 15 years more experience!).
Of course, Python is by far the most popular, but C++ isn't that much more verbose.
The second dev who took my breath away was a man in his late 40s who had consistently moved from companies as soon as they wanted to put him into management. He loved to code and was very good at it, but for some reason management wanted him to make room for younger hires (can anyone with more experience explain why that would be the case? This man has 20+ years of experience and loves to code, shouldn't he be more preferable to some kid?) so he was able to leverage his contacts he picked up as a consultant to change into high paying developer jobs. He was very understanding of how bad I was when I started out as a developer and was my mentor for a long time and his discipline still inspires me. It was an honor working for him, why people want to make such a good developer into anything but a developer, I'll never know.
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.
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.
They've all had diverse experience, were great mentors for younger engineers, very adaptable, and mostly dependable... especially during crisis moments.
Second is a mostly retired RPG / CL programmer in his 60s who occasionally contracts to IBM i shops and can make that platform sing like a supercomputer on steroids.
Both are inspiring in different ways.
The other I met when he was in his mid-20s, he's in his mid-40s now, and I still work with him. He was extremely talented and productive then, and remains so today. He maintains roughly a million lines of code that he mostly wrote by himself (mostly while working an unrelated full-time job). It's a world unto itself (for better or worse, it looks nothing like any other project you'd find in the same language, and his coding style hasn't changed notably in at least a decade), but he delivers new features in an absurdly short time. He's a completely different sort of developer than the previous one I mentioned; the first was always eager to try new things. The latter has built up a system that works for him, and rarely changes...he just keeps churning out code every year at an alarming rate, because he knows the system inside and out. Bugs evaporate in seconds sometimes, once identified and reproduced.
In the former case, I was impressed with the breadth of his knowledge and his ability to drop in on a project and figure it out extraordinarily quickly, and his ability to zero in on what needed to be solved today and what would fall out naturally and easily once the core problems were solved. While in the latter case, I've always been impressed by how quickly he can deliver pretty much anything the project needs. He's written everything from the ground up (including things most people would pull in via libraries)...so, no element of the codebase is a mystery to him. He's looked at the same codebase nearly every day for two decades and he can sit down and be productive immediately.
So the usual I guess; I haven't met whiz kids nor luminaries, sadly.
He is incredible. Rigorous. He wrote a book.
- They had no kids
Or with 1-2 kids:
- They were old (45+) and had worked as Developer for so long that they became very good at it.
ONLY 1 guy with 2 kids in mid-30s I know is pretty good.
tl;dr - perhaps there is a co-relation between kids and brain cells of a Software Developer.
..I have kids myself...
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.
I am an ICD (International Classification of Diseases) coder.
Before I was 30, I wrote some foxpro programs, and 1~2K lines VB and C# programs.
After the age of 30, I started using clojure, core.logic (miniKanren) and R, fusion financial analysis, artificial intelligence, statistical knowledge,to write a formal project in my spare time, the financial analysis expert system(https://github.com/linpengcheng/fa), and therefore, based on finance and management, created a software engineering methodology ---- Pure function pipeline data flow (https://github.com/linpengcheng/PurefunctionPipelineDataflow).