Про изучение языков программирования

Да, именно так оно и работает.

Именно поэтому когда знакомые меня спрашивают, с какого языка начать знакомство с программированием, я никогда не советую Джаваскрипт, Перл, Питон и прочие языки с динамической типизацией. Совсем не потому, что они “хуже”, а потому что понять, что происходит, при отсутствии понимания типов переменных, невозможно.

Девочка пытается совершить арифметические действия с переменной типа char — действие, не вполне стандартное, так что компилятор действует “по наитию” — так что char в зависимости от контекста становится числом или строковой переменной.

При этом на низком уровне процессору глубоко до лампочки, что с чем складывать — он вполне может сложить яблоки с грушами, а финики с морковкой — по сути ведь, не всё ли равно, какие единички и нолики складывать? Ну, а если при этом возникнут неожиданные эффекты — ну это уже проблема программиста. На ассемблере ведь даже типов переменных нет. Да, надо указывать, сколько бит резервировать, но и всё тут. А уж как это интерпретировать — это вопрос к более высокому уровню абстракции.

Проблемы с интерпретацией никуда не исчезают, но если мы попробуем повторить девочкины действия на том же C# или на Джаве, в рыло прилетит привет от компилятора — “ты чо с чем складываешь, совсем охренел, что ли?” И предложит cast в другой тип данных. Поэтому подобных необъяснимых эффектов там просто не будет, а у программиста вырабатывается привычка руками кастовать переменные при любых неявных действиях с разными типами.

Сам я, кстати, пошёл сначала по неправильному пути, начав изучать программирование с одного из самых запутанных языков — с Перла. Ну, того самого, по которому даже проводилось соревнование “Кто непонятнее напишет” (https://en.wikipedia.org/wiki/Obfuscated_Perl_Contest). Не то, чтобы Перловый код обязательно получается кривой и непонятный, но там очень просто сделать именно так. Для начинающего — не то.