Great read, as always. Like you, I'm a strong advocate of the "middle-of-the-road" approach to learning. Small concrete projects rather than standalone exercises, but with each project carefully designed to cover the key concepts I want to convey. And one carefully designed project after an other covers the whole curriculum.
Good post, and what you say about what programming does for the mind is true, but I have to disagree with a few points. Firstly, getting into programming as a profession for the money is, to me, just as bad an idea as getting into being a doctor or lawyer for the money. One spends one's life in a career, so I think it's wise to find something you love doing. As they say, "If you do what you love, you'll never work a day in your life."
More importantly, not everyone can learn to code any more than everyone can learn surgery or how to fly an airplane or theoretical physics. Dealing with abstractions, I think, requires some starting ability one has gained along the way. With no background in some STEM topic, I think programming is extraordinarily hard to learn. I've taught it and watched students struggle.
Finally, speaking as a retired software designer, incompetent wannabes were a plague on my life. I was stuck in one position for two extra years because it was so hard to find someone capable of doing the job from our selection of "for hire" programmers. I've interviewed "programmers" so clueless I couldn't understand why they were even applying. What did they think would happen on their first assignment?
Programming is similar to learning mathematics, which is also good for the mind. But most people are going to struggle with it. A bit like going to the gym. Good for you but hard to keep up without dedication.
I totally agree with your first point, no arguing there. About the second point, I honestly believe that perhaps not everyone but far more people can learn to code than most computer science educators believe or admit. We have what I call the programmer gene myth or fallacy, which is self-reinforcing. We see students that have it easier learning to code for various reasons and we select for those students, tailoring curriculum, exams, admission tests, and the whole process to benefit those students. And I'm not the only saying this, of course, people far smarter and better informed than me have been saying for decades that CS-ed is very biased towards a specific type of individualistic, competitive, often male, nerd-ish student. Then a lot of people are lazy, yes, and learning to code is hard. But that is not an inherent limitation, IMO, is more a matter of cultivating motivation and dedication, which is something college and schools in general suck at.
I do agree that just about anyone can learn to code simple stuff, but I think it takes years of experience solving deeper programming issues for a "programming mindset" to develop. No doubt it would be great for people, but how many will put in that effort willingly? Motivation and dedication are difficult to instill. I think they may have to come more from family life than scholastic life. Children's education is another matter, and I think many kids are exposed to coding these days.
I certainly wish more people were read-in on coding and STEM in general. The current generations might be a wash, but we should educate our children better.
On this we agree. it takes a lot of effort and that requires motivation, which is what seems to lack most these days. Kids in college seem to be much more about playing with the shiny new stuff, like AI, than about really getting to understand how it works so they can make it better. Maybe it was always like this and I'm just getting old :)
I think it’s a natural inclination. Mathematicians have been singing a similar song since Ancient Greece. “Study mathematics! It makes your mind more powerful!” So have athletes. “Workout regularly! It makes your body more powerful!” None of them are wrong.
Perhaps there’s an analogy with cars. Most people don’t care how they work or want to know how to fix them, they just want them to work.
Geek and nerd mean the same thing now, but originally a nerd was a social misfit while a geek was someone expert in an arcane knowledge most people aren’t interested in. Star Wars geeks, political geeks, old movie geeks, and coding geeks. Math and code are geek territory. We know it, love it, and see it as beneficial (it was my career), but most people just aren’t interested.
Maybe that can or should change, but it didn’t with math or mechanics. On the one hand, coding can offer immediate gratification, which can be attractive. On the other hand, I’ve found that unless someone has a reason to code, an application they want to create, coding for the sake of coding is the worst. Math exercises, basically.
It has been at the back of my mind to pick this up. Having grown up in the generation that built our own blogs, I have always thought it was simply too complicated to learn an entirely new language. But having been back in University after working 10 years, it does feel like this skill is something that aligns with my goals and more important than ever with the rise of AI. I’d be keen to join a course in person or virtually if you have them open to us.
Thanks! I've thought of giving an async online course before, but always shied away at the prospect of the logistics involved. But I'm still open to do it if/when my daily schedule normalizes a bit. Two girls (1 and 2 year old respectively) is more than enough on my plate for now :)
I think too many people learn coding for the sake of coding and engross themselves in irrelevant things like learning more languages or memorising syntax. Especially when schools decide to teach it because it's "cool" or "teaches 21st century skills" or other nonsense as a marketing strategy. Nothing helps unless coding is taught properly, with the right skill development in mind. Also, mathematics teaches many of the same skills as coding, as do the natural sciences. So if that's the case, is learning coding still a priority? And what can we do to ensure people start teaching and learning it the properly?
Good question. Indeed math and science education in general has a large overlap with coding in terms of problem solving skills. Still, there is something unique to the mindset of thinking as rigorously as algorithms require.
That’s true, though I do notice those who do well in maths tend to also do well in algorithmic thinking and vice versa, suggesting a strong link. I usually advise people to develop a good appreciation of mathematics before deciding to learn coding as this will help them better understand the problem solving process and apply it to something useful
You know I have seen a rather weak correlation between being good ar (college level) math and computer science. CS has much to do with discrete math, but pure math majors are almost only about continuous marh.
Oct 26·edited Oct 26Liked by Alejandro Piad Morffis
Interesting observation! Maybe then it depends on what kind of maths (pure or applied)? Also do you notice any similar trends or other interesting patterns in other subjects, like the sciences or maybe even arts/humanities? I'm very curious
Of the people with a basic science background the ones I've seen are more capable of adapting to other domains are physicists. Not a rule of course, but I've seen lots of physicists moving over to other domains with lots of success.
The other kind of people I've seen excel at abstract reasoning and logic are those with a philosophy major. They don't deal in numbers, but they learn to think very deeply about stuff, and often come up with very good counter arguments to whatever you can think of.
As a retired programmer I always regarded myself as a general-purpose problem solver who happened to work with computers. (Of course I rarely had the opportunity to solve non-computer problems so it was probably largely a conceit!)
For me, learning algorithms was bit boring in this semester until now when I found I could make visualizer for each of these, not gonna lie it's hard but it just helps me keeping interested.
Not everyone has to or wants to, definitely. Though I think almost everyone can and would benefit from learning, if only for the intellectual development.
I tried to teach my (adult) children. Not interested.
I did a survey of everyone at my office in Silicon Valley. Everyone who wasn't already a programmer said something like “I couldn't imagine anything more boring.”
As to you said in your article, most people have no idea what we do.
Yup, I totally believe you. Interest is a proxy for perceived rather than actual value, so I imagine if we did the same survey for basic math, science, literature, art, philosophy, history, basically anything we teach in schools today, and (some) people already didn't know why they are important, we had a similar response.
I don’t know how to code BUT I am now interested to learn because there are problems I want to solve. That is the missing element from this post. Ask people to discuss problems they want to solve and there is a foundation of interest. From that starting point, the concrete process of the three abstraction layers start to become obvious and intuitive. It is exciting that better AI tools may allow more tailored education resources without totally sacrificing standardized metrics of knowledge acquisition.
If someone doesn’t have a problem they want to solve, then I expect they will have low interest in the headache of learning a new language.
Really like your blog and how you interpret things. Meanwhile, I’ve been using EchoAPI in VS Code, and it has completely transformed my API testing workflow!
Great read, as always. Like you, I'm a strong advocate of the "middle-of-the-road" approach to learning. Small concrete projects rather than standalone exercises, but with each project carefully designed to cover the key concepts I want to convey. And one carefully designed project after an other covers the whole curriculum.
I've known for a while that you and I are soul mates in terms of educational methods :)
Hehe!
Sounds interesting. Alright, I’ll take the bait. Show me an example.
🙏 next post!
Good post, and what you say about what programming does for the mind is true, but I have to disagree with a few points. Firstly, getting into programming as a profession for the money is, to me, just as bad an idea as getting into being a doctor or lawyer for the money. One spends one's life in a career, so I think it's wise to find something you love doing. As they say, "If you do what you love, you'll never work a day in your life."
More importantly, not everyone can learn to code any more than everyone can learn surgery or how to fly an airplane or theoretical physics. Dealing with abstractions, I think, requires some starting ability one has gained along the way. With no background in some STEM topic, I think programming is extraordinarily hard to learn. I've taught it and watched students struggle.
Finally, speaking as a retired software designer, incompetent wannabes were a plague on my life. I was stuck in one position for two extra years because it was so hard to find someone capable of doing the job from our selection of "for hire" programmers. I've interviewed "programmers" so clueless I couldn't understand why they were even applying. What did they think would happen on their first assignment?
Programming is similar to learning mathematics, which is also good for the mind. But most people are going to struggle with it. A bit like going to the gym. Good for you but hard to keep up without dedication.
I totally agree with your first point, no arguing there. About the second point, I honestly believe that perhaps not everyone but far more people can learn to code than most computer science educators believe or admit. We have what I call the programmer gene myth or fallacy, which is self-reinforcing. We see students that have it easier learning to code for various reasons and we select for those students, tailoring curriculum, exams, admission tests, and the whole process to benefit those students. And I'm not the only saying this, of course, people far smarter and better informed than me have been saying for decades that CS-ed is very biased towards a specific type of individualistic, competitive, often male, nerd-ish student. Then a lot of people are lazy, yes, and learning to code is hard. But that is not an inherent limitation, IMO, is more a matter of cultivating motivation and dedication, which is something college and schools in general suck at.
I do agree that just about anyone can learn to code simple stuff, but I think it takes years of experience solving deeper programming issues for a "programming mindset" to develop. No doubt it would be great for people, but how many will put in that effort willingly? Motivation and dedication are difficult to instill. I think they may have to come more from family life than scholastic life. Children's education is another matter, and I think many kids are exposed to coding these days.
I certainly wish more people were read-in on coding and STEM in general. The current generations might be a wash, but we should educate our children better.
On this we agree. it takes a lot of effort and that requires motivation, which is what seems to lack most these days. Kids in college seem to be much more about playing with the shiny new stuff, like AI, than about really getting to understand how it works so they can make it better. Maybe it was always like this and I'm just getting old :)
I think it’s a natural inclination. Mathematicians have been singing a similar song since Ancient Greece. “Study mathematics! It makes your mind more powerful!” So have athletes. “Workout regularly! It makes your body more powerful!” None of them are wrong.
Perhaps there’s an analogy with cars. Most people don’t care how they work or want to know how to fix them, they just want them to work.
Geek and nerd mean the same thing now, but originally a nerd was a social misfit while a geek was someone expert in an arcane knowledge most people aren’t interested in. Star Wars geeks, political geeks, old movie geeks, and coding geeks. Math and code are geek territory. We know it, love it, and see it as beneficial (it was my career), but most people just aren’t interested.
Maybe that can or should change, but it didn’t with math or mechanics. On the one hand, coding can offer immediate gratification, which can be attractive. On the other hand, I’ve found that unless someone has a reason to code, an application they want to create, coding for the sake of coding is the worst. Math exercises, basically.
It has been at the back of my mind to pick this up. Having grown up in the generation that built our own blogs, I have always thought it was simply too complicated to learn an entirely new language. But having been back in University after working 10 years, it does feel like this skill is something that aligns with my goals and more important than ever with the rise of AI. I’d be keen to join a course in person or virtually if you have them open to us.
Thanks! I've thought of giving an async online course before, but always shied away at the prospect of the logistics involved. But I'm still open to do it if/when my daily schedule normalizes a bit. Two girls (1 and 2 year old respectively) is more than enough on my plate for now :)
I think too many people learn coding for the sake of coding and engross themselves in irrelevant things like learning more languages or memorising syntax. Especially when schools decide to teach it because it's "cool" or "teaches 21st century skills" or other nonsense as a marketing strategy. Nothing helps unless coding is taught properly, with the right skill development in mind. Also, mathematics teaches many of the same skills as coding, as do the natural sciences. So if that's the case, is learning coding still a priority? And what can we do to ensure people start teaching and learning it the properly?
Good question. Indeed math and science education in general has a large overlap with coding in terms of problem solving skills. Still, there is something unique to the mindset of thinking as rigorously as algorithms require.
That’s true, though I do notice those who do well in maths tend to also do well in algorithmic thinking and vice versa, suggesting a strong link. I usually advise people to develop a good appreciation of mathematics before deciding to learn coding as this will help them better understand the problem solving process and apply it to something useful
You know I have seen a rather weak correlation between being good ar (college level) math and computer science. CS has much to do with discrete math, but pure math majors are almost only about continuous marh.
Interesting observation! Maybe then it depends on what kind of maths (pure or applied)? Also do you notice any similar trends or other interesting patterns in other subjects, like the sciences or maybe even arts/humanities? I'm very curious
Of the people with a basic science background the ones I've seen are more capable of adapting to other domains are physicists. Not a rule of course, but I've seen lots of physicists moving over to other domains with lots of success.
The other kind of people I've seen excel at abstract reasoning and logic are those with a philosophy major. They don't deal in numbers, but they learn to think very deeply about stuff, and often come up with very good counter arguments to whatever you can think of.
As a retired programmer I always regarded myself as a general-purpose problem solver who happened to work with computers. (Of course I rarely had the opportunity to solve non-computer problems so it was probably largely a conceit!)
Interested in seeing things in action!
For me, learning algorithms was bit boring in this semester until now when I found I could make visualizer for each of these, not gonna lie it's hard but it just helps me keeping interested.
Yeah visualizing algorithms is the best way to make them feel real as well as interesting.
Very good. I don't think coding is for everyone though. Not everyone is up to it and lots of teaching doesn't help.
Not everyone has to or wants to, definitely. Though I think almost everyone can and would benefit from learning, if only for the intellectual development.
I tried to teach my (adult) children. Not interested.
I did a survey of everyone at my office in Silicon Valley. Everyone who wasn't already a programmer said something like “I couldn't imagine anything more boring.”
As to you said in your article, most people have no idea what we do.
Yup, I totally believe you. Interest is a proxy for perceived rather than actual value, so I imagine if we did the same survey for basic math, science, literature, art, philosophy, history, basically anything we teach in schools today, and (some) people already didn't know why they are important, we had a similar response.
I don’t know how to code BUT I am now interested to learn because there are problems I want to solve. That is the missing element from this post. Ask people to discuss problems they want to solve and there is a foundation of interest. From that starting point, the concrete process of the three abstraction layers start to become obvious and intuitive. It is exciting that better AI tools may allow more tailored education resources without totally sacrificing standardized metrics of knowledge acquisition.
If someone doesn’t have a problem they want to solve, then I expect they will have low interest in the headache of learning a new language.
Yes this is an excellent point.
Really like your blog and how you interpret things. Meanwhile, I’ve been using EchoAPI in VS Code, and it has completely transformed my API testing workflow!