75

Ответ на пост «Как программисты пишут код?»4

Есть два типа людей: одни могут писать код, другие нет. Те, которые могут, делятся на еще на два: те, кто сразу видят решение, и те, кто итеративно работает.

Я в разработке с 2007 и всякого дерьма повидал. За сим есть, кой-чего сказать. Те, кто сразу видит решение, их меньшинство. По моему опыту, не более 10-15%. Остальные - только через итерации, либо фрагментарный подход.

Итак, поехали.

Комплексный подход. Программист сразу пишет примерно 80% кода, можно сказать, на одном дыхании. Далее - косметика, марафет, отладка. В 99% первоначальный код не меняется. Это, имхо, - либо врожденная способность, либо нечто приобретенное в сильно раннем детстве.

Итеративный подход. Программист пытается хоть как-то решить задачу. Криво, косо, но решить. Далее начинаются итерации, которых может быть очень много в засимости от сложности и погружения разработчика в предметную область. Это обычный подход среднестатистического работника, коих на рынке большинство. Имхо, таких 75-80%.

Фрагментарный подход. Программист пытается декомпозировать код, ибо сразу он его обработать не в силах. Далее идет пошаговая реализация различных его кусков, после чего попытка связать все воедино, что, как правило в 99.99%, приводит к значительным переработкам ранее готовых кусков кода. Это следствие неприспособленности мозга. Т.е. человек может писать код, но ему это очень сложно дается.

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

Лига программистов

2.3K пост12K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

9
DELETED
Автор поста оценил этот комментарий
после чего попытка связать все воедино, что, как правило в 99.99%, приводит к значительным переработкам ранее готовых кусков кода

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

Программист пытается хоть как-то решить задачу. Криво, косо, но решить.

Бизнесу именно это зачастую и нужно. Быстро выдать minimum viable product, не сильно упарываясь в оптимизации, но оставляя возможность для быстрой замены проблемных мест. А уже потом, если реально припрёт, рефакторить - оптимизировать - вылизывать.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Проектирование MVP - это отдельный скилл. MVP, если взлетел, часто может быть вообще полностью переписан (привет Zoom'у и пока-пока Clubhouse). Я непосредственно про код писал.

2
Автор поста оценил этот комментарий

Есть два типа людей: одни могут писать код, другие нет.

ИМХО. Одним интересно, другим, нет.

Те, которые могут, делятся на еще на два: те, кто сразу видят решение, и те, кто итеративно работает.

Те, кто уже имеет опыт решения подобных задач и те кто не имеет. Так я думаю будет правильнее. А то получается, что одни из космоса знания получают, а другим приходится работать.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Я тоже думал, что это только на основе опыта, но нет, лишь косвенно. Опыт тут играет роль лишь в плане выборки решений: если инструмент уже известен, его сподручнее применять.

Я людей собеседую уже 10-й год. И у меня до сих пор не ответа на вопрос "а чем вызанимались 10 лет, если не можете решить простую задачу?". Девяти из десяти я задаю вопрос.

показать ответы
0
Автор поста оценил этот комментарий

Ну тут странно - как можно заранее знать? Опыт показывает, что в процессе может стать очевидно решение, котором одним махом еще кучу проблем решает. Особенно если это решение комплексно-архитектурное. Заране запланировать такое сложно и бесполезно.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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


Ну, вот, сегодня я в 5-й раз вернул задачу на доработку, т.к. товарищ не может до сих пор реализовать код, который у него занимает 500 строк всего с тестами. Товарищ позиционируется как senior-помидор, почти 9 лет опыта, но код его пестрит логическими ошибками. Да, это новенький в моей команде, да, я ему помогаю, но ошибки он все равно допускает, причем большинство из них потому, что оне не понимает, как его код должен работать в системе. Фрагментарный разработчик :)

1
Автор поста оценил этот комментарий

