LINUX.ORG.RU

Как эффективно учиться?

 , , ,


4

4

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

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

Как вы поступаете в данной ситуации? Идёте за советом к коллегам, читаете книги/форумы?

В последнее время читаю различную литературу на проф. тематику, но чувствую что недостаточно выхлопа, ЧЯДНТ? Пытаюсь всегда сделать как лучше, а получается как обычно :) Вот может быть это просто лишние загоны? И там где кажется что ты сейчас напишешь говнокод - это и есть лучшее решение? Вместо того чтобы рефакторить всё 2 недели и на выходе получить всё то же самое + ещё пачку багов новых.


Как вы поступаете в данной ситуации? Идёте за советом к коллегам, читаете книги/форумы?

Все вместе.

Пытаюсь всегда сделать как лучше, а получается как обычно :)

«Сделать как лучше» на практике это сделать эксперимент и посмотреть что получится и получится ли лучше. Это абсолютно нормально но не всегда уместно.

Что бы не страдать фигней нужно не «делать как лучше», а решать конкретные проблемы, тогда ты будешь четко понимать на что конкретно ты тратишь время и имеет ли это смысл.

Но эти проблемы еще нужно научиться видеть и для этого нужно читать книжки, смотреть доклады с конф + опыт.

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)

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

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)

И там где кажется что ты сейчас напишешь говнокод - это и есть лучшее решение

От говнокода зависит.

fernandos ★★★
()

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

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

cobold ★★★★★
()

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

anonymous
()

Книги книгами, но истина рождается, как известно, в спорах. С существенной поправочкой: для стороннего наблюдателя. Сами спорящие каждый остаётся при себе. Поэтому я в своё время тупо проштудировал ветки «Архитектура программного обеспечения» и «Философия программирования» форума RSDN за все 10 лет его существования. Ну не сплошняком, конечно, но всё где было много ответов, много оценок или многообещающие заголовки. Один тезис, показавшйися мне не вполне очевидным но очень актуальным, попробовал на практике: lightweight ORM на очень сложной разветвлённой модели данных, где по идее без хибера с его lazy load никуда. Учитывая, что на той же работе я убил 4 месяца своей жизни, разгребая последствия идиотского архитектурного решения тимлида, проигнорировавшего мои предупреждения, я считаю что был вполне в своём праве.

dimgel ★★★★★
()

Хорошо питаться, не пить/курить/ширяться, спать не менее 8 часов в сутки, иметь регулярный секс.

Harald ★★★★★
()

Моя практика:

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

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

Пробовал теорию (тренинги, книги) до практики - смысла нет, без применения выветривается недели через три.

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

Именно сертификации потому, что в конце там обычно непростые тесты. Тесты «в рамках тренингов» (без сертификации) обычно простые.

Только так.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)

Как вы поступаете в данной ситуации? Идёте за советом к коллегам, читаете книги/форумы?

Конечно же тред на ЛОРе создаю

Harald ★★★★★
()

C++ и изменение архитектуры находятся в диаметрально противоположных точках вселенной. Более геморройный в этом плане язык ещё поискать надо.

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

mv ★★★★★
()
Ответ на: комментарий от mv

На плюсах в цивилизованном мире, практически, не пишут уже,

Двачую. Разве что монгу какую-нибудь, хром или LLVM. И всякие там разные игры, которые расходятся миллионными тиражами.

Цивилизованный мир уже давно перешёл на лисп - что ни база данных, что ни игровой движок, что ни операционная система - всё на лиспе. В крайнем случае - на схеме.

LamerOk ★★★★★
()

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

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

как понять что необходимо понять/выучить в текущий момент, а что можно отложить на потом.

Очень просто: учи только то что тебе нужно прямо сейчас. Если будешь учить впрок - либо оно тебе никогда не понадобится, либо к тому времени как понадобится уже забудется. Это конкретно про учить. А вот просто ориентироваться надо во всём, но для этого достаточно просматривать по диагонали релевантные статейки, тусоваться в форумах/чатах и почитывать чужой код.

В последнее время читаю различную литературу на проф. тематику, но чувствую что недостаточно выхлопа, ЧЯДНТ?

Читаешь различную литературу на проф. тематику, очевидно.

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

И там где кажется что ты сейчас напишешь говнокод - это и есть лучшее решение?

Точно лучшее чем не написать никакого кода.

slovazap ★★★★★
()

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

Если ты учишься в вузе, то на каком курсе?

P.S. ЛОР не лучшее место для таких вопросов. Здесь никого не осталось.

anonymous
()
Ответ на: комментарий от LamerOk

Двачую. Разве что монгу какую-нибудь, хром или LLVM. И всякие там разные игры, которые расходятся миллионными тиражами.

При этом тайтлы к ААА игре типа Farcry читаешь, и там ажно два программиста отмечено. Движок делают две с половиной конторы в мире, а всё остальное - голимая скриптня.

