Hacker News new | past | comments | ask | show | jobs | submit login

> > The truth is that programming isn't a passion or a talent, it is just a bunch of skills that can be learned.

This may be true if your definition of programming is the literal act of writing code / recalling syntax, and learning new tools. Of course, that's not really what programming is. That's the easy part.

Programming is about problem solving, code is simply the tool. Critical thinking/problem solving ability, the ability to think in abstractions, the ability to hold a large amount of information in your head all at once, etc. are all skills, and not skills that the majority of people are particularly good at.

We wouldn't judge a carpenter on e.g. his/her ability to use a saw, or a EE on their ability to use a scope. I never understood why so many put so much emphasis on the tools a software dev knows.




I do believe these skills can be learned, but it's the enjoyment I derive from these things that I believe is the difference between some people and I. When I was in junior high I would do various logic problems for fun. I asked for nothing but a TI-85 for my birthday one year. There probably are people who are better than me at coding who hate the work. But I've hated every job I had until someone started paying me to sit, put on headphones, and solve problems with code. I go home with a sense of satisfaction, whether it's a skill, talent, passion is interesting but doesn't matter to me really.


After (as an adult) watching kids develop, there is a huge positive feedback loop for various abilities.

When you are slightly better or faster or just find doing it (whatever "it" is) more rewarding compared to your peers, then it takes lower effort to get the same reward. This means you are more likely to spend more time doing it. This means that after a while you have more practice than your peers, so the difference in ability is amplified. Now various grownups around you notice and complement you on it, get you lessons to do it better, provide you with supplies, &c. and the difference grows.

By the time you are looking at teenagers, it's hard to tell how much of the difference stems from natural ability, and how much of it is this snowball effect.


> I do believe these skills can be learned,

Ex teacher here:

Some people really really seems to have a harder time with certain subjects than others.

I took pride in being a good teacher but I have experienced one person who - despite being normal and being able to keep a normal job - just couldn't grasp the basics of computers.

And by basics I mean:

Connect power cable, press power button, wait for Windows to load, type password and open Internet explorer.

It would stop somewhere in between there each time.

There is nothing wrong with that just like there is nothing wrong with me never being able to become a long haul truck driver (falls asleep), pilot (partially colour blind), or soccer star (hopeless).

> but it's the enjoyment I derive from these things that I believe is the difference between some people and I.

Thus is huge as well. Possibly also underappreciated.


I've had the exact same experience, but the other side of the coin was getting bullied and beat up because I was more interested in electronics and programming my Vic-20 then other 'conventional' interests for young boys (and being quite small physically at the time).

Programming is a form of expression for me, and I derive great satisfaction from solving and creating software which truly helps the users I work for. On the the other hand my lack of detachment from 'myself' and 'my work' also can cause some unnecessary pain at times, but it's a work in progress.

If anyone has achieved the balance I seek, I'd be glad to hear their story!


> ...it's the enjoyment I derive from these things...

Right. Can (or should) appreciation and enjoyment of a particular kind of work be taught? Or is it an innate quality... a talent, even?


Saying there isn't talent involved in programming is like saying talent is involved in sports or guitar or painting. Sure anyone can improve but some people just have a natural aptitude.

When I was an athlete in high school and college there were people who barely trained and ate whatever they wanted and were far better than people who worked their ass off and counted every calorie.

Programming is much the same. I've had lots of people want me to help them learn, some people are naturals and will make more progress in a few days than most people do in weeks or months.

I'm not sure why people get so defensive about it, nobody cares if you say someone short can't make it in the NBA, but say it about programming or some other mental endeavor people get upset.


In my view programming is definitely a talent or just willingness to put up with things a lot of people wouldn't want to. When I explain to a lot of people in detail what I do during the day and the things I have to think about most people think this is a rather boring and tedious job they don't want to do.

It's the same for a lot of jobs. Intellectually I can do what pure business people or lawyers but I don't find it interesting so I don't have passion for it and will never do well.

On the other hand the first time I saw programming stuff I got excited immediately and had passion for it. I think that's my real talent.


Do you mean to say that being able to think in abstractions or keep a lot of state knowledge in short-term memory are skills that cannot be learned? So where did we acquire these skills, if not by learning?


Your calling them "skills" prejudices the answer. My best understanding is that they aren't skills, they are hardwired abilities. My best guess based on research that I've seen on IQ is that about half of the hardwiring is genetic and half is a result of childhood upbringing, but by adulthood they are not readily changed.

That said, we build concrete skills around how to make the best use of those abilities. We build memory skills to be able to quickly bring things out of short term memory back in. We build abstractions and concepts that allow us to efficiently analyze complex situations. We learn to think better with the capacity that we have. However our capacity doesn't seem to be readily changed.