Рабочий код <> Оптимальный и масштабируемый код, что очень удручает, когда потребуется что-то добавить.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Поэтому и разница в оплатах есть, и всякие приставки типа senior/помидор и тд.

0
Автор поста оценил этот комментарий

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

И начинаешь перебирать всё подряд

Такое редко но бывает, и естественно с наработкой опыта - количество таких моментов уменьшается


В данном конкретном случае - мне из API прилетает зашифрованная строка с помощью публичного ключа, RSA SSL чё-то там и вот это вот всё

В теории - берёшь да расшифровываешь с помощью закрытого ключа


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


Сижу перебираю эти варианты, так как раньше с таким работать не приходилось, а сдать задачу надо

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Странно, на чем вы пишете, что нет встроенных средств для работы с этим делом. Должно быть достаточно openssl. Либо, если надо все-таки ручной парсинг, то с файлом можно делать все, что угодно.


И тут у вас не итеративный подход. У вас просто нет знаний. Когда знания будут, тогда и надо будет смотреть, как в следующй раз вы будете решать подобную задачу.

показать ответы
4
Пробирочная культура
Автор поста оценил этот комментарий

Я программирую в качестве хобби, так вот, я всегда думал, что итеративный подход, которым я пользуюсь, а скорее даже тупо брутфорс, это от недостатка опыта…

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

И да, и нет.

показать ответы
0
Автор поста оценил этот комментарий

Есть два типа людей: одни могут писать код, другие нет. Те, которые могут, делятся на еще на два: те, кто сразу видят решение, и те, кто итеративно работает.
Я в разработке с 2007 и всякого дерьма повидал.
вот тут ЧСВ

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Это не ЧСВ, это ограниченный словарный запас, к сожалению. Я бы мог другое слово вместо "дерьма" подобрать, но не смог.

0
Автор поста оценил этот комментарий

Или, как вариант, вы никогда не работали на действительно сложных и старых проектах.
Никто не будет ждать пока вы полгода-год будете изучать весь проект, когда ваша зона ответственности - это 1-2% от оного.
Ваше ЧСВ несколько завышено, ИМХО.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Изучать проект весь нет смысла, чтобы выполнить простую задачу (спасибо, кэп!). Речь про серьезные фичи, оценка в человекочасах которых достигает неделю и больше, которые требуют явно больше, чем 1-2% от предметной области.


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

показать ответы
1
Автор поста оценил этот комментарий

Да как бы, я вас как программист программиста прекрасно понимаю :) Я к стати тоже сначала всё "в голове пишу" а потом разом вываливаю. Мне так быстрее. Но и тимлида которому на ежедневках выносят мозг про "что сделано за вчера?" тоже от части понять могу. Тут надо, что называется - "на берегу договариваться", чтоб он тоже знал что по цепочке отвечать. Хотя да, встречал упоротых которые если думают что если не видят движа - то его нет и хоть заобъясняйся. В прочем - мне проще, я очень редко работаю в командах, в основном один. А сейчас вообще только своё пилю, где я и заказчик и исполнитель и бэкэнд и фронт и вообще всё.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Это плохой лид, к которому приходят каждый день с такими вопросами. Спринты придуманы не просто так - они решают такую проблему :)

1
Автор поста оценил этот комментарий
Поделитесь, пожалуйста, одной. Как начинающему, весьма интересно узнать какие такие 'простые задачи' не могут решить опытные товарищи.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Обычно я использую, в зависимости от субъективно определенного уровня разработчика во время интервью одну из трех видов задач:

1) алгоритмическая простая (типа рекурсивной обработки какого-нибудь массива)

2) интеграционная (решить проблему сферического проекта в ваккууме)

3) код-ревью (найти ошибки в коде)


Как видите, даже исходя из описания, задачи простые. Я не прошу что-то с нуля в голове спроектировать, не прошу написать за 10 минут какой-то рабочий код, не прошу решить какую-нибудь хитровы**анную алгоритмическую задачу-аки-в-гугле, ибо это все не показывает никак уровень опыта и способностей кандидата.

