4 ms·
"Computer science is no more about computers than astronomy is about telescopes." (Edser Dijkstra) Computer science is the study of algorithms - what is descri
by primitivesuave 10y ago
"Computer science is no more about computers than astronomy is about telescopes." (Edser Dijkstra)
Computer science is the study of algorithms - what is described here may be best described as software engineering. As an educator who has been involved in computer science education for almost a decade, I find the code-centric approach described here to be counterproductive.
- catnaroek 10y agoAlgorithms are one big part of computer science, of course. But there's more than that. Computer science is also about abstraction: how to organize our programs so that they can be understood (not just tested!) with the minimum amount of intellectual effort possible. Dijkstra himself wrote a lot about this topic: https://www.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/EWD288.html https://www.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/E... https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD303.html https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/E... https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD393.html https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/E...
- primitivesuave 10y agoI absolutely agree with your point that abstraction is a fundamental idea of computer science, but I believe it still falls more in the conceptual realm of computer science than in the practical realm of software engineering. For example, if I were to describe abstraction to a student, I may first get them to imagine building a factory assembly line. Instead of thinking about the assembly line as a whole, I would encourage them to think about each stage of the assembly line, and how to test each individual machine separately. By abstracting each step of the solution and making it easy to verify its correctness, they can achieve the minimum intellectual effort in testing the entire solution as you described. Thank you for taking the time to add the EWD links, I'm sure others reading this thread will find them as enlightening as I do.
- throwaway729 10y agoIt's not counter-productive at all, as long as your goal is to teach Software Engineering. And every course of study in Computer Science should have at least a semester's worth of content on Software Engineering. But it's also important to remember that Software Engineering is not Computer Science. Also, a 4-year-long course of study in Software Engineering should definitely cover things aside from coding. Some Computer Science for sure, but also the basics of business, ethics, economics, politics, psychology, and so on.
- muyfine 10y agoMy favorite quote around this is from SICP's preface: Underlying our approach to this subject is our conviction that 'computer science' is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology -- the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of 'what is.' Computation provides a framework for dealing precisely with notions of 'how to.'
- sotojuan 10y agoAnd the quote that made me interested in CS, from the online lectures of the same book: "[As] opposed to other kinds of engineering, where the constraints on what you can build are the constraints of physical systems ... the constraints imposed in building large software systems are the limitations of our own minds."
- primitivesuave 10y agoThis poignant passage really stuck with me when I first picked up SICP in college. Thank you for reminding me of it! Time to peruse my bookshelf for other inspiring quotes.
- J5892 10y agoI'm not sure I'd be able to find a job if I told people I have a degree in procedural epistemology.
- majormajor 10y agoHow much do you have to know about using telescopes to become an astronomer? I don't know the answer to that question, but I recall that my introductory physics courses and labs focused a fair deal on the practical part of understanding how things worked in the world, not just talking about theory 100% of the time. (Though I don't know how either "computer science as pure science" or "software engineering as pure engineering" would actually work in the first place, though.)
- primitivesuave 10y agoI can't think of any instances where a computer science educator or course talks about theory 100% of the time. IMHO, a course that is pure theory can be quite boring. The key is to differentiate the role of the computer from the role of the scientist. A computer is just an efficient tool for making discoveries in computer science, but it hardly represents what computer science is all about. Similarly, a telescope is a tool for discovering the realities of the universe, just like a microscope is a tool for biological discoveries. Certainly we need physicists to deal with the practical problems that affect our day-to-day lives, but the most high-profile work in physics aims to explore the unknown. In physics this is the nature of the universe - in computer science, it is the nature of computation and its limitations.
- DrScump 10y agothat should be "Edsger Dijkstra"