Найти в Дзене

Почему и как происходит переход от запутавшегося программиста Python, к профессионалу.

Илья, сегодня, завтра посмотрю Ваше задание.

Я открыл файл и у меня прекрасное настроение стало.

Ну так душа то паёт.

Вот смотрите, что писал этот парень я сбрасывал Icaros Nya:

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

Вот, вижу вы меня поняли.

Вам не сегодня, завтра команду набирать, и если ваши люди будут писать так:

self - ссылка на объект класса из которого был вызван метод,

ну хорошо в Вас то я уверен, что Вы будете мыслить так, как уже исправили:

присваиваем ссылке на экземпляр класса количество двигателей

А, как они будут мыслить? Если, вы к себе не повысите требования, то потом будете диву даваться, что ваша команда пишет не то, что вам хочется.

С одного вопроса, вы должны видеть программиста.

Тогда будет понимание общее, а кто его будет нести в команду. Тот кто её набирает.

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

В чём здесь подвох? Нужно чётко определить систему работы с кодом. об этом ниже.

Давайте сосредоточимся с вами на чётких определениях и на понимании этих вещей в любых других языках.

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

Причём за основу берём только исходный код и доки.

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

Я ж вам сказал, если пришли в школу, то я буду решать задачи школы, что бы с вашего кода, как можно больше научились другие ребята, а от вас жду кода, как у Рассела, главное не бояться

https://github.com/beeware/toga/blob/main/core/src/toga/app.py

дальше в видео.

Итак вот наши с вами задачи ближайшие:

Система работы с кодом.

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

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

https://groups.google.com/g/spb-tut/c/fC7E62i19cU/m/wRnPHdJcBAAJ

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

https://groups.google.com/g/spb-tut/c/1kOy90qmaN4/m/xNJceNN8AwAJ

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

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

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

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

Что касаемо Вас.

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

Проработать систему работу кода, которая объеденинит все языки(любые), С++ не исключение, там вообще все нужно собирать. тем более в Питон. как описывает Гвидо Вам Россум и давал пример, для понимания либо модула(я его до сих пор не знаю) либо  С ++. В то время не откуда было взять другое понимание и в наше время не откуда, кроме как создать ссылку на объект.

Применительно к вам(ребята - это задание именно для Ильи), кто хочет делате сам или не делает,.

Но я вас прошу разобраться с указателями С++,

И вот на что обратить внимание, там указатели видов

В C++ различают три вида указателей:

  • указатели на объект,
  • указатели на функцию
  • указатели на void,

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

Зачем вам это нужно?

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

https://docs.python.org/3/tutorial/index.html

Работа с С++ даст вам практический опыт конкретики и посмотрите на питон по другому, вот с этой позиции:

Интерпретатор Python легко расширяется новыми функциями и типами данных. реализованы на C или C++ (или других языках, вызываемых из C). Питон тоже подходит в качестве языка расширения для настраиваемых приложений.

Посмотрите, как это описывает рассел кейт магги

https://beeware.org/

Нативные инструменты Python...

-2

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

Прочтите это

https://docs.python.org/3/tutorial/classes.html#classes

В терминологии C++ обычно члены класса (включая элементы данных) public (кроме частных переменных , см. ниже ), и все функции-члены виртуальный . Как и в Модуле-3, нет сокращений для ссылки на объект. члены из его методов: функция метода объявляется с явным первым аргумент, представляющий объект, который неявно предоставляется вызовом. В качестве в Smalltalk сами классы являются объектами. Это обеспечивает семантику для импорт и переименование. В отличие от C++ и Modula-3, встроенные типы можно использовать как базовые классы для расширения пользователем. Кроме того, как и в C++, большинство встроенных операторы со специальным синтаксисом (арифметические операторы, индексация и т. д.) могут быть переопределен для экземпляров класса.

(Не имея общепринятой терминологии, чтобы говорить о классах, я сделаю случайное использование терминов Smalltalk и C++. Я бы использовал термины Модулы-3, поскольку его объектно-ориентированная семантика ближе к Python, чем к C++, но я ожидайте, что немногие читатели слышали об этом.)

То есть услышали меня.

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

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

В свою систему кода я бы рекомендовал включить работу с исходным кодом и доками.

Но с чётким пониманием метода применения.

Соединить документацию и исходной код в один метод, (показать на практике), в Джанго курсе его часто делаем.

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

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

