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


15

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

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

Чому навчання стає менш продуктивним порівняно з тим, як було раніше?

Тоді воно колись змінювало ваш спосіб мислення, навчало вас новим і розширювало кругозір, що згодом покращило або вашу теперішню професію, або дозволило вигадувати / керувати / будувати щось нове. Чому це вже не так?


9
Per в FAQ , питання про те, що ви повинні робити далі (проект, книги, технології або мови) не по темі. Я можу зрозуміти вашу точку зору, але ви, можливо, не можете знати все, що потрібно знати про розробку програмного забезпечення. Ваша проблема полягає в тому, що вам стало нудно, можливо, потрапили в інтелектуальну колію. Те, що надихає тебе вийти з цього колії, дуже залежить від тебе , і, мабуть, буде чимось зовсім іншим для когось іншого. Але ось відповідь: виходьте зі своєї зони комфорту . Дізнайтеся про вбудовані системи, математику, графіку або все, що вас цікавить.
Калеб

2
Я не вважаю, що це питання обмежується тим, що далі має робити ОП. Йдеться швидше про загальні підходи, які професіонали мають для подальшого вивчення. Можливо, це можна краще сформулювати, але він не читає, як "що мені робити далі".
Френк

3
Ну, я, чесно кажучи, не знаю, які питання не є поза темою в наші дні. Останнім часом тут важко знайти будь-які цікаві дискусії. Ок, ж / д, просто заблокуйте тему ...
Coder

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

2
Ви глибше зрозумієте предмет, коли спробуєте навчити його комусь іншому.
JeffO

Відповіді:


23

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

Основоположні знання

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

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

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

Парадигматичні знання

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

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

Знання спеціалістів

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

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

Знання домену

Будьте тому, що це домен вашої роботи, або просто виходячи з вашого особистого інтересу, але бути знавцем інформатики та певної сфери дуже цінно і корисно. Я не говорю тут про бічні області CS, як, наприклад, комп'ютерну графіку чи AI. Натомість зауважте, що комп’ютери втрималися у житті кожного, і це робить кожне інше поле підпорядкованим комп'ютерам та області, до якої ви можете потрапити.

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

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

Додаткові знання

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


+1, особливо для "Знань про домен" - це те, що працювало принаймні для мене.
Док Браун

1
Я згодний на 100% з тим, що ти кажеш. Я захоплююсь глибшими фундаментальними знаннями. По мірі того, що я зараз записаний на курс з компіляторів. Те, на що ви не торкалися, - це те, що я б класифікував як додаткові знання: графічний дизайн, управління проектами тощо
Майкл Браун

+1 за парадигмою - я займався OOP / процедурними процедурами близько 10 років (і втомився від цього), а потім почав вивчати функціональне програмування, і мої очі відкрилися для цілого нового світу.
Павло

9

Я думаю, що програмне забезпечення постійно розвивається, і як таке, наголос на постійному вдосконаленні. Я розумію, звідки ви родом, останнім часом я відчував щось подібне, і зараз я переслідую MCSM на SQL Server.

Вивчіть наступну нову мову, або рамки, або те, що зараз "гаряче". Щороку з'являється технологія, рамки чи мова, яка виходить або досягає критичної маси, що вона сама по собі стає гучним словом. Я можу подумати про декілька з них за останні кілька років: node.js, Ruby, jQuery. Це також може вплинути на ваш спосіб мислення для інших платформ, наприклад, подивіться, що ROR зробив для Java з Grails.

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

Що стосується того, що ви можете зробити, ось кілька пропозицій:

  1. Будьте в курсі змін у громаді та того, що люди "вступають". Вивчіть нові стеки, принаймні, щоб вам вистачило рекомендувати їх, де це доречно

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

  3. Виберіть хобі, яке має певне відношення до вашої роботи. Існує безліч захоплень із перехресними перевагами, подумайте, ШІ, лего душевних бур, RaspPi тощо.

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

  5. Пройдіть сертифікацію вищого рівня лише для того, щоб довести, що знаєте свої речі

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

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


Смішно, я знаю одного з авторів 97 речей;)
Майкл Браун

Це гарна книга.
Сем

Ласкаво просимо. Це чудово, чи не так.
Сем

1

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

Для мене я занурююся в UX та графічний дизайн, тому що я вважаю, що це зробить мене кращим як розробник, щоб забезпечити не тільки елегантні структури в коді, але і елегантні інтерфейси для кінцевого користувача.

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

Завжди є чому навчитися, це просто потребує мислення поза межами.


0

У цьому питанні є дві частини: чому навчитися важче, і що ти можеш зробити?

Перша частина досить проста - більш складні теми складніші. Настільки складно, як навчитися програмувати, набагато складніше навчитися добре проектувати програми, а ще складніше навчитися проектувати великі програми. Справа в тому, що розширені теми важче, інакше вони не були б розширеними. Вам потрібно буде витратити більше часу на їх вивчення; більше часу практикується, щоб оволодіти ними.

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


-3

Кожен раз, коли я заходжу на сайт Lambda The Ultimate , я дійсно не можу / не можу думати, як знаю - все в галузі комп'ютерних наук.

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

"Чим більше ви знаєте, тим більше знаєте, як мало знаєте".


1
як це відповідає на запитання: "Чому навчання стає менш продуктивним порівняно з тим, як було раніше?"
гнат

Тому що, коли я заходжу туди, є статті, де щось на зразок 90% нових речей, які я повинен навчитися. Саме на це скаржиться ОП: Співвідношення речей, засвоєних за кількістю прочитаного рядка, що стає занадто низьким у його випадку. Ви також не знаєте цього сайту?
Стефан Ролланд

@gnat, і ви помиляєтеся на запитання , яке має назву: "Що може вивчити старший розробник програмного забезпечення, щоб продовжувати удосконалюватись?"
Стефан Ролланд

ви читали зміст питання після назви?
гнат

@gnat Так, я, звичайно, прочитав його запитання: це швидше твердження, якщо ОП запитує лише чому : через 10 років так званий старший інженер-програмник читає книги, які більше не змінюють горизонти, оскільки старший знає багато. Так, я це прочитав. Я посміхнувся. Я повторюю себе: "Чим більше ти знаєш, тим більше знаєш, як мало знаєш".
Стефан Ролланд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.