Цивилизованный мир уже давно перешёл на лисп - что ни база данных, что ни игровой движок, что ни операционная система - всё на лиспе. В крайнем случае - на схеме.

Мир перешёл на треклятый голанг, которому до лиспа, как до Пекина.

В эмбедде Rust всё больше и больше встречается.

mv ★★★★★
()
Ответ на: комментарий от mv

При этом тайтлы к ААА игре типа Farcry читаешь, и там ажно два программиста отмечено. Движок делают две с половиной конторы в мире, а всё остальное - голимая скриптня.

Ещё не вышедшая Diablo 4 пилится на Microsoft Visual Studio

https://devblogs.microsoft.com/cppblog/blizzard-diablo-iv-debugs-linux-core-dumps-from-visual-studio/

Да и вообще. Компиляторы для C++ до сих пор продаются(!!!!).

Rust и Go о таком и мечтать не могут.

Вот сейчас поставь цену на Rust хотя бы $10, и всё. Фанатов Rust как не бывало. Ещё бы они платили за инструменты, которыми пользуются…

fsb4000 ★★★★★
()

Прошу поделиться опытом

Хз, я всегда учил от корки до корки, потом пробовал на практике.

И там где кажется что ты сейчас напишешь говнокод - это и есть лучшее решение?

А ты делаешь наоборот. Что-то почитал, и хочешь сразу идеал сваять. Идеала вообще не бывает, а в твоём случае особенно. Не надо на этот счёт переживать, пиши как пишется: разработка это итеративный процесс.

PS: вообще ты страдаешь от общей проблемы школьного обучения. В школе чтобы получить хорошую оценку, нужно представить «идеальное» решение. Причём у тебя есть черновик и ты сначала можешь там покалякать, а потом на чистовую переписать. Сам по себе ответ у тебя не примут, там важно именно как ты решал. Ты привык к этому и думаешь, что так и должно быть. Но в жизни всё наоборот. Черновика нет, и правильного решения тоже нет. У тебя сразу офигевание и наступает: как же без помарок и ошибок запилить решение которое ещё и неизвестно даже тому кто дал задание? А никак, это и не требуется. Никто тебе оценку за решение ставить не будет. Нужно получить результат за приемлемое время, а уж как ты там будешь раскорячиваться и каких костылей наворотишь - это никого не волнует если результат достигнут. С опытом какие-то типовые вещи ты научишься решать сходу, но в целом ситуация не измениться. Поэтому не парься и запомни, ценен только результат.

no-such-file ★★★★★
()
Ответ на: комментарий от mv

голимая скриптня

Особенно шейдеры.

При этом тайтлы к ААА игре типа Farcry читаешь, и там ажно два программиста отмечено

Потому что:

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

2) ты, разумеется, врёшь.

Вот тут авторы первого фаркая. Вот тут авторы второго фаркая.

Узнать количество программистов в последующих фаркраях читателю предлагается самостоятельно.

LamerOk ★★★★★
()
Ответ на: комментарий от mv

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

Keltir
()

Как вы поступаете в данной ситуации?

Делаю самое простое рабочее решение, а потом рефакторингом делаю, чтоб от него (решения) не болели глаза и было не стыдно перед потомками. Но тут решает язык программирования, если спп то рефакторинг там занимаем много сил и чреват кучей ошибок (имно именно из-за этого проекты на спп это боль). У такого стиля по-моему даже есть какое-то «вумное» название, но для себя я его сам открыл +))).

В последнее время читаю различную литературу на проф. тематику

Самое бессмысленное, что я делал при обучении это читал книжки и вумные статьи - были не интересные, были интересные, но применения «книжным» знаниям я так и не нашёл, ибо они все сферические в вакууме, только собственный опыт и собственный взгляд на вещи.

vtVitus ★★★★★
()
Ответ на: комментарий от no-such-file

разработка это итеративный процесс.

+100500. Кстати, по этому поводу рекомендую книгу Фаулера «Рефакторинг». Понятно, что с тех пор, когда она была написана, утекло много воды, и современные IDE многие описанные в книге вещи делают автоматом мгновенно. Но многие другие вещи – не делают. Поэтому понимать технику ручных рефакторингов необходимо.

dimgel ★★★★★
()
Ответ на: комментарий от vtVitus

Спасибо всем за советы/хейт, для себя выводы сделал!

heh
() автор топика
Ответ на: комментарий от fsb4000

Да и вообще. Компиляторы для C++ до сих пор продаются(!!!!).

Ты не поверишь, но то же самое с Фортраном и Коболом.

mv ★★★★★
()
Ответ на: комментарий от LamerOk
  1. ты, разумеется, врёшь.

Ну, хорошо, может быть и не он, но что-то недавно (в пределах пары-тройки лет) видел с парой программеров. Бровь поднялась: «Могут же!».

Хотя в том же фаркрае основная масса плюсовиков над движком работала.

mv ★★★★★
()

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

man «управление требованиями», aka Requirements Management

про это читай и осваивай, невозбранно применяя.

