Pull to refresh

Comments 56

Проблемы схожи, но связи между ними нет, потому что те, кто не изучали высшую математику, математический анализ и тд, делают такие же ошибки в программирование по началу, что и те, кто изучали.

Основные причины такого рода ошибок в том, что задачи математики и задачи программирования похожи - нужно получить результат. И только потом приходит понимание, что как ты решаешь задачу, тоже имеет большое значение.

Знаете, ведь вы правы. Понимание приходит потом, когда уже что-то сделаешь. Давайте назовём это опытом? Я это добавлю в статью.

Математическая нотация очень удобна для математики. Когда ты на одной волне с преподователем, или с другим человеком, занимающимся математикой, все кристально понятно. Обьяснить словами, или текстом тоже самое на порядок сложнее

Пример на бумажке - это рутинное решение квадратного уравнения, и все оно в целом воспринимается как одно действие. Зачем в нем рассписывать действия и что обозначают переменные?

Присоединюсь к комментарию, но еще добавлю из своего опыта.

Со второго курса уже занимался промышленным программированием параллельно с учебой. В частности, пытался решать уравнения в частных производных или цифровой обработки сигналов.

И я хочу сказать, что даже в программировании математики, на мой взгляд, нейминг одной-двумя буквами более оптимален:
- Формулы, как правило, очень длинные. Поэтому если выбирать человекопонятные имена переменных (например, speed вместо v), то формула вылезет за пределы экрана и будет тяжела как в поддержке, так и чтении
- Как правило, никто в математике не оперирует длинными названиями переменных. Поэтому та же самая v будет узнаваться быстрее. А вот speed - медленнее, т.к. мозгу нужно будет в голове смапить speed обратно в v, что отнимает ресурсы. Так что одно-двухбуквенные имена лучше оставлять в таких задачах как минимум ради ubiquituous language

Тоже присоединюсь. Очень много сущностей имеют устоявшиеся обозначения и формы записей (те же уравнения Максвелла, законы Ньютона и всё-всё-всё). Для них придумывать новые обозначения - однозначное зло. Это ничем не отличается от придумывания своего велосипеда.

Длинные формулы лучше разбивать на несколько коротких, даже если используете однобуквенные именования.

Но однобуквенные имена за редким исключением осложняют изучение незнакомого кода.

Я знаю, что формулы почти никто не читает и даже есть утверждение: каждая формула уменьшает количество читателей вдвое.

Особенно это утверждение применимо к читателям статьи на Хабре 🤦🏻‍

Очень похоже, что те, кто минусанул статью не читали её до конца.

Знаю как минимум одну объективную причину для этого - я всё же явно переборщил с объёмом материала. Видимо, дурной пример методички был и правда заразителен. Пожалуй, я её сокращу, убрав лишнее. Спасибо :-)

незнаю за что вас минусанули в этом комментарии, но оставьте статью как есть. я лишь высказал недоумение, когда статься ещё только появилась, что её стали минусовать. Теперь она в плюсе и это не выглядит ненормальным.

Это общая проблема научного знания.

  • Хороших книг меньше, чем плохих книг.

  • Хороших статей меньше, чем плохих статей.

  • Хорошего кода меньше, чем плохого кода.

  • Хороших учителей меньше, чем плохих учителей.

  • Тех, кто в результате научился отличать хорошее от плохого меньше, чем тех кто не научился.

Вам удалось сформулировать один из источников проблемы. Предлагаемым вами решением, кстати, пользуется Википедия, где над каждым словом думают десятки компетентных людей. В результате подавляющее большинство статей там являются хорошими. Однако российское образование пришло к той точке, когда атомарные изменения не способны его улучшить. Мои 20-летние наблюдения за средним, специальным и высшим образованием укрепили меня в мысли, что всё целиком нужно сжечь. Я реально надеюсь на это, реформы с нуля возможны.

