LINUX.ORG.RU

История изменений

Исправление soomrack, (текущая версия) :

Всё относительно. Когда начинаешь ворочать MLOC правила игры существенно меняются. Я даже не уверен что в вузах можно к этому подготовить…

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

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

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

Мой пример, был демонстрирующий подход путем разбиения на функции по уровням абстракции, бизнес-логика это ядро, она соотв. в функции simulation, все остальное – детали, вынесены в отдельные функции. Это демонстрация подхода, который еще позволяет довольно сильно усложнить решаемую задачу, т.е. можно вносить другие события, можно делать более сложными отдельные функции, и пр. При этом, конечно, нужно будет начинать улучшать текущую заготовку, т.е. избавляться от magic-numbers, объединять данные в структуры, вынести вывод в консоль в отдельную функцию и т.п. Но сам подход, разделение на функции и сокрытие сложности путем выноса реализации очень хорош.

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

Потом шаблоны, они позволят создавать библиотеки менее привязанные к типам данных, т.е. тут уровень абстракции очень сильно повышается, и если честно, то на этом этапе уже в лучшем случае останется 10% от студентов, которые смогут это освоить на приличном уровне и будут потом использовать в жизни…

Потом паттерны…

Потом виртуальные машины…

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

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

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

Исправление soomrack, :

Всё относительно. Когда начинаешь ворочать MLOC правила игры существенно меняются. Я даже не уверен что в вузах можно к этому подготовить…

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

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

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

Мой пример, был демонстрирующий подход путем разбиения на функции по уровням абстракции, бизнес-логика это ядро, она соотв. в функции simulation, все остальное – детали, вынесены в отдельные функции. Это демонстрация подхода, который еще позволяет довольно сильно усложнить решаемую задачу, т.е. можно вносить другие события, можно делать более сложными отдельные функции, и пр. При этом, конечно, нужно будет начинать улучшать текущую заготовку, т.е. избавляться от magic-numbers, объединять данные в структуры, вынести вывод в консоль в отдельную функцию и т.п. Но сам подход, разделение на функции и сокрытие сложности путем выноса реализации очень хорош.

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

Потом шаблоны, они позволят создавать библиотеки менее привязанные к типам данных, т.е. тут уровень абстракции очень сильно повышается, и если честно, то на этом этапе уже в лучшем случае останется 10% от студентов, которые смогут это освоить на приличном уровне и будут потом использовать в жизни…

Потом паттерны…

Потом виртуальные машины…

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

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

Исходная версия soomrack, :

Всё относительно. Когда начинаешь ворочать MLOC правила игры существенно меняются. Я даже не уверен что в вузах можно к этому подготовить…

Угу. Ну вузы сегодня мало что могут сделать, если только это не целенаправленная подготовка программистов. Тем, кому я преподаю, у них всего один раз в неделю, по две пары, в течении 3 курса. Так что тут можно успеть только привить несколько подходов к написанию кода разной сложности (паттерны уже никак) и заставить их написать тысяч 10, может 20 строчек за все время. Ну так, знакомство с программированием.

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

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

Мой пример, был демонстрирующий подход путем разбиения на функции по уровням абстракции, бизнес-логика это ядро, она соотв. в функции simulation, все остальное – детали, вынесены в отдельные функции. Это демонстрация подхода, который еще позволяет довольно сильно усложнить решаемую задачу, т.е. можно вносить другие события, можно делать более сложными отдельные функции, и пр. При этом, конечно, нужно будет начинать улучшать текущую заготовку, т.е. избавляться от magic-numbers, объединять данные в структуры, вынести вывод в консоль в отдельную функцию и т.п. Но сам подход, разделение на функции и сокрытие сложности путем выноса реализации очень хорош.

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

Потом шаблоны, они позволят создавать библиотеки менее привязанные к типам данных, т.е. тут уровень абстракции очень сильно повышается, и если честно, то на этом этапе уже в лучшем случае останется 10% от студентов, которые смогут это освоить на приличном уровне и будут потом использовать в жизни…

Потом паттерны…

Потом виртуальные машины…

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

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