People always talk about pursuing coding projects just for the fun of it outside of work, but that's a pretty unusual trait for other forms of engineering.
My father has a PhD in Chemical Engineering and has been doing crude assay work for the last twenty years. He obviously enjoys and gets fulfillment out of his job. But if you asked him to analyze crude oil samples on his free time? He'd say you're crazy.
I dunno, I've been in this field for five or so years coming out of other engineering disciplines, and it always surprises me how programmers view their trade as fundamentally different from other forms of engineering.
Read any interview with a novelist, screenwriter, short story writer, etc and most will say it's something they hated doing but were glad to get done.
Pushed further though, I've seen good advice in some of those interviews which is to try to learn to enjoy the process, as what happens with the finish product is usually out of their hands. I think that's pretty applicable to a lot of other fields as well.
Did you ever dream of debugging your children? That if you could only find the right breakpoint to set, you could adjust them and fix something? Then you are truly a programmer.
Or maybe it's a sign that you should take some time off coding and not take your work home and give the other half of your brain some room to wander and explore space and time.
Furthermore, being able to transfer concepts from one activity to another is a clear sign of intelligence: applying an idea to 1-dimensional text and then applying it to social relations isn't a passive activity either, it shows deep understanding of the idea.
Unfortunately you couldn't start "computing the impulse response of a filter" when you were 12 but if you could, and you continued to practice it daily, you would be very capable compared to people who just started in university.
Going further, I would argue that most people I know who've been programming since they were 12 weren't even writing very good code at 22 (or whenever they left college and entered the working world). It's vanishingly rare that people were writing flexible, maintainable code in their teens. It's much more common that they were coding to scratch an itch, and that their code only solves the pieces of the problem they cared about, and probably not very well.
Note: I've been programming since I was 12.
At that age, your code is going to be a mess no matter what tools you use, so you might as well have an excuse.
(Seriously: there's some brain development that doesn't happen until the close of puberty, and I believe that some of that is necessary for most people to plan and write maintainable code)
- Mathematics (at the extreme high levels)
- Musical composition
- Classical music performance
- Painting/Visual arts
- Speaking most languages
- Jedi Knight
On the web and in app development, there's a far greater variety of technical bases to begin building atop, and a lot of web fundamentals that have developed culturally (rather than out of scientific or mathematic bases, where it can be clear your tools are helping).
A sometimes seen result is that those communities of developers that are "well served" by platforms perhaps "shielding" them from the sticky intertwingulated overwhelmingness of choices and protocols and systems often can't relate, don't relate to the wider body of codecrafters.
Ability to harness the best or biggest slices of culture well is a huge part of programming, and that requires more than being really good or really smart: it requires a will and energy to chase, and to always be chasing, keeping yourself unrooted from what you merely know or how you've done it. That doesn't justify a bimodal view, because there are certainly all kinds of ways people come about to programming, but I think in programming it really is different- since everything is made up and abstract, we're still figuring out general shapes. It's all a social milieu, and it requires paying attention to establish and keep authentic roots and identity, roots you'll need to contextualize what it is you do and what's coming down the pipe. Calculating impulse response is a hard task, but it has a mathematical fixity with no compare to the computer arts we use.
It's also been an extremely exciting time watching programming's recent decades. So there is some elitism of simply- why haven't you been here, enjoying the hell out of this? I think it's ok to feel that inside in a general way, I don't think that can be stopped or avoided, but how we reconcile that with the world without falling into the abundant moral hazards, how we still be good- it's doubly hard to reconcile yourself when the feeds are rife with people berating and assaulting tech culture, when you can get lost in these other people fights.
As a programmer, keep an open mind and accept many types of people as peer. As a person in the world, keep an open mind and accept that programmers are still quite high on some cyberspace utopianism and a precambrian-esque explosion of capabilities, and that just as much as you feel alienated by them, they feel alienated that a wider world excuses itself from recursing the depth and breadth of what enraptures the techie. 'The weirdo is just as scared of the normal person as the normal person is scared of the weirdo'
In my experience it's not at all specific to programming. Other domains have their "rock-star" experts: The brain surgeons, the rocket scientists, the literal rock stars (or at least the true masters of one or more instruments, amazing songwriters, gifted vocalists), the Olympic athletes...the masters of their skill who are so good at what they do that they make it look easy. They've put in the metaphorical 10,000 hours of practice and self-improvement. They are awesome, and the rest of us mere mortals by comparison.
Programming is different from many disciplines, though:
* In programming, everyone from the student who is copy-and-pasting JavaScript into an HTML document to the amazing expert is a "programmer." There's no term for the ones at the top of the scale, no "Olympics" label, no "brain surgeon" specialty that distinguishes the top from the rest.
* World-class skill in one domain or language translates to a very short learning curve in just about any other domain. I've hopped between native apps, games, high performance servers, networking, security, drivers, web apps, embedded, IoT and machine learning, for example, and have used just about every mainstream language (and some trendy ones).
* Programming as a discipline has a 10x-20x measured productivity between practitioners with similar experience -- and the real difference can be infinite (there are tasks that I have accomplished that I know would never have been completed by some people I've worked with in the past). Though some will claim it's unique in that respect, it's not: It shares that trait with (for example) the creation of art and music. I can spend 10 hours working on something artistic, and I know artists who can produce a better result in 30-60 minutes.
* Programming can be learned with a computer and 100% free tools. You can start when you're 12 and have access to a computer, and you are limited only by your skill and imagination in what you can create. So those who have an aptitude can spend thousands of hours in practice for only the cost of electricity (after they have a computer).
It may be that Electrical Engineering doesn't have the 10x-20x relative skill effect, or maybe it does. I don't feel qualified to argue one way or another. It does seem like practitioners will specialize in a particular area, though, and tend to stick with it; correct me if I'm wrong?
Also, it's rare for someone at 12 to feel the need to compute Ohm's Law (well, I used Ohm's Law as a 14-year-old, but I'm odd that way), much less the impulse response of a filter, so for most you're learning those equations at the same time, and the difference between the best and worst students isn't measured in thousands of hours of previous experience.
>"you haven't been computing the impulse response of a filter for 4 hours a day since you were 12? There's a massive difference between engineers who have done that and those that haven't."
For the record, if you're one of those people who did start coding at 12 or earlier, it's not hard to spot another "native programmer", any more than, as a native speaker of a language, it's easy to hear when someone has learned a language as an adult. Sometimes late-learners with particular aptitude for languages can speak without an accent, but most of the time it's easy to tell. There are documented brain organization differences (fMRI) between people who learn a language before they're 12 vs after they're 14, and I suspect the same may be (statistically!) true for people who learn programming early vs. late.
I'm teaching my 10-year-old now, just in case. ;)
I graduated with a degree in Electrical Engineering, and barely did programming until I began my first job out of college. In many people in the programming space, I see contempt that coding was something I didn't start until later in life. When I interviewed for Electrical Engineering positions, no one ever scoffed at me, "you haven't been computing the impulse response of a filter for 4 hours a day since you were 12? There's a massive difference between engineers who have done that and those that haven't."