2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 О написании кода "для себя"
Сообщение05.01.2018, 23:44 
Заслуженный участник


27/04/09
28128
Ну вы же понимаете, что у плохого кода нет оправданий. :D Код пишется для людей, а не для компилятора. Люди читают глазами, функционал которых весьма ограничен, и им приходится помогать.

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 11:17 
Аватара пользователя


26/05/12
1534
приходит весна?
arseniiv в сообщении #1281587 писал(а):
Код пишется для людей, а не для компилятора.
Не согласен. Код пишется для компьютера. Поэтому все исключительные случаи должны кодом корректно отрабатываться и выдавать соответствующий результат. Вообще, программа — это кристаллизация математического знания, имея которое даже бездумный компьютер способен во всех случаях сделать всё правильно. Если же программист набросал по-быстрому что-то как-то какое-как работающее, то это ни разу не программа.

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 20:30 
Аватара пользователя


07/01/15
1145
B@R5uk в сообщении #1281659 писал(а):
Код пишется для компьютера.

Все-таки компьютер не есть компилятор.
B@R5uk в сообщении #1281659 писал(а):
Поэтому все исключительные случаи должны кодом корректно отрабатываться и выдавать соответствующий результат.

Сия прописная истина украшает ваши аргументы. Но она и никак не противоречит тому, что коды пишутся для людей.
B@R5uk в сообщении #1281659 писал(а):
Если же программист набросал по-быстрому что-то как-то какое-как работающее, то это ни разу не программа.

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 22:06 
Заслуженный участник


11/05/08
32166
SomePupil в сообщении #1281786 писал(а):
Но она и никак не противоречит тому, что коды пишутся для людей.

Но и людЯм бывает нужно через пару лет суметь прочесть даже свой собственный код (что даже и через пару недель не всегда тривиально). Так что некоторая минимальная дисциплина при написании даже наколенных программ -- весьма полезна.

С другой стороны:

B@R5uk в сообщении #1281659 писал(а):
Если же программист набросал по-быстрому что-то как-то какое-как работающее, то это ни разу не программа.

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 00:51 
Заслуженный участник


27/04/09
28128
B@R5uk в сообщении #1281659 писал(а):
Не согласен. Код пишется для компьютера. Поэтому все исключительные случаи должны кодом корректно отрабатываться и выдавать соответствующий результат.
Хорошо, код пишется одновременно для компилятора и людей. Но вообще всё-таки для людей: компилятору удовлетворить при некоторой сноровке тривиально, и несмотря на то, что удовлетворяя компилятору языка с хорошей статической системой типов, мы заодно удостоверяемся, что некоторого класса ошибок в программе не возникнет, о спецификации компилятор всё-таки ничего не знает. (Если только мы не напишем спецификацию в виде отдельной программы, но для этого язык должен быть вообще крутой, и ошибок в самой спецификации мы тоже должны каким-то чудом избежать.)

atlakatl
Нет смысла выделять функцию, если она используется один раз, а её смысл (как неделимого блока в целом) никак не документирован. Неужели так трудно писать такой простой код сразу хорошо? Я бы понял, если бы не было известно, что должна делать программа точно, какими фреймворками пользоваться и т. п. (но почему-то именно в таких производственных случаях хорошим тоном является как минимум документация написанного) — но тут же всё ясно — казалось бы, возьми и сделай по-человечески.

ewert в сообщении #1281805 писал(а):
Но и людЯм бывает нужно через пару лет суметь прочесть даже свой собственный код (что даже и через пару недель не всегда тривиально).
Именно потому надо потратить лишнюю минутку на документацию и возможное местами переписывание генератора, для которого
ewert в сообщении #1281805 писал(а):
входные данные задаются самим программистом, и никаких коллизий возникнуть просто не может

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 01:18 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #1282189 писал(а):
Именно потому надо потратить лишнюю минутку на документацию и возможное местами переписывание генератора,

1). Я не возражал против документирования. Хотя бы потому, что через несколько лет после написания всё забудется. Для себя, любимого, забудется.

Но.

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

И.

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

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 01:34 
Заслуженный участник


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

ewert в сообщении #1282195 писал(а):
Тут, знаете ли, соотношение "цена-качество".
Не только тут, везде. Опять же, какого-то особенного порога между программами «чисто для себя» и программами для неизвестного пользователя тоже нет.

