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

Приветствую коллеги!
На моё субъективное мнение - я медленно учусь и работаю.
Когда мне говорят сделай хорошо - мне требуется не мало времени для изучения материалов, осмотра со всех сторон.
Изучение вариантов: их плюсов, минусов. Контекста применения этих вариантов. Как вы уже могли заметить, даже для описания проблемы ушло не мало времени (много букв).
Искал способы ускорится, выводы такие: ни книги, ни ролики - ничего не надо, а надо лишь больше кодить.
Но, дело в том, что я 100 раз писал одну и туже функцию, и как потом выяснилось, неправильно. Я просто кодил, но почему-то чудо не произошло.
Может я излишне копаю, но не могу понять: если просят делать хорошо - это нельзя сделать быстро, хотя, может я слишком копаю. Иногда я поражаюсь от того, как мои коллеги делают это быстрее. Либо они уже знали, либо есть что-то чего я не догоняю...
Вот хотел бы узнать, как быстрее решать подобные задачи. При этом качественно.
Я всегда пробую несколько вариантов, смотрю - и так, пока не найду хороший (не идеальный), а именно оптимальный вариант. Но чтобы его найти, нужно 5-10 посмотреть, подумать, выбрать.
Когда же я делаю быстро (спешу), то вообще завал - куча ошибок и т.д.
И получается, что требуют делать быстрее, но быстрее делаю плохо, а более или менее нормально - медленно.
Опыта у меня около года, где-то.
Вопрос 1: Как быстрее учиться?
Вопрос 2: Как быстрее решать задачи?
Прошу поделиться своими способами решения подобных проблем. Спасибо!
  • Вопрос задан
  • 7279 просмотров
Пригласить эксперта
Ответы на вопрос 13
neuotq
@neuotq
full stack php, стартапы, прокрастинация
Если хочешь быть просто скрипто кидди, то иди тупо гугли или ищи на Ютьюб курсы как выучить условный реакт за 16 видосов.
А так настойчиво советую https://ru.hexlet.io/ , они строят свое обучение на том чтобы вышел именно программист, с пониманием зачем и почему. Для начала посмотри/послушая/почитай их блог, зайди в их Слак чат и тп. У них есть и бесплатные курсы. Платные своего стоят и если ты целеустремлен то гарантировано после завершения будешь соответствовать нормальному сильному джуну (а иногда и выше) в большинстве компаний.
Ответ написан
trofProg
@trofProg
Fullstack developer (Typescript / Python)
Я встречался с подобной проблемой и могу рассказать на своем опыте оптимальный путь роста. Он не является правильным и идеальным, а подошел мне, но и возможно, подойдет вам. Самое важное это стараться цепляться за работу любыми способами и понять, что всему свое время. пройти через говнокод придется в любом случае и этого не избежать - на ошибках учатся. Сейчас я Senior Javascript Developer. Начал с верстки будучи в университете и у меня никогда не было ментора. Изначально я обучался на курсах на ютубе. Способ хороший, но очень много говнокурсов, соответственно надо постоянно подкреплять статьями и документациями, гуглить непонятные вещи или best practices. Пока работал, постоянно учил новые технологии по фронтенду. В основном старался брать готовые проекты и их переписывать, а там снова гугл, статьи, и видеоуроки по непонятным вещам. Старался менять работу как можно чаще, если уже чувствовал, что мой новый навык набирает рост, а на текущей работе мне не могут предложить его развивать. На работе менторов не было, но старался учиться у други и смотреть как они работают, смотрел код и какие решения принимают в разных ситуациях. Соответственно база знаний пополнялась. По поводу нахождения быстрого и правильного решения. В этом случае все решает опыт. Чем больше у вас было сложных ситуаций, чем больше вы их преодолевали за свою карьеру, тем проще вам становится находить решения в новых проектах. Обязательно нужно уделить время и научится понимать основы программирования, именно базовые вещи. я это сделал спустя время работы с разными фрэймворками, но мне было легко учить теорию, когда за плечами уже много практики. Я говорю именно о понимании принципов ООП, паттерны программирования, специфику языка на котором программируете, переменные и как с ними работать более оптимально и тд. Потому что такие вещи вас будут обязательно спрашивать даже на позицию сеньера. Также советую быть перфекционистом в своем деле, это тоже приобретается со временем, но такие качества ценят в хорошем разработчике. Потому что он всегда докопается и будет искать более оптимальное решение, а не то, которое заработало хоть как-то
Соответственно:
1) Чтобы быстро учиться, нужно постоянно практиковаться, любыми способами искать работу даже трудную, но посильную и стараться выходить из любых ситуаций
2) Быстрые и правильные решение вы будете находить все лучше, накапливая опыт разработки проектов. Здесь всему свое время, вы сами со временем это почувствуете, главное стараться постоянно практиковаться, желательно в команде и чтобы вы видели свой результат и к чему он приводит
Ответ написан
iCoderXXI
@iCoderXXI
React.JS/FrontEnd developer
Профессор Савельев (мозговед, находится в ютубе) считает, что ресурсы мозга для мыслительной деятельности конечны, и, израсходоваав эти ресурсы, как правило максимум за 2-3 часа, мозг нуждается в восстановлении в течении не менее 12 часов. Из чего следует, что, понаблюдав за собой, можно с легкостью определить, во первых так ли это, во вторых каков конкретно твой личный ресурс и как долго ты потом восстанавливаешься.

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

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

