Skip to content

Commit

Permalink
Fix grammatical errors
Browse files Browse the repository at this point in the history
PR-URL: #158
  • Loading branch information
TangoPJ authored and tshemsedinov committed Aug 8, 2022
1 parent 38c880e commit 83b7b4a
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 21 deletions.
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,7 +4,7 @@

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

> Исправление плохого кода — один из самых эффективных способов обучения
Expand All @@ -16,7 +16,7 @@

> Применяйте дружественное ревью кода, перекрестное ревью, линтеры и форматеры
Переходим к упражнениям на снижение зацепления между несколькими абстракциями, потом между модулями, т.е. сделать так, чтобы нужно было как можно меньше знать про структуры данных одной части программы из другой ее части. Снижение языкового фанатизма достигается параллельным изучением с самого начала нескольких языков программирования и переводами с одного языка на другой. Между `JavaScript` и `Python` переводить очень просто, а `C` посложнее будет, но эти три языка, какие бы они ни были, нельзя не включить в курс.
Переходим к упражнениям на снижение зацепления между несколькими абстракциями, потом между модулями, т.е. сделать так, чтобы нужно было как можно меньше знать про структуры данных одной части программы из другой ее части. Снижение языкового фанатизма достигается параллельным изучением с самого начала нескольких языков программирования и переводами с одного языка на другой. Между `JavaScript` и `Python` переводить очень просто, а `C` будет посложнее, но эти три языка, какие бы они ни были, нельзя не включить в курс.

> С первых шагов не допускайте никакого фанатизма: языкового, фреймворкового, парадигменного
Expand Down
2 changes: 1 addition & 1 deletion content/ru/1-6-Engineer.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## 1.6. Обзор специальности инженер-программист

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

Как только какая-то технология или экосистема развивается в достаточной степени, чтобы на ней можно было создавать хорошие решения, она обязательно устаревает или производитель прекращает ее поддержку или она становится чересчур сложной. На моей памяти уже сменилось больше пяти таких технологических экосистем.
11 changes: 6 additions & 5 deletions content/ru/2-1-Identifiers.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@
- Функции: `calculateSubtotal`, `calculateTotal`, `validateExpenses`

Примеры плохих имен рассмотрим подробнее:

- Глобальная константа `Maximum` - не понятно, максимум чего, без второго слова константа не может быть глобальной; нарушены конвенции использования строчных и заглавных букв, вместо `camelCase` тут использован `PascalCase` и такую константу сложно заметить при чтении кода;
- Таймайт запросов `request_timeout` - нарушены конвенции;
- Таймаут запросов `request_timeout` - нарушены конвенции;
- Коды ошибок `ERCODE` - сложно читается; не понятно, что это коллекция кодов, а не один код;
- Массив цен `numbers` - не нужно называть массивы именами типов данных, которые в них находятся, из этого названия очень сложно понять, что там цены;
- Массив товаров `arrayOfGoods` - не добавляйте названия структур данных в имена переменных;
- Слишком длинное имя для коллекции товаров: `orderItemsInShopBasket`;
- Неочевидное сокращение `amt`;
- Кроме явного нарушения конценций `grp_N` еще и вводит в заблуждение, это плохое сокращение, не нужно экономить на буквах до такой степени;
- Кроме явного нарушения концепций `grp_N` еще и вводит в заблуждение, это плохое сокращение, не нужно экономить на буквах до такой степени;
- Не называйте переменные транслитом, как `itogo2` и не используйте цифры для именования переменных с похожим смыслом, попробуйте учесть оттенки смысла, например: `total` и `subtotal`;
- Если структура содержит два значения, как `tolalAndSubtotal`, то нужно назвать ее таким словом, которое обобщает их, например `order`;
- Кроме нарушения конвенций `BuyerCalculatins` еще и очень не точный, не понятно, какие именно вычисления;
- Кроме нарушения конвенций `BuyerCalculations` еще и очень не точный, не понятно, какие именно вычисления;
- Короткие сокращения типа `VE` - совершенно неприемлимы в качестве имен, если только это не общепринятые `i` и `j` для циклов или, `x` и `y` для координат и еще несколько подобных случаев.