А про проверки я вообще ничего не говорил. Насколько полагаться на корректность входных данных и насколько это делать по-разному для блоков разных уровней мелкости — отдельный от документации и опрятности (про которые я и писал atlakatl изначально; про проверки писал не я) вопрос.

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 01:43 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #1282200 писал(а):
Опять же, какого-то особенного порога между программами «чисто для себя» и программами для неизвестного пользователя тоже нет.

Вообще-то есть. Пишешь в конторе -- вынужден соблюдать общепринятые правила (и не по прихоти, а просто потому что контора иначе развалится). Пишешь для себя -- можешь позволять себе какие-то вольности.

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 01:55 
Заслуженный участник


27/04/09
28128
Ладно, здесь я недостаточно хорошо выразился.

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 02:01 
Заслуженный участник


11/05/08
32166

(Оффтоп)

arseniiv в сообщении #1282189 писал(а):
ewert в сообщении #1281805 писал(а):
Но и людЯм бывает нужно через пару лет суметь прочесть даже свой собственный код (что даже и через пару недель не всегда тривиально).
Именно потому надо потратить лишнюю минутку на документацию и возможное местами переписывание генератора, для которого
ewert в сообщении #1281805 писал(а):
входные данные задаются самим программистом, и никаких коллизий возникнуть просто не может

А, да. Вот документирование техзадания (пусть даже и сам его для себя сочинял) -- это действительно важно. К сожалению, терпения на это редко когда хватает. Это да, тут с собой действительно приходится бороться.


-- Пн янв 08, 2018 03:15:24 --

(Оффтоп)

Кстати, любопытный момент. Я многократно вновь и вновь вручную набиваю одни и те же коротенькие процедуры или фрагменты кода.
Что не есть грамотно, конечно. Надо бы иметь библиотеку и/или базу фрагментов.

Но я не могу себя заставить -- а почему (помимо лени, конечно)?

Вероятно, потому, что рыскать по базам уныло. А так я более-менее держу себя в тонусе.

 Профиль  
                  
 
 Re: О написании кода "для себя"
Сообщение08.01.2018, 06:48 


05/09/12
2587
Интересно, в рамках обсуждаемого вопроса возможно что-либо еще кроме банальностей? Полагаю, критерии зависят от целей кода. Если это олимпиада по программированию, или для утилитарных нужд нужно получить только результат здесь и сейчас, то нет смысла думать о том, как код выглядит - через полчаса его можно будет удалить. А если разработка в команде, да еще открытых модулей, да еще с перспективой поддержки - тогда и о людях можно подумать.

 Профиль  
                  
 
 Re: О написании кода "для себя"
Сообщение08.01.2018, 15:23 
Заслуженный участник


27/04/09
28128

(Оффтоп)

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

 Профиль  
                  
 
 Re: О написании кода "для себя"
Сообщение24.02.2018, 03:22 
Аватара пользователя


07/02/12
1403
Питер
ewert в сообщении #1281805 писал(а):
Очень часто, например, бывает нужно очень быстро накатать какой-нибудь генератор; при этом входные данные задаются самим программистом, и никаких коллизий возникнуть просто не может. В такой ситуации ловля блох тупо отвлекает от дела и ничему не помогает

Есть мнение, что хороший опытный программист впринципе не умеет писать плохой код. Просто по привычке. Ни по быстрому, ни по медленному. Как хороший врач или хороший механик не умеют делать что-то тяп-ляп, потому что "вроде тут и так должно прокатить".

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

 Профиль  
                  
 
 Re: О написании кода "для себя"
Сообщение24.02.2018, 08:36 
Аватара пользователя


14/12/17
1472
деревня Инет-Кельмында
bondkim137 в сообщении #1294050 писал(а):

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


Бросьте, это байка, распространяемая обленившимися сениорами.

 Профиль  
                  
 
 Re: О написании кода "для себя"
Сообщение24.02.2018, 09:06 


01/12/11

1047
arseniiv в сообщении #1282189 писал(а):
Нет смысла выделять функцию, если она используется один раз, а её смысл (как неделимого блока в целом) никак не документирован.

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

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

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



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

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


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

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