To what reason, and to what extent, should we extend the border of the software?

发布于 2024-01-03  1232 次阅读


I was noticed that one of my friends recently wrote an article discussing about how to treat the software development, quite a coincidence that I've been comtemplating to do some more or less the same things, so, on y va?

Regarding the education of the computer science, I once read an answer on a Q&A site about "how to learn compiler construction". Most people answer with the typical recommendation: Compilers: Principles, Techniques & Tools, which is also the book that inspired me back to those days, however, in that answer there was a different voice: an anwser demanded the poster to read SICP (i.e. Structural interpretation of Computer Programs), and says this book is exactly for the beginner at such areas including compiler construction or more general computer science. I have to confess that by that time I was angered, and assured that by doing such things will only lead the beginners astray, because it is too abstract and meanwhile it's hard to understand intuitively, such an overcomplicated concept intoduction will twist the mind of those beginners.

And, perhaps, you may ask, as such a person that is passionate on the PLT and related mathematics, have you changed your mind? Do you now agree that Racket/LISP the best language for introducing newbies to the field of computer science?

No, my friend, I respectifully refuse. In fact, even now I know little LISP/Racket.

That must means you object your friend's opinion!

No, my friend, I respectifully refuse. In fact, I must be one of the firmest supporter. But I have to clarify some unfortunate facts.

First, introducing SICP to a first-year undergraduate student is hard, it's kinda like introducing C++ to a person that doesn't know no shit about programming before, he will learn, honestly, he will learn, but only its mere surface, the real iceberg still lies under. The real things the author wants to convey is impossible for most beginnners, I kindly invite the reader to pause and reflect, especially when you are a person that have a considerable knowledge for the theory of computation, aren't there so many new things you learned the second time you read the book? Without some mathematical preliminaries, it is hard to learn such books effectively. What do you think of the Kleene Closure at the first glance, can you treat it as a free monoid and connect it to other part of the mathematics and by doing so, connect (or model) the automata theory with classical parts like algebra? Or some more advanced concepts like categories? What do you think about types then? Does "Types are higher groupoids" mean anything to you, do you have had a even slightest idea that connects the topology and logic? despite of the fact that the connection between these two fields have been existed for long?

Second, you may ask, why don't we just learn math first, well, techniquely possible but pratically, it's rather impratical: (, first, the learning process is not sequatial but parallel, meaning in most times this two courses with be taught à la fois, moreover, that kind of math is also very abstract, the theory of computation is part of mathematical logic which is built upon a rigorous yet abstract system of string manipulation (the 101 course may not introduce those rigorous logical notations and concepts, but still the level of abstraction is a bit too high for first-year undergrads), which is quite the opposite of almost all the mathematics we learned in our senior school (no one have ever thought we really need to deal with the equal sign in 1+1=2

In a system with a built-in sense of computation? perhaps? does 1+1=2 equals intentionally which means the left side computes to the right side and they are basically the same thing with different syntax, or equals extensionally, which means for all functions (including propositional functions, that is to say) yields the same results, do we have anything to witness such equalities so that they are nolonger metatheoretical results? which means they equals propositionally, oh but wait, isn't "equality" such a simple concept that we have learned back to the very years when we are still in our preschool? Why do we have to introduce such mysterious terms? What is the relation between propositional equality and extensional equality? The former witnesses the latter, perhaps? And what about the definitional equality and extensional equality? The former clearly implies the latter because former equality states fundamentally two same things, that they are interpreted to the same semantic interpretation, but what about the reverse direction?

or how can we generalize the action of replacing a character with another character to the concept of a computer: that is, capable of doing arithmetic calculations, let alone the difficulty of things like theorem proving!). As a first year undergrad, jumping from evaluating the trigonometric functions to the axioms and theorems is somewhat a big leap, I'm not saying that the latter is really harder than the former, but the way of thinking is way too far.

In countless time of similar discussions, at this point, I were about to make a little digression on the importance of self-study, but this is certainly already mentioned in my friend's post, so I will talk about something different: The education is kinda tricky, think of it, why is our society be filled with the so called "software engineers" (no offense to the real software engineers, here I refer to those knows nothing except java, asking them anything about java's darkest secrets and they shall answer you with a marvelous fluency, but their real enginneering capability is so terrible and what they have memorized, they don't know the reason.). Because our education and the job require them to do so! I can't blame such persons, because I do feel like that if they were properly educated, they should have accepted the beauty and elegancy of the theoretical computer science (Booing: Arrogance!). But I do believe this is the fact, the reason is just that the demands of society do not need the understanding of theoretical foundations, you just need to know how to use it. And that why so many people say that "languages are just tools!", it's not wrong, but the way you view matters (That's why I say "I do not agree with the famous slogan: 'for languages, there is no good and bad, there is only suit or not.'")

Again, in countless times, I cast my contempt on those programmers, engineers, and undergrads, that they are either too silly to learn the even simplest concepts (complaining how hard is the undergraduate-level compiler construction), or they are filled with the terrible ignorance so that they don't see the importances of the theoretical foundations of the things on which they are working, and I used to like to share and make fun on these cases with my friends, I have to admit that, this kind of idea is originated purely from my arrogance and ego, once when I, like all the old days, sharing these news and posts with my friends in the chat, my friend responded me with a quote that he saw on a Q&A website: "I started to consider that, not every IT employees or students are so eager to acquire these knowledges just like I do, these persons, their intentions may vary, some of them seeks knowledge, and some of them just want to make a living, their interests stay elsewhere, and I cannot judge them simply from my own perspective." I was really persuated, because I am exactly the kind of person to whom the quote refers. Here I'd like to throw a question to the readers: What should we criticise? These persons? The outdated technologies, methodologies, and educations? I think the answer would be none, this is a pathetic fact that we have to accept: criticizing anyone of them separately is rather inappropriate, yet criticizing them all together seems too cynical. Yes, it is really, really pathetic that most of the IT workers don't care about the essence of this vast area, but only for us —— this is not ego, this is specialization, just like a lot programmers can't understand why those illustrators protest against AI generated contents, I believe those illustrators share the same attitude toward these programmers as how we think of the "current industry". So here and now, although with the same belief, I derived something different compared to that of my friend's: It is a pathetic story, and we have to tolerate it, and no one should be blamed. (除了他妈的现在还在用VC 6.0和VB的脑残高中微机课和大学课程,遇见这种上面说的全部作废)

Jusqu'à ce que le mort nous sépare.
最后更新于 2024-01-03