имя, прозвище, кличка или что-то в этом роде. (_glav_) wrote,
имя, прозвище, кличка или что-то в этом роде.
_glav_

Categories:

Язык определяет сознание

Довелось мне поддерживать некоторый код на Python. Которого я, в отличие от C-семейства, не знаю, так что заодно и подучился немного. Код большой и солидный, выполняет нетривиальные задачи. При этом он достаточно структурированный и аккуратно написанный, - настолько, что я бы и сам так писал, если бы писал его с нуля(*).

По другому вопросу обсуждал с автором этого кода, как Excel обрабатывает числа. Конкретный вопрос зашёл за очень маленькую величину, порядка 1E-10, которая считалась разными способами в Excel, и результатом было два разных числа. Я навскидку посмотрел, в какой именно позиции эти числа начинают различаться, - оказалась 17я цифра после запятой (при том что первые 10 - нули). Ну, понятно - значит Excel хранит всего два байта, а остальные цифры - "мусор". Как оказалось, примерно так оно и есть.

Но, как оказалось, подобные знание про floating-point arithmetic было для автора солидного кода на Python откровением. Равно как и понимание, как устроена память компьютера и откуда берётся "мусор" в числах. Мне казалось, что это известно любому computer scientist. Даже я, который не computer scientist, общее представление об этом имею (**). Получается, человек смог написать большой и хорошо структурированный код, который выполняет нетривиальные (на мой скромный вкус) задачи, не зная про устройство памяти и операции с числами с плавающей точкой. Вот это поразительно!

А потом я "обнаружил", что в Python нет указателей. И, в некотором смысле, всё стало на свои места. Ведь, действительно, если ты не работаешь с указателями, то тебе совершенно нет необходимости в понимании "внутреннего" устройства компьютера. При этом, ты по-прежнему можешь иметь "конструкторский" склад ума, который позволяет строить сложные алгоритмы и работать со сложными данными.

Буквально сегодня нашёл такую замечательную формулировку:
If you're coming to Python from a language in the C/Java/etc. family, it may help you to stop thinking about A as a "variable", and start thinking of it as a "name". A, B, and C aren't different variables with equal values; they're different names for the same identical value. Variables have types, identities, addresses, and all kinds of stuff like that. Names don't have any of that.


(*) Собственно, мне даже учить (пока) ничего не пришлось: имеющегося кода хватило для понимания структуры языка. Если бы не ограничение в 80 символов на длину строки, я бы даже счёл этот язык достаточно удобным.
(**) Хоть и все детали битовых операций (равно как и регулярные выражения) для меня по-прежнему остаются магией. This entry was originally posted at https://glav.dreamwidth.org/701857.html. Please comment there using OpenID.
Tags: it, science
Subscribe

  • вакцина

    В жежешечке с какого-то перепугу поднялся вакциносрач среди тех, кто порицает вакциноскептиков, и тех, кто порицает вакциноскептикопорицателей. В…

  • метеорит

    Обычно считается, что рассужденя "ad hoc", т.е. справедливые только для данной ситуации, являются ненаучными. Любое природное явление должно иметь…

  • Палец и воля

    Когда я листаю пальцем ленту фейсбучека на телефоне, в какой-то момент мне это надоедает, и я нажимаю на кнопку "назад", что переводит ленту в…

Comments for this post were disabled by the author