OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 24 Июнь, 2011 18:39 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
На РСДН появился такой текст:
Цитата:
Сегодня я хочу поговорить о программировании. Если ты ничего не смыслишь в программировании, то я тебя пойму, если ты не станешь читать этот текст.

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

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

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

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 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
С большинством написанным, пожалуй, соглашусь. Однако, есть и вопросы:

4.
Цитата:
Используй целочисленную арифметику всегда. Можешь добавить целочисленную же экспоненту. Не совершай никаких арифметических операций. Совершай их над какими-нибудь другими данными, а потом записывай в режиме read-only в свой double.

Что-то я не понял "манёвра" с совершением операций в последнем предложнении.

7.
Цитата:
Гугли на code.google.com, sourceforge, github, codeplex готовые куски кода, библиотеки. Плюй на GPLv3, смело встраивай защищенные открытой лицензией куски в свой закрытый код. Потом разберешься. Используй готовые протоколы (даже если они тебе не очень подходят), ищи родные для твоего языка байндинги.

Почему я должен слепо применять чужой код? Разве он обязательно "само совершенство"?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июнь, 2011 20:28 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Роман М. писал(а):
С большинством написанным, пожалуй, соглашусь. Однако, есть и вопросы:

4.
Цитата:
Используй целочисленную арифметику всегда. Можешь добавить целочисленную же экспоненту. Не совершай никаких арифметических операций. Совершай их над какими-нибудь другими данными, а потом записывай в режиме read-only в свой double.

Что-то я не понял "манёвра" с совершением операций в последнем предложнении.

Он таким образом хочет избежать ошибок округлений. В целом нормальный подход.
Роман М. писал(а):
7.
Цитата:
Гугли на code.google.com, sourceforge, github, codeplex готовые куски кода, библиотеки. Плюй на GPLv3, смело встраивай защищенные открытой лицензией куски в свой закрытый код. Потом разберешься. Используй готовые протоколы (даже если они тебе не очень подходят), ищи родные для твоего языка байндинги.

Почему я должен слепо применять чужой код? Разве он обязательно "само совершенство"?

Потому что таким образом, он снимает с себя ответственность за ошибки содержащиеся в этом коде. Кроме того, считается что "публичный" код (лежащий на серверах типа code.google.com) проверяют десятки тысяч профессионалов (делать им больше нечего), поэтому там ошибок нет. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июнь, 2011 23:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Валерий Лаптев писал(а):
На РСДН появился такой текст:


Народ уже сильно с...т кирпичами? :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 08:45 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Насчет чужего кода тоже не согласен. Опыт есть. В Делфи использую только стандартные компоненты за редким исключением. По моему, гораздо полезнее изучение разных "алгоритмов и структур " . Т.е. овладение общим принципом и применение его частным и очень конкретным образом, самое то. И потом потихоньку обобщать, если потребуется


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 12:20 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Не народ... не о том речь... Все он правильно написал. Имеется ввиду если вам понадобился класс/библиотека/компонент для работы с какой-нибудь массово юзаемой хренью, то написание своего - это последнее о чем нужно думать. А если вы думаете, что на написание/отладку у вас уйдет меньше времени, чем у других, то вы сильно завышаете свои интеллектуальные способности.

Вот нужно вам например XML распарсить. Писать свою библиотеку - это совершенно глупая идея. Есть ведь готовые парсеры отлаживаемые годами. Мокрософт, например. Чем плох? Думаете напишете лучше? Ню.. ню...
Писать свой парсер XML это, звиняйте, онанизьм (читай удовлетворение своих фрейдовских заморочек)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 12:55 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
этак лучше закупать Мистрали, а своих кораблестроителей перепрофилировать в обслуживающий персонал к басурманским железякам


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 12:58 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
ну и, в первом случае надо быть специалистом по микрософтовскому парсеру, а во втором - специалистом по XML
ну ничего, рынок должен подсказать эффективное решение

да и потом, всё равно к оберонам это никак не относится.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 13:07 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Пётр Кушнир писал(а):
... быть специалистом по микрософтовскому парсеру ...

Неужели так сложно? :shock:

http://www.script-coding.com/XMLDOMscripts.html


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 14:22 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
а разве речь об этом была?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 14:26 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вам лучше знать... Высказывание то ваше...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 14:35 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
там хоть слово о сложности есть?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 14:46 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
кстати, этот конкретный случай уже обсуждался viewtopic.php?p=3011#p3011


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 15:02 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Пётр Кушнир писал(а):
там хоть слово о сложности есть?


Есть, "специалистом". Ну, а если вы в это свое выражение какой-то другой смысл вложили, тогда зачем вообще писали? (вот я вас неправильно понял получается)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 15:07 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Пётр Кушнир писал(а):
...уже обсуждался ...


Прочитал. Я с Vlad полностью согласен. Сразу видно, что человек профессионально кодит. (а если не кодит, значит голова)
А вы не согласны?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 15:12 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
ilovb писал(а):
Есть, "специалистом"
"специалист по парсеру от мелкомягких" звучит смешно. но видимо, у профессиональных кодеров это нормально ;)
ilovb писал(а):
А вы не согласны?
конкретно про парсер - не согласен.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 15:17 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
ilovb писал(а):
Вот нужно вам например XML распарсить. Писать свою библиотеку - это совершенно глупая идея.
Ораклы-то, да, дураки: http://download.oracle.com/javase/1.4.2 ... mmary.html :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 15:44 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Валерий Лаптев писал(а):
На РСДН появился такой текст
В разделе пятничный юмор что ли? Спасибо. Посмеялся. :D :D :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 17:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Нужно помнить про "краткосрочная тактика <> долгосрочная стратегия".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июнь, 2011 18:45 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Иван Кузьмицкий писал(а):
... Ораклы-то, да, дураки ...

1. И при чем тут Java? Ясен пень, для нее все свое пишут, т.к. хреново она с внешним миром стыкуется. (хотя я с жабой поверхностно знаком, но в данном случае это должно быть так)
2. Если бы вы потрудились вникнуть в ход рассуждений, то поняли бы, что речь шла о времени/стоимости/качестве. А Ораклы-то, да, маленька фирмочка из 3 быдлокодеров в Урюпинске....


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB