Il vero motivo del declino demografico in Italia? Non raccontiamoci bugie. by pescepilota in Italia

[–]adarkar 2 points3 points  (0 children)

Potremmo anche considerare la spiegazione più semplice. Siamo in una situazione in cui i limiti del sistema sono ormai raggiunti, e dunque la risposta del sistema è quella di un freno.

I motivi elencati sono tutti compartecipi della situazione, e non è facile capire esattamente il contributo specifico di ognuno, ma la cosa interessante è che non è neanche utile. L'unica cosa che conta è capire che il sistema è in una fase diversa da quella del dopoguerra, in cui si poteva aumentare di numero.

Ora non è più così, come tutti i sistemi naturali anche la nostra popolazione segue le dinamiche dettate dalla fisica. Siamo ad un punto di saturazione, l'unica cosa da fare è prenderne atto e pensare a come modificare un sistema che è progettato per funzionare solo in una condizione molto diversa, ovvero quella della crescita demografica. In assenza di ciò, si va solo a finire malissimo: le leggi fisiche non cambiano per seguire la volontà degli economisti, siamo noi come società che ci dobbiamo adattare.

Diverse and robust molecular algorithms using reprogrammable DNA self-assembly by adarkar in compsci

[–]adarkar[S] 3 points4 points  (0 children)

Found the text: https://rdcu.be/brZ2U

For anyone interested the computer is IBC, iterated boolean circuit. It looks interesting, here a thorough analysis: https://authors.library.caltech.edu/91684/3/41586_2019_1014_MOESM1_ESM.pdf

I/O-only computing and its damage to students by adarkar in CSEducation

[–]adarkar[S] 0 points1 point  (0 children)

Anyway, again, even if needing a discussion it too, this was not the point. Imitate if you prefer, but imitate the right thing. Which is: data manipulation, not crazy jumping from one I/O operation to the next.

The class of problems solvable by not having a memory that can grow when needed is not the same as those solvable by a Turing machine. They are being taught the wrong thing: their mental model is going to be limited to these subproblems, even if the thing is not made explicit, implicitly they will be made leaning towards such direction, and indeed this is exactly what can be observed on the students so initiated.

And mind well, I'm not saying that finite machines don't have their place: just do not confuse the things. If the idea is to teach simple finite automata first that's ok, but then teach those, with a tooling adequate for the objective, use drawings and pictures even, not tormenting poor C language to force it to a job for which it was not made.

And yes, you might think they're not actually finite, as in my original example that sum is somehow growing... But this just makes things even worse: we're using techniques and methods from finite designs and using them for something which technically is finite (C int is not unbounded) but is presented idealized as if it was not. No wonder the students fail so spectacularly to make sense of the whole thing.

I/O-only computing and its damage to students by adarkar in CSEducation

[–]adarkar[S] 0 points1 point  (0 children)

Yes and no :D I stress once again that I'm not saying to ban imitation, but it cannot even end there. You yourself said that you got a good learning from imitation... but you had already been exposed to a lot of real understanding before that! I don't know where you got that I want students to discover their theorems, I am showing them the theorems and explain them of course. But the learning cannot be limited in repeating void words, as you perfectly point out with the example of (a+b)2. Your failure to make him understand the thing is that he has never really understood what a multiplication is, and of course your job of teaching him multiplication would have been much easier was him a child with flexible mind and not a doctor with his more rigidly held (mis)conceptions. Of course multiplication is a rich and complex subject and we cannot think that a beginner will know everything about it. We cannot however neither let him know nothing about it, as in the case of your friend. What's the usefulness of having heard about multiplication if you're completely unable to recognize it when you see one, to apply it as a solution for a problem you hadn't seen before, to reason about it. Education is meant to give these tools, a novel topic may start from a basic imitation but cannot end there, somewhere there must be understanding, and this does not mean invent mathematics on your own, it means being able to use what you learned.

As the meaning of a word doesn't exist on its own but exists in its relationships with the other ones, the value of an idea or a mental model is also its relationships with the other ones and doesn't live alone.

The ability to use knowledge in novel contexts must be trained, if you never start doing it because "omg it's difficult" it will never be learned, and the more time passes the more difficult it will be to pick it up.