https://www.youtube.com/playlist?list=PLuZJ9n46uMzVQLs2u4hwjfcQkZ8QVKea1

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

И пока остановимся на одном важном.

Сейчас у вас стоит сначала телега, потом лошадь.

То есть телегу толкаете Вы за счёт энтузиазма и интуиции, а лошадь(доки и исходный код), бегут сзади.

Но ведь можно делать в кайф и без напряга и минимум действий.

Вам нужно навести порядок в понятиях.

И начать нужно со строго отношения к себе к ЧТЕНИЮ кода. (поставить лошадь вперёд).

А при ЧТЕНИИ кода максимально строго относится к тому, что перед вами и оно не должно быть безхозным гугловским или

как здесь:

@abstractmethod      #декоратор обозначающий абстрактный метод kitchen_object
    def kitchen_object(self):
        """
        Создание абстрактного метода kitchen_object с параметром self

self - ссылка на объект класса из которого был вызван метод.

А теперь здесь ваше же описание:Душа уже поёт.

self.arrow = arrow # присваиваем ссылке на экземпляр класса количество двигателей

--------------------------------------------------------------------------------------

Или вот, где читаешь и душа поёт:

class Kitchen(ABC):
    """
    Создаем класс Kitchen который является интерфейсом для MainKitchen
Интерфейс - определяет метод(функцию kitchen_object),
который можно переопределить,
    но необходимость строгого применения отсутствует.

    """

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

self - ссылка на объект класса из которого был вызван метод. Бесхозность прочь.

Причём в базовых вещах такое не допустимо.

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

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

https://github.com/beeware/toga/blob/main/core/src/toga/app.py

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

можно сделать вывод о котором писал раньше.

Сосредоточить внимание на чтении.

Само, чтение не должно быть пущено на самотёк. а иметь чёткую цель.

Что бы меня услышали, сначала посмотрите код:

https://github.com/django/django/blob/main/django/shortcuts.py

строка 64 до 89

def get_object_or_404(klass, *args, **kwargs):

.....................................

Чтение  кода(чтение кода предполагает написание):

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

Но посмотрите по другому, порядок связей имеет решающее значение.

Обратите внимание на код, который дал выше из джанго:

В этом коде проверяются объекты других классов:

"Первый аргумент для get_object_or_404() должен быть Моделью, Менеджером, "

Смысл.

Вам нужно все расставить в голове, в данном примере кода , как нужно было выстроить обучение:

функции

Классы (общее понимание)

в этом моменте примерно нужно жёстко установить требования.

https://docs.python.org/3/tutorial/classes.html#class-objects

Объекты класса поддерживают два вида операций: ссылки на атрибуты и создание экземпляра. (отсюда исходим)

Все с этого момента атрибут должен иметь конкретное название с чётким понимаем. что он делает.

начало

self - однозначное чёткое определение.

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

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

как здесь ( hasattr)

if not hasattr(queryset, "get"):
klass__name = ( klass.__name__ if isinstance(klass, type) else klass.__class__.__name__

разделение пространства имён класса и экземпляра

И здесь в чтении, вы выделяете для себя применение(что я называю полуфабрикатами)

И при чтении кода добавляем доки.

----------------------------------------------------------------

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

Что есть вещи от которых зависят другие вещи, например правильное и чёткое понимание:

Объекты класса поддерживают два вида операций: ссылки на атрибуты и создание экземпляра. (отсюда исходим)

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

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

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

НЕ делайте задание Ильи, если вы пока изучаете функции читайте пока параметры, всему своё время....

Илья-если у вас хватит терпения проделать эту работу один раз, то открывая другой язык,

То это будет применимо к любым языкам.

Вот посмотрите на руководство java на сайте ibm

https://www.ibm.com/docs/en/sdi/7.1.1?topic=objects-attribute-object

как вы видите речь идёт о создании, авторы предполагают, что все читающие знают, что такое атрибут.

Но на сайте oracle все становится на свои места:

https://docs.oracle.com/javase/7/docs/api/java/util/jar/Attributes.html

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

Ну хорошо в питон атрибуты самые ясные, по словам гвидо Вам Россума, все что после точки, атрибут

но в джава тоже самое

The Attributes.Name

только по другом записывается

Резюме.

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

Надеюсь, вам будет интересно и не скучно.

Может мне не удалось все описать, но я попытался донести, как мог, остальное поставит на место код и время и практика.