Виберіть зусилля з розробки коду чи лінь у світі банку


23

Я два роки працював у чудовому інвестиційному банку.

Я зробив декілька технічних проектів з бажанням створити код максимально оптимізованим, дотримуючись адаптованих хороших моделей дизайну, принципу SOLID, закону деметера та уникаючи всіляких повторюваних кодів ...

При доставці у виробництво => нуль помилок, все сталося так, як очікувалося.

Але більшість розробників прийшли до мене з метою уточнити, що весь мій код занадто складний для розуміння читання. Я прислухався, наприклад: "зробіть кілька if і instanceof, забудьте про поліморфізм, щоб виправити помилки у надзвичайних ситуаціях дуже легко". Я не вважав за краще відповідати ......

Знаючи цих розробників зовсім не цікаво, відмовляючись від зусиль, щоб зрозуміти хороший дизайн (наприклад, 90% розробників не знають, що таке шаблон стратегії, і роблять процедурний код і ніколи не розробляють дизайн, тому що хочуть, за їхніми словами, простоти ), мої менеджери проектів сказали мені, що я дійсно не так і занадто ідеаліст для світу Банку.

Що б ти мені порадив? Чи повинен я зберігати бажання дійсно хорошого коду чи адаптувати мене до більшості розробників, які, повторюю це, справді не цікаві за дизайнерським кодом, який, на мою думку, всією красою роботи нашої розробника.

Або навпаки, чи повинні вони засвоїти основні принципи ООС та найкращі практики, щоб адаптувати себе до мого коду?


19
Важко парити, як орел, коли ти працюєш з
індичками

8
Змініть свою організацію або змініть свою організацію. - Мартін Фаулер
Дон Робі

9
@ Mik378 Можливо, у вас є проблеми зі зв’язком. Якщо ви документуєте свій код настільки неохайно, як ви писали це запитання (і чим більше OO "сурових", тим більше необхідної документації, щоб люди знали, що ITradeSettlementVisitorповинен робити цей інтерфейс), ваші колеги мають право скаржитися. Одна справа - написати гарний код, який вам подобається, це зовсім інше - структурувати та документувати його таким чином, щоб зробити його доступним та корисним для інших.
Quant_dev

2
@quant_dev: Я думаю, ви припускаєте трохи занадто багато про Mik378. Його питання не здається мені погано сформульованим; він просто не носій мови. Мені не подобається багатослівність та переосмислений дизайн в OO стільки, скільки вам здається, але ситуація, яку описує Mik378, також дзвонить у дзвін: я працював із значною кількістю програмістів, які не могли зрозуміти простих речей, таких як булеві вирази (тому вони напишіть "if (exp) then True True False") ... Цілком ймовірно, що таких людей також лякають дизайнерські зразки, поліморфізм, і тому повернуться до звичайного старого процесуального кодексу.
Андрес Ф.

2
Я категорично не погоджуюся з тим, що зберігати код простим та легким у обслуговуванні для своїх колег - це лінь, як зазначено в назві.

Відповіді:


20

мої керівники проектів сказали мені, що я дійсно не так і занадто ідеаліст для світу Банку.

GTFO!

Час піти і пожаліти їх. Чому ти маєш ебать? Ви знаєте, що це буде коштувати їм грошей у довгостроковій перспективі з їх некомпетентним персоналом. Це не гра технічної дискусії. Йдеться про політику. Нехай вони навчають інших розробників або GTFO! Якщо у вас недостатньо політичної ваги, тоді GTFO! Шукайте компанію з кращими методами.

Єдина причина залишитися там - це адекватна компенсація за ваш головний біль. Тож вони краще платять вище середнього або GTFO! Я сумніваюся, що ви можете рости там як розробник програмного забезпечення. Зростання в нашій професії здебільшого досягається завдяки роботі з людьми, які кращі за вас і які заохочують кращі практики. І чим краще ви, тим вища ваша ринкова цінність для компаній, які піклуються.

Так, я знаю, що це не одна з моїх звичайних відповідей, але насправді, якщо ви не можете грати в політичну гру в цій компанії, GTFO.

Що б ти мені порадив? Чи повинен я зберігати бажання дійсно хорошого коду чи адаптувати мене до більшості розробників, які, повторюю це, справді не цікаві за дизайнерським кодом, який, на мою думку, всією красою роботи нашої розробника.

Я б не працював у компанії, яка хоче запропонувати неоптимальні рішення. Я хочу вирізати своє ім’я в програмному забезпеченні. Я хочу пишатися цим. Я не пишу процедурні заяви мовами, заснованими на парадигмі ОО. Я вірю у високоякісне програмне забезпечення, і якщо компанія цього не зробить, я буду GTFO! Сподіваюся, у вас вистачає "ебать гроші".