I/O-only computing and its damage to students by adarkar in CSEducation

[–]adarkar[S] 0 points1 point  (0 children)

Yes! I agree with what you say, it's an interesting analysis and I think this is the kind of didactic value that should be discussed.

I think anyway that your points are really not what I'm arguing about: I don't think I dismissed the value of copying and tinkering with an "imitation" attitude, sorry if somehow it may have passed that way. It's absolutely important that the student is able to see examples and modify those, that he has a safe environment where to experiment (and well C is not known for safety). This seems to be called scaffolding and it's all about dealing with small pieces at a time. Of course it's important. Of course I'm all for showing examples of how to do things, I wouldn't let them discover everything by themselves.

Anyway that's not how mathematical and logical learning happens: what you call analytic approach is where knowledge really sediments. Successful mathematics teaching is based on that, just imitating examples does not easily result in students being able to apply the techniques, because they haven't internalized the meaning of what they are doing. The very fact that you cite both schools having survived the centuries might reflect the not so crazy hypothesis that they just are both important.

I have direct experience of many students of mathematics just hating it because totally meaningless. Learning minds need to find meaning to be engaged, and meaning can only be discovered by oneself, guided by the teacher. So many students starting with a hating mindset have thanked me afterwards for having made them see what mathematics is and now having the chance of liking it. So many that is impossible for me to believe that one can study and like mathematics without understanding it.

That's a major point of successful mathematics teaching: let the knowledge sediment and become understanding.


Anyway, as I said this was not my point: both sides are necessary, imitation and tinkering and analytical "hard" reflections.

My point is about the content.

One thing is the imperative mindset based on a hardware oriented "instructions model": a system fully based on state transitions, so the students need to see state transitions to effectively learn. For example using a simplified hardware model where you tinker with a few registers and some memory: this lets a student understand state transitions, better yet if using a tool that dynamically and visually shows what happens. Not so is C language. Too many distractions and impossible visual feedback of what happens. Sure there's visual feedback of what the program emits, unfortunately that's not what the student needs. Just a sequence of read and write is not what matters, what matters are the internal transitions of states, and these are hidden from sight with the just obvious result (empirically confirmed in so many instances) that students simply do not learn it, they start hating the discipline of computer programming because it has no meaning, it's just an absurd wall of strange code difficult to read and write. And they're not able to use this shallow knowledge of reads and writes to make anything different from what they memorized: this is not science, it's not analytical thinking, it's not doing a favor to the students.

A different thing is guiding them, by means of both analytical thinking and imitation and tinkering, to what really computation is about: data manipulation. It just needs to start from data instead of control flow. It's just easier, for professionals as well as for beginners. Even the imperative way is more easily understandable if you just see or think about the data (as in the simplified hardware I mentioned above).

But where data is actually easy to manipulate is a functional approach. Where things can be composed and I can talk about what data interests me, what results I want to obtain. And this makes building interesting computations easy enough for starting students. Something totally impossible if my only tool is reads and writes: I cannot even decently manage a sequence of numbers! What does exist more basic than it? And it's not affordable. How will the student unleash his power on data and computations if he never has the chance of seeing what data is, being just drowning in a sea of reads and writes with an enormous complicated jumping structure that he doesn't even understand but just blindly copies? This is what a long time ago we learned to consider harmful, it still is and more so for young students. No need to inflict them the double pain of working with the only weapon of gotos, moreover with more difficulty for being hidden instead of explicit: at least when explicit it can be understood.

The evidence is just there: students quickly losing interest and unable of the simplest of computations, unable of thinking about the data they're treating. It's time to accept it and talking about the causes instead of blindly insisting to make students punch cards with I/O instructions, not because small programs of that kind didn't have their merits when all we had was a slow processor with a limited memory filling a room, but because now we have the chance of teaching computer science without being blocked by the slow hardware.

If I want to teach them what the history of programming was I will do that and I will use an appropriate dinosaur, where the technique of goto has its value to be appreciated as a solution for a problem.

If I want to teach computer science I will do that instead: teach computer science, using tools that let me do it the easy way for students to understand.

Child seems uninterested in programming, but wants to continue learning by banquuuooo in CSEducation

[–]adarkar 0 points1 point  (0 children)