> Объявление и присвоение (assignment)
Expand All @@ -36,7 +37,7 @@ let migrationYear = 622;
В C и C++ аналогичный код будет выглядеть так:

```c
int migrationYear = 622; // тут int обозначает целый тип
int migrationYear = 622; // тут тип int представляет целое число
```

В Python, как и в JavaScript, оператор присвоения не требует указывать тип, он определяется из типа литерала. А при присвоении, мы не можем запретить переприсвоить идентификатору другое значение.
Expand Down Expand Up @@ -112,7 +113,7 @@ console.log(migration); // вывод числа
- Число `-12000`, кроме обычной записи, может еще быть записано: `-12000n`; `-1.2e4`; `-12e3`; `-12e3f`; `-1.2e4d`; тут символы `n`, `f` и `d` обозначают тип, а `e` экспоненциальную форму;  в разных языках поддерживаются разные формы записи;
- Булевы литералы: `true` и `false`;
- Литерал массива: `[1, 2, 3]` в JavaScript и Python; в C и C++, Java, C# `{ 1, 2, 3, 4 }`;
- Литерал справочника: `{ 'uno': 1, 'due': 2, 'tre': 3 }` в Python; и `{ uno: 1, due: 2, tre: 3 }` в JavaScript;
- Литерал словаря: `{ 'uno': 1, 'due': 2, 'tre': 3 }` в Python; и литерал объекта `{ uno: 1, due: 2, tre: 3 }` в JavaScript;

Эта книга не является руководством по какому-либо языку, а особенности конкретного языка можно узнать из его спецификации, учебника или из примеров кода, которых тут достаточно, чтобы освоить запись всех необходимых литералов JavaScript и Python.

Expand Down
8 changes: 4 additions & 4 deletions content/ru/2-2-Types.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ console.log({ types });

> Ссылка (Reference)
Значение ссылочного типа (или ссылка) указывает на объект. Для `JavaScript` это все наследники типа `Object`, которыми явзяются все объекты, функции, массивы, типизированные массивы и объекты других встроенные классов (или встроенных прототипов).
Значение ссылочного типа (или ссылка) указывает на объект. Для `JavaScript` это все наследники типа `Object`, которыми являются все объекты, функции, массивы, типизированные массивы и объекты других встроенных классов (или встроенных прототипов).

> Структурные типы (Composed types)
Композитные типы или структуры состоят из нескольких скалярных значений (для JavaScript все они объекты). Скалярные значения объединяются в одно таким образом, чтоб над этим объединенным значением можно выполнять набор операций. Например: объект, массив, множество, кортеж.
Композитные типы или структуры состоят из нескольких скалярных значений (для JavaScript все они являются объектами). Скалярные значения объединяются в одно таким образом, чтобы над этим объединенным значением можно было выполнять набор операций. Например: объект, массив, множество, кортеж.

> Перечислимый тип (Enumerated type)
> Перечисляемый тип (Enumerated type)
> Флаг (Flag)
Expand All @@ -37,4 +37,4 @@ let flagName = false;

> Строка (String)
В большинстве языков к каждому символу в строке можно обратиться через синтаксис доступа к элементам массива, например, квадратные скобки. Но в некоторых языках отдельные символы можно так же и записывать, изменять строку. Есть языки, где строки неизменяемы, как JavaScript и Python.
В большинстве языков программирования к любому символу в строке можно обратиться через синтаксис доступа к элементам массива, например, квадратные скобки `[]`. Но в некоторых языках отдельные символы можно так же и перезаписывать, изменять строку. Есть языки программирования такие как JavaScript и Python, в которых строки являются неизменяемыми.
Loading

0 comments on commit 83b7b4a

Please sign in to comment.