Что может изучать технически опытный старший разработчик программного обеспечения, чтобы продолжать совершенствоваться [закрыто]


15

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

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

Почему обучение становится менее продуктивным по сравнению с тем, что было раньше?

В то время это изменило ваш образ мышления, научило вас новым вещам и расширило ваши горизонты, которые впоследствии улучшили вашу текущую профессию или позволили изобрести / управлять / построить что-то новое. Почему это больше не так?


9
В соответствии с часто задаваемыми вопросами, вопросы о том, что вы должны делать дальше (проект, книга, технология или язык) не по теме. Я могу понять вашу точку зрения, но вы не можете знать все, что нужно знать о разработке программного обеспечения. Ваша проблема в том, что вам стало скучно, возможно, вы попали в интеллектуальную колею. То, что вдохновляет вас выйти из этой колеи, во многом зависит от вас и, вероятно, будет для кого-то совершенно другим. Но вот ответ: выйти из своей зоны комфорта . Узнайте о встроенных системах, математике, графике или о том, что вас интересует.
Калеб

2
Я не вижу ограниченности этого вопроса относительно того, что ФП должно делать дальше. Это скорее об общих подходах профессионалов для дальнейшего обучения. Может быть, это можно сформулировать лучше, но это не звучит как «что мне делать дальше» для меня.
Франк

3
Ну, честно говоря, я не знаю, какие вопросы не являются не по теме в наши дни. На самом деле в последнее время становится все труднее находить здесь интересные дискуссии. Хорошо, ж / д, просто заблокируйте тему ...
Кодер

2
Я считаю, что вопрос может быть отредактирован, чтобы вновь открыть. Насколько я могу судить, представленная проблема: «уменьшение отдачи ... изучение шаблонов, лучшие практики, эффективные руководящие принципы кодирования, модульное тестирование, многопоточность ...» является довольно актуальной темой для программистов
gnat

2
Вы получите более полное понимание предмета, когда попытаетесь научить его кому-то еще.
Джеффо

Ответы:


23

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

Основополагающие знания

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

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

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

Парадигматическое Знание

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

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

Специалист Знания

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

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

Базовые знания

Будь то, потому что это сфера вашей работы, или просто исходя из ваших личных интересов, но быть экспертом в области компьютерных наук и определенной области очень ценно и полезно. Я не говорю о побочных областях CS здесь, таких как компьютерная графика или AI. Вместо этого обратите внимание, что компьютеры укоренились в жизни каждого, и это делает все остальные области подчиненными компьютерам и областью, в которую вы можете попасть.

Это однозначно относится к категории «вне вашей области», но это не острая математическая «снаружи», а скорее область применения. Примите лекарство: я не советую вам становиться врачом. Тем не менее, изучение основ медицины для того, чтобы применить имеющиеся у вас знания в области компьютерных наук к проблемам этой области, действительно имеет смысл. Это варьируется от методов визуализации, робототехники до экспертных систем и простого управления данными для учета / администрирования. Хотя вы делали все это раньше, выполнение этого в другой области может оказаться совершенно новым опытом.

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

Дополнительные знания

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


+1, особенно для «Domain Knowledge» - это то, что сработало, по крайней мере, для меня.
Док Браун

1
Я согласен на 100% с тем, что вы говорите. Я проявляю большой интерес к более глубоким фундаментальным знаниям. О том, что я сейчас записан на курс по компиляторам. То, что вы не затронули, - это то, что я бы отнес к дополнительным знаниям: графический дизайн, управление проектами и т. Д.
Майкл Браун,

+1 за парадигму - я занимался ООП / процедурным в течение ~ 10 лет (и устал от него), а затем я начал изучать функциональное программирование, и мои глаза открылись целому новому миру.
Пол

9

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

Изучите следующий новый язык, или фреймворк, или то, что сейчас «горячо». Каждый год появляется технология, структура или язык, который выходит или достигает критической массы, что само по себе становится модным словом. Я могу подумать о некоторых из них за последние несколько лет: node.js, Ruby, jQuery. Это также, вероятно, повлияет на ваш образ мышления для других платформ, например, посмотрите, что ROR сделал с Java с Grails.

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

Что касается того, что вы можете сделать, вот несколько советов:

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

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

  3. Выберите хобби, которое имеет отношение к вашей работе. Есть много увлечений с переходом, думаю, AI, Lego Mindstorm, 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.