4
+1 - Одного разу мені спало на думку, що таке GTFO ... ( urbandictionary.com/define.php?term=gtfo )
Reddog

2
@Falcon Я повністю з вами згоден, і мені приємно знаходити людей, які діляться моєю ідеєю; і особливо, коли ви говорите: "Зростання нашої професії в основному досягається завдяки роботі з людьми, які кращі за вас і які заохочують кращі практики". Найдивовижніше і справді засмучує те, що я молодший розробник і не дуже навчився у старших. Дякую за вашу відповідь :)
Mik378

+1, я повністю згоден. Цей банк просто не здається хорошим робочим середовищем, і його проблеми здаються непереборними: погані програмісти, погане управління. GTFO справді!
Андрес Ф.

2
@ Mik378: Ваш нинішній роботодавець не в змозі повною мірою використати ваші здібності, а отже, не зможе заплатити вам те, що ви коштуєте. Краща організація зможе отримати від вас більше цінності і може платити вам більше.
Кевін Клайн

+1, Якщо ви могли б отримати більше грошей, ви отримаєте від мене 1000. Сам працюючи в інвестиційному банку, я точно знаю, з чим має справу Mik378. Це поживна середовище для токсичної поведінки, реагування на полярність та егоманію. Не ідеальне середовище для просування технічної майстерності.
Спустошена планета

18

Жорстке місце. Я думаю, що ви можете піти двома шляхами паралельно, витримуючи свою точку зору і виявляючи волю до компромісу:

  • Йдеться про гроші. Як і будь-яка робота із розробників, але оскільки ви наголошуєте на банківському середовищі, це має працювати ще краще;). Покажіть їм, що ваш стиль економить гроші. Знайдіть приклад того, як змінити вимоги можна було б зробити дуже легко через ваш дизайн. Спробуйте знайти фрагмент іншого коду (ви повинні переконатися, що ви не надто агресивні тут, але ей, йдеться про порівняння стилів коду), який схильний швидко порушувати, і покажіть їм, як вам не потрібно піклуйтеся про подібні проблеми, оскільки ваш код краще для початку.

  • Йдеться про гроші. Що робити, якщо ваш стиль кодування насправді коштує грошей? Це цілком може зробити, якщо інші люди витрачають більше часу, намагаючись зрозуміти ваш код, ніж те, що економиться правильним дизайном. Ви можете робити те, що робити технічно правильно, і все ж не сприяєте позитивним зусиллям команди. Крім того, можна перестаратися з дизайном OOP. Я з вами на стороні "гарний дизайн - прекрасний", але я намагаюся дати вам знати про їхню точку зору і про те, як вони насправді можуть бути правильними з їх точки зору. Паралельно попередньому пункту спробуйте знайти місце, де ви його переоцінили. Це дає вам змогу маневрувати: Ви можете сказати, гаразд, я можу бути дещо прагматичнішим тут і там, але дивіться, є також місця, де цей код справді кращий.


Дякую за розроблену відповідь. Я помітив вашу пораду :)
Mik378

Додаду до цього просту проблему FizzBuzz. Напишіть це на Java, а потім зробіть це знову в TDD-манері, раптом стає нечитабельним, чи не так ;-).
Martijn Verburg

@Martijn Verburg - Як ви вважаєте, TDD призводить до нечитабельного коду?
Дон Робі

@Don Roby - інколи так, особливо коли йдеться про щось на кшталт FizzBuzz мовою ОО
Martijn Verburg

+1 @ Nicolas78 "Крім того, можна перестаратися з дизайном OOP" - наприклад, створення примітивних типів даних об'єктів, наприклад, наприклад, int.
therobyouknow

16

Але більшість розробників прийшли до мене з метою уточнити, що весь мій код занадто складний для розуміння читання

Чи тобі взагалі спало на думку, що вони можуть мати рацію?

Я працював з тим, хто доклав багато зусиль для написання коду, який він назвав елегантним. Він витратив багато часу, декларуючи чужі роботи як не елегантні. Коли виникає необхідність підтримувати код, його код - це не той код, який я б вирішив модифікувати. Він настільки точний і вимогливий, що його зміна глибоко загрожує небезпекою.

Цікаве слово, яке ви тут згадуєте, - «складне». Код, який можна охарактеризувати як складний, рідко можна також описати як особливо хороший.


1
+1000 Погоджуюсь. Код для людей. Застереження полягає в тому, що інші кодери повинні мати можливість читати те, що пише більшість кодерів. Кожен, хто не розуміє основ, повинен бути вдосконалений.
Ієн Холдер

3
+1 @temptar за "Чи тобі взагалі спало на думку, що вони можуть мати рацію?" "Кодекс, який можна охарактеризувати як складний, рідко також можна охарактеризувати як особливо хороший"
therobyouknow

2
-1: Я не думаю, що вони мають рацію, трохи старший, і я думаю, що більш детальне прочитання питання робить це очевидним. Ключова фраза з ОП - це "уникнення всіляких дублікатів кодів ..." Він намагається ПУСИТИ код, але для цього потрібна витонченість, яку його колеги, очевидно, не вистачають. Він також цитував пропозиції своїх колег "просто додати if if ... instanceof". Це також говорить мені, що ОП на вірному шляху, і його колеги будують великий WTF.
Кевін Клайн

що мене хвилює - це "Занадто складний" ООП може бути хорошою справою, але він також може отримати дуже складний дуже швидко. Я підозрюю, що Оригінальний плакат, можливо, випив круту допомогу OOP і не зрозумів, що це не завжди найкращий спосіб кодування і що він може вводити багато зайвих складностей там, де це не потрібно.
Захарій К

Здається, що цей колега не має своїх тестів для подальшого обслуговування. Ви можете зв’язати це з менеджером проекту.

10

Виробники меблів вікторіанської епохи (принаймні, ті, чию роботу ми досі бачимо сьогодні) були справжніми майстрами, те, що вони зробили, було функціональним, красивим, добре виготовленим та розробленим та побудованим, щоб прожити все життя. Однак за останні 150 років світ змінився. Не так багато людей готові платити за таку майстерність, коли дешевші альтернативи є більш комерційно прагматичними при покупці столу для їдальні.

Багато програмістів хочуть бути майстрами старої, на жаль, комерція диктує, що це не може відбуватися постійно. У вас є вибір, адаптуватися або піти. Є компанії, які хочуть майстрів, але вони масово переважають тих, хто хоче продуктів, які в основному працюють, дешеві і зараз.

Натяк на мене, що ви не підходите для більшості комерційних розробок програмного забезпечення, - це "Коли доставка у виробництво => нульові помилки". Навіть Наса не досягла цього з космічними човниками.

Єдине місце, де ви звертаєте увагу на деталі, а отже, і початкову вартість, ймовірно, є прийнятною - це системи критичного для життя рівня 1 - наприклад, Авіоніка / Аерокосмічний, Автомобільний, Військовий та Медичний.


1
+1 @mattnz за "У вас є вибір,
адаптуйтесь чи відпустіть

2
Я не згоден - це банк . Їм, як правило, подобається, що в їх програмному забезпеченні немає помилок, оскільки помилки можуть дорости. Також рішення можуть працювати протягом років або десятиліть.

2

Проблема полягає в тому, що ви працюєте в неправильному місці. Це здається, що ти дуже академічно схильний програміст. Вам не буде добре в оточенні, в якому ви перебуваєте, і цілком ймовірно, що винайдете якийсь привід, щоб позбутися вас і вашого "занадто складного" коду. Вам можуть бути призначені незрозумілі завдання та / або дані огляди щодо низької продуктивності і такі, доки ви не залишитесь за власним бажанням або у них не з’явиться достатній заднім паперовим слідом, щоб обстрілити вас.

Я рекомендую вам знайти місце для роботи, яке оцінить ваші академічні схильності. Вони там. Ви також знайдете деякі, які стоять на огорожі між прагматичним та академічним. Така робота може бути найкращим варіантом, оскільки це дозволить вам запросити деякий хаос у свій підхід, коли ви допомагаєте іншим відновлювати їх.


+1 @jfrankcarr за проникливе спостереження "можуть бути надані незрозумілі завдання" (форма конструктивного звільнення)
therobyouknow

2

Перш ніж вживати таких кардинальних заходів, як зміна роботодавця, я б спробував покращити вашу власну здатність пояснювати непрограмістів, як ви, керівники, чому ваш спосіб кодування кращий для компанії, і економить на них час і гроші. А також переконайтеся, що ви не застосовували шаблони дизайну лише заради шаблонів дизайну - чи впевнені, що ви також дотримувались правил KISS та YAGNI? (Гаразд, стратегія та поліморфізм - це не ракетна наука, дайте вашим колегам певний час, щоб вони адаптувались та пояснили, чому ви обираєте такий підхід.)


