4 ms·
The problem here isn't that there's two perspectives (in fact, there are many more than 'two cultures of programming'), it is that you tried to teach people pro
by nxc18 10y ago
The problem here isn't that there's two perspectives (in fact, there are many more than 'two cultures of programming'), it is that you tried to teach people programming by bombarding them with 50 new tools (git, LaTEX, shells, piping, etc). Yes, those are extremely useful tools for engineers and serious programmers. However, they really aren't necessary or core to programming so much as they are core to engineering, sysadmin-ing, typesetting, etc. To be honest, using LaTEX for your resume is just a bad decision unless you happen to be very good at it and very incompetent with Word. Not only was the author teaching them irrelevant tools, he was stretching them to bizarre use-cases that conflict with how any productive human would approach an everyday task.
The essence of programming that needs to be taught is how to think about problems. Those are harder to grasp, but really they are just different ways of thinking. Programmatic thinking is clearly applicable to many things and enriches your life beyond just programming. Throwing tools at people is only important after you've learned how to reason about problems and begin tackling them.
Like 1t1337 said, HTML is a good place to start for the basic concept of writing plaintext to control the computer. Beyond that, Python is great for teaching programming as it has an easy, intuitive (relative) syntax and supports many concepts without being too demanding re: types.
Don't forget that people new to programming are really new to programming. Just the concepts of int, double, and string can be daunting because people just don't think that way.
The biggest challenge I've seen in teaching/coaching new programmers is the concept of assignment vs. equality and how that interacts with variables. Even very smart (young) math majors can get very caught up on the following:
number = 5
number = 6
In math (as everyday people understand it), that would clearly be incorrect. I suspect for math-oriented students, functional languages would be a better place to start. I personally learned about programming variables before algebra variables, so my experience was the opposite.
I truly believe an excellent introduction to programming course really doesn't even require a computer to be involved, although of course when used correctly computers and live demos add a lot of value. Rather, an excellent course will teach the concepts (variable, typing, what memory is, functions, recursion, iteration, and turning real-world problems into computable problems, and so on) which are completely tool agnostic.
- ScottBurson 10y agoYes, the use of bare "=" for assignment is one of the Great Mistakes of Computing, right up there with null references and zero-terminated strings. There have certainly been languages that have used other operators for assignment, such as ":=" or my own favorite, "<-", but somehow they have never caught on. "=" was good enough for Fortran in 1956, by god -- it's still good enough 60 years later!
- na85 10y ago>...my own favorite, "<-", but somehow they have never caught on. No doubt because "<-" is two characters and requires the shift key, whereas "=" is only one, unshifted character.
- nxc18 10y agoOne more concept that I've seen people struggle with is the idea that programs/code don't convey meaning to computers - just behaviors. For example, new students struggle with the idea that variable names can be changed at will. There's nothing special about a variable named 'personName' - it could be a street address, a function reference, or anything else and the computer just doesn't care. The idea that there is no such thing as intent in the world of computing can be difficult to grasp. This is closely related with the concept that programs are just data. There are ways to teach this though - I personally love the examples of the programming languages where a bitmap is read, or where only whitespace characters are allowed. It can break students' conception that variable names have any meaning to the computer.
- Thriptic 10y ago> The problem here isn't that there's two perspectives (in fact, there are many more than 'two cultures of programming'), it is that you tried to teach people programming by bombarding them with 50 new tools (git, LaTEX, shells, piping, etc). Yes, those are extremely useful tools for engineers and serious programmers. However, they really aren't necessary or core to programming so much as they are core to engineering, sysadmin-ing, typesetting, etc. Yes and no. I agree that complex tooling should be kept to a minimum. I recently help run a small intro to programming bootcamp for my bio / bio E lab with another developer and we had great success using python on JupyterHub as our teaching tool. We were also able to introduce git via the GUI in our final session and people picked up the basics pretty quickly. Keeping things as simple as possible definitely helps with learning. With that being said, we still had a lot of people questioning why you would want to use python over excel for data analysis, people asking why you would use git over dropbox, and just general confusion over why best practices matter. I think part of the problem is that it's hard to motivate people to do more work than they have to until they suffer and then see the light: using python is more time consuming than using excel; using git is harder than using dropbox; employing best practices is harder than not employing best practices in the short term. For example, I didn't understand why source control mattered until I started collaborating on projects and got lost when changes were applied. I didn't understand why unit testing mattered until I started writing larger programs and getting owned by bugs etc.