Comments 13
Знавал я в конце прошлого века одного дядечку, который специально запутывал свой код так, что без бутылки не разберешься. Эдакая ручная обфускация.
На вопрос — «а зачем?» был шикарный ответ: «Чтобы меньше криворуких смогло разобраться в моих идеях и скопировать их».
Хотя дяденьке на тот момент было за 40, подростковая глупость и гордыня так и не покинули его.
Не будьте такими дядечками.
На вопрос — «а зачем?» был шикарный ответ: «Чтобы меньше криворуких смогло разобраться в моих идеях и скопировать их».
Хотя дяденьке на тот момент было за 40, подростковая глупость и гордыня так и не покинули его.
Не будьте такими дядечками.
0
На прошлой работе у нас была интересная задача. Я был сотрудником ЦНИИ в Санкт-Петербурге, который писал прошивку для микроконтроллера. Само изделие должен быть изготавливать завод в Нижнем Новгороде. Соответственно всю документацию (включая исходный код) надо было передать ему.
На заводе было своё КБ, которое всё чаще задавалось вопросом «Зачем нам ЦНИИ? Мы же и сами может разрабатывать изделия!». И вот тут то и возникла задача, как бы им передать исходный код, который работает, но который они не смогут понять и использовать в качестве отправной точки своих разработок. И скилы такого дядечки нам бы пригодились.
На заводе было своё КБ, которое всё чаще задавалось вопросом «Зачем нам ЦНИИ? Мы же и сами может разрабатывать изделия!». И вот тут то и возникла задача, как бы им передать исходный код, который работает, но который они не смогут понять и использовать в качестве отправной точки своих разработок. И скилы такого дядечки нам бы пригодились.
-4
В этом случае нет. Разобраться как работает — однократно и профит высок, можно сделать. Поддержавать постоянно — профита мало, а сил заметно больше (если не свести к пункту 1).
0
Такие вещи решаются другим путём: если не хотите, чтобы кто-то обогнал вас на ваших разработках — двигайтесь вперёд сами.
0
В данном случае не получилось бы. У нас не было производственных мощностей чтобы изготавливать серийное изделие. А у заводчан они были.
На мой взгляд нанять дополнительных инженеров всё же проще, чем организовать промышленное производство. Поэтому в этой «гонке» преимущества были не на нашей стороне.
На мой взгляд нанять дополнительных инженеров всё же проще, чем организовать промышленное производство. Поэтому в этой «гонке» преимущества были не на нашей стороне.
0
Решить эту ситуацию можно, лишь убедив менеджеров, что плохой (хотя и рабочий) код грозит увеличением затрат на его обслуживание уже в ближайшем будущем.
Если Вы скажете менеджеру, что код который пишет команда плохой, то вся команда проклянет Вас. А так и код плохой и вся команда убеждает менеджера, что код идеален, просто сложный, но ведь современный продукт всегда сложный, поэтому трудно обслуживать и т.д…
0
UFO just landed and posted this here
Мне очень сильно помогло, то что в проекте практиковалось полное покрытие юнит тестами. То есть 2-5 тестов на каждую строчку кода.
Очень дисциплинирует и заставляет писать тестируемый код.
Pre-review не позволит попать коду в репозиторий, а post-review в рабочий проект.
Очень дисциплинирует и заставляет писать тестируемый код.
Pre-review не позволит попать коду в репозиторий, а post-review в рабочий проект.
+1
Вот список практик моего текущего проекта, которые в разной степени направлены на поддержание понятности кода.
Я, наверное, что-то упустил, но это не важно. Важно то, что всех этих практик все равно оказывается недостаточно. )))
- Придерживаться общего для проекта стиля. Да, его нужно выработать, задокументировать и автоматизировать контроль.
- Давать осмысленные названия переменным, классам, функциям, пакетам.
- Выровнять уровни абстракции. В том числе в рамках одного файла.
- Стремиться сохранить линейный формат кода на каждом уровне абстракции. Считайте, что вам удалось, если возможно сделать близкое к реальности предположение о том, что делает функция, прочитав её всего лишь раз сверху вниз.
- Избегать повторяющихся проверок. В идеале — вытеснить неопределенность в данных на максимально высокий уровень абстракции и сделать некорректное состояние невыразимым на нижележащих.
- Написать тесты, которые как минимум демонстрируют замысел.
- Зачищать ненужный код, комментарии, и т.д..
- Хороший комментарий в коде — это ссылка на документацию или объяснение, почему сделано именно так, а не иначе.
- Снабжать commit'ы внятными комментариями.
- Не объединять в одном commit'е разрозненные по смыслу вещи.
- Делать обзор собственного кода перед созданием pull-request'а.
- Не создавать слишком большие pull-request'ы. Если изменений слишком много — лучше создать несколько pull-request'ов.
- Делать code review. Никакого merge до консенсуального исправления всех значимых замечаний.
Я, наверное, что-то упустил, но это не важно. Важно то, что всех этих практик все равно оказывается недостаточно. )))
+1
Это что, эликсир?
Не ожидаешь увидеть его на Хабре
Не ожидаешь увидеть его на Хабре
+1
Странная статья без каких-то общих подходов.
Код должен быть такой, чтобы было понятно за чем (по какой причине) так написано, а не что код делает.
Код должен быть такой, чтобы было понятно за чем (по какой причине) так написано, а не что код делает.
+2
Sign up to leave a comment.
Как написать код, который будет понятен всем?