Если ты банально недосыпаешь, то ресурс твоего мозга сокращается в разы, иногда на порядки, в результате всё сильно усугубляется.

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

Убедись так же, что у тебя сбалансированная диета. Если ты постоянно стимулируешь себя кофеином и сахаром (печеньки, шоколадки и пр.) то что-то очень сильно не так и у этого будут нехорошие последствия.

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

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

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

Иногда, когда еще работать и работать, а ты чувствуешь что всё, мозг встал колом, то лучше всего найти возможность и отключиться минут на 15. Чаще всего этого хватает чтобы освежиться и с новыми силами продолжить бой. Однако, если ты недосыпаешь, то ничего не получится, ты просто отрубишься и будешь спать до тех пор, пока тебя пинками не поднимут, после чего замученный и варёный будешь страдать до конца смены и наживать себе стресс. Поэтому ВЫСЫПАЙСЯ БЛИН! Отложи всё, засни в 22:00.

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

ЗЫ: Чем больше навыков ты выведешь на рефлексы, тем меньше нужно будет думать при реализации какой-либо рутины и больше останется ресурса для прорывов...
Ответ написан
GavriKos
@GavriKos
Есть два множества (на самом деле три, но два). Одно: быстро кодить. Второе: качественно кодить (чтобы небыло неправильных функций, как вы написали). Они фактически не пересекаются - нельзя и то и другое. Особенно при условии роста сложности задач.
Ответ написан
Adamos
@Adamos
Недостаток опыта - фантазии вместо анализа - говнокод вместо решения. Повторить.
Со временем опыт неудачных решений позволит вместо фантазий понимать реальные условия и проблемы. А уже наработанный код удачных решений позволит в разы сократить время на выполнение задачи простым повторным использованием кода.
Ответ написан
index0h
@index0h
PHP, Golang. https://youtube.com/index0h
Как быстрее решать задачи?

Если речь именно про написание кода - вам нужно овладеть IDE. Навигация по коду отнимаете довольно много времени.
Не пишите сложных классов / методов, юзайте SOLID. Вы не будете тратить много времени на осознание, что же делает этот скромный метод на 500+ строк со всей системой.
Давайте методам / классам имена, пусть и длинные но такие, которые ясно дают понять, что это и зачем. Например
UserRepository::findAllNotDeletedUsersWhichRegisteredSince(\DateTimeImmutable $dateFrom): array

Да, это очень длинное название, но согласитесь, у вас вряд ли есть недопонимание, что этот метод делает, да и в комментариях он не нуждается. Если же метод делает не совсем то, что в названии - это повод поставить автора в угол на гречку.
Делайте проверки входных данных в каждом без исключения методе, если данные не корректны - бросайте исключение, так как метод не может выполнять работу в штатном режиме.
Посмотрите еще тут (правда это про php, но есть много тем, которые актуальны и для других языков): Попросили проверить код, на что смотреть нужно?
Ответ написан
@InOdinWeTrust
Для одного года опыта это нормальная скорость учебы и работы.

1) Что такое скорость учебы?
Скорость, с которой вы "усваиваете" информацию - запоминаете ее и тренируетесь применять. То есть, скорость учебы показывает, сколько времени должно пройти от момента, когда вы информацию узнали, до момента, когда вы ее можете воспроизводить и использовать.
Скорость учебы индивидуальна, но есть определенные паттерны, которые хорошо заметны:
- Например, "быстрее" не значит "лучше". Быстрее - больше ошибок. Заученное за 10 часов плохо, с лихвой потом компенсируется временем, потраченным на поиск и исправления ошибок, переучиванием. Затраты времени на ликвидацию последствий всегда во много раз больше. Но это не значит, что можно расслабиться и изучать что-то по 15 минут в день, нет. Учеба по 15 минут в день - миф. Начинающий программист должен тратить минимум 2-3 часа в день, не считая времени работы. (Время работы, кстати, для учебы бесполезно)
- Учеба тем быстрее, чем качественнее базовые знания. Для программирования это архитектура компьютера, азы структуры программ, всякая дискретная математика, линейная алгебра, алгоритмы, структуры данных, паттерны, сети, теория баз данных. Чем лучше у вас с базовыми знаниями, тем быстрее учеба, тем проще дается все остальное. Без хорошего понимания фундамента компьютерной науки вы никогда не будете запоминать быстро и качественно - примите это как аксиому. Так в любой области знаний.

Итого: скорость учебы должна определяться исключительно качеством знаний. Быстрее не значит лучше.

2) Скорость работы.
Единственное, что дает высокую скорость работы - наличие привычек. Если вы в течении нескольких лет будете реализовывать только алгоритмы, к примеру, сортировки, то с высокой долей вероятности, когда столкнетесь с очередной задачей на алгоритм сортировки, вы ее на автомате сделаете очень быстро и качественно. Значительно быстрее, чем программист, который до этого 2 года занимался алгоритмами поиска. Очень опытные и умные программисты с богатым опытом решения нетривиальных задач, так же быстро решают другие нетривиальные задачи. Потому что у них есть выработанная годами работы привычка решения нетривиальных задач, свой подход, состоящий из привычных отработанной шагов.

Пока вы молодой и неопытный программист, вы все будете делать медленно. Главное - делать хорошо. Чтоб привычки, которые будут наработаны со временем, были правильными. Если работодатель требует быстрого решения задач, в ущерб качеству продукта, то он скорее всего подталкивает вас к полю с граблями, где изначальное "сделать за 10 часов", выльется в "сделать за 10 часов, и потратить еще 100 часов на поиски проблем, фиксы, переписывание всего с нуля". Конечно, есть требования бизнеса, многие задачи требуют быстрого решения. Нередко отличное решение "за 100 часов" проигрывает плохому решению "за 10 часов", потому что время упущено. Программирование решаете задачи бизнеса, а не наоборот. Тут необходимо следить за балансом, автоматизировать рутину, анализировать результаты своей работы, постоянно работать над собой, над качеством своих программ. IT отрасль любит, когда быстро и качественно - именно поэтому зарплаты тут настолько высоки.

Итого: быстро и качественно делать можно. Для этого нужно долго и упорно делать сначала качественно, постепенно ускоряясь, но не теряя качества.
Нельзя научиться делать быстро и качественно, делая быстро и некачественно. Можно научиться делать быстро и качественно, делая медленно и качественно.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Чтобы кодить качественно, нужно:
1. Читать актуальную документацию и использовать функции из актуальной версии API
2. Понимать по тексту кода трудозатраты CPU при исполнении этого кода
3. Использовать свой опыт и знания, полученные из разных источников (документации, статей/публикаций и из кода открытых библиотек)

Чтобы кодить быстрее, нужно:
1. Использовать ООП и паттерны проектирования.
2. Использовать правильные инструменты разработки и написания кода.
3. Быстро думать и печатать :)
Ответ написан
b0nn1e
@b0nn1e
Ruby and Rails
Опыта у меня год где то.

Будет 7 - будет по проще.
PS: идите работать в команду - там и посмотрите как другие делают, и вам по рукам надают в случа чего.
Ответ написан
lxsmkv
@lxsmkv
Test automation developer
Чтобы ускорить принятие решений по коду, есть смысл набросать список принципов и архитектурных решений , которым твой код должен в идеале удовлетворять. Эти принципы можно взять из собственного опыта и из книг. Но не надо применять принципы пользу которых ты не опробовал на практике.
Понаблюдай за своими размышлениями - они о том "какой из возможных подходов выбрать" или о том "я не знаю как вообще подойти к решению этой задачи". Если чаще первое, то помогут принципы. Если чаще второе - это неопытность. Против второго помогает много читать, дома садится и разбирать эту задачу, выделять в конкретной задаче общую проблему, смотреть какие способы решения существуют.

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

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

Мой способ "решения" - тратить большинство своего свободного от работы времени на размышления. Чтобы на работе по возможности просто применить решение и все.
Ответ написан
@asd111
Забей. Это генетические различия. Кто то бегает быстрее, кто то медленее - в программировании точно так же. У кого то получается быстро кодить, у кого то получается медленно.
Те кто быстро кодит обычно набирают пару сотен строк в день, а те кто медленно кодит ладно если накодят сотню.
Трудоспособность очень сильно зависит от генов, от строения тела. Например человек с низким давлением и низкой массой тела обычно работает медленнее чем человек с нормальным давлением и мускулами - даже в умственном труде. Причина в том что люди с мускулатурой обладают бОльшим запасом энергии и их нервная система легче переносит стресс, т.к. их нервные волокна прочнее и обладают бОльшим размером.
Ответ написан
xozzslip
@xozzslip
Где тут у вас шляпу повесить?
Быстро кодить — это сложный навык, который придётся отдельно в себе развивать. Суть навыка в том, что вам нужно придумать решение, которое с одной стороны даёт удовлетворительное качество, а с другой реализуется за минимальное время. Открывается простор для мощных хаков и изящных костылей. Умудриться заткнуть в себе внутренний голос перфекциониста, который предлагает всё переписать за пол года, и подставить минимально колечащие подпорки в существующий код за два дня. Это нетривиально.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
23 окт. 2018, в 12:31
1000 руб./за проект
23 окт. 2018, в 12:08
1200 руб./за проект
23 окт. 2018, в 11:59
500 руб./за проект