As a concrete anecdotal example, several who have taught CS for decades tell me that most students simply can't "get" pointer arithmetic or recursion. Their brains don't go that way no matter how much they try. People who do master it learn those things fairly quickly and then can move on. The specific abstractions can be taught, the ability to think through those types of abstractions seems innate.

None of this minimizes the effort needed to become a good programmer even if we have the capacity. However the fact that most humans can't become programmers is why there is a job that typically pays 6 figures where many who are successful in it are self-taught with no more than a high school degree or GED.


"Upbringing" can be a slightly misleading way of stating that summary, as most people think of upbringing as comprising environmental factors that parents can influence. But factors that parents can influence should be largely shared between siblings, and studies typically find that the effect of shared environment is quite small in adulthood. IQ researchers typically find that 60-80% of the variance in IQ is explained by genetics, and most of the remainder to "non-shared environment", a grab bag of factors not shared between siblings that we might as well call "luck".

The above is a slight simplification, but I think it's a fair summary of the current consensus among intelligence researchers, given the word count.


If I remember correctly, the last time I looked into this, there was some doubt about the validity of many of the twin and sibling based IQ studies, because the parents who consented tended to be wealthier.

The upshot was that genetics is probably more of an upper limit on IQ, and that for children raised in poor conditions, environment plays a much bigger role than genetics.


Restriction of range is a potential concern, but not all studies are subject to that criticism. Bruce Sacerdote's study of Korean adoptees randomly assigned to American families found, for example, that the adoptive families represented perhaps the middle 90% of the SES spectrum. Obviously you will rarely see children adopted into the lowest percentile, but you can compare children taken from the lowest percentile to children who are raised natively in that percentile, and you typically find small or nil differences for most outcome measures in adulthood.

Plenty, of smart, dedicated people have been trying for decades to devise interventions to permanently boost IQ among children raised in poor (for the first world) conditions, and unfortunately not much has turned up. Instead, there is a familiar pattern of small pilot studies that show initial promise, but whose gains tend to wash out when the program scales up to a less than one-to-one child/child psychologist ratio, or even when the children are followed up on in adulthood.

The gains from permanently boosting IQ among low-IQ children would be so great that it might still be worth banging our heads against that wall on the off chance that we find something that might work. But we should keep in mind the base success rate of past interventions.


Neural plasticity in adults may be limited but it is not altogether diminished. Also it can be increased - "the plastic potential of neural networks can be engaged late in life by acutely regulating 'functional' E/I transmitter release." http://www.jneurosci.org/content/30/45/14964


> several who have taught CS for decades tell me that most students simply can't "get" pointer arithmetic or recursion

Or maybe they're just bad teachers.


For those of us who didn't grow up coding at age 7, this is golden!!!! The amount of terrible CS teachers out there would amaze you!! I mean "blow your mind away" amaze you. I almost gave up CS because of my absolutely terrible professors. I couldn't even understand simple Classes and object!!! It was that bad!!!

Luckily, since I really wanted to learn, I had to seek alternate resources. I was fortunate to stumble on Stanford's Cs106a taught by Mehran Sahami and it changed my life forever. That man is the gold standard for what a teacher should be. He broke down complex ideas and made them look so simple.

Since then, I use a combination of different resources to learn said "difficult concepts". Recursion, got it...pointers, got it too. I have used Standford courses, Berkeley course, udemy, Udacity, Coursera and even youtube to learn. These sites have some really good teachers.

I have since come to understand that CS is really not that difficult. All is takes is a willingness to learn and a good resource to learn from.


Or maybe they're just bad teachers.

Maybe so, maybe not. However I never had trouble when they tried to teach me things. And have heard good things from others who they taught.

One of the people who expressed this basic opinion to me is https://www.amazon.com/Randal-Schwartz/e/B000APA744. He is also someone whose expository abilities are widely recognized as being excellent. And he is also an example of a self-taught programmer with no degrees beyond graduating from high school.


To be fair, "bad teachers" is the simplest explanation. The alternative is to go chasing intricate definitions of exceptional intelligence and long-tailed aptitude disributions that take hella lot of explaining.


>> My best understanding is that they aren't skills, they are hardwired abilities.

And isn't it the most amazing coincidence that those who are thus exceptionally gifted are uniquely placed to benefit from the demand for those very abilities in an extravagantly lucrative profession?

I mean, imagine what would happen if everyone could program! Where would those six-figure salaries go then?


And isn't it the most amazing coincidence that those who are thus exceptionally gifted are uniquely placed to benefit from the demand for those very abilities in an extravagantly lucrative profession?

I mean, imagine what would happen if everyone could program! Where would those six-figure salaries go then?

That was the exact point that I was making.

