1. Наша цель.(масшабируемое приложение)
2. Задачи, в которые мы упёрлись.
3. Порог входа (если видео смотрят новички).
- Пройдён начальный курс питон, понимание типов данных и операций.
- уверенная работа с функциями.
- начальное владение двумя языками и понимание разобрать фрагмент любого языка.
- Начальное прочное понимание основных компонентов Питон ООП.(объект, наследование, асбтракция, инкапсуляция, полиморфизм)
- отдельно понгимание метода super.
- Небольшой опыт работы с магическими методами.
3a. Навык уже должен быть.
4. Разрыв между начальными знаниями и сложными.
5. На что опора (проекты и доки).
6. Инструментарий.(markdown, jupyter - это минимум)
7. Задача в которую мы уперлись, а точнее разрыв между изучением языка и переходом к разработке.
8. Что включает сам путь.
Сергей и ребята, прочитать несколько раз и главное прочитать не одним днём, а в течение нескольких дней. Прочитали, переспали, записали мысли. Опять прочитали, дописали мысли, что вам взять на вооружение, что изучить, переспали. Как только картина выровнялась в мозгах и не меняется после сна, значит решение принято, продолжает работать до следующего скачка.
Сергей, я бросил все дела и целую неделю занимался планом для разработки.
Начальную часть сейчас представлю.
Я знаю, что у вас есть большое желание написать масштабируемый проект, точно напишем не переживайте.
Прошу вас прислушаться к рекомендациям. которые я сейчас дам.
Кому могут быть полезны эти рекомендации?
Людям, которые прошли начальный уровень и хотели бы заняться разработкой.
Я обращаюсь к Сергею, мне так проще, но каждый участник может относить к себе. кому интересна эта тема.
Итак, Сергей я ведь специально вам давал type(), что бы вы сами увидели, что есть большие пробелы между изучением языка/языков в целом и переходу к разработке.
на самом деле это ни какие не пробелы, я это уже проходил, просто нужно на данный момент немного нужно сменить методику.
наша с вами цель - масштабируемый проект с логикой, веб и мобильной частью.
Но ведь большой проект - это много маленьких проектов или задач. (вот этим мы сейчас займёмся).
И второй что описал выше. разработчик и я вижу вы это уже поняли обязан, именно обязан уметь определить методику, которую он будет применять при реализации той или иной задачи или задач.
Я очень хорошо понимаю ваше ощущение, но оно ошибочно, на самом деле все круто и правильно.
То есть у вас есть материал (понимание языка в целом), но я увидел и это думаю касается всех, что нет методики построения приложения.
Ну вот представьте у вас есть доски, кирпичи, стекло, арматура и многое другое).
Вы заметили, я думаю да, я сразу заметил и просто решил подождать дать вам время переосмыслить.
Что я заметил?
Что когда вы занимались проектированием у вас не собирался в голове код.
Хотя я увидел, что как только вы зацепились за миксины дело пошло веселее, вы уже увереннее начали проектировать.
Но именно в этом месте и появилась прорешина, то есть по сути я увидел, что вы поняли для себя, что вам необходимо определить методику написания приложения.
Сергей слово методика, я его взял с википедии, так как не знаю, как лучше сказать, вот вам будет понятен контекст применения этого слова в нашем с вами диалоге.
///////////////////////
Этот фрагмент текста произвольный и его цель только показать смысл слова методика в этом письме.
В объектно-ориентированном программировании под агрегированием (или как его еще называют - делегированием) подразумевают методику создания нового класса из уже существующих классов путём их включения. Об агрегировании также часто говорят как об «отношении принадлежности» по принципу «у машины есть корпус, колёса и двигатель».
/////////////////////
то есть разобрались, что я подразумеваю под методикой в данном случае?
/////////////////////////////////////////////////
Итак. когда я говорю методика, я подразумеваю в этом письме создание нового класса, объекта с изменением его свойств или без изменения, с внедрением новых действий или без них. Просто мне так короче писать.
Итак продолжим, вы заметили и точно уже поняли что программист должен определить методику реализации, и так же вы увидели, что сразу все предыдущие знания подтягиваются.
Что конкретно должен определить программист? Что за методику реализации?
Программист решает, как он будет выстраивать логику реализации.
Нужно понимать, что стиль ооп оно и так понятно.
Но при разработке стиль ООП начинает иметь очень конкретные названия, например множественное наследование, декоратор, миксин, агрегация, композиция, абстракция, интерфейс, метод super, магические методы, мета классы и т.д.
В принципе ранее все это мы делали, но цели у нас были другие, нам было достаточно знакомства и общего понимания. Так как знакомство - это необходимая часть любого процесса обучения.
Теперь все эти и другие понятия
множественное наследование, декоратор, миксин, агрегация, композиция, абстракция, интерфейс, метод super, магические методы, мета классы и т.д.
Для нас должны иметь немного другой контекст, то есть если ранее мы ставили понять, что происходит, то теперь мы ставим иные задачи.
Зачем это происходит и как.
Проще объяснить ну вот так можно.
Пример.
Задача нам нужно описать предприятие.
И мы точно знаем, что предприятие имеет ряд функций, например там есть персонал, там есть допуск к цеху, там есть станки или иное, там есть разные службы.
Мы начинаем думать примерно так.
Мне проще всего написать class предприятия, а необходимые действия добавить при помощи мискинов, я напишу миксин по выборке по человеку, второй миксин выборку по группе уже мне будет легко для людей назначит права к той или иной группе/цеху.
Я напишу миксин - время работы.
Я опишу класс станки, а потом при помощи миксинов напишу разрешения, а вот для продукции, если она меняется, я могу написать дектораторы, то есть процесс то же. но на выходе будет другой продукт.
При этом размышляя. я очень чётко уже понимаю, что при применении мискинов код не меняется, а просто добавляются действия, а при внедрении декораторов меняется возврат метода/функции........
Но в чем получается загвоздка уверенного применения всего перечисленного нет.
А что есть уверенное применение?
Уверенное применение, оно же и разработка, оно же и обучение разработке, оно же и мышление в стиле ООП, назвать можно по разному, но суть одна.
Теперь мы должны сместить наше внимание при написании кода на ту часть кода, которая отвечает на вопрос, зачем это происходит и как.
То есть на свойства.
Вы это уже делали и не раз, например при использовании конструктора __init__ , применяя его, вы понимали и представляли, что прописывая конструктор, вы получите в новом классе все методы от наследуемого класса.
Вы это делали в методом super, когда знали, что применяя этот метод, вы выбираете/назначаете родителя и избегаете конфликта, при наследовании.
Вы это уже делали с self, когда точно понимали, что будет создана ссылка на объект. выделена память и т.д.
До сих пор ваше внимание было сосредоточено на том. что происходит, а теперь ваше внимание должно быть приковано не только к общим процессам, но и ко всему class(У),
А именно, как будет меняться class, а точнее как будут меняться объекты и их свойства.
Первое что нужно уяснить, что все эти вещи:
множественное наследование, декоратор, миксин, агрегация, композиция, абстракция, интерфейс, метод super, магические методы, мета классы и т.д.
Они подражают нашему реальному мышлению, в контексте мышлению человека бытового в каждодневной жизни.
Ну например, как это происходит в жизни.
Вы хотите чаю.
Все верно, вы греете воду и наливаете чаю.
Но если вы остановитесь на секунду и подумаете, то оказывается даже попить чаю это очень сложный процесс, просто мы люди имеем мощный мозг супер компьютер, для которого все вычисления (мета классы), делаются на лету.
Все эти вычисления происходят, но вы их не замечаете. потому что они происходят ( много поточность) и забываются после чаепития (очистка памяти).
Но давайте немного углубимся - это грубо, но все суть отражает.
class Горячая вода.
Зачем и здесь уже перед нами становится задача, ведь много зачем. Попить чаю, попить кофе, попить с мёдом, попить с липой.
Да не все так просто. мозг уже написал на основе вашего желания жажда/пить, мискин попить.
И мозг уже дописал декораторы ведь накипятив воды, вы ведь можете попить не только чай, но например и кофе, действие/функция та же налить в кружку и насыпать.
Только вот можно насыпать и чаю и кофе и мёду положить. Действие одно, а компоненты разные (это и есть декораторы в жизни).
Иначе бы вы, не зная что делать, для чая могли набрать воды с крана.
Не удивляйтесь, ведь есть страшные примеры. Дай Бог вам здоровья. Но когда у человека недуги, такие как паркинсона или альцгеймера, то мозг начинает рождать страшные миксины и декораторы. Например, когда я продавал ходил по квартирам в двухтысячные, то видел, пока мы разговаривали муж женщины начал подпаливать кресло, поэтому с ним постоянно кто-то был. Вы скажете просто. Да нет не просто, а данной ситуации назначение спичек (класс огонь) осталось, а что где поджигать мозг и что и зачем, издал декораторы и миксины, но иные, так и до беды недалеко.
Я хотел вам показать, что в жизни вы это применяем. Каждый день, но просто никак не называем.
А ведь программирование делали люди, что бы реализовать функции мозга и приблизить их.
Вам первое задание, понаблюдать за собой и начать квалифицировать свои действия и разделять на код, то есть вы будете делать что и делали, только теперь вы себе должны понимать, пот это действие класс, вот это миксин, вот это декоратор. Найдите это в вашей жизни.
Ну а мы с вами отвлеклись и давайте закончим.
Я напомню.
«До сих пор ваше внимание было сосредоточено на том. что происходит, а теперь ваше внимание должно быть приковано не только к общим процессам, но и ко всему class(У),
А именно, как будет меняться class, а точнее как будут меняться объекты и их свойства.»
Вот наши действия.
Мы начали двигаться к разработке с миксинов, потому что от них легче перейти к более глубоким вещам.
А сам путь такой. Рассмотрение этих вещей на практике в разных условиях.
Например миксины мы пройдём в чистом питон, в джанго и в искусственном интеллекте.
Вот после этого понимание будет то, которое нам нужно.
Это первое что мы получим.
Второе ведь мы будем делать опять же в рамках нашей задачи, но пока мини программы, так же обретём знание, что любой масштабируемый проект это много маленьких проектов/задач/кусков кода.
Опираться мы будем на теорию Линуса, кому интересно помотайте новости вниз, там есть интервью с ним
То есть наша цель в конце концов будет сводиться к тому что бы видеть пласты кода и писать хороший код, а хороший код мы с вами уже приняли для себя. Что это для нас означает по тому же интервью. После написания кода мы будем смотреть, а нет ли лишних действий, которые могут затормозить или внести в код новое время или в дальнейшем непонятки.
Вы помните это интревью, там был код на Си, и автор написал 10 строк кода, при этом написал констукцию if/else и добавил удаление.
Линус переписал код в 4 строки и убрал удаление и конструкцию if/else, теперь точно однозначно выполнялась поставленная задача, без лишних действий.
Согласитесь просто и круто. Посему на этом этапе пора уже принять решение. Что для вас будет хороший код.
Но здесь мы добавим для себя обучающие шаблоны.
Вот нам будут в помощь проекты
Рассела Кит-Маги — одного из президентов проекта Джанго и компетентного в любых частях Джанго (именно написании его), то есть у него мы будем учится организовывать код — эта нам не даст зайти в тупик.
Да и проект этот молодой, кол там пока не сложный, но организация кода как и все у этого человека профессиональная.
Ну и главное напомню ради чего мы все будем делать. Что бы на данном этапе понимать зачем мы используем например множественное наследование и при его применнении, как будет изменяться поведение классов, и потом пойдём дальше подняв более тгонкие понятия агрегирования и там уже будем отслеживать. Как будут изменяться свойства.
Эти действия в конце концов приведу нас к успеху.
Давайте определим, что для нас будет успех на этом этапе:
1. Ну на самом деле важных вещей не так много, а значит нам под силу разобраться досконально, вот они….множественное наследование, декоратор, миксин, агрегация, композиция, абстракция, интерфейс, метод super, магические методы, мета классы и т. д.
2. Поменяв угол зрения и сами действия, то есть сместив наше внимание(единственный важный инструмент, которым нужно научится пользоваться) на сам процесс зачем/для чего это происходит и как, мы будем понимать. Как изменяется объект, а так как заранее будем ставить вопрос, зачем нам это нужно, значит сможем получить нужный нам результат. Иными словами будем работать со свойствами объекта и их изменением, как самих объектов, так и поведением.
3. Так как будем понимать зачем нам это нужно, то сможем разделять код на подзадачи, а если есть подзадача и понятно, что должно произойти, то впоследствии мы сможем постигнуть два важных качества разработчика:
- 1. По принципу Линуса видеть наш код в общем коде и задать вопрос, а точно ли выполняет код поставленную задачу в этом маленьком фрагменте, а значит сможем улучшить, ускорить и т .д.
2. Легко сможем подбирать другие инструменты либо писать их самостоятельно.
4. В конце концов мы будем заниматься именно чисткой разработкой, что впоследствии повлияет на все стороны нашей жизни в программировании. То есть мы будем стремится разрабатывать код, то есть писать библиотеки, которые перерасту в проекты, но вто же время эти знания дадут нам очень существенный опыт, который мы будем использовать для написания кода на готовых продуктах, например применяя множественное наследование в Джанго, мы сможем писать очень сложную логику, просто и с комфортом.
5. Таким образом, пробел, который сейчас образовался в вашем информационном языковом пространстве просто исчезнет, а если быть точнее, у вас появится опыт, который соединит конструкции мозга, которыми распоряжается каждый человек и не задумывается с языковыми конструкциями и это приведёт нас у нужному нам результату. То есть мы сможем смотреть на задачу и уже в мозгах, легко прогнозировать, как и что мы реализуем, при этом мы будем крутить наши мысли и в мозгах, как мысли понятные человеку + сразу же прокручивать наши мысли в коде.
Новичкам. Ничего не напоминает, ведь именно за этим люди идут в программирование, что бы разрабатывать.
Добавим сюда ваше изучение нескольких языков — эти снимет ограничения, добавим сюда опыт работы с инструментами и навыки ранее наработанные.
Кто не понимает о чём речь, смотреть здесь:
https://www.youtube.com/watch?v=Br4_muO_3R8&t=1205s
Так же важный момент, зачем изучать два языка, во первыхъ прочитать статью вот эту:
https://spb-tut.ru/guest/pages/317/
во-вторых посмотреть видео, здесь:
Python3).Ваш план и ответ на вопрос, а как собственно изучать язык программирования.
https://www.youtube.com/watch?v=R6RO8UKspZY
Вот он и успех, Вы разработчик, немного старания и будут из под вашего пера выходить масштабируемые приложения с логикой сложной, с серверной и мобильной частью.
Как вы видите, если по шагам и понимать, что происходит, то все последовательно и реально.
Информация для новичков. Для вас эти вещи рановато, но тем не менее это сообщение делает для вас работу, у вас появится энтузиазм, изучить до этого, что бы пойти дальше. Важно быть в школе и в группе, варится в этом.
Каждый кто читает на вряд ли сможет написать такую статью и объяснить эти вещи, если вы например год в программировании или два года. Но в этом и суть этого сообщения, моя мечта что бы вы пошли дальше, намного дальше. Я эти вещи понимаю, потому что я девять лет уже в программировании и много лет занимаюсь обучением.
То есть у вас есть выбор, проигнорировать пояснения вот с таких статей и полагаться только на свой опыт и прийти к этому лет через 8-9.
Либо начать с этого опыта, оттолкнуться него и лет через 9 быть уже намного дальше, чем даже вы можете себе вообразить. Я за второй вариант.
Спасибо за доверие.