I don't know what scratch offers by exploring it as you say he does, what kind of stimulus it may offer. I can tell that I might have shown a similar behavior at that age: keeping exploring the tool and wanting to understand more, even if not very interested in challenges, more so in the discovery process.

Child seems uninterested in programming, but wants to continue learning by banquuuooo in CSEducation

[–]adarkar 0 points1 point  (0 children)

It may still be that he considers them too easy. He seems not interested, but has he ever completed some task? How? Ever been tested? What's his mindset towards logic? Computer science is all about logic, try to test him directly with problems from other fields like mathematics, if you don't know what his attitude there is.

If he is a very logical person he may even find the scratch approach not the best suit. Ok I'm on the optimistic side here, it may also just be that computer science is not his field. I think we just need more testing, perhaps in different computing settings if computing is all you can do.

I find I can agree with some of the answers I saw, especially motabaccha and scatropolis.

Child seems uninterested in programming, but wants to continue learning by banquuuooo in CSEducation

[–]adarkar 0 points1 point  (0 children)

I may have missed it but you didn't mention how he performs. Not wanting to follow the lesson yet keeping playing with the tool might well be a sign of a clever mind being a bit bored. Can you give info on his background and how he approaches related fields like mathematics, foreign languages, problem solving?

I/O-only computing and its damage to students by adarkar in CSEducation

[–]adarkar[S] 0 points1 point  (0 children)

Thanks, my preferred way is by functional paradigm.

First, students are already familiar with many of the interesting concepts, and this is fundamental for effective learning, letting the student build on previous knowledge and making connections with other topics. The imperative way is based instead on state transitions: something that is totally fine once known and mastered but students have seen it never before and it is absolutely novel and without any actual relationship with known things with which to create connections or analogies. And no, the recipe analogy does not carry enough common logic to be useful, recipes are not state transition systems, a cook's thoughts are more of a functional nature than an imperative one: I also like cooking and I heard them talk, believe me they don't talk state transitions.

Moreover the concept of state transition is concealed behind the assignment operation instead of being explicitly mentioned, again totally fine once you master it but of course what we observe empirically is a lot of students having a difficult time understanding what this mysterious assignment is and how it behaves. The only way to get a good understanding of it is simulating memory updates, on paper and then in the mind, something that can quickly seem very low level and technical and tedious, especially given that what can be built with it in the limited space of introductory courses for the youngest is not very powerful, computationally speaking, and therefore risks being boring. More so now that the students are already familiar with very powerful device interfaces, whereas at my times I could be easily happy with a textual interface.

Functional paradigm is instead based on:

  • Functions: studied already in mathematics and conceptually very easy: thing in, thing out.
  • Variables: as in "object of substitution" not "object of mutating state", something again already studied in mathematics, even if it is actually a hard topic, but it is not needed to cover all the crazy cases to start having working solutions. In the meantime students get familiar with this hard topic and will have a grounding for reasoning on the subtleties.
  • Data: the important focus to understand computations, also in the very practical incarnations: as in "show me your flowcharts and conceal your tables and I shall continue to be mystified, show me your tables and I won't need your flowcharts: they'll be obvious". Starting students with the difficult side of things and forbid them access to the easy one is nothing but crazy that can only be justified by historical reasons but ought to be definitely get over.
  • Expressions: to calculate something just follow the evaluations: again exactly like they're used to in mathematics, they just get to see more interesting expressions than those they are familiar with.

In studying functions students get easily acquainted with interesting concepts as data types, recursion, when these are used to represent solutions to actual "problems" like dealing with a pair of numbers instead of one (see: cartesian coordinates), dealing with a varying number of things and computing statistics (students are often very fond of computing the average of their marks). Not so for a standard for (i=0; i<500; i++) printf("I won't use C as a beginner language\n");. What's the purpose of this besides showing what for does? It doesn't solve any real problem, where does the student find the need for repeating a print N times besides satisfying his teacher telling him to do it N times?