Вы привели четыре следствия из аксиомы «Хорошего меньше, чем плохого» :)
По вопросу в заголовке – ноги у плохого кода растут из этой же аксиомы. Плохого кода всегда больше, чем хорошего.

Нет на свете такой гадости, объяснение которой нельзя редуцировать до «энтропия растёт».

всё целиком нужно сжечь.

Как бы вы обучали своих детей?

Так же как сейчас. К сожалению, всё, что знает мой ребенок, он знает от меня. Но у меня было недостаточно времени и упорства. Абсолютно по всем темам, которых я не касался в наших беседах, он не знает ничего. Школа дала только социализацию, и то весьма сомнительную, гораздо больше дал спорт. Школа сейчас - это как армия, там не нужно, чтобы ребенок что-то узнал, главная ее задача - отвлечение ребенка от нанесения вреда себе. Когда я учился в школе, трава была намного зеленее, просто на порядок. Но я очень далек от мысли, что "советское образование самое лучшее". Самое лучшее должно не стоять на месте, а бежать очень быстро. Первое, что должна будет сделать инициативная группа по реформе образования - это изучить и обобщить существующие мировые практики. Второе - провести люстрацию учителей. Эти люди не должны больше приближаться к детям.

Прежде чем проводить люстрацию учителей, нужно сделать эту профессию престижной. Иначе не кем будет заменить люстрированных, и дети не получат даже той крупицы знаний, которую худо-бедно дают плохие преподаватели.

Эти процессы можно распараллелить. Например, я слышал, что так сделали с грузинской полицией. Одновременно провели люстрацию и подняли престиж. Давайте подумаем, из чего складывается престиж профессии. Я вижу три составляющих:

1) Оплата труда. Знания - это очень долговременная инвестиция, поэтому это несомненно дело государства. Частные школы приведут лишь к сословной дифференциации. Хотя, этим могла бы заняться и какая-нибудь корпорация, которая смотрит на 20 лет вперед, типа Интела.

2) Свобода. Учитель не должен быть государственной проституткой. Мои лучшие учителя по странному совпадению были махровыми диссидентами, за что имели много неприятностей.

3) Любимое дело. Если вы спросите, чем занимаются сейчас учителя, они вам скажут - пишем планы и отчеты, натягиваем показатели, проводим мероприятия. Учителя должны учить.

Все три пункта можно выполнить одновременно при определенных условиях.

На самом деле то что на листочке в начале статьи написано на несколько порядков легче, тех примеров с интегралами. Это всё зависит от понимания, думаю многие со мной согласятся, а двойные, тройные интегралы и далее до сих пор не понимаю как решать.

Вообщем не понятная простыня текста в любой нормальной книжке сразу учат писать хорошо. Только в наших книжках пишут примеры функций с именами типа foo это очень раздражает, тем более не нужны все эти 500 строчек кода, потому что даже функция с на 5 - 10 строчек кода может быть сложной и не понятной и уже её нужно называть правильно. Я не говорю про промышленный код, да я немного столкнулся там функции в 3-4 строчки (три - четыре) которые только возвращают значение немного его изменив, уже требуют внятного названия функций.

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

Кстати, а ведь я в статье эту тему не раскрыл (скоро дополню статью). Вы правильно сказали:

простыня текста в любой нормальной книжке сразу учат писать хорошо

Выходит, даже от такой макулатуры может быть положительный эффект. Ну на примере меня, скажем. Я ведь и правда писал бы хуже, если бы не запомнил на всю жизнь тот ужас.

Решение проблемы не в строгом контроле выходящих учебных пособий, а в сотрудничестве отрасли с образовательной организацией. Да, вы верно описали проблему нехватки времени на создание качественного продукта. Я преподаватель IT-дисциплин в вузе. Поступаю в аспирантуру, и планирую как раз в диссертационном исследовании данную проблему рассматривать. Однако подтвердить в научном поле мне эту проблему будет крайне сложно, поскольку она в основном предмет холиваров на Хабре и объект мемов в соцсетях, что не может являться репрезентативным источником. Необходима либо всероссийская экспертиза кода выпускников вузов и ссузов, которая скажет, мол, да, выпускники не умеют писать приемлемый код, либо заключения наиболее крупных работодателей, а-ля Сбер, VK, Яндекс. Если у вас подобные данные имеются, или вы желаете какую-то лепту внести в процесс улучшения кода выпускников, буду признателен вашему ответу.

