3 ms·
There’s a lot of folks in this thread who’ve shared their personal experience with learning and teaching programming languages. Some attempt to generalise this
by nindalf 5y ago
There’s a lot of folks in this thread who’ve shared their personal experience with learning and teaching programming languages. Some attempt to generalise this experience into principles of how much the first language matters and how to choose it.
It would move the conversation forward if people were up front about which metric they’re trying to move. For example, here are two equally valid pedagogical goals that are in tension with each other - helping everyone become a programmer (no dropouts) and making sure every programmer meets some pre-defined criteria (strong understanding of memory layout or type theory or ability to build products). If your pre-defined criteria includes understanding of type theory, you might start with Haskell. Certainly all surviving members of your starting cohort would succeed according to your criteria, but this is only success if you didn’t mind people dropping out. Conversely, a language like python might help fewer students drop out, but they might have “weaker fundamentals” for some definition of that.
So let’s be clear about what success looks like. Let’s state a hypothesis for success and which metrics we’ll use to measure that. Let’s verify that hypothesis by offering the teaching approach to similar groups and interpreting the results.
We can do better than “I was taught like xyz, and I’m successful now and so that was definitely the right approach”.
Lastly, some people in this thread claimed that anyone can become a programmer if the teaching is good enough. On this, I’d like to paraphrase fictional food critic Anton Ego - “only now do I understand what was meant by the motto ‘Anyone Can Cook’. Not everyone can become a great artist, but a great artist can come from anywhere.”
- ganzuul 5y agoOn discovering that I used to think in a functional manner before learning to program I wish I had begun with Haskell. Things which seemed like obvious things to try didn't work in C++ 98 so I 'learned' that my thinking was wrong and bad... I remember discovering the possibility for tail call elimination and being disappointed that it did not work. Lets keep the standardized tests with the standardized humans: absent.
- tkgally 5y ago> “I was taught like xyz, and I’m successful now and so that was definitely the right approach”. For what it's worth, the same reasoning can be heard in other fields. I work in foreign-language education, and debates about the best way to learn another language—memorize vocabulary and grammatical rules? move to a country where the language is spoken? watch a lot of movies in the language?—often reduce to competing personal success stories. Teachers who have taught a foreign language using a particular method often come to believe that their method is the best, even though they are usually unable to measure the actual long-term outcomes for their students. It may be just too discouraging to be uncertain about the effectiveness of what one does to make a living, so teachers become advocates for whatever approach they happen to use.
- Aerroon 5y agoForeign languages come with an enormous amount of experience. Whether that experience comes from watching a lot of foreign language media or living there or something else entirely probably doesn't matter. You need to build intuition and that seems to only come with experience. Teaching in this sense tends to provide subpar results, because no teacher can spend enough time to get students the experience required to become close to fluent. (I also suspect that it's not just the amount of experience total, but that there's some kind of minimum "experience density" based on time. Eg an hour a week for 20 years might not be enough, but 2 hours every day for 1.5 years might be. But this is just a hunch.) At least that's my personal experience. We studied English for 11 years in school, some studied it later in university too. Every single person my age that was good at it used English outside of the classroom - mostly on the internet. They had enough experience that even without knowing the grammar rules they got the right answers "because it felt right". I think this applies to learning anything else that requires to recognize patterns works in the same way: programming, mathematics, listening to a different language, reading handwriting, fighting difficult bosses in video games etc. You can theoretically understand all the pieces, but still be incapable of utilizing them for a satisfactory result.
- noduerme 5y agoThis is a great analogy. It boils down to having a reason to put in the time to become proficient. A lot of people learn to code by the book without ever finding a puzzle they passionately want to solve through code. With language, you need a reason to practice. Only a breadth of experience can fill the gaps that allow you to intuit meaning in the real world, as opposed to a classroom. In a foreign country, the reason amounts to simply living there. I remember years of knowing simple BASIC and Perl when I was about 10-13 years old and having no ideas what to make with them. I could compile a Mac program with windows and menus and didn't know what to make, other than screen savers. Hypercard was what harnessed my creativity in narrative to my curiosity about code. A similar thing might happen to anyone who wants to code who loves music or writing or art. Code, like language, is for many people only important as a means to an end. It's a tool to communicate. So the measure of success in learning such a tool isn't necessarily whether you make a career at being a translator. It's at whether you can effectively use the tool to do the things you want and need to accomplish outside the specific domain of communication itself.
- DrNuke 5y agoIn my (admittedly limited) experience with teaching and mentoring young programmers, it is much more important to have them write sound code-like programs before any particular implementation. Appreciating logic is a skill they will use for 50+ years.
- urthor 5y agoGoing to take a stab at defining measuring sticks for the problem: Here's some metrics we should measure a "system for programming education," of whatever form, against. --Success is measured against new students with zero programming background. Todo would be defining zero programming background. Ideally people who've never evaluated a statement before AND never used a CLI interface AND without an amazing mathematical background. --Students do not feel regret, unhappiness or anxiety before they start or after they finish a 1-2 hour programming session. Students want to program in the future. All other things being equal. --The level of expertise to target for a "solid programmer" is creating discrete systems using higher order abstractions from scratch. Whilst using a strong mental model of what higher order abstractions actually look like in their physical state to improve their creations. A secondary KPI might be "can the student make a compiler." But a mental model of what higher order abstractions actually look like in logical state seems like a good goal. --Currently underrepresented cultural backgrounds show end state success at the same rate as other cultural backgrounds, all other things being equal. Programming stuff is difficult, when there are difficult academic barriers to overcome people on the south side of social inequality fail more. Thus it needs to be a metric. --Could possibly program for money?.
- urthor 5y agotl;dr -Measure success against "never done it before with average mathematics." -End goal is able to make cool things with a mental model of fundamental logical state that helps at creating things in higher abstractions. -No discriminatory bad news. -No traumatizing for life and making them hate instructing computers. -Employable?
- spoonjim 5y agoAnother important part of the choice of first language (and approach) is making the student want to learn the material. That can be very different for different students. For nerdy high schoolers you might want to start with SICP while for an adult career transitioner you might want to start with “Your First Web App” to highlight the commercial possibilities.
- dalbasal 5y agoThis is a great starting point. Let's not play down tradeoffs, standards, orthogonal goals, etc. Either interpretation of ‘Anyone Can Cook.’ Cooking isn't just about being great art. Neither is programming. Lets not forget that a lot of programming is making something like salesforce do something after an employee does some other thing with their account... Proverbial (and literal) CRUD. The practical requirement for this job is (1)"can program," (2)"knows how salesforce works," and (3)"can reach an understanding for what the problem is." There's a real tendency to downplay this "use case" for an education in programming, but this is a lot of what most programmers do for a living. Whether or not it's simple, it is definitely not trivial in the sense that most people do it well. In isolation, the "can program" bar is not that high.
- umvi 5y agoThis is a good response. There are some people that are determined to become programmers at all costs. For them I don't think starting language matters as much. For others it might matter more.