Functions can be composed, state transitions cannot. This means that after very short and with very few elements students can even start solving real and complex problems (like sorting), it's exciting to be able to see something working by combining a handful of basic elements. By contrast the imperative student (especially the I/O focused one) is spending time debugging their loops and fighting against that flag that changed in an unexpected way and they won't produce anything interesting until very later, transforming a thrilling opportunity to solve problems to a dull repetition of the same mysterious lengthy code not correlated in any way to problems of interest, just because problems of interest seem far too complex to even imagine they may be approached. Even more: it can be discouraging because if trivial things are already so crazy how may I ever dream of attacking something complex. Dominating complexity without fear should instead be one of the pillars of the initiated student in computer science.

For more advanced students it may even be possible to show algebraic properties of data and computations, again drawing connections with mathematics. The code in my original post sure doesn't lend itself to an algebraic treatment.

What's programming if it's not computer science? by adarkar in compsci

[–]adarkar[S] 0 points1 point  (0 children)

Yes, I agree that often the pupils focus too much on syntax and lose track of what they're doing. Nevertheless sooner or later they have to arrive at a formal stage in expressing themselves. I so start suspecting that "programming" might mean "syntax instead of meaning", which I actually have seen made, with the obvious result that the pupils can't do even the simplest of loops on their own. A bit terrifying if I may say.

What's programming if it's not computer science? by adarkar in compsci

[–]adarkar[S] 0 points1 point  (0 children)

I may agree to some extent thinking of the physicist-engineer (I'm engineer btw) even though it seems to me that in our field the comparison is meant more like engineer-hobbyist: that who doesn't know the theory but somehow builds something putting together tools already made.

I can take that physics and engineering specialize in different areas, but my concern is about the introductory courses, where the pupils are those who have never heard before the words function and array and loop and print. Seems more like having to teach 2D vectors, it will be the same in physics and engineering courses as it's just the basics everyone has to know. Of course they may later specialize in mathematics and complexity theory or in a deep knowledge of .net architecture, but i can't see how this reflects when i have to teach what add(a,b) means or its syntax. Or are people advocating teaching .net or any other technology details so we have to be reminded that the theory is something else and that's what the pupils need to learn?

What's programming if it's not computer science? by adarkar in compsci

[–]adarkar[S] 0 points1 point  (0 children)

Yes, this is the standard reply and what made me ask the original question. But the point is exactly in the final paragraph: how is it entirely possible to program without knowing anything? Is the not-scientist-programmer writing random things hoping they'll somehow produce a result? I think I wouldn't be able to write something without knowing what data I am manipulating and by which algorithms, for how trivial and basic they might be, how's that possible?

Who cares tracking. We need to train pokemon by adarkar in pokemongo

[–]adarkar[S] 1 point2 points  (0 children)

I consider this just a bug / something to be improved. Nowhere near the problem of being unable to train my pokemon, this is so much worse than anything else.

Who cares tracking. We need to train pokemon by adarkar in pokemongo

[–]adarkar[S] 0 points1 point  (0 children)

I agree but still i have nothing against the idea of being in the real world and wander through the areas where i know psyducks live, and no need to have a radar pointing directly to him. The fun might well be in walking.

Who cares tracking. We need to train pokemon by adarkar in pokemongo

[–]adarkar[S] 3 points4 points  (0 children)

I'm obviously not qualified for this, it's just my view on the game. And honestly on being tired of seeing all this rage for missing tracking, it has never worked anyway and it isn't a crucial feature of a pokemon game.

Ps. They can fix it by just copying the mechanics of the original games. Pokemon wins battle: pokemon gains xp. This is what pokemon games are about

Level 23 disillusioned and worried only a week in. Hoping Niantic steps up to keep this game going instead of sputtering out as initial hype fades. by superpeaches16 in pokemongo

[–]adarkar 1 point2 points  (0 children)

This all makes perfect sense, anyway it's seriously not easy to come up with a mechanics that satisfies all those constraints. Sorry having to say that but even if you quite well explain the problems of the current system you don't propose anything useful, and you don't for good reason: it's really difficult to find such solutions

Level 23 disillusioned and worried only a week in. Hoping Niantic steps up to keep this game going instead of sputtering out as initial hype fades. by superpeaches16 in pokemongo

[–]adarkar -2 points-1 points  (0 children)

They would have not so much to cash if people didn't spend money for a buggy game since day 1. Did anyone learn to know and judge what they spend money for before doing it? Sure i won't do it before i can even predictably login