Знаете, я не работаю в очень крупной компании типа Яндекса/Контура/VK, поэтому подобных данных у меня нет.

Но некоторую лепту я готов внести - написал в личку.

А какую лепту тут можно внести?

Пожалуй, только кодревью. Но и это сработает только для некоторых студентов. Уж точно не для всех. Я бы даже сказал для единичных.

Нужно какое-то более системное решение.

Обеими руками поддерживаю! Но иных возможностей у меня нет, к сожалению, да и работаю я сейчас не в образовании. По-хорошему мне в это вообще нос совать не стоит, раз не моя сфера. :-(

Для начала надо обосновать наличие такой проблемы перед педагогическим сообществом. Если есть ссылки на какие-то форумы, круглые столы, публикации от лидеров отрасли, другие дискуссионные площадки, буду признателен,если вышлете либо сюда, либо в ЛС

У вас путаница в формулировке задачи про интеграл, там говорится, что нужно найти первообразную от функции y, то есть \int ydx, а в ответе указана лишь сама функция y.

Сейчас поправлю, спасибо!

Нотации и структура повествования применяемая в математике, уже простите, но применяется много больше времени, чем в принципе существует программирование. Эти две области действительно имеют много схожих вещей, однако когда пишите подобную статью нужно учитывать всю многогранность математики, которая включает в себя множество различных разделов, причем далеко не со всеми есть хоть какая-то родственная связь у программирования. И сдается мне, что за все время существования математики, люди, занимающиеся ей, уже давно выработали удобные им нотации и методологии.

Говоря по своему опыту, человека, который в ВУЗе прочитал несколько книг по математике(да опыт не большой), могу отметить что все вполне себе понятно излагается. А проблемы по типу именования переменных никогда не путают, ещё раз - все эти записи оттачивали многоми годами.

Математику и программирование нельзя сравнивать, особенно на операциях с интами, которые всего лишь произведение битов. Во-первых это не числа. Во-вторых, имена, присвоенные этим битам не являются математическими выражениями (чего стоит утверждение x=x+1, из чего можно сделать, что x строго равен бесконечности).

А вот пример программы, похожей на математическую запись:

step :: Natural -> Natural
step n
  | even n    = n `div` 2
  | otherwise = 3 * n + 1

collatz :: Natural -> Natural
collatz 0 = 0
collatz 1 = 0
collatz n = 1 + collatz (step n)

Я же сравнил с исходным кодом учебное пособие, а не математику. Математику я люблю. Проблема плохого стиля конечно же есть в любой дисциплине, о чём я и сказал. Пример с математикой выбрал для удобства, хотя мог бы "нечитаемый шифр" привести из химии.

На самом деле проблема со школьной математикой начинается с того, что один и тот же глиф (=) используется с разными смыслами (определение, соотношение, следствие).

Эта "перегрузка" операторов, кстати, обострилась ещё в Средневековье с распространением печатной литературы. Тогда оттиски были дорогими и их старались экономить. Поэтому разнообразие символов первых печатных текстов всегда было скудным.

Впрочем, в античности тоже было что-то похожее - тогда в дефиците была сама <s>белая</s> бумага, поэтому любые слова часто сокращали. Античность, по-моему, период расцвета аббревиатур и сокращений?

Точно! Это ещё один пример расцвета "шифротекстовых названий". Кстати, ведь тогда тоже случилась нехватка оттисков - после запрета знака "Ъ" в конце некоторых слов, большевики изъяли его оттиски из типографий. Для случаев, когда он был необходим (объезд, съезд и т. п.) стали использовать апостроф (об'езд, с'езд).

Ах, да, под это ещё и исторический контекст подводили, правда уже позже. Приводили в пример мнение математика Лейбница:

Он считал, что обозначения должны быть максимально краткими. К примеру, Лейбниц говорил: "Зачем использовать две точки для обозначения деления, когда можно использовать лишь одну?".

Вот я тоже раньше думал, что это разные смыслы. Мне казалось очень логичным, в частности, что знак логической операции и знак присваивания во многих ЯП разные. Почему бы не перенести это обратно на математику? Однако со временем мне всё меньше так кажется. = это ключевая связка в математике, это её основа. Это то, вокруг чего можно "танцевать", перенося из правой части в левую и из числителя в знаменатель (не всегда). Независимо от того, определение это, отношение, тождество или следствие. Если мы сейчас введем 3 или 4 разных знака, решать системы уравнений станет уже не так легко.

Математики это просто фанаты перегрузок символов. Особенно меня впечатлило это в курсе комплексных чисел. "Вот это выражение с синусами и косинусами дает после взятия производной себя же, в вещественных числах таким свойством обладает экспонента, значит и это выражение будем обозначать e^z" и еще много подобного.

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

Нет, это разные смыслы. Если бы это был один и тот же смысл, то невозможны были бы доказательства от противного, потому что когда мы пришли к утверждению 1=2, то это либо "по определению" (и тогда вселенная развалилась от unsoundness), либо это всего лишь логическое утверждение, содержащее в себе ошибку, что опровергает исходную посылку (допущение).

Не любые определения одинаково полезны. Как минимум, они должны составлять непротиворечивую систему. Можно протестировать кучу определений и выбрать самые удобные. Именно так и строится арифметика, например. Поэтому не вижу разницы между "утверждением" и "утверждением по определению". Точно так же не вижу проблем в доказательстве от противного. Вывод противоречит исходным посылкам - значит какая-то из исходных посылок не верна. Или та, которую мы пытаемся доказать. Или та, которую мы 300 лет считали аксиомой.

Странная статья...

Уважаемый автор, неужели не чувствуете, насколько надуманной является аналогия дурно написанного методического пособия с плохим кодом.

Взять пресловутый листочек. Ощущение создается, что вы просто вывалили набор типовых претензий к плохому коду и сопоставили его с листочком. Да вот беда - не сопоставляется.

"Краткое содержание статьи" - отдельный вопрос. Анонсированы два варианта оформления математического упражнения. Это точно вы взяли для сравнения рекомендуемое странным преподавателем решение конкретного уравнения? Или это некое методическое пособие (с тараканами, справедливости ради) по решению задач по курсу математики вообще? Тщательно подсчитаны количество формул, слов, знаков. А смысл? Фихтенгольц замечательный трехтомник написал, давайте еще и его посчитаем, разница вообще потрясающая получится

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

А поддерживать такой код потом трудно, но иного выхода нет. Аналогия: читать плохую методичку трудно, но иного выхода нет, если негласно требуют именно её.

Устроившись на работу я лично увидел хороший код и получил возможность сравнить его с плохим. Это оказалось очень полезно. Аналогия: при наличии методичек с тиражом меньше 500 экземпляров у студентов не всегда есть возможность их между собой сравнить - берут то, что осталось.

Да уж...

Так вот из-за чего делают плохую колбасу... плохие машины... плохие дома... Не тем людям дают писать методические пособия по математике.

Все, вопросов по связи качества кода с учебными пособиями по математике более не имею.

Жаль только, остался непроясненным вопрос о тестировании и и листочке...

Ну вот я согласен. Наплевательское отношение ко многим аспектам жизни, оно знаете ли транслируется в другие аспекты.

Не самый лучший пример решения квадратного уравнения: его можно сократить и он не полон для понимания решения. Следующая строка после нахождения дискриминанта идёт без пояснения, откуда взялись значения.

В жизни ни разу не писал строчку с нахождением дискриминанта. Меня так учили и всегда не понимал за чем эта лишняя строка. Можно сразу писать формулу для нахождения корней. А вот её то в примере - нет! -

x_1,_2=(-b ± √(b^2-4ac))/2a

Редактор формул в комментариях ещё -тот. Надеюсь, что набранную формулу все поняли. Проще, наверно, было словами описать формулу.

По поводу оператора Goto. Как-то раз на рубеже 90х, чтобы не изобретать велосипед, переписывал программу, опубликованную в книге, на язык без оператора goto. Пришлось помучаться.

Ссылки на предыдущие части в длинном тексте важны. Пример, который вы привели - абсурдный, но при желании можно разобраться. А вот в научной статье, когда даётся ссылка на работу длиной несколько десятков страниц, нужное место в той статье можно искать долго.

Дискриминант считается, чтобы школьники не впадали в ступор при попытке извлечения корня из отрицательного числа.

Да, это очень неприятный пример другой крайности, когда делается отсылка к другому документу или фрагменту. "Найди-ка в нём нужное место" - это словно игры в прятки.

Есть цитата Вольфа Шнайдера, ставшая в Германии уже пословицей: "Одному из них придется мучиться. Либо читателю, либо автору." И хотя эти слова изначально подразумевали произведения литературы, это фразу часто цитируют в среде айтишников на докладах по чистому коду и т.п.

Зачем вы это делаете? Попытка привести к чему то более рациональному в нерациональном приводит к более запутанному чем есть на самом деле.

Есть формула, в ней нет скрытого смысла, она просто формула. Зачем здесь именование? Мы не рассматриваем многостраничное математическое решение, которому может потребоваться доп нотация. Зачем здесь усложнение в именовании?

Не надо по общему судить о частном. Если в больших проектах именование важно, то в математике и примерах в частности нет.

Хватит уже все объединять! Подходите к решению проблем творчески.

Да вы чего? Не нужно менять математическую нотацию. Статья о том, что она не подходит для исходного кода, а не для математики.

Зачем здесь именование?

(...)

Если в больших проектах именование важно, то в математике и примерах в частности нет.

В этом и есть посыл статьи - в написании кода именование важно, не нужно тащить в него чуждую нотацию, которая не для него предназначена. Нельзя объединять стиль программирования со стилем методичек посредственного качества.

Справедливости ради, пример с параграфом 2.3.2.1.1.4 мало отличается от типичной страницы мана за авторством любого из трёх ведущих облачных провайдеров. Только бумажная методичка не умеет в URL, а маны умеют.

А можно не содержание, а заголовок методички, а то когда я читаю


В первом решении 11 формул, незначительные упущения, есть пояснения и… всего 263 слова. Во втором — три тома, в каждом из которых около 80 страниц формата А5. В среднем на странице умещается 180 слов на русском языке. Итого: около 43 тысяч слов и уже неустановленное число формул.

мне кажется, что меня обманывают, и во втором не поиск первообразной из первого решения.

Рецепт: подойди к зеркалу, посмотри. Если там Нарцис - рецепт не действителен :)

Блин, даже свой код через 2-3 месяца (я уже не говорю про год) - какой мудак это писал ?? Чужой - Ад и Нервы.

И "лудший погромизд" - это ТЫ, адназначна ! :))

Единственное, что кроме восхищение ничего не вызывало - Борландовский Turbo Vision (~800кб исходников). Эти ~15 ребят/девчат реально были влюблены в свое дело ! Я на этих ребятах-практиках учился, а не на поцах, которые их сменили, взяв МС-нотацию (пою, что вижу) - библиотека стала 6МБ в Дельфи. А потом борландов "убили" :(

Да, я понимаю, что "2+2 уже все умеют !" - но я не ВЕРЮ, оно ж поломается в произвольном месте. А смотреть 3МБ кода (2кб писателя + остальное - библиотеки) - ну нафиг !

Sign up to leave a comment.

Articles