вопрос практикующим программистам
Sep. 22nd, 2005 12:21 amУ наших студентов на пятом курсе полугодовая стажировка.
Найти стаж обычно просто - всем хочется получить готового инженера по дешёвой цене - платят стажёрам, естественно, мало.
Обычно ребят берут разработчиками на конкретные проекты.
После окончания стажировки - защита - в комиссии кто-то от нас и руководитель стажа "с места". Иногда руководитель с места по тем или иным причинам отсутствует и вместо себя присылает оценочную бумагу.
Сегодня у меня "защищал" свою работу мальчик, у которого страсть - интеллектуальные компьютерные игры. Ему удалось найти соответствующий стаж. В компании, которую 5 лет назад организовали двое братьев - совсем молодые ребята - были у них какие-то идеи, взяли кредиты. Сейчас в компании шестеро, естественно, друзья-сокурсники. Такие маленькие фирмы, по крайней мере во Франции, всегда дружеские тусовки.
Так вот студент мой, страшно расстроенный тем, что его не оставили - нет у них денег ещё одному человеку платить - рассказал, что "отцы-основатели" с самого начала установили несколько абсолютно жёстких правил программирования.
Первое - понятное - функция должна умещаться на экране - не умещается - разбивай.
А вот второе меня поразило - комментарии запрещены. Идея в том, что комментарии позволяют писать нечётко, - дескать, прочтёт человек комментарий и всё поймёт, а на самом деле, ежели код хорошо написан, он должен быть полностью понятен при чтении с листа.
Это правило, естественно, совершенно противоречит правилам, которым учат на первом курсе, когда за отсутствие комментариев аж оценку снижают.
Как по-вашему?
Найти стаж обычно просто - всем хочется получить готового инженера по дешёвой цене - платят стажёрам, естественно, мало.
Обычно ребят берут разработчиками на конкретные проекты.
После окончания стажировки - защита - в комиссии кто-то от нас и руководитель стажа "с места". Иногда руководитель с места по тем или иным причинам отсутствует и вместо себя присылает оценочную бумагу.
Сегодня у меня "защищал" свою работу мальчик, у которого страсть - интеллектуальные компьютерные игры. Ему удалось найти соответствующий стаж. В компании, которую 5 лет назад организовали двое братьев - совсем молодые ребята - были у них какие-то идеи, взяли кредиты. Сейчас в компании шестеро, естественно, друзья-сокурсники. Такие маленькие фирмы, по крайней мере во Франции, всегда дружеские тусовки.
Так вот студент мой, страшно расстроенный тем, что его не оставили - нет у них денег ещё одному человеку платить - рассказал, что "отцы-основатели" с самого начала установили несколько абсолютно жёстких правил программирования.
Первое - понятное - функция должна умещаться на экране - не умещается - разбивай.
А вот второе меня поразило - комментарии запрещены. Идея в том, что комментарии позволяют писать нечётко, - дескать, прочтёт человек комментарий и всё поймёт, а на самом деле, ежели код хорошо написан, он должен быть полностью понятен при чтении с листа.
Это правило, естественно, совершенно противоречит правилам, которым учат на первом курсе, когда за отсутствие комментариев аж оценку снижают.
Как по-вашему?
no subject
Date: 2005-09-21 10:22 pm (UTC)no subject
Date: 2005-09-21 10:23 pm (UTC)no subject
Date: 2005-09-21 10:37 pm (UTC)no subject
Date: 2005-09-21 10:42 pm (UTC)Сто лет назад комментарии поощрялись.
no subject
Date: 2005-09-21 10:51 pm (UTC)no subject
Date: 2005-09-21 11:37 pm (UTC)Технология программирования которой учили в школе на заре прошлого века, строится на следующих неверных мифах:
1. Сама технолгия достаточно хороша и набрав сотню программистов с улицы из перевоспитавшихся допризывников, можно сделать большой проект.
2. Работу программиста можно измерить, и написанные спецификации увеличивают ее удельную эффективность
3. Самый большой грех - повторное написание уже написанного
4. Длиный текст не должен содержать goto потому что будет спагетти
.....................
Я знаю на самом деле только две абсолютные истины, которые очень близки к вышеперечисленной хакерской мудрости
1. Любая программа должна быть обозрима. Все что мешает обозримости (переструктурность, длинноты, комментарии) - вред
2. Программу не должен писать м$дак
no subject
Date: 2005-09-22 12:30 am (UTC)по крайней мере, над кодом с комментариями меньше засыпаешь:))
businesses' dilemma
Date: 2005-09-22 12:46 am (UTC)no subject
Date: 2005-09-22 12:47 am (UTC)no subject
Date: 2005-09-22 05:02 am (UTC)А по поводу краткости вполне согласна
no subject
Date: 2005-09-22 06:00 am (UTC)no subject
Date: 2005-09-22 06:51 am (UTC)no subject
Date: 2005-09-22 06:57 am (UTC)Комментарии к коду — почти абсолютное зло, они означают, что человек не сумел выразить свою мысль на языке программирования и пытается приделать подпорки на английском... Неясно, что код делает — перепиши, чтобы было ясно... А весь необходимый тебе английский упакуй в названия функций и переменных. Ну, например, что проверяет следующий оператор:
if ((x > 0) && !(x&(x-1)) {
понятно многим, но не каждому. Плохо. Переписываем:
inline bool is_power_of_2(int x)
{
return (x > 0) && ((x&(x-1)) == 0);
}
.....
if (is_power_of_2(x)) {
Теперь вроде и ежу понятно...
Исключения — отсылки к литературе или внешней документации.
Но это я именно про комментарии к коду. Комментарии к данным писать чаще надо, чем не надо...
no subject
Date: 2005-09-22 07:00 am (UTC)no subject
Date: 2005-09-22 08:27 am (UTC)Ещё несколько правил, нагло содранных мною из идеологии Eiffel:
1. Метод должен либо изменять состояние объектов (процедура), либо возвращать значение (функция). У функций побочных эффектов быть не должно. Помогает избегать глюков типа "вставили функцию в проверку условия и забыли о побочных эффектах" и искать вредные побочные эффекты (в функции можно не заглядывать).
2. Перехватчик исключений (блок try...catch/finally) должен быть один на метод, чаще всего - охватывать всё тело метода. Если нужно больше - надо дробить метод на несколько. Это требование того же рода, что и "функция должна помещаться на экране". Метод должен делать только одно логическое действие, а не сначала одно, потом другое.
3. Избегать private переменных и методов (видимых только методам этого класса). Вместо них использовать protected (видимые классу и наследникам). Лучше допустить, что кто-то завяжется на внутреннее устройство класса непредусмотренным образом, чем изобретать кривые обходные пути вокруг произвольно закрытой функциональности.
no subject
Date: 2005-09-22 08:29 am (UTC)no subject
Date: 2005-09-22 08:32 am (UTC)no subject
Date: 2005-09-22 08:41 am (UTC)no subject
Date: 2005-09-22 08:44 am (UTC)no subject
Date: 2005-09-22 08:50 am (UTC)Возможна ситуация, к сожалению, когда на формальную запись спецификации времени нет, и тогда лучше хотя бы неформальный инвариант чем никакого вообсше.
no subject
Date: 2005-09-22 08:54 am (UTC)Хотя цейтнот уже сам по себе порождает больше проблем и ошибок, чем все неверные правила программирования. Но это уже заботы прожект-менеджеров.
no subject
Date: 2005-09-22 08:56 am (UTC)Кто бы с этим спорил ;-)
no subject
Date: 2005-09-22 09:02 am (UTC)no subject
Date: 2005-09-22 09:10 am (UTC)no subject
Date: 2005-09-22 10:04 am (UTC)Вообще, следование общим правилам восполняют недостаток конкретного умения-понимания. Поэтому оно полезно в неоднородных по уровню коллективах.