15 ms·
Python for Non-Programmers
- ivanbakel 7y agoI'm guessing the FAQ is targeted at the non-technical audience, so I'm not surprised this doesn't show up as a question, but - why Python? I often wonder if imperative programming is actually a beginner-friendly abstraction - in particular, because of name rebinding and interior mutability. My university's CS course is highly technical, but also targeted at non-programmers (officially, the lecturers cannot expect any computing experience at all) - and it teaches Haskell, which addresses some of those concerns.
- vikramkr 7y agoI think they answered why python in the description - because it's one of the hottest languages out there and because it's one of the most popular languages out there.
- kazinator 7y ago> wonder if imperative programming is actually a beginner-friendly abstraction You know, a very common newbie Lisp question is "why is my list still the same after append". I bet you no Python beginner asks why their list is different after list.append(3), having expected a new list to be returned and the original one left alone. Imperative is intuitive; the real world is apparently imperative. Though it can be described by functions in which t is just a parameter, the way those functions play out is that the past values of t are not available. To take a more level view, the expectations w.r.t. append could be conditioned by prior exposure to other languages. However, any exposure to computers at all reinforces the imperative view. Almost all content is manipulated destructively: documents, settings, you name it.
- rovolo 7y agoOn the other hand, we have to teach people about aliasing vs cloning in imperative languages. a = [1, 2, 3] b = a b.append(4) assert a == [1,2,3] No matter which paradigm we use, there are going to be hidden traps new programmers need to learn. I think there might be fewer roadblocks in an immutable language because you can examine each function in isolation. There's a smaller chance a beginner will screw something up on line 10 which causes a problem on line 150. More moving parts makes it easier to get stuck on a buggy program. On the other-other hand, it is a slower ramp up to doing useful things. It's much easier to read/write to files and draw graphics in an imperative language.
- kazinator 7y agoAliasing versus cloning can bite you even if nothing in the program is imperative. For instance, somewhere in the program you choose the wrong one among the available set of equality functions (all of them beautifully pure). If the immutable language has a single equality operator which makes it impossible to tell whether or not a value has been cloned, you might be safe from this issue.
- rovolo 7y agoThere shouldn't be a difference between Aliasing and cloning for immutable data because you can't change the data. Deep vs shallow operations is an issue in both imperative and functional programming. In python, you have '==' vs 'is' for different types of equal. You have deep vs shallow copy: https://docs.python.org/3/library/copy.html https://docs.python.org/3/library/copy.html
- dbcurtis 7y ago> the real world is apparently imperative. I beg to differ. The real world is declarative. But as software developers we mostly suck at creating declarative ways to express problems. The spreadsheet being the one example of an intuitive declarative UI that non-programmers grok easily. Your average corporate VP of engineering uses a declarative interface to issues charters to his developers: "You need to hit X performance target, Y cost of goods, and Z MTBF. By Date D. Go." Declarative is the way the world works.
- thelean12 7y agoAnd yet, the only way to actually complete that charter is to "interpret" or "compile" that charter into something imperative.
- kazinator 7y agoThe political or legal world is declarative, for sure. Perhaps an inviting flower is declarative to a bee, or reactive chemicals are declarative to each other. Other than that, I'm not so sure.
- simplify 7y agoProlog is the best way to describe these constraints. Nothing else comes close to its declarative power. The industry will catch on, eventually.
- bluedays 7y agoBecause it reads like English.
- danso 7y agoWhy not Python? It has a fairly sensible syntax, a broad standard library, a massive library of powerful and useful third-party packages, and a great ecosystem for online/interactive learning (JupyterLab/CoLab/etc). Assuming that many of its audience are self-learning/non-CS-careerists, Python's popularity and adoption rate is also going to be a major draw. Learning Python as an attractive job skill is as much an incentive as the intellectual accomplishment.
- nicoburns 7y agoPython is much more useful to know than Haskell...
- marcosdumay 7y agoPeople have a very clear grasp of a list of instructions to follow in order. At the same time, a set of constraints that describe something is a very advanced topic that requires a lot of getting used to and some extra focus. Programmers tend to favor the declarative approach because it leads to simpler programs, but it's only easier to understand if you are trained in (somewhat advanced) mathematics; most people succeed in avoiding learning any mathematics. But yes, mutability is surprising. It's something to explicitly teach.
- reuven 7y agoI definitely talk about mutability in my course. It's super important, I agree!
- Der_Einzige 7y agoIf someone had tried to start my programming journey with Haskell I'd likely have given up and not touched programming ever again. God forbid that the functional crowd gets their way. Most people are terrible at recursive thinking. That's why those languages have such a reputation for being difficult. The declarative languages are also a good starting point, but the most used one (SQL or spreadsheets) are somewhat orthogonal to what one tries to do with python. You need for loops. You need if statements. You can't just hope that they will get recursion.
- mr_toad 7y agoMany students aren’t going to want to learn a language that hardly anyone ever uses. Many of them will be making their choices with one eye on their employment prospects, and there are a lot more Python jobs out there than Haskell ones. https://xkcd.com/1312/ https://xkcd.com/1312/
- reuven 7y agoGood questions! I'm teaching Python because... well, because I teach Python, and this is my way of helping people who want to learn. I also believe that Python is a good first language for many people. Not everyone, but for a lot of people. It's not only relatively easy to learn, but it's practical. Many people want to learn Python because of their jobs.
- visarga 7y agodoes it say at what hour is the course?
- dfinninger 7y ago> Q: When does the course take place? For now, we're meeting at 10 a.m. Eastern on Fridays, via Zoom. Each session lasts for 1 hour, and is recorded. If you register for the course, you'll have unlimited access to all of the recordings. 7am, Pacific. My wife has shown a bit of interest but 7am is just too early in our household to get up and start leaning right away. Seems like it would be a good course though. She could still listen to the recordings, but being able to ask questions live would be more engaging.
- reuven 7y agoFinding a good hour that (a) fits my schedule and (b) fits the schedule for as many people as possible around the world was... challenging. I apologize for making it early for people on the West Coast, and hope that you can benefit from the recordings.
- webartifex 7y agoCool initiative. I will take a look at some of the sessions. Can you post a schedule when they will take place? I am in particular interested to see how much depth you expose the "non-programmers" to. Is it just an applied course? E.g., here is a function X that does Y. Or do you focus also on the implications in memory and, for example, Python's object model? Good luck. We need more non-programmers to learn to code. Not for coding's sake. Most of them won't become developers. But it allows academics from all kinds of disciplines to teach their students advanced stuff. I see programming just like most students independent of the major must take Calculus 101 or Statistics 101. BTW, I am the author of this introduction to Python (also for non-CS majors): https://github.com/webartifex/intro-to-python https://github.com/webartifex/intro-to-python I teach Python at a business school. Due to Corona, the campus was closed and I put all my lectures on YouTube: https://www.youtube.com/playlist?list=PL-2JV1G3J10lQ2xokyQowcRJI5jjNfW7f https://www.youtube.com/playlist?list=PL-2JV1G3J10lQ2xokyQow... Subscribe to my channel https://www.youtube.com/user/webartifex https://www.youtube.com/user/webartifex if you are interested in more Python applications in the field of business administration. I am new to YouTube and will post at most 2 meaningful videos a month. No monetization, no hidden product placements. See also this HN post from last week: https://news.ycombinator.com/item?id=22669084 https://news.ycombinator.com/item?id=22669084
- reuven 7y agoI'm running the course every Friday at 10 a.m. Eastern, in 1-hour segments. Recordings are available to anyone who signs up. So far, it has been lots of fun!
- danso 7y ago> Q. What do I need to install? > Just Python is enough. Other installation suggestions and support are available in the forum. Speaking as someone who has taught Python to non-programmers in classroom and workshop settings, this seems like far too vague an instruction. For many novice (including the instructor!), the installation and system setup is the most frustrating and confusing part of hands-on learning. With non-programmers, you can never assume a base level of computing understanding – this includes things like not knowing how to get into the command-line, or install a text editor, or even what filenames and file extensions are (I always have students enable display of file extensions at the start; usually it's off by default for most OSes). I would think you'd want to do this kind of thing having students use something like CoLab or PythonAnywhere. Sure, it's nice to run code from your own system, but that's not an immediate concern for most people trying to learn the basics.
- rafaelm 7y agoI think Thonny is perfect for this. It includes Python 3.7, has a simple debugger and is multi-platform. Not affiliated, just a happy user. https://thonny.org/ https://thonny.org/
- xapata 7y ago> Explains scopes. Highlighting variable occurrences reminds you that the same name doesn't always mean the same variable and helps spotting typos. Local variables are visually distinguished from globals. That'd be a good feature in any IDE.
- jliu70 7y agoYep, I agree with Thonny. It comes with Raspbien as well. Another beginner option which is quite similar to Thonny is Mu. https://codewith.mu https://codewith.mu
- totemandtoken 7y agoYeah, I teach python to elementary and middle schoolers. The first lesson is getting everything installed and maybe explaining the basics of how files work on computers. PythonAnywhere is a really good idea though, I should look into that...
- oarabbus_ 7y agoWhat does it mean to be a "non programmer" vs. a "programmer"? I don't mean "someone who doesn't know how to program" vs "someone who does". I mean the common trope of a (for example) midlevel data scientist or someone who knows how to use python and says "I'm not a programmer", yet knows more programming than most junior devs I know.
- reuven 7y agoThe course is aimed at people who have never programmed before. There are many participants who have, but they realize that I'm assuming they don't even know what a variable is, or that you need quotes around text to distinguish it from an identifier, etc. Session 1 was about basic input/printing. Session 2 was about "if" statements. Session 3 was about numbers. Session 4 will be the first of several talking about strings. My goal is to help people learn to program if they haven't done so already, or (especially) if they have been frustrated.
- quijoteuniv 7y agoCool! Thanks for doing the course!
- ducaale 7y agoI tend to recommend the free online course https://www.py4e.com/ https://www.py4e.com/ for people who want to learn python and programming in general. If they struggle with it, then https://www.codecademy.com/ https://www.codecademy.com/ is another good resource.
- terrycody 7y agobookmarked for later use
- reuven 7y agoSo this is what happens when I don't realize that my post on HN has gotten a lot of attention! Yikes... I'm going through the comments now and responding...