Я згоден, проблема полягає в тому, що вони не хочуть вчитися, не хочуть змінювати свій менталітет (я не геній в Java, але коли я не розумію чогось, що більшість людей вважає відмінною справою знайте, я докладу зусиль, щоб навчитися цьому (книги, статті в Інтернеті, stackoverflow тощо). Підводячи підсумок, вони не хочуть боліти головами з візерунками (я кажу, що це шаблон, але я міг би сказати "Відмінний" принцип програмування більше взагалі), які не приносять їм більше грошей ... Важко сказати, але це так правда. Якби тільки програма працювала добре => Я, безумовно, не писав би цю тему.
Mik378

@ Mik378: ти багато говориш про те, що "інші роблять неправильно". Впевнені, що все, що ви зробили, було правильно?
Doc Brown

Поліморфізм @DocBrown має чіткий недолік фрагментації логіки між файлами, коли прості instanceof зберігають її в єдиному методі. Можливо, робочих підрозділів занадто мало?

2

У моїй компанії ми провели ряд семінарів на базі Clean Code Developer . Метою було створення форуму поза звичайним повсякденним бізнесом із його суворими та термінами та несправедливими компромісами, де розробники могли б дізнатися про принципи розробки програмного забезпечення (як ви вже згадували), методи програмування тощо та задуматися над своїми проектами та власна робота.

Також були обговорені приклади реального життя з реальних проектів. Відгуки учасників AFAIK були дуже позитивними. Однак важко виміряти фактичну вигоду.

Відвідування цих семінарів частково проводилось у спонсорований компанією час, частково у власний вільний час учасників. Ви не дістанетесь до тих колег, які не піклуються про навчання та просто хочуть виконувати свою роботу та йти додому, але для всіх, хто має певний інтерес до своєї власної роботи, це може бути цікавим.


Дуже подобається ця ідея.
темптар

2

Я б, перш за все, перевірив, що ваш шлях справді кращий. Об'єктно-орієнтований код може бути дуже приємним, але він також може бути кошмаром прихованих побічних ефектів, і кожна дія може вимагати декількох різних класів.

Ще краще перейдіть до InfoQ і дивіться розмови Rich Hickey на "Simple Made Easy"


1

Вам доведеться трохи поступитися, якщо ви хочете продовжувати працювати там без постійних зусиль. Група розробників, яка є процедурною, не збирається відразу приймати поліморфізм. Хоча вони можуть не в змозі спроектувати OO, вони можуть дізнатися з вашого коду. Вони можуть оцінити, що деякі з вас легше підтримувати.

В якості побічної записки вам потрібно задавати питання під час інтерв'ю, щоб побачити, який процес розробки та методологію кодування використовується, якщо ви вважаєте, що це важливо відповідати вашим уподобанням.


0

Надзвичайні ситуації трапляються. Ви не досконалі і їх руки будуть псувати код в який - то момент. Це, якщо ви ніколи не знімаєте час, що, як підтвердить ваш лікар, не корисно для вашого здоров’я. А це призводить до вищих шансів надати поганий код.

Ваш код може мати більш високу якість (недоказаний факт), але вони мають політику . (звичайно, як пекло факт)

Вас попередили дотримуватися політики, і ви несете відповідальність за те, щоб не дотримуватися їх. В надзвичайній ситуації. У банківській програмі. Я маю на увазі, якщо ваша мета - закінчитись бідно і в тюрмі я можу знайти багато смішніших і змістовніших способів досягти того ж результату.

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

(тоді знову ж таки, ваша компанія, ймовірно, не має внутрішньої політики щодо дизайну OO, але незграбний інженер-тренер COBOL, який намагатиметься виправити ваш код, виправить щось з повітря і, IMHO, у гіршому випадку, він ' у мене буде 40% шансу забити критичний удар)


1
Персонально, я думаю, що справжній дуже хороший розробник робить чудовий код так само швидко, як і брудний код. Я погоджуюся з вами щодо аспекту надзвичайних ситуацій ... але коли проект планується протягом 4 місяців, а розробники навіть не мають глобального уявлення про те, що вони будуть робити, як і якщо щось вже існує в додатку, який буде допомогти їм, я не міг це прийняти. Коли розробник каже: "Я знаю, що цей код жахливий, але я його ніколи не перероблюю, тому що можу його порушити", це смішно. Вони інженер чи ні? Інженер повинен ризикувати і робити якісь справжні хороші тести на одиницю, щоб бути конфіденційними
Mik378

1
Я погодився б, якщо б ми не говорили тут про банки. Я завжди відчуваю, що вони відрізняються від інших програмістів. Вони також зазвичай старші. (У моєму оточенні, принаймні, як і скрізь, я роблю висновок) Їх математика проста, але їх точність - ні.
ZJR

@ZJR Ви захоплюєтесь тут, коли ваші пророцтва щодо ОП роблять в'язницю за використання ОО. Більшість банківських кодів не підлягають такому контролю.
Quant_dev

0

Спробуйте пам’ятати, що програмування розглядається деякими як засіб для досягнення мети, а не заради себе. Подумайте про всі продукти та послуги, якими ви користуєтесь: чи витрачаєте ви багато часу на роздуми про те, чи зроблений під ним код елегантно? Або ви просто цінуєте їх, як вони просто працюють? Знайдіть галузь чи причину, якими ви захоплюєтесь, а потім знайдіть організацію, а потім запропонуйте їм рішення, що включають програмування, але не тільки це. Проблеми можна вирішити блискучо по-різному.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.