There is no coincidence. It is economics 101. In a free market, the salary is set by the laws of supply and demand. If people who can program are in short supply and create lots of value, the supply/demand curves will meet at a high price point. That is good for programmers. If everyone could program, then the price point would be lower and programmers couldn't collect those salaries. Programming has low explicit barriers to entry AND high salaries. This could not continue without implicit barriers to entry of some sort.

How low are the explicit barriers? I personally know several programmers who were homeless teenagers, later received GED degrees, and are self-taught in programming. These are mostly highly paid professionals. (One that I know decided as an adult to go back and pursue university now that she could. She's only 30 - by the time she's my age I'm confident that she'll also be a highly paid professional.)

Let's continue with economics 101. When you move a person from a non-programming job to a programming job that pays more, it is obviously good for that person. It is also good for society as a whole - that person is doing something more productive. It isn't so good for other programmers, though, because it reduces their salary.

Speaking personally, I grew up in poverty. My life is much better than I feel I deserve, or than I need. I also like seeing the lives of others around me improve.

Therefore I have encouraged many to take up programming, and spent untold volunteer hours answering questions from people who want to become better programmers. I have zero interest in limiting who gets to program.

For a political example I completely oppose H1B programs in their current form. I think that we should allow free immigration for competent people AND once they arrive we shouldn't restrict them from finding the best job that they can. The current quota system which provides incentives for companies to swear up and down that they are paying a competitive wage, while in fact they are paying under the market price, and then trap the people that they import in jobs that don't make full use of their talents.


I don't think it's nurture v nature, it's both. Anyone can learn, and anyone can get better at something. That does not mean anyone can be Einstein. I could study physics all day and all night and I would never be on his level or the level of his contemporaries.


They're built in, like most cognitive abilities. After all, you never learn how to take a 2 dimensional pattern of light hitting your retina and turn it into a 3 dimensional model of your environment. Ditto for locating the source of sounds. And, while you learn a specific language, none of us have to develop the general skill of learning a language from scratch as toddlers.


Paging Gwern? [1] [1] http://www.gwern.net/DNB-FAQ


> We wouldn't judge a carpenter on e.g. his/her ability to use a saw

We absolutely should because it's a fundamental aspect of doing their job. The difference between me and a professional carpenter is literally the ability to use tools effectively to build an item. I know whether to use a dovetail or dowel joint as well as any professional, but I guarantee the pro will achieve a better finish in much less time.

It's like theoretical CS vs. real-world programming. It's good to know sorting strategies and whatnot, but knowing how to use the tools is what gets stuff done.


> We absolutely should because it's a fundamental aspect of doing their job.

The problem is that we don't pay engineers to crank out pre-designed classes in a specified language with a specific editor. We do pay day laborers to go dig a certain trench over there with these particular shovels and picks.

Software engineering is so much more open-ended. We're paying people to "go help the team make the yard more water efficient".

In other words, if we had more well-defined roles for "coder" versus "engineer" versus "architect", it might make sense to test on the ability to use tools, but in general people in this thread aren't making that kind of distinction because the tech culture in general doesn't make a clear distinction. Otherwise, we'd have "coder" job interviews that didn't include algorithms or open-ended problem solving questions.


>We absolutely should because it's a fundamental aspect of doing their job

A rather trivially learned part of their job. It has little bearing on their ability to build a beautiful cabinet.

>The difference between me and a professional carpenter is literally the ability to use tools effectively to build an item

It's much more than that. How about Michelangelo? Do you think the only difference between you and him is that he's had more practice with a chisel? Doubtful.

>It's like theoretical CS vs. real-world programming. It's good to know sorting strategies and whatnot, but knowing how to use the tools is what gets stuff done.

This is the lone of thinking that leads hiring managers to build teams of mediocre devs with a lot of buzzwords in their CV. I don't care so much that you know e.g. C#, I care that you are a great problem solver. If you have that part down I'm fine with investing a little time into you so that you can learn C#, ASP.NET, whatever. The latter bit is easy.


Critical thinking, logic, empathy, etc. are all skills one can learn. And that's the point.


Eh, I'm not convinced of that. I don't think you can take any person and teach them to think through problems logically. It seems simple enough, and you can certainly make them _better_ at it, but I really do believe we all have upper limits on our potential.


I agree that there are upper limits on a given individual's potential, but I think you are being too absolutist in language. I'm not sure that you can take ANY person and teach them any given thing. That's just silly. I think the powerful point is that there are and needs to be average programmers, and we can teach a subset of people to be that. There is evidence, even if anecdotally, that many are being dissuaded from the field due to a toxic belief that you are either born with some amazing ability to do the work and that it can't be taught, or you suck because you just "don't get it". Very damaging philosophy. I think we could teach certain people to do the work, maybe not everyone, but more than currently. There are a lot of mundane jobs in programming that do not need super high level abstraction and critical thinking skills.


