3 ms·
The modeling that programming is about is careful and very precise expression of concepts. It's like that saying goes - "if you want to really understand someth
by TuringTest 12y ago
The modeling that programming is about is careful and very precise expression of concepts. It's like that saying goes - "if you want to really understand something, teach it to someone; but if you want to really, really comprehend it, teach a computer to do it".
This is all well and true for scientific modelling, where you want to achieve an exact depiction of how nature works. But for more social undertakes I believe that level of exactness is overkill and brings unnecessary complexity.
After all, society members have been able to collaborate in numerous projects that don't need that level of accuracy, well before (and after) the widespread adoption of scientific reasoning. Most social activities simply don't need such precision and can advance with an amount of ambiguity and implicit knowledge, with which a computer would choke.
In such environments, people could still benefit from modelling through computers in a way focused not in precision, but in semi-automation of routine tasks.
Where computer programs need that every possible case is taken into account in the model and handled with precission, a system that handled well the common cases and delegated outliers and exceptions to human supervision could greatly improve those social enterprises without requiring that those involved learn how to express their thoughts with scientific meticulousness.
Alas, modern programming languages are not adequate to support that semi-structured way to modelling, but I think we are closer than ever to build a tool that can allow end users to build domain-specific abstractions without learning to create imperative programs or learn how computers work internally - the ideas to make this happen are floating around with strength for some time.
- TeMPOraL 12y ago> This is all well and true for scientific modelling, where you want to achieve an exact depiction of how nature works. But for more social undertakes I believe that level of exactness is overkill and brings unnecessary complexity. (...) Most social activities simply don't need such precision and can advance with an amount of ambiguity and implicit knowledge, with which a computer would choke. This reminds me of a common misconception that computers are about precision as opposed to ambiguity. It's not true - computers handle ambiguity well, but force you to be precise about what is ambiguous and in what way ;). We've invented probability theory to deal with uncertainity in a proper manner. Of course, most social activities work fine with handwaving anything we're not sure or don't understand - but well, humans do have this skill and it's not going away. What programming does is it complements that skill with an ability to be precise about uncertainity when you need to. > Alas, modern programming languages are not adequate to support that semi-structured way to modelling, but I think we are closer than ever to build a tool that can allow end users to build domain-specific abstractions without learning to create imperative programs or learn how computers work internally - the ideas to make this happen are floating around with strength for some time. I agree, though I don't think we can get there without teaching people the essence of programming. Syntax peculiarities don't really matter, but the basic ideas are so fundamental, they're probably more fundamental to reality than physics. I believe you need to have an intuitive grasp on computation to be effective even with that semi-structured modelling - because not everything we know from today's programming is working around machine-imposed constraints; some of it is actually touching the very fabric of reality.
- TuringTest 12y agoI agree, though I don't think we can get there without teaching people the essence of programming. That's probably true. Though what is "the essence of programming" IMHO is quite different from what most developers think when they talk about "teaching programming" to the general public; it should have little to do with how to represent computations in available computer hardware, and everything to do with building domain-specific languages that represent interesting concepts - for people who don't like computers nor want to understand how they're built. As others have pointed out in this thread, what is truly essential is the nature of modelling, i.e. building abstractions from constituent parts, either in bottom-up or top-down fashion. And as the original article says, an essential property is being able to build working parts of the system without needing to complete the whole of it before execution. I believe you need to have an intuitive grasp on computation to be effective even with that semi-structured modelling True, but again what developers usually think of computation (building a tree-like program that is executed at runtime with a specific dataset) is not what is needed by the general public. Research in End-User Development, watching real people use experimental IDEs for non-programmers, have found that systems based on rewrite rules are easy to grasp. Also image-based environments like Smalltalk and "live" programming -where the whole system is seen as a single collection of data and always-running code- that reacts to changes instantly is also simpler to understand than the standard write-compile-execute cycle, and better adapted to exploratory programming.
- TeMPOraL 12y agoI agree with everything you wrote. Those essential skills have little to do with what we as programmers do every day at work. Also people seem to rediscover them in many different ways - look at things that are made in Minecraft or Dwarf Fortress, for example. There's lot of application of those concepts in something that doesn't involve writing code directly. > Also image-based environments like Smalltalk and "live" programming -where the whole system is seen as a single collection of data and always-running code- that reacts to changes instantly is also simpler to understand than the standard write-compile-execute cycle, and better adapted to exploratory programming. As someone in love with Lisp, I endorse this message.