воскресенье, 14 января 2018 г.

[prog] Пара вещей, которые сильно удивили меня давеча

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


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

Не понимаю я вот чего: какие задачи позволяют разработчику тупо сидеть и педалить код часами напролет, лишь изредка отвлекаясь на изучение документации и митинги?

Ну вот честно. Мне, наверное, везло (или не везло, тут уж как посмотреть) и практически все серьезное, что приходилось делать, требовало предварительного изучения, обдумывания, проектирования, прототипирования, экспериментирования местами. Так что были дни, иногда даже недели, когда код вообще не писался, зато исписывалась и изрисовывалась кипа бумаги. Потом уже код педалился, это да. Но как раз набор кода занимал совсем небольшой процент времени. Дабы не быть голословным, совсем недавний пример. Описанная вчера штука обдумывалась долго. Непосредственно эта идея -- где-то дня три-четыре (а ведь до этого были и другие идеи). Затем еще день-два на небольшой прототип, при разработке которого код писался так же не весь день напролет. Потом уже сама реализация, которая заняла три дня, и в эти дни был написан основной код, большинство тестов для него, плюс Doxygen-овские комментарии.

Добавлю еще один важный фактор. Не отвлекаться на почту или какие-то другие входящие воздействия было просто до начала 2000-х, когда Интернета не было даже по dial-up-у. Но уже лет 10, если не больше, практически не бывает того, чтобы ты часа полтора подряд работал в текстовом редакторе и ни на что больше не отвлекался. Даже когда работаешь дома в одиночестве.

Вспоминается всего пара типов задач, с которыми доводилось сталкиваться, и которые позволяют работать в режиме "думать некогда, код педалить нужно". Во-первых, это формошлепство. Когда тебе нужно сделать десяток форм с несколькими десятками контролов на каждой, плюс какая-то первичная валидация данных в этих контролах. Вот тогда думать особо не о чем, нужно просто накидывать контролы на форму и записывать получение/сохранение данных. Во-вторых, это преобразование данных из одного представления в другое. Например, приходит к тебе сообщение X с полями m1, m2, m3 и m4. А тебе нужно отдать сообщение Y, в котором должны быть X.m1 и X.m4. Обе задачи очень похожи и обе, как мне думается, являются частными случаями задач автоматизации документооборота.

Если Crossover специализируется на такого рода задачах, тогда все становится на свои места.


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

И вот тут у меня уже вполне конкретный когнитивный диссонанс. Такое ощущение, что на JS-е программируют люди с другой планеты. Ибо, как по мне, любой вменяемый инженер бы просто скопипастил бы эти 25-30 строк чужого кода в свой исходник, может быть даже ничего не подправляя в копируемом фрагменте. И больше бы ни о чем не парился. А тут люди спокойно строят свои приложения на сторонних компонентах с такими развесистыми зависимостями, что вот эта история начинает восприниматься как документальный рассказ.

Какой-то страшный и непонятный мир -- разработка на JavaScript-е. Не удается отделаться от ощущение, что это бомба замедленного действия, заложенная под всю индустрию разработки ПО ;)

Комментариев нет: