Threads like this are invaluable, but it's not fun...
# linking-together
c
Threads like this are invaluable, but it's not fun reading – "modern programming" is a borderline nightmare for the uninitiated https://twitter.com/Aella_Girl/status/1522633160483385345
❤️ 3
f
and a cacophony of explanations barrage my face like a bukkake of knowledge
I'll have to remember that phrase
I have a strong sense of what I need to know
This part felt a bit "off" to me (would have loved more context), and interestingly the two quoted retweets seem contrary to each other (one agreeing, the other noting the problems that arise from mismatched expectations): https://twitter.com/Aella_Girl/status/1522633193660239876/retweets/with_comments
Overall a good summary of the parts that should be "skippable" for a beginner. Since I'm not familiar with Python: Would Jupyter have helped here to lower the barrier? (edit: it certainly came up a few times)
p
I could write a long essay on everything I think is wrong with Python, but I have trouble thinking that fixing all of it would help with this part: "I don't wanna learn how programming building blocks work as I use them to build a lil rando pile, I want to learn how they work as I use them to build the actual house I want. If what I'm learning isn't connected to a payoff, then I lose the stamina to wade through the problems." I struggle to translate that into any other discipline and have it still make sense. It sounds like wanting to learn how to write a novel in French without any interest in learning to conjugate verbs, or wanting to race horses without learning how to ride them or care for them or even saddle them, or wanting to become an MMA champion without wasting time on all those pesky punches and kicks. At the risk of sounding like a grumpy old fart, I remember when pop culture encouraged dedication and patience and learning to crawl before you run with things like "You must complete the training" and "Wax on. Wax off."
👍 3
f
From what I gathered she started down that road to solve a specific problem. If the solution is not in sight, and the steps one needs to take are too abstract to even understand why they need to be taken, then it's fair to question wether you're still on the right path.
👆 1
👆🏻 1
Getting bombarded with all kinds of advice from the swarm surely won't have helped (imagine trying to weed out the ones that aren't helpful without any background), but it seems there's been a happy end: https://twitter.com/Aella_Girl/status/1523756696711344128
A better analogy than "writing a novel" would likely be "being able to communicate on a basic level", like asking for directions. You don't need to learn the entire vocabulary or grammar for that.
💯 2
Likewise, a beginner isn't interested in all the intricacies of a programming language, or best practices, or how to implement something in the most maintainable or efficient manner. They just want to "make stuff work".
☝️ 1
@Personal Dynamic Media I do get where you're coming from. But as I understand it one of the key ideas of this community is to allow others to "stand on the shoulders of giants", and not have to wade through the same mud that we've been through.
🌈 3
p
@Fabian Iwand I agree with what I think you are saying about the need for programming environments that are easier to get started with and in which it is easier to focus on your goals than how the computer works. I also agree that we need environments with a more shallow and continuous learning curve and with more discoverable capabilities. I struggle with what I perceive to be an implication (not sure if you meant to imply this or not, but I feel like it is in the air in this thread) that somehow it should be possible to write interesting programs without learning the building blocks necessary to do so. Logo and Smalltalk and Scratch can make it easy to do simple things, and easy to combine simple things into more interesting things, but at the end of the day figuring out how you want to combine those things into something interesting still requires knowledge of the building blocks and skill that takes time and effort to learn. And, I would argue, some time spent building a little rando pile instead of a house so that you can get a feeling for how those blocks are shaped and what they do. In designing a system, I think it's important to acknowledge what the system can provide versus what will still be needed from the user.
c
Maybe the resolution is: pick the tool/approach correctly. If you need to parse csv, there are many options, some easier, some harder. And people need help picking the right tool/approach. Python isn't the right tool for many people at most experience levels. Once you have a certain experience level, then it's an option. If I want light in my house, one option is to pull off an outlet from the wall, experiment with the wiring, and try to run wire to a fixture I bought online. For most possible experience levels I likely possess, this is not the option I should choose. If there's something this community can provide, maybe it's not more technology – maybe it's a map between experience levels and approaches+tools to try.
j
I think there's an important insight, here, about the difference between the inherent need to learn fundamentals first, and whether or not the person learning the fundamentals in the abstract can envision how those fundamentals are combined to do something that they want.
The problem may actually be that we are not going fundamental enough? I remember one educator saying that when teaching programming, they start with the concept that "code" is (usually) text in a file. And build up from there about compilers, assembly languages, modules, packages, package managers, etc. Maybe do that first. THEN tell them what pip is and have them install it. If they can see the path from this step to the thing they want, they gain context, and the "thing they want to do" becomes a motivation to learn how to install pip. If they can't, it's random nonsense until you accidentally learn what it is, and what it's for.
p
@Chris G regarding picking the correct tool, when I read that the author can "get specific info from various columns (count x in a column conditional to y in another column), how to filter columns, delete empty columns, and delete targeted columns" it did occur to me that a spreadsheet can do all of those things. Some spreadsheets can "generate a correlation chart" for some values of "correlation chart." However, I have no idea how much data is in play or how advanced of an analysis the author is attempting to perform, so I don't know if a spreadsheet could be made to solve the actual problems at hand. I see the value of creating a map of what tools to use when, but contemplating the number of dimensions in play and how to represent them makes my head hurt. It seems to me that "experience level" should be split into at least two variables, "computer or programming experience level" and "domain experience level." Other relevant dimensions I can think of include the size of the problem, the complexity of the problem, which form of efficiency is your priority (examples from the camel book include runtime efficiency, space efficiency, programmer efficiency, maintainer efficiency, porter efficiency, and user efficiency), other software you need to integrate with, and restrictions on acceptable licenses (for example, "no GPL allowed" or "all parts must be open source"). I'm sure I missed more than I thought of, so maybe we need a data model with an arbitrary number of arbitrary attributes to describe the user's needs? At which point this starts sounding more like a library catalog than a map. Or am I overthinking this?
🤔 1
@Jason Morris putting your two posts together, it seems like the question you are posing might be something like "how do we draw a person into learning about the fundamentals of their environment and tools by drawing clear connections between those fundamentals and what the person wants to achieve?" Am I close? If so, I think it's an interesting question, but I currently lack the imagination to answer it. If someone were to ask me something like "how do if statements and while loops help me write a video game?" I can only think of answers that are unintelligible until after a person has learned the necessary concepts that are bigger than "if"and smaller than "video game." If they don't have a mental map from the bottom of the mountain to the top of the mountain, how can I show them that the first step actually takes them up a path that will get to the top of the mountain?
j
Very close, yes, @Personal Dynamic Media. To strain the analogy a bit, the answer to your last question is you draw them an actual map, on paper. For your while loop to video games example, you say "video games show video. video is a series of pictures. to create video, the computer creates pictures, over and over again, really fast. Loops are used to get a computer to do the same thing over and over again." Loops -> do stuff over and over -> make pictures over and over -> video -> video game. It is entirely doable, just not usually done. Probably because the training materials are written by and for experts, who suffer from the curse of expertise and are unaware of what they understand that their audience doesn't, and/or because they are written outside of any context so as to be of general use, or use the context only to motivate examples, not the concepts themselves.
So I guess the question is why do we not have "Learn Python By Building X" as a typical type of training document, instead of just "Learn Python"? Why do we not use motivational context to our advantage? And how can we better overcome the curse of expertise, so that we can connect that context to the thing we recognize they don't already know.
The answer is probably "learning is UX". Use all the same tools and techniques for your user manual and tutorials that you use for the interface. Prototype, observe users, note points of friction, refactor, repeat.