LINUX.ORG.RU

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

 , , ,


4

4

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

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

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

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


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

?

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

не будет НИЧЕГО

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

можно тренироваться, косячить и отлаживаться неограниченно долго

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

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

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

Несомненно. В больших конторах, типа EMC, тоже не умеют свои 15 млн LOC на C++ писать, потому что малейшие изменения архитектуры там в кровь и кишки на много месяцев.

Мне плюсы вообще по стилю разработки не подходят, почти всю жизнь в R&D. Там не то, что нормальную архитектуру представить не можешь - проблему ещё не полностью понимаешь, надо исследовать. Соответственно, надо много раз на ходу всё быстро переделывать. На сях это просто достаточно. На общелиспе - вообще халява.

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

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

Несомненно. В больших конторах, типа EMC, тоже не умеют свои 15 млн LOC на C++ писать, потому что малейшие изменения архитектуры там в кровь и кишки на много месяцев

Ребята, я вас помирю — в разговариваете один про теплое, другой про мягкое.

Первый важный тезис, с которым, я уверен, вы оба согласитесь: 95% крестовиков писать код не умеют и никогда не научатся. Си, лисп, хаскель — не важно, они будут выдавать говнокод на любом языке. Хотя, конечно, хаскель они просто не осилят. А вот говнокод на лиспе они вполне успешно выдавали тоннами совсем недавно, каких-нибудь 25-30 лет назад. А вы можете представить себе, что говнокодеры на JS умудрятся написать такой код, от которого будет падать вкладка браузера? Я сам думал, что такого обычно не бывает, разве что в результате отдельного бага браузера — но нет, стабильно валится на любом браузере. При этом в проекте всего-лишь 100 тыс строк кода — какие миллионы? На миллионе оно уже никак не будет работать. И точно так же при изменении архитектуры кровь-кишки на много месяцев. У меня лично была история с отвалившимся модулем, который я писал месяц-два, и который был прекрасно отлажен.. до тех пор, пока архитектуру не «усовершенствовали», и давай половину кода переписывай и отлаживай заново.

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

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

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

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

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

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

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

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

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

Угу и дороже всего стоит C++ Builder, с таким качеством, что по справедливости его авторы должны еще приплачивать пользователям.

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

Рано еще, когда (если) наберется приличная кодовая база тогда и будут подсекать. С go это может произойти быстрее.

anonymous ()

Спасибо автору за интересный топик

Актуальная тема!

Факторы быстрого обучения:

  • качественная и доступная документация
  • реальные примеры
  • возможность быстро поднимать экспериментальный стенд
    • удобные и легко-настраиваемые возможности интеграции запуска примеров, тестов, экспериментов
  • отзывчивая система
  • владение английским (для разработчиков в качестве базы)
    • словари под рукой
  • фундаментальные знания (базовые)
  • настроенная рабочая среда
    • адекватный (расширяемый) редактор
    • иногда IDE (правильные)
    • подборка нужных утилит с навыками
      • как минимум
        • ssh
        • grep
        • man
        • tmux
  • psy-фактор
    • вербализация
    • навыки «отрефлексирования»
    • понимание проекции
    • интроспекция
    • умение формулировать вопросы и находить ответы
    • умение слушать
    • умение читать
    • умение анализировать и делать правильные выводы
anonymous ()
Ответ на: комментарий от mv

Соответственно, надо много раз на ходу всё быстро переделывать. На сях это просто достаточно.

Значит, и на крестах не хуже. Местами лучше: вывод типов - проще менять типы, std::visit - труднее накосячить, когда расширяешь variant. std::any - протаскивай любые типы.

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

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

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

Потому что наносекунды считаем.

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

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

Почему это мимо меня пролетело пару лет назад. Задолбался к этому идти.

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

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

Почему это мимо меня пролетело пару лет назад. Задолбался к этому идти.

saufesma ()