КатегорияДзен

Разница между «равно» и присваиванием

Многие интересующиеся программированием люди не могут понять разницы между знаком равенства и присваиванием. Путаницу в эти определения вносит заимствованный из Си стиль обозначения присваивания значком «=», который вроде бы и схож по смыслу с присваиванием, однако имеет серьёзное отличие.

Квантор «=» в математике и других науках имеет значение «равно». То есть это не операция, а высказывание, констатация факта. «A = B » означает именно что «A равно B», а не «А теперь имеет значение B». «f(x)=x^2+2x+1 » означает, что f — тоже самое, что x^2+2x+1 , как макрос. Аналогом математического равенства в программировании (в Си-подобных языках) является логическое выражение «==».

Опасность смешения этих понятий при чтении алгоритмов заключается в том, что в таком случае выражение «A = B » толкуется как «на этом шаге А и В равны», что не дает понимания, как именно они должны стать равны — то ли А должно стать В, то ли наоборот.

Именно поэтому в некоторых языках программирования решили выпендриться и заменить оператор присваивания с удобного для набора знака «=» на, например, «:=» в Паскале, что, вообще говоря, раздражает. Однако, по негласной международной норме при описании алгоритмов на псевдоязыке для присваивания используется однозначный символ «←»: «A \gets B » — теперь всем всё понятно.

Плохой С++

Вот уже некоторое время при разработке ПО я всегда отдаю предпочтение либо С, либо C#/Python, сознательно обходя стороной С++. Почему?

Представьте, что вам нужно забить гвоздь. Но вместо обычного молотка вы используете супер-молоток Х-1000, который разрабатывается на протяжении 30 лет путем консенсуса 100500 забивателей гвоздей со всего мира, большая часть из которых является учеными-математиками и забивала гвозди только в теории, а остальные явно имеют философские наклонности. В итоге, вы в течение трёх суток генерируете на основе супер-молотка 13 специализированных молотков для забивания конкретно вашего гвоздя, но часть из них разваливается при попытке удара, а часть получилась с дыркой в центре. Через пять суток, после того, как вами подробно был описан гвоздь, молоток, фактура стены, были созданы абстракции-связки между всеми этими объектами вы обнаруживаете на супер-молотке Х-1000 кнопку работы в режиме обычного молотка и просто забиваете гвоздь.

Читать далее

Об историческом ревизионизме, негационизме и сектантах

Что такое исторический ревизионизм? Это, по факту, попытка сказать: «всё было совсем не так». Это попытка пересмотреть (обычно — радикально) устоявшиеся в науке и обществе взгляды на историю и происходившие события. Казалось бы, ну и что? Научные концепции регулярно пересматриваются и корректируются согласно новым фактам. Однако именно современный исторический ревизионизм отличается особым пренебрежением к, собственно, фактам и анализу, заменяя их литературно-художественными приёмами и постоянно превращаясь в негационизм — полное и твёрдое отрицание или игнорирование достоверно установленных наукой фактов.

Читать далее

О ситуации в науке и образовании РФ

Поговорка «государство делает вид, что оно нам платит, а мы делаем вид, что работаем» ходила в научной среде уже в 80-х годах прошлого века.

Читать далее

HTML — язык программирования

Намедни мне довелось развлечения для заметить одному программисту в одном вконтачном паблике, что HTML — это скриптовый язык программирования. Просто заметил. И тут понеслась! Достаточно было лишь отвечать на входящие воинственные тирады, начиная от предложения написать на HTML программу сложения двух чисел, заканчивая прямым указом на мою некомпетентность. Удивительная солидарность. Не помогло даже приложение к их ушибу подорожника собственноопределения языка программирования и языка сценариев. В итоге, исчерпав ресурс аргументов мои оппоненты пошли на крайние меры — тихо нажаловались на меня администратору группы, после чего он лично попросил прекратить спорить со школьниками.

Читать далее