> I think the powerful point is that there are and needs to be average programmers

Of course we do, but no one is saying only the best should be hired and the rest should go dig a ditch. Most programming tasks do not require top level talent to accomplish, but when I'm hiring I'm going after the best candidate I can get, and that has little to do with e.g. what web framework they are most familiar with.


Anyone can learn these skills, but they're sufficiently difficult that only people with the inclination and motivation to push through the hard parts make it anywhere. Desire and grit make more of a difference than talent or natural ability, which are impossible to measure.


>> I don't think you can take any person and teach them to think through problems logically.

That's actually the whole point of scientific training: teaching people to use the tools of science, including thinking logically and avoiding sources of bias and so on.

If you want to go back into antiquity, the ancient Greeks who started the whole Logic thing, Socrates, Plato, Aristotle et al, they never presented logic as some kind of innate ability of human beings, rather they set out to teach it as an instrument of thought that was far from innate. Because if it was innate, it wouldn't need all that work they put into it.


Isn’t this basically what is used in behavioral therapy? Teaching people to think and approach emotional things reasonably?


Yes. Learnable. But problem solving doesn't come easy. Critical thinking is another tough nut to crack.


Is there any particular evidence that working programmers actually have either of those? Or are they just fuzzy-ass words we've made up to convince ourselves there's some hard barrier to the eventual reclassification of programming as "un-skilled labor"?


Not all of them, of course not. Like any profession there is a wide range of talent levels. However, to be _good_ at it I think you need all of these.


I can only speak anecdotally. I've seen someone look at a problem and break it down effortlessly, while the rest of the room plays catch up.


They can be taught to a five-year-old, I'm not sure they can be learned by a 25-year-old.


There are two meanings of learn that are at odds here. One is to be taught something, which I think many of us agree isn’t sufficient for programming. The other is to acquire the skill via lots of practice, which is much more appropriate in the context of programming.

Ones ability to program is directly related to ones tenacity to practice programming.


I put emphasis on tools because I've worked with a lot of recent graduates. There's the very real, practical problem of knowing what not to solve. I don't care if you're a genius or not, you're wasting time recreating (poorly) components that already exist in the standard library. Similarly if someone is doing blatantly bad-practice things because "its just implementation details" (stuff like hardcoded paths to /home/username) it causes a bunch of extra effort to clean up the monstrosity.

That's not to say problem solving is not extremely important, but the time suck created by bad tool use (or not using tools out of ignorance of their existence) ultimately reduces the productivity of a programmer, or in some cases, whole teams.


> Similarly if someone is doing blatantly bad-practice things because "its just implementation details" (stuff like hardcoded paths to /home/username) it causes a bunch of extra effort to clean up the monstrosity.

Agreed. There's definitely a balance point there - I remember when I got to the point that I not only recognized that this a bad idea, but where they actively started bothering me even for one-off scripts. Something as simple as setting them as constants at the top of the script makes that feeling mostly go away and requires almost no extra effort when implementing.

There are many times when I think "This is really brittle. Surely there's a better way to do it...", which is usually quickly followed by "I'll figure out that better way later, for now, just isolate it and make a note to fix it when this is done."


+1 Code is simply a tool. And dev tools are even further removed. Git is not problem solving. I'm certainly not going to belittle that skill. I have Git expert envy. However, hiring a problem solver for their experience with nearly irrelevant tools is comical. A red flag, but still comical.


> However, hiring a problem solver for their experience with nearly irrelevant tools is comical

How far down the rabbithole does this go?

I have never programmed iOS, but I'm completely positive I could program for iOS.

10 years of occasional programming, from python, to school projects, to database development, to android apps, to full stack react-native development.

I'm confident that I can build an iOS app.

Programming and understanding how computers handle inputs are tools. But programming is more mindset than anything. The only benefits of knowing the specific language or framework would be skipping the 1 month of learning syntax.

I'm a recreational programmer mostly, but at some point, you realize you can do full-stack and you realize that everything is possible with google and stack overflow.


Oops. Sorry. I was speaking about something like Git, not a particular language tool.


Better also to not just grasp but live on concepts like opportunity cost and technical debt. You are Not adding value making the wrong choices in these areas, nevermind your ability to type code.


> We wouldn't judge a carpenter on e.g. his/her ability to use a saw

What? Yes we absolutely would.


I think the point is that we don't judge on the tools, but the results. If he/she did a good job, why would you care? you wouldn't. Which is the parent's point. I think.


If you can't use the basic tools, there are not going to BE any results.

The metaphor is ridiculous.


/r/iamverysmart




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: