OberonCore https://forum.oberoncore.ru/ |
|
Еще раз об экологии программирования https://forum.oberoncore.ru/viewtopic.php?f=67&t=3495 |
Страница 1 из 2 |
Автор: | Валерий Лаптев [ Пятница, 24 Июнь, 2011 18:39 ] |
Заголовок сообщения: | Еще раз об экологии программирования |
На РСДН появился такой текст: Цитата: Сегодня я хочу поговорить о программировании. Если ты ничего не смыслишь в программировании, то я тебя пойму, если ты не станешь читать этот текст. Так уж получилось, как бы я этого не стыдился, но программирую я довольно хорошо. Я почти никогда не делаю ошибок, и уж тем более написанные мной программы никогда не "глючат". Они могут работать неверно, но я по поведению всегда знаю, где нужно исправить, а не мечусь в догадках. И, в ретроспективе, я недавно стал понимать, почему я не допускаю многих трудноуловимых ошибок. Все это потому, что процесс моего программирования контролируется множеством фобий. Я очень боюсь многих программерских штучек, и это бережет мне много нервов. При этом меня очень расстраивает, когда другие знакомые программисты отважно хватаются голыми руками за вызывающие мой страх инструменты, особенно, когда с результатом их работы мне нужно потом работать. У меня накипело, и я выписал себе на досуге их в списочек — получился такой неплохой набор глав книги (возможно, уже написанной). Запишу себе его во вконтактик, чтобы не потерялся. Можешь и ты подумать, чем он может тебе быть полезен. 1. Я очень боюсь потоков. Если ты, мой друг, думаешь, что при решении какой-то задачи тебе можно использовать потоки, то ты грубо ошибаешься. Если ты думаешь, что понимаешь, как они работают, и как их синхронизировать, то ты не прав. Если ты умеешь синхронизировать потоки через volatile bool, то это вряд ли. Количество задач, которые решаются потоками, настолько мало, что они уже все решены двадцать лет назад. Если ты нашел еще одну, то ты ошибся. Аккуратно используй файберы, если они предоставляются тебе языком программирования. Смело используй очереди сообщений операционной системы. Используй событийную модель. Используй раздельные процессы. 2. Я очень боюсь модальных мессадж боксов. Если ты считаешь, что это хороший способ выводить служебную информацию, то ты заблуждаешься. Если ты думаешь, что это адекватный способ взаимодействия с пользователем, то тебя заочно ненавидят несколько человек. Если тебе кажется, что это удобный способ сообщить об ошибке, то тебе нужно креститься. Это отвратительный способ графического взаимодействия. Придумавший его человек в крайней степени нерукопожатен. Выводи служебную информацию в свой программерский лог. Пусть программа сама обработает ошибку, а не висит в нерабочем состоянии в ожидании "ОК". Не отвлекай пользователя на запрос, на который все равно один вариант ответа. Каждый день делай поиск по всему проекту на предмет "MessageBox" и удаляй все эти строки нещадно. 3. Я очень боюсь исключений. Точнее, исключения, это очень хорошо, конечно, но в самой верхней функции ты должен ловить абсолютно все исключения (как программные, так и сбои в страничной защите, деление на ноль и т.п.). Если ты думаешь, что перечислил все возможные, то на всякий случай поставь еще фильтра на "все". Если ты поймал такое исключение, программа должна осознать, что она более не дееспособна, и отказываться от дальнейшего адекватного взаимодействия с внешним миром. Потому что твои данные уже испорчены (касается библиотек). Используй божественные возможности виндоуз по перехвату всех ошибок (SEH), подчищай за собой временные файлы, пытайся выковырять данные пользователя из умирающей программы. Рассчитывай, что прога должна при ближайшем перезапуске начать сразу же работать без дальнейшей настройки. Всегда отключай отображение операционной системой произошедшего в твоей программе сбоя. 4. Я очень боюсь вычислений с плавающей точкой. Если ты с ними работаешь, то ты обязательно ошибешься в равенстве, все твои данные будут не-числами и бесконечностями. И записав такие числа в текстовый файл, ты его испортишь, потому что там будет какая-нибудь чушь, конечно же. Используй целочисленную арифметику всегда. Можешь добавить целочисленную же экспоненту. Не совершай никаких арифметических операций. Совершай их над какими-нибудь другими данными, а потом записывай в режиме read-only в свой double. Если кривая дорога привела тебя к сравнению даблов, бери точность +/- 5%. Лучше 10%. 5. Я очень боюсь использовать copy/paste. Его можно использовать только один раз, на второй раз нужно выделить логику в отдельную функцию. Весь скопированный текст должен быть в пределах одного экрана всегда. Если у тебя хорошая память и логика, и ты всегда вспомнишь, куда копировал, то у тебя большие проблемы с логикой и памятью. Постоянный рефакторинг. Визуальная группировка кода. Разделение на независимые модули. 6. Я очень боюсь сложных программ. Если ты можешь ориентироваться больше, чем в 20 файлах с кодом, то я тебя тоже боюсь. Если ты организовал логичную и простую структуру папок и пакетов, то у тебя очень нелогичные представления о простоте. В сложных программах сложные ошибки. Нужно разбивать все на маленькие и независимые кусочки. Желательно, взаимодействующие в одном потоке на событийной модели, без мессадж боксов и дробных вычислений, и везде ловятся исключения. 7. Я очень боюсь делать то, что уже кто-то сделал. Хочешь написать свою собственную библиотеку с полезной фигней? Ты поплатишься. Придумал супер-крутой протокол? Ты провалишься. Оптимизировал формат файла под свои нужды? Ты уже проиграл. Гугли на code.google.com, sourceforge, github, codeplex готовые куски кода, библиотеки. Плюй на GPLv3, смело встраивай защищенные открытой лицензией куски в свой закрытый код. Потом разберешься. Используй готовые протоколы (даже если они тебе не очень подходят), ищи родные для твоего языка байндинги. Применяй старые добрые человеко-читаемые форматы файлов (и готовые библиотеки для работы с ними). 8. Я очень боюсь работать со строками. Всегда используй кодировку только UTF-8. Нормализуй строки. Пропускай лишние непечатные символы (грязно используй для этого какую-нибудь готовую библиотеку регулярных выражений). Игнорируй те данные, которые тебя не интересуют. Аллоцируй буфер в стеке и используй только безопасные функции, если работаешь низкоуровнево (а вообще, никогда не работай низкоуровнево). Всегда используй (специально выставляй, можно раз в пять секунд, для надежности) нейтральную локаль. В качестве разделителей CSV воспринимай как запятые, так и точки с запятой. Даты всегда пиши в формате YYYY-MM-DD. 9. Я очень боюсь работать с файлами. Если есть возможность не работать с файлами — не работай. Если такой возможности нет — найди ее. Выставляй таймауты на файловые операции. В случае ошибки чтения, повтори еще пару раз. Позволяй считанным данным быть испорченными. Считай, что их редактировали перед этим в MS Word. Постоянно сохраняй промежуточные результаты. Желательно, в два разных места. Дублируй информацию в логах. После сохранения на всякий случай прочитай — вдруг не сохранилось. 10. Я очень боюсь сетевых соединений. Пингуй собеседника как бешеный, раз в секунду. При потери соединения переприсоединяйся, не получается — продолжай пытаться. Проверяй приходящие данные на целостность. Проверяй версию программы-собеседника. Слушай пинги собеседника, если что — паникуй. Не используй низкоуровневые протоколы, ищи библиотеку с прозрачным переподключением и восстановлением данных. 11. Я очень боюсь указателей. Если ты используешь язык, где можно использовать указатели — не используй. А лучше смени язык. Ты НЕ умеешь работать с памятью. Если ты используешь кучу, то она второй твой злейший враг (после тебя самого). Лучший способ освободить память — перезапускать программу. Если твоя программа ликает меньше одного мегабайта в час, то все ок, автоматически перезапускай ее каждые сутки в два часа ночи. Забудь об арифметических операциях на указателях. Обходи массивы по индексу. Не существует задачи, которую можно адекватно решить только указателями. Используй ссылки, глобальные переменные, аллоцируй буферы в стеке (в три раза больше, чем тебе нужны). Лови исключения, опять же. * * * Вот. Я боюсь всех этих вещей, поэтому не люблю программировать. Можно раздербанить на лозунги-цитаты и регулярно повторять студентам на каждой лабе и лекции. |
Автор: | Роман М. [ Пятница, 24 Июнь, 2011 20:24 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
С большинством написанным, пожалуй, соглашусь. Однако, есть и вопросы: 4. Цитата: Используй целочисленную арифметику всегда. Можешь добавить целочисленную же экспоненту. Не совершай никаких арифметических операций. Совершай их над какими-нибудь другими данными, а потом записывай в режиме read-only в свой double. Что-то я не понял "манёвра" с совершением операций в последнем предложнении. 7. Цитата: Гугли на code.google.com, sourceforge, github, codeplex готовые куски кода, библиотеки. Плюй на GPLv3, смело встраивай защищенные открытой лицензией куски в свой закрытый код. Потом разберешься. Используй готовые протоколы (даже если они тебе не очень подходят), ищи родные для твоего языка байндинги. Почему я должен слепо применять чужой код? Разве он обязательно "само совершенство"? |
Автор: | Madzi [ Пятница, 24 Июнь, 2011 20:28 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Роман М. писал(а): С большинством написанным, пожалуй, соглашусь. Однако, есть и вопросы: 4. Цитата: Используй целочисленную арифметику всегда. Можешь добавить целочисленную же экспоненту. Не совершай никаких арифметических операций. Совершай их над какими-нибудь другими данными, а потом записывай в режиме read-only в свой double. Что-то я не понял "манёвра" с совершением операций в последнем предложнении. Он таким образом хочет избежать ошибок округлений. В целом нормальный подход. Роман М. писал(а): 7. Цитата: Гугли на code.google.com, sourceforge, github, codeplex готовые куски кода, библиотеки. Плюй на GPLv3, смело встраивай защищенные открытой лицензией куски в свой закрытый код. Потом разберешься. Используй готовые протоколы (даже если они тебе не очень подходят), ищи родные для твоего языка байндинги. Почему я должен слепо применять чужой код? Разве он обязательно "само совершенство"? Потому что таким образом, он снимает с себя ответственность за ошибки содержащиеся в этом коде. Кроме того, считается что "публичный" код (лежащий на серверах типа code.google.com) проверяют десятки тысяч профессионалов (делать им больше нечего), поэтому там ошибок нет. ![]() |
Автор: | Илья Ермаков [ Пятница, 24 Июнь, 2011 23:15 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Валерий Лаптев писал(а): На РСДН появился такой текст: Народ уже сильно с...т кирпичами? ![]() |
Автор: | Axcel [ Суббота, 25 Июнь, 2011 08:45 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Насчет чужего кода тоже не согласен. Опыт есть. В Делфи использую только стандартные компоненты за редким исключением. По моему, гораздо полезнее изучение разных "алгоритмов и структур " . Т.е. овладение общим принципом и применение его частным и очень конкретным образом, самое то. И потом потихоньку обобщать, если потребуется |
Автор: | ilovb [ Суббота, 25 Июнь, 2011 12:20 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Не народ... не о том речь... Все он правильно написал. Имеется ввиду если вам понадобился класс/библиотека/компонент для работы с какой-нибудь массово юзаемой хренью, то написание своего - это последнее о чем нужно думать. А если вы думаете, что на написание/отладку у вас уйдет меньше времени, чем у других, то вы сильно завышаете свои интеллектуальные способности. Вот нужно вам например XML распарсить. Писать свою библиотеку - это совершенно глупая идея. Есть ведь готовые парсеры отлаживаемые годами. Мокрософт, например. Чем плох? Думаете напишете лучше? Ню.. ню... Писать свой парсер XML это, звиняйте, онанизьм (читай удовлетворение своих фрейдовских заморочек) |
Автор: | Пётр Кушнир [ Суббота, 25 Июнь, 2011 12:55 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
этак лучше закупать Мистрали, а своих кораблестроителей перепрофилировать в обслуживающий персонал к басурманским железякам |
Автор: | Пётр Кушнир [ Суббота, 25 Июнь, 2011 12:58 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
ну и, в первом случае надо быть специалистом по микрософтовскому парсеру, а во втором - специалистом по XML ну ничего, рынок должен подсказать эффективное решение да и потом, всё равно к оберонам это никак не относится. |
Автор: | ilovb [ Суббота, 25 Июнь, 2011 13:07 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Пётр Кушнир писал(а): ... быть специалистом по микрософтовскому парсеру ... Неужели так сложно? ![]() http://www.script-coding.com/XMLDOMscripts.html |
Автор: | Пётр Кушнир [ Суббота, 25 Июнь, 2011 14:22 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
а разве речь об этом была? |
Автор: | ilovb [ Суббота, 25 Июнь, 2011 14:26 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Вам лучше знать... Высказывание то ваше... |
Автор: | Пётр Кушнир [ Суббота, 25 Июнь, 2011 14:35 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
там хоть слово о сложности есть? |
Автор: | Пётр Кушнир [ Суббота, 25 Июнь, 2011 14:46 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
кстати, этот конкретный случай уже обсуждался viewtopic.php?p=3011#p3011 |
Автор: | ilovb [ Суббота, 25 Июнь, 2011 15:02 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Пётр Кушнир писал(а): там хоть слово о сложности есть? Есть, "специалистом". Ну, а если вы в это свое выражение какой-то другой смысл вложили, тогда зачем вообще писали? (вот я вас неправильно понял получается) |
Автор: | ilovb [ Суббота, 25 Июнь, 2011 15:07 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Пётр Кушнир писал(а): ...уже обсуждался ... Прочитал. Я с Vlad полностью согласен. Сразу видно, что человек профессионально кодит. (а если не кодит, значит голова) А вы не согласны? |
Автор: | Пётр Кушнир [ Суббота, 25 Июнь, 2011 15:12 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
ilovb писал(а): Есть, "специалистом" "специалист по парсеру от мелкомягких" звучит смешно. но видимо, у профессиональных кодеров это нормально ![]() ilovb писал(а): А вы не согласны? конкретно про парсер - не согласен.
|
Автор: | Иван Кузьмицкий [ Суббота, 25 Июнь, 2011 15:17 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
ilovb писал(а): Вот нужно вам например XML распарсить. Писать свою библиотеку - это совершенно глупая идея. Ораклы-то, да, дураки: http://download.oracle.com/javase/1.4.2 ... mmary.html ![]() |
Автор: | Сергей Губанов [ Суббота, 25 Июнь, 2011 15:44 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Валерий Лаптев писал(а): На РСДН появился такой текст В разделе пятничный юмор что ли? Спасибо. Посмеялся. ![]() ![]() ![]() |
Автор: | Info21 [ Суббота, 25 Июнь, 2011 17:39 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Нужно помнить про "краткосрочная тактика <> долгосрочная стратегия". |
Автор: | ilovb [ Суббота, 25 Июнь, 2011 18:45 ] |
Заголовок сообщения: | Re: Еще раз об экологии программирования |
Иван Кузьмицкий писал(а): ... Ораклы-то, да, дураки ... 1. И при чем тут Java? Ясен пень, для нее все свое пишут, т.к. хреново она с внешним миром стыкуется. (хотя я с жабой поверхностно знаком, но в данном случае это должно быть так) 2. Если бы вы потрудились вникнуть в ход рассуждений, то поняли бы, что речь шла о времени/стоимости/качестве. А Ораклы-то, да, маленька фирмочка из 3 быдлокодеров в Урюпинске.... |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |