2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 21:10 
Заслуженный участник


11/05/08
32166
creative в сообщении #341029 писал(а):
Думаю не только я транслит не переношу.

Дело не только в возможных конфликтах. Дело ещё и в том, что транслитирование -- абсолютно чётко различает служебные слова и лично изобретённые. Что резко облегчает чтение.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 21:35 
Заслуженный участник


27/04/09
28128
ewert в сообщении #341053 писал(а):
абсолютно чётко различает служебные слова
...их выделение полужирным начертанием или другим цветом, что поддерживается почти всеми редакторами кода — от интегрированных сред до "технических" текстовых редакторов. :-) Если имя вдруг совпадёт со словом (хотя обычно слова полагается хоть чуть-чуть знать), не беда, можно подобрать синоним! (Лично у меня часто проблемы со словом type в Delphi, приходится писать kind.)
А читать транслит, наоборот, тяжело: мы не привыкли его читать, и потому готовых зрительных образов слов транслита у нас нет, в отличие от русского языка и, может, английского, к которому, во всяком случае, нетрудно так же привыкнуть при написании всякого кода. А если для названия переменной, класса или метода приходится лезть в словарь — разве это плохо?

-- Вт июл 27, 2010 00:40:51 --

(Оффтоп)

Sonic86 в сообщении #337702 писал(а):
Вопрос у меня к бывалым программистам - реально ли взять и все-таки сразу написать код почти весь правильно, без такого занудного тестирования, просто из головы. Или все-таки процесс такого тестирования-исправления неизбежен - все равно на него придется потратить много времени? Я все-таки думаю, что можно.
Кстати, по теме. Я тоже не "бывалый программист" (это только пока, надеюсь :-) ), но однажды (лишь однажды) у меня получилось написать довольно простую (но не тривиальную) программу целиком безошибочно. Скомпилировалась, запустилась, и — чудо! работала как было запланировано. Я ещё тогда очень удивился и попытался найти ошибки, но тщётно. Всего однажды.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 21:49 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #341061 писал(а):
...их выделение полужирным начертанием или другим цветом, что поддерживается почти всеми редакторами кода

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

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 22:01 
Заслуженный участник


27/04/09
28128
ewert в сообщении #341067 писал(а):
Вообще, грамотным программирование может быть -- только в асках.
Спорно! А если вы кодом захотите обмениваться с, допустим, немцем? Сразу падают транслит и ASCII. Юникод не для того придуман, чтобы его оставить в тёмном прохладном месте. Вроде бы. :wink:
К тому же, если код выделяется цветами и прочим, это не означает, что в файл добавляются символы [#0..#31] - [#9, #10, #13]. Файл остаётся чистым (надеюсь, вы это знаете и так)!
Может быть, это и вопрос вкуса, но вопросы вкуса кончаются, когда код используется не только вами.

-- Вт июл 27, 2010 01:02:45 --

ewert в сообщении #341067 писал(а):
они не содержатся в стандарте языка
Но, не правда ли, они могут весьма помочь?

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 22:08 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #341069 писал(а):
А если вы кодом захотите обмениваться с, допустим, немцем?

И ради бога. У немца -- все аски тоже есть, даже и более есть, чем у меня.

arseniiv в сообщении #341069 писал(а):
Но, не правда ли, они могут весьма помочь?

Неправда. Цветовыделение -- размыляет сознание. Программирование в жёстких кодах тем и хорошо, что дисциплинирует: сразу видно, что можно -- а что низзя.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 22:55 
Заслуженный участник


27/04/09
28128
ewert в сообщении #341072 писал(а):
сразу видно, что можно -- а что низзя.
Извините, а нельзя ли пример? Я, видимо, уже всё размылил, что можно. :? И чем мешает выделение ключевых слов (допустим для чистоты, что выделяются только они).

ewert в сообщении #341072 писал(а):
У немца -- все аски тоже есть, даже и более есть, чем у меня.
И как, спрошу я вас. Вторую половину кодовой таблицы мы имеем тоже. Притом несовместимую с Latin-1. Юникод имеет раздельные коды для символов из Latin-1 и кириллицы.

Забыл сказать, что кириллические идентификаторы (как позволяют юникодные среды) мне не по душе. И идентификаторы с буквами с диактритикой — будут мешать чтению. Ну, id из иероглифов, каны или, например, деванагари тоже, естественно. Как и русские, они будут непонятны многим. А для русских проблема ещё и в том, что мы привыкли к флексии (изменении окончаний в словах), а в идентификаторах никакая флексия не допустима, и потому ещё кириллические и транслитные имена в коде будут смотреться неудобно.
Но о комментариях забывать не надо. В них допустимы бо́льшие вольности.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 23:14 
Заслуженный участник


15/05/05
3445
USA
creative в сообщении #340989 писал(а):
Yuri Gendelman в сообщении #340985 писал(а):
'matrixOfDates' можно заменить на 'chisloSvidanij'
Мне кажется не стоит давать имена из русского языка данного транслитом. Проще давать им англоязычные имена.
Я просто привел перевод для тех, кто уже знает boy и girl, но пока не знает, что одно из значений слова date - "свидание".

-- Пн июл 26, 2010 14:26:16 --

Sonic86 в сообщении #337702 писал(а):
Вопрос у меня к бывалым программистам - реально ли взять и все-таки сразу написать код почти весь правильно, без такого занудного тестирования, просто из головы.
Народная молва приписывает одному из древних программистов (Шура-Бура ?) мысль о том, что если программа длиннее 50 строк сразу заработала, значит либо в ней алгоритм ошибочен, либо сама программа бесполезна.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение27.07.2010, 12:48 
Аватара пользователя


01/04/10
910
ewert

Например, если это C++ то можно использовать пространства имён, если переменная вне класса. Мой английский примитивен, но несмотря на это я стараюсь даже комментарии писать на английском (соблюдая основные правила грамматики).
Вообще любому программисту нужно всё постепенно переводить в английский язык. В идеале конечно надо владеть им как родным языком и читать книги в оригинале.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение28.07.2010, 21:19 


03/06/10
152
А есть ли рекомендации от какого-нибудь академического института, например, института системного программирования РАН или другой научной организации?

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение29.07.2010, 00:41 
Аватара пользователя


01/04/10
910
sergey83 в сообщении #341368 писал(а):
А есть ли рекомендации от какого-нибудь академического института, например, института системного программирования РАН или другой научной организации?


Рекомендации Дольда Кнута можно считать академическими, так как кроме своей известности он имеет официальный статус в научном сообществе.

Но всё же способы написания большинства практических (например, коорпоративных) программ являются эмпирическими, поэтому рекомендации не могут претендовать на абсолютную истинность.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение30.07.2010, 13:46 


23/11/09
130
Доброго времени суток!
Постараюсь ответить покороче :-) Не отвечая на конкретные вопросы прозвучавшие здесь, я обобщу все один ответ.
Я не профессиональный программист, но считаю себя опытным программером, это у меня хобби, около 14 лет, но на гуру не претендую. Я писал программы от "Хелло ворда" до Игровых движков с графикой, звуком и тд очень сложные (порядка 20-25 тыс. строк), этим я не хвалюсь, но это говорит о том что мой опыт хоть чего то стоит, коим я решил поделиться с вами.
Сразу скажу для примера что мою последнюю программу состоящую из 4 классов и 1000 строк я написал фактически безошибочно и особо не парился с отладкой, сразу все заработало и вообще пишу программы в принципе без косяков, ну если только я сознательно не иду на них из за лени или прочих соображений :D
Раньше у меня были такие ситуации когда программа усложнялась так, что наверное Вассерман без 0.5 (а то и 2л :D ) как говорится не разобрался бы! И приходилось тупо удалять все и кодить заново!

От демагогии к делу! Как это у меня получается?
За все время у меня выработалась четкая система правил как нужно программировать, она лично моя, для меня, вы сами решайте как вам делать!
К любой задаче я подхожу так:
Первым делом ее надо максимально осознать! И даже когда проблема ясна я не тороплюсь набивать код! Необходимо собрать максимум информации о проблеме, особенно будет ли программа совершенствоваться или она конечная, сделали раз и на всегда!
Хорошо допустим все аспекты задачи мы обварили!
Существует шутка у программистов что 70% времени они делают программу лежа на диване и лишь 30% набивая код! И это так и есть у нормальных программеров!
Крайне важно хорошо понять решаемую проблему!
Следующим шагом надо понять что мы хотим от программы! Чтобы она частично решала задачу или полностью и нужна ли она вообще!
Ну допустим нужна :-)
Далее я проектирую "каркас" программы, состоящий из логики и интерфейса.
Я как то отошел от всяких блок схем, они только захламляют мозг!
Надо просто и ясно нарисовать абстрактную схему (без всяких правил для блок схем) КАК ВАМ ПОНЯТНО, как будет действовать программа, и на какие части она будет разделена. Будет ли это несколько программ?
Далее под эту абстрактную схему работы программы ваяем интерфейс на бумаге, прямо рисуем основные окна и тд, не надо разрисовывать досканально, главное создать каркас!
Создание каркаса существенно облегчает дальнейшее написание программы и избавляет от кучи иттераций рефакторинга, переделок и тд!
Далее по принципу разделяй и властвуй я пытаюсь разделить программу на самодостаточные модули, куски, функции. Желательно чтобы они были самодостаточны, чтобы их можно было сделать отдельно и проверить их правильность, а потом использовать.
Когда все это сделано, можно себе представить как будет работать будущая программа, погонять примеры ее использование в голове.
И только когда программа существует в таком виртуальном, А ГЛАВНОЕ КОНЦЕПТУАЛЬНО ЗАКОНЧЕННОМ, виде я приступаю к ее реализации!
Помните: программа появляется из ИДЕИ а не из кода, ударов по клаве и часов просиженных за компом!

Теперь по коду:
Важно выполнять принцип повторного использования кода! Писать так чтобы его можно было потом понять или хотя бы было понятно как его использовать.
Необходимо чтобы интерфейс классов был понятным и классы были конструктивно законченными блоками программы.
Я пишу код с четко сформулированным форматом, пользуюсь нотациями именования переменных и конструирования названий функций.
Например текст в конструкциях подразумевающих под блок (например if, for, while и тд) текста я предваряю табуляцией, чтобы этот под блок выделялся из текста программы и сам текст программы тогда приобретает некую иерархичность. Если переменная находится в классе, она должна начинаться с m_ (member) если это float то m_f, если это переменная скорости m_fSpeed. Так же можно добавлять размерность переменной метры в сек допустим m_fSpeed_ms. Таким образом применение таких нотаций позволяет легко читать код и без комментариев, которые всеже желательны в программе хотябы в ключевых точках! Ненадо его сжимать в одну строку код должен быть читабельным.
В наименованиях я так же придерживаюсь правил.
Основным является установка на первое место более важного (глобального), на последнее менее важного. Например возьмем явлоко и банан, они оба фрукты, так и формируем названия m_FruitApple и m_FruitBanan. В данном примере это излишне, но иллюстрирует подход если нужно сформировать названия для сложных по смыслу объектов. В названия не обязательно должны входить существительные, могут и глаголы и тд.
Таким образом когда я пишу код, я не задумываюсь над операторами, как бы назвать переменную, форматом и прочей шелухой, так так у меня четкая система правил написания кода я сразу мысль перевожу в код не задумываясь!
Так же когда я читаю код, он сразу переводится в мысль!
Даже сложные нагромождения с таким подходом становятся понятными и читаемыми!
Я стараюсь не делать очень длинных функций их логику сложно понимать, все стараюсь разбить на части.
Так же важно знать набор типичных конструкций кода, всякие поиски и тд.

Так как у меня все программы имеют хорошо продуманную структуру они редко нуждаются в отладке я вообще ей редко пользуюсь :D
Это когда алгоритм криво продуман он не укладывается в голове, тогда и логика кода непонятна и мы прибегаем к отладчику!

Данная микро статья :D не претендует на полноту изложения темы.
Надеюсь хоть кому-то помог :-)

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение30.07.2010, 21:45 


03/06/10
152
А как быть в той ситуации, когда по мере кодирования необходимо вносить изменения во многих местах программы? Например, когда программа должна работать с файлом, но сначала, для отладки, используется команда печати на экран printf(), а потом некоторые из них изменяются на печать в файл fprintf(). При этом если перепутаешь printf и fprintf, то ошибка не сразу бросается в глаза.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение01.08.2010, 22:42 
Заслуженный участник


09/08/09
3438
С.Петербург
sergey83 в сообщении #341702 писал(а):
А как быть в той ситуации, когда по мере кодирования необходимо вносить изменения во многих местах программы?
Переписать программу так, чтобы изменения надо было вносить только в одном месте :)
sergey83 в сообщении #341702 писал(а):
Например, когда программа должна работать с файлом, но сначала, для отладки, используется команда печати на экран printf(), а потом некоторые из них изменяются на печать в файл fprintf().
Наиболее универсальный способ -- весь вывод осуществлять с помощью собственной промежуточной функции; тогда для перенаправления вывода потребуется модификация только этой функции.

Ну а в Вашем конкретном случае можно осуществлять вывод с помощью
Код:
fprintf(out, ...)
а out инициализировать как
Код:
FILE *out = stdout;
для вывода на экран или как
Код:
FILE *out = fopen(...)
для вывода в файл.

-- Пн авг 02, 2010 00:01:02 --

creative в сообщении #341159 писал(а):
Мой английский примитивен, но несмотря на это я стараюсь даже комментарии писать на английском (соблюдая основные правила грамматики).
Вообще любому программисту нужно всё постепенно переводить в английский язык.
Не надо абсолютизировать собственную практику: в большинстве случаев комментарии к коду программы лучше писать на языке, на котором написана основная документация по проекту, в первую очередь, технические требования. В противном случае от читателя кода Вашей программы могут потребоваться весьма существенные усилия для того, чтобы понять соответствие между Вашим "примитивным английским" и терминологией, принятой в остальной документации.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение02.08.2010, 00:13 


27/07/09
21
внешняя ссылка удалена /Toucan

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение02.08.2010, 01:00 
Админ форума
Аватара пользователя


19/03/10
8952
 i  AVM, замечание за нарушение следующего пункта Правил форума:
Цитата:
5. Внешние ссылки
...
5.2. Любая внешняя ссылка должна быть снабжена достаточно подробной аннотацией того, куда она ведет и каким образом относится к вопросу. Описание должно быть достаточным для того, чтобы читатели могли принять решение, стоит ли им переходить по данной ссылке.

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group