Skip to content

Fix punctuatio #167

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Aug 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions content/ru/1-1-Approach.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

> Главные навыки программиста — это чтение и исправление кода

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

> Исправление плохого кода — один из самых эффективных способов обучения

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

> Наставник — незаменим на любом этапе профессионального роста

Expand Down
2 changes: 1 addition & 1 deletion content/ru/1-2-Examples.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## 1.2. Примеры на языках JavaScript, Python и C

Примеры кода мы будем писать на разных языках, но предпочтение будет отдаваться не самым лучшим, красивым и быстрым, а тем, без которых нельзя обойтись. Мы возьмем `JavaScript`, как самый распространенный, `Python`, потому что есть области, где без него нельзя и `C`, как язык достаточно близкий к ассемблеру, все еще актуальный и оказавший самое большое влияние на современные языки по синтаксису и по заложенным в него идеям. Все три очень далеки от языка моей мечты, но это то, что у нас есть. На первый взгляд `Python` очень отличается от `JavaScript` и других C-подобных языков, хотя это только на первый взгляд, мы покажем, что он очень похож на `JavaScript` из-за того, что система типов, структуры данных, а особенно, встроенные коллекции в них очень похожи. Хоть синтаксически, различие в организации блоков кода при помощи отступов и фигурных скобок `{}` бросается в глаза, но на деле, такое различие не очень значимо, а между `JavaScript` и `Python` гораздо больше общего, чем у обоих с языком `C`.
Примеры кода мы будем писать на разных языках, но предпочтение будет отдаваться не самым лучшим, красивым и быстрым, а тем, без которых нельзя обойтись. Мы возьмем `JavaScript`, как самый распространенный, `Python`, потому что есть области, где без него нельзя, и `C`, как язык достаточно близкий к ассемблеру, все еще актуальный и оказавший самое большое влияние на современные языки по синтаксису и по заложенным в него идеям. Все три очень далеки от языка моей мечты, но это то, что у нас есть. На первый взгляд `Python` очень отличается от `JavaScript` и других C-подобных языков, хотя это только на первый взгляд, мы покажем, что он очень похож на `JavaScript` из-за того, что система типов, структуры данных, а особенно, встроенные коллекции в них очень похожи. Хоть синтаксически, различие в организации блоков кода при помощи отступов и фигурных скобок `{}` бросается в глаза, но на деле, такое различие не очень значимо, а между `JavaScript` и `Python` гораздо больше общего, чем у обоих с языком `C`.

Начнем мы не с изучения синтаксиса, а сразу с чтения плохого кода и поиску в нем ошибок. Давайте посмотрим следующие фрагменты, первый будет на `JavaScript`:

Expand Down
4 changes: 2 additions & 2 deletions content/ru/1-3-Modeling.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

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

Удивительно, но человек способен успешно решать задачи, сложность которых превышает возможности его памяти и мышления, при помощи построения моделей и абстракций. Точность этих моделей определяет их пользу для принятия решений и выработки управляющих воздействий. Модель всегда не точна и отображает только малую часть реальности: одну или несколько ее сторон или аспектов. Однако, в ограниченных условиях использования, модель может быть неотличимой от реального объекта предметной области. Есть физические, математические, имитационные и другие модели, но нас будут интересовать, в первую очередь, информационные и алгоритмические модели.
Удивительно, но человек способен успешно решать задачи, сложность которых превышает возможности его памяти и мышления, при помощи построения моделей и абстракций. Точность этих моделей определяет их пользу для принятия решений и выработки управляющих воздействий. Модель всегда не точна и отображает только малую часть реальности: одну или несколько ее сторон или аспектов. Однако, в ограниченных условиях использования модель может быть неотличимой от реального объекта предметной области. Есть физические, математические, имитационные и другие модели, но нас будут интересовать, в первую очередь, информационные и алгоритмические модели.

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

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

Expand Down
Loading