В программировании одна из самых интересных ситуаций — это когда программа даёт тебе неожиданный результат. Не в научном смысле, как если бы ты построил модель и запустил симуляцию, не зная чего и ждать — а скорее в смысле хитрого бага, когда ты привычно ждал чего-то понятного, и программу-то запустил вообще просто для успокоения, промежуточно. А тут бац — вместо спящего котика на экране двенадцать собак, да ещё и у троих из них не хватает лап, а у одной — шея как у жирафа.
В таких ситуациях включается восхищённый математик — та субличность, которой интересно понять, как же так получилось? И ты разматываешь код, и выясняешь, где именно ты "не так выразился". И когда понимаешь, если ситуация нетривиальна — это тебя обогащает. Обогащает именно ошибка — безошибочность никогда не учит ничему. Безошибочность, в некотором роде — есть интеллектуальная смерть, а процесс совершения ошибок — и есть суть жизни.
Самый простой пример — частая проблема новичков (да и не только новичков, просто не-новичков уже не штырит), путающих в Си-подобных языках присваивание = и сравнение == (а в JavaScript — ещё и сравнение с автоматическим приведением типов == и без такового ===).
a = 5
if (a = 6) alert("It can never be true!") // but it totally will
Joel Spolsky назвал бы то, с чем сталкивается здесь программист, протекающей абстракцией (вероятно, простейшей и самой поверхностной). Отладка — это, пожалуй, основное занятие программиста (написание работоспособного кода — это просто очень удачная отладка), поэтому стремление выяснять почему именно оно так работает, забираться глубже по иерархии абстракций, докапываться до сути — в принципе, является неизбежной профдеформацией. Не все, конечно, деформируются в равной мере — есть куча нюансов.
Но всем нам довольно трудно оказывается понять, что вообще-то у человека может совершенно не быть подобной привычки в мышлении. Что идея о детерменированности результата, например, вообще не звонит ни в один колокольчик в его голове. И что возможно он совершенно прав при этом.
В таких ситуациях включается восхищённый математик — та субличность, которой интересно понять, как же так получилось? И ты разматываешь код, и выясняешь, где именно ты "не так выразился". И когда понимаешь, если ситуация нетривиальна — это тебя обогащает. Обогащает именно ошибка — безошибочность никогда не учит ничему. Безошибочность, в некотором роде — есть интеллектуальная смерть, а процесс совершения ошибок — и есть суть жизни.
Самый простой пример — частая проблема новичков (да и не только новичков, просто не-новичков уже не штырит), путающих в Си-подобных языках присваивание = и сравнение == (а в JavaScript — ещё и сравнение с автоматическим приведением типов == и без такового ===).
a = 5
if (a = 6) alert("It can never be true!") // but it totally will
Joel Spolsky назвал бы то, с чем сталкивается здесь программист, протекающей абстракцией (вероятно, простейшей и самой поверхностной). Отладка — это, пожалуй, основное занятие программиста (написание работоспособного кода — это просто очень удачная отладка), поэтому стремление выяснять почему именно оно так работает, забираться глубже по иерархии абстракций, докапываться до сути — в принципе, является неизбежной профдеформацией. Не все, конечно, деформируются в равной мере — есть куча нюансов.
Но всем нам довольно трудно оказывается понять, что вообще-то у человека может совершенно не быть подобной привычки в мышлении. Что идея о детерменированности результата, например, вообще не звонит ни в один колокольчик в его голове. И что возможно он совершенно прав при этом.
In programming, one of the most interesting situations is when the program gives you an unexpected result. Not in a scientific sense, as if you built a model and started a simulation, not knowing what to expect - but rather in the sense of a tricky bug, when you habitually waited for something understandable, and you started the program in general just to calm, in between. And then bam - instead of a sleeping cat on the screen there are twelve dogs, and even three of them do not have paws, and one of them has a neck like a giraffe.
In such situations, an admired mathematician is included - that subpersonality that is interested in understanding how it happened? And you unwind the code, and find out exactly where you are "not so put it." And when you understand, if the situation is nontrivial, it enriches you. It is the error that enriches - error always teaches nothing. Infallibility, in a way, is intellectual death, and the process of making mistakes is the essence of life.
The simplest example is the frequent problem of beginners (and not just beginners, just don’t pin non-beginners anymore) who confuse assignment = and comparison == in C-like languages (and in JavaScript there is also a comparison with automatic type casting == and without it ===).
a = 5
if (a = 6) alert ("It can never be true!") // but it totally will
Joel Spolsky would call what a programmer faces here a flowing abstraction (probably the simplest and most superficial). Debugging is perhaps the main occupation of the programmer (writing a workable code is just a very successful debugging), so the desire to find out why it works this way, to go deeper into the hierarchy of abstractions, to get to the bottom - in principle, is an unavoidable professional deformation. Not all, of course, are deformed equally - there are a bunch of nuances.
But all of us find it rather difficult to understand that, in fact, a person may not have at all such a habit of thinking. What is the idea of the determinacy of the result, for example, does not ring a single bell in his head at all. And that perhaps he is absolutely right in doing so.
In such situations, an admired mathematician is included - that subpersonality that is interested in understanding how it happened? And you unwind the code, and find out exactly where you are "not so put it." And when you understand, if the situation is nontrivial, it enriches you. It is the error that enriches - error always teaches nothing. Infallibility, in a way, is intellectual death, and the process of making mistakes is the essence of life.
The simplest example is the frequent problem of beginners (and not just beginners, just don’t pin non-beginners anymore) who confuse assignment = and comparison == in C-like languages (and in JavaScript there is also a comparison with automatic type casting == and without it ===).
a = 5
if (a = 6) alert ("It can never be true!") // but it totally will
Joel Spolsky would call what a programmer faces here a flowing abstraction (probably the simplest and most superficial). Debugging is perhaps the main occupation of the programmer (writing a workable code is just a very successful debugging), so the desire to find out why it works this way, to go deeper into the hierarchy of abstractions, to get to the bottom - in principle, is an unavoidable professional deformation. Not all, of course, are deformed equally - there are a bunch of nuances.
But all of us find it rather difficult to understand that, in fact, a person may not have at all such a habit of thinking. What is the idea of the determinacy of the result, for example, does not ring a single bell in his head at all. And that perhaps he is absolutely right in doing so.
У записи 11 лайков,
0 репостов,
560 просмотров.
0 репостов,
560 просмотров.
Эту запись оставил(а) на своей стене Key-G B-Tee