Должен ли я запоминать это все?
=================================

 Вопрос к опытным программистам. Я только изучил Питон и взялся за изучения фреймворка Django и во время изучения я понял, что очень много мелких деталей из того, что я изучаю, улетучиваются в моей памяти, например: нужно создать модель для базы данных, а для этого нужен класс, который должен наследовать импортированный из файлов django другой класс и я все это помню, помню то, как надо прописывать поля и так далее, но забываются такие вещи, как модули, которые надо импортировать, особо наименнованные обязательные методы, функции, которые надо прописывать в определенных местах, обязательные аргументы и. т. д, все названия того, что я указал, забываются спустя день из неиспользования, если, конечно, на протяжении всего дня я не держу это в голове. Внимание, вопрос: должно ли быть так и надо просто практиковаться и все это само застынет в памяти или все же надо сильно напрячься и вызубривать всё это, или же все таки здесь уместно высказывание: "Инженер не должен все знать, он должен знать, где все искать"? Или как там. В общем, жду ответов. 

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

> должно ли быть так и надо просто практиковаться и все это само застынет в памяти или все же надо сильно напрячься и вызубривать всё это, или же все таки здесь уместно высказывание: "Инженер не должен все знать, он должен знать, где все искать"?

  

Расскажу из своей практики:  

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

Иногда я пробовал без копипасты писать - в этом сильно помогало автодополнение и автоимпорт.  

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

  

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

 Расскажу из своей практики:  

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

  

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

  

Пример как выглядит:   

  

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

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

 А для того, чтобы еще больше вспоминать, то я лично запоминаю определенные детали:  

1) Ты уже делал вещь "х" в проэкте "х"   

2) В Проекте х ведешь блокнотик с комментами, мини документацией для тебя или же в самых нижних строках пишешь примеры.   

- (approximate solution) - тоже очень хорошее решение, но я лично слишком ленив для такого, чтобы тратить на это столько времени)))  

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

  

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

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

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

  

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

 Практика, практика, практика. Сто раз забудете, на 101 вспомните. Ну и google, без него никак.