anonymous
()

Вообще, проблема с книжками Фаулера, Бека и прочих авторов в том, что они описывают разработку командами каких-то финансовых систем. И там больше Java или C# подходит. Если берём C++ и небольшой коллектив или даже одиночку, который реализует что-то отличное от упомянутых систем, то акценты смещаются. Например, шаблоны GRASP - штука универсальная, а на счёт некоторых шаблонов GoF появляются сомнения. Также всякие инверсии зависимости могут значительно усложнить поддержку. Выворачивание кода под юнит-тесты тоже вызывает сомнение.

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

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

Kogrom
()
Ответ на: комментарий от mv

что-то недавно (в пределах пары-тройки лет) видел с парой программеров. Бровь поднялась: «Могут же!».

Оно и с одним есть: https://en.wikipedia.org/wiki/Cube_(video_game)

С ещё парой будет: https://en.wikipedia.org/wiki/Cube_2:_Sauerbraten

Так что могут, да.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Короче, два знакомых плюсовика на деревне есть. Любители этого дела. Один сам ушёл на жаве писать (денех больше), второго заставляют на жабаскрипте чё-то ваять, и он стенает от этого. Денег, впрочем, тоже больше платят.

Я завязал с C++ в 2008 году и жутко этому рад. Сишечка, лисп, FPGA, линукс кёрнел - наше всё.

mv ★★★★★
()
Ответ на: комментарий от mv

Один сам ушёл на жаве писать (денех больше), второго заставляют на жабаскрипте чё-то ваять

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

он стенает от этого

Пусть тайпскрипт учит, бездельник.

LamerOk ★★★★★
()
Ответ на: комментарий от anonymous

Когда последний раз ты писал на лиспе за деньги?

  1. А что, до сих пор легенда?
mv ★★★★★
()

Как эффективно учиться?

Не современно

Не хочу учиться, хочу жениться
anonymous
()

Что касается книг, то на определённом этапе лучше читать не конкретно про C++, а о философии программирования в целом. Например, книжка «Мифический человеко-месяц» Фредерика Брукса читается легко как художественная литература, но оттуда можно узнать почему вторая версия Вашей программы отправится в помойку и почему дополнительный программист, нанятый на определённом этапе разработки только увеличит срок разработки.

Также полезно будет почитать «Совершенный код» Макконнелла. Там, например, приводится конкретные данные о том, что водопад иногда будет эффективнее итеративной разработки.

Можно также почитать книжки по тестированию (например, «Искусство тестирования программ» Гленфорда Майерса с соавторами), где говорится, что задача тестера не доказывать, что в программе нет ошибок, а найти как можно больше ошибок, потому что ошибки в программе есть всегда. Эта идея позволит Вам спокойнее относиться к ошибкам.

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

Kogrom
()
Ответ на: комментарий от Kogrom

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

Зачем им эта книга.

Они "умеют" много лучше
anonymous
()
Ответ на: комментарий от anonymous

Зачем им эта книга. Они «умеют» много лучше

У многих ныне понятие о хорошем проекте приблизительно такое - «Он должен быть разработан с использованием 20-го стандарта».
Для таких «с стандартами в голове» главная цель - СТАНДАРТ …

anonymous
()
Ответ на: комментарий от mv

C++ и изменение архитектуры находятся в диаметрально противоположных точках вселенно

Возможно, ты не умеешь проектировать устойчивую к изменениям и расширяемую архитектуру, ибо всю жизнь пишешь разовые решения «здесь-и-сейчас»?

anonymous
()
Ответ на: комментарий от no-such-file

Но в жизни всё наоборот. Черновика нет

Ну здрааааасьте, приехали. У программистов нет черновика.

thesis ★★★★★
()

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

anonymous
()

Почему в дырке ничего нет?…
Ветер отчего дует? — Оттого, что деревья качаются!…

anonymous
()
Ответ на: комментарий от thesis

У программистов нет черновика

Нету конечно. В жизни ты всё и всегда делаешь сразу «на ответ у доски». Другое дело что неправильные ответы не являются проблемой сами по себе.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Локальные feature-ветки, QA, альфа-релиз, бета-релиз, бесчисленные RC - это все, безусловно, «ответ у доски».

Да программист - самая безответственная профессия в мире, в которой можно тренироваться, косячить и отлаживаться неограниченно долго и не будет НИЧЕГО.

thesis ★★★★★
()
Ответ на: комментарий от thesis

программист - самая безответственная профессия в мире

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

anonymous
()
Ответ на: комментарий от LamerOk

С тебя жир как с канализации течет. прибери за собой.

anonymous
()
Ответ на: комментарий от dimgel

lightweight ORM на очень сложной разветвлённой модели данных, где по идее без хибера с его lazy load никуда

А где сам тезис-то?)

izzholtik ★★★
()
Ответ на: комментарий от izzholtik

Запрятан между строк. :) Как котлета в желудке котёнка Гав. :)

dimgel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.