показать ответы
0
Автор поста оценил этот комментарий

Тож поддержу, это на 99,9 недостаток опыта.

Да пример - тупейший парсер, в целом ясно как он должен работать - сграбил, разобрал, отдал нужное, но реализация "разобрал" зависит от результатов того что сграбил. Тут либо за счёт опыта ты знаешь какой выхлоп, либо пробуешь в итерации. И чет я сильно сомневаюсь что ТС сделал бы с лету рабочий парсер без ручного разбора сграбленного html.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я писал парсеры на awk для логов nginx и mysql - во, был треш :)
И на счет последней фразы - не понял. Если речь про механику парсинга в целом, то это частное решение узкого кейза, а не задачи в целом. Парсеры итеративно пишут даже убер продвинутые гуру разработки, живущие 10 лет на проекте.

0
Автор поста оценил этот комментарий

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


Попутно местами вводить мелкие "следы интеграции" - это если это нужно внедрить в что-то, что уже работает

А потом за несколько часов срыгнуть код согласно "комплексному подходу", отладить и пустить в продакт

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

НАверное, это вы про собственные petproject'ы? В коммерческой разработке такое маловероятно.

показать ответы
3
Немножко лучше тебя
Автор поста оценил этот комментарий
Часто выбор метода между "сходу" и "итеративным" зависит от погружëнности в проект и наличия легаси в проекте.
Можно пойти и написать сложное абстрактное решение сходу. В вакууме, когда проект новый и ты его знаешь как свои пять пальцев.
А иногда приходится идти итеративно, потому что в лабиринте из говна и палок надо найти нишу, куда будет идеологически правильно вкорячить своё решение. По пути что-то обязательно отвалится. И ещё раз. И ещё. И ещё раз. А потом выяснится, что это плохая ниша, ведь вот тут, в куче говна было уже очень похожее и надо доработать просто, а не громоздить ещё рядом.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Если честно, никогда не оказывался в такой ситуации. Как правило, я сначала изучаю проект, чтобы сформировать у себя видение решения. Без этого не могу.

показать ответы
6
Автор поста оценил этот комментарий
Фрагментарный подход. Как правило в 99.99%, приводит к значительным переработкам ранее готовых кусков кода


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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Фрагментарный подход применяют люди с фрагментарным мышлением. Это не связано с архитектурой приложений. Когда программист с такм подходом начинает выполнение задачи, то в голове примерно подобное, в среднем по больнице, происходит:

- Так, ага, тут, наверное, надо параметр добавить.
- Так, и откуда он придет? Наверное, надо функцию.

- Ага, заработало! Теперь надо функцию как-то вызывать.

- Хм... кажется, с функцией я поторопился, нужен класс.

- Класс сделал, но не просто так не подходит - нужен интерфейс.

.....

- Ну, вроде работает. Теперь надо как-то тестами покрыть.


Вот, о чем я.

1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Если что то сразу пишется на 80%, то это просто какая то задача, которую уже решал
Не соглашусь. Я как-то пытался практивать методику постановки задач, когда исполнитель сам пишет техпостановку, т.е. описывает места, где и что будет менять. Так вот, не взлетело: я пробовал это в разных конторах, "под руку" попалось, примерно, человек 30 за все вермя.
Не взлетело потому, что товарищи не могли придумать, как и что будут делать. Так и говорили: "Я только по коду смогу понять". Нет, конечно, писать постановки пытались, и иногда даже получалось, но, в целом, безрезультатно.

показать ответы
1
Автор поста оценил этот комментарий

Так если задача в целом понятна и надо просто ее красиво реализовать, возможно уже не первый раз.


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


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

раскрыть ветку (1)
Автор поста оценил этот комментарий

Как часто, думаете, надо в коммерческой разработке "изобратетать ракету"? По моему опыту отвечу: каждый раз, как комета Галлея прилетает :)

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества