You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/ru/1-4-Program.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
## 1.4. Алгоритм, программа, синтаксис, язык
2
2
3
-
Чем же занимается программист в процессе работы? Чем занимается компьютер? Есть много терминов, связанных с программированием, для определенности, нам следует выяснить разницу между ними. Самым старым понятием, тут является алгоритм, который мы все помним из школьного курса математики (алгоритм Евклида для нахождения наибольшего общего делителя двух целых чисел).
3
+
Чем же занимается программист в процессе работы? Чем занимается компьютер? Есть много терминов, связанных с программированием, для определенности нам следует выяснить разницу между ними. Самым старым понятием тут является алгоритм, который мы все помним из школьного курса математики (алгоритм Евклида для нахождения наибольшего общего делителя двух целых чисел).
4
4
5
5
> Алгоритм (Algorithm) — это формальное описание порядка вычислений для определенного класса задач за конечное время.
6
6
@@ -19,25 +19,25 @@ const gcd = (a, b) => {
19
19
constgcd= (a, b) => (b ===0? a :gcd(b, a % b));
20
20
```
21
21
22
-
Этот простой алгоритм, является рекурсивным, т.е. обращается к самому себе для вычисления следующего шага и предусматривает выход, когда `b` доходит до `0`. Для алгоритмов мы можем определять вычислительную сложность, классифицировать их по ресурсам времени и памяти, необходимых для решения задачи.
22
+
Этот простой алгоритм является рекурсивным, т.е. обращается к самому себе для вычисления следующего шага и предусматривает выход, когда `b` доходит до `0`. Для алгоритмов мы можем определять вычислительную сложность, классифицировать их по ресурсам времени и памяти, необходимым для решения задачи.
23
23
24
24
> Программа (Program) — программный код и данные, объединенные в одно целое для вычислений и управления ЭВМ.
25
25
26
-
У Никлауса Вирта есть книга «Алгоритмы + Структуры данных = Программы». Ее название схватило очень важную истину, которая глубоко запечатлелось не только в мировоззрении читателей, но и в названиях курсова в ведущих ВУЗах, и даже на собеседованиях, когда испытуемого просят сконцентрироваться именно на этих двух вещах. За первые 50 лет существования индустрии программного обеспечения, оказалось, что структуры данных не менее важны, чем алгоритмы. Более того, многие известные программисты делают на них основную ставку, например, известна цитата Линус Торвальдса: «Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и связям между ними». Дело в том, что выбор структур данных во многом предопределяет то, каким будет алгоритм, ограничивает его в рамках, вычислительной сложности и семантики задачи, которую программист понимает через данные, разложенные в памяти, гораздо лучше, чем через последовательность операций.
26
+
У Никлауса Вирта есть книга «Алгоритмы + Структуры данных = Программы». Ее название схватило очень важную истину, которая глубоко запечатлелась не только в мировоззрении читателей, но и в названиях курсов в ведущих ВУЗах, и даже на собеседованиях, когда испытуемого просят сконцентрироваться именно на этих двух вещах. За первые 50 лет существования индустрии программного обеспечения, оказалось, что структуры данных не менее важны, чем алгоритмы. Более того, многие известные программисты делают на них основную ставку, например, известна цитата Линуса Торвальдса: «Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и связях между ними». Дело в том, что выбор структур данных во многом предопределяет то, каким будет алгоритм, ограничивает его в рамках вычислительной сложности и семантики задачи, которую программист понимает через данные, разложенные в памяти, гораздо лучше, чем через последовательность операций.
27
27
28
28
Эрик Рэймонд выразил это так: «Умные структуры данных и тупой код работают куда лучше, чем наоборот».
29
29
30
30
> Код позволяет найти общий язык.
31
31
32
-
Однако, тот же Линус Торвальдс сказал нам еще и «Болтовня ничего не стоит. Покажите мне код». Это совсем не противоречит сказанному выше. Я думаю, что тут он имел в виду то, что программный код, не допускает двусмысленности. Это универсальный язык, который позволяет программистам находить общий язык, даже тогда, когда естественные языки, из-за своей многозначности не позволяют точно понять друг-друга, можно сделать это просто взглянув на код.
32
+
Однако, тот же Линус Торвальдс сказал нам еще и «Болтовня ничего не стоит. Покажите мне код». Это совсем не противоречит сказанному выше. Я думаю, что тут он имел в виду то, что программный код не допускает двусмысленности. Это универсальный язык, который позволяет программистам находить общий язык даже тогда, когда естественные языки, из-за своей многозначности не позволяют точно понять другдруга, можно сделать это просто взглянув на код.
33
33
34
34
> Инженерия (Engineering) — извлечение практической пользы из имеющихся ресурсов при помощи науки, техники, различных методик, организационной структуры, приемов и знаний.
35
35
36
-
Я помню, что в первые годы изучения программирования, для меня уже было важно, чтобы код использовался людьми, улучшал их жизнь и сам жил долго. Олимпиадные задачи казались мне неинтересными, учебные задачи слишком надуманными, хотелось сконцентрироваться на том, что люди будут запускать на своих компьютерах каждый день: приложения баз данных, формы и таблицы, сетевые и коммуникационные приложения, программы, управляющие аппаратурой, работающие с датчиками, и множество инструментов для самих программистов.
36
+
Я помню, что в первые годы изучения программирования для меня уже было важно, чтобы код использовался людьми, улучшал их жизнь и сам жил долго. Олимпиадные задачи казались мне неинтересными, учебные задачи слишком надуманными, хотелось сконцентрироваться на том, что люди будут запускать на своих компьютерах каждый день: приложения баз данных, формы и таблицы, сетевые и коммуникационные приложения, программы, управляющие аппаратурой, работающие с датчиками, и множество инструментов для самих программистов.
37
37
38
38
Так же, как и в других инженерных отраслях, в программировании очень важна польза для человека, а не правильность и или стройность концепции. Инженерия призвана использовать научные достижения, а в тех местах, где научных знаний, имеющихся на сегодня, недостаточно, инженерия применяет интуицию, инженерную культуру, метод проб и ошибок, применение неосознанного опыта и опыта, имеющего недостаточное научное осмысление.
39
39
40
-
В этом и преимущество инженерии и недостаток. Мы имеем множество разных и противоречивых решений одной задачи, мы не всегда знаем почему что-то не работает, но это еще ладно, мы иногда удивляемся, почему что-то работает. Такой подход приводит к накоплению плохих практик в проектах и такому переплетению хороших и плохих практиках, что разделить их очень сложно и часто усилия тратятся повторно, на уже решенные задачи. Никлаус Вирт сказал «Программы становятся медленнее быстрее, чем "железо" становится быстрее» и мы часто сталкиваемся с тем, что написать программу заново проще, чем исправлять в ней ошибки.
40
+
В этом и преимущество инженерии и недостаток. Мы имеем множество разных и противоречивых решений одной задачи, мы не всегда знаем почему что-то не работает, но это еще ладно, мы иногда удивляемся, почему что-то работает. Такой подход приводит к накоплению плохих практик в проектах и такому переплетению хороших и плохих практик, что разделить их очень сложно и часто усилия тратятся повторно на уже решенные задачи. Никлаус Вирт сказал «Программы становятся медленнее быстрее, чем "железо" становится быстрее» и мы часто сталкиваемся с тем, что написать программу заново проще, чем исправлять в ней ошибки.
41
41
42
42
> Инженерия программного обеспечения (Software engineering) — приложение инженерии к индустрии программного обеспечения. Включает архитектуру, исследование, разработку, тестирование, развертывание и поддержку ПО.
43
43
@@ -51,14 +51,14 @@ const gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));
51
51
52
52
> Кодирование (Coding) — написание исходного кода программы при помощи определенного синтаксиса (языка), стиля и парадигмы по готовому ТЗ (техническому заданию).
53
53
54
-
Разработка может быть разделена на проектирование и кодирование, и это дает более эффективное приложение сил на долгой дистанции, но часто приходится начинать программировать без ТЗ и без предварительного проектирования. Разработанные таким образом системы называются прототипами, MVP (minimum viable product), пилотными системами или стендами. Их польза заключается в проверке гипотез о полезности для потребителя или экономической эффекты их использования.
54
+
Разработка может быть разделена на проектирование и кодирование, и это дает более эффективное приложение сил на долгой дистанции, но часто приходится начинать программировать без ТЗ и без предварительного проектирования. Разработанные таким образом системы называются прототипами, MVP (minimum viable product), пилотными системами или стендами. Их польза заключается в проверке гипотез о полезности для потребителя или экономической эффективности их использования.
55
55
56
-
Программист не всегда осознает, что он делает, прототип или продукт, и мы получаем прототип, сделанный так добротно, как готовый продукт, или готовый продукт, сделанный как временное решение. Тем не менее, есть энтузиасты, которые любят свою работу, и именно на держится эта отрасль, противоречивая и полная проблем.
56
+
Программист не всегда осознает, что он делает, прототип или продукт, и мы получаем прототип, сделанный так добротно, как готовый продукт, или готовый продукт, сделанный как временное решение. Тем не менее, есть энтузиасты, которые любят свою работу, и именно на них держится эта отрасль, противоречивая и полная проблем.
57
57
58
58
«Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования» // Линус Торвальдс
59
59
60
60
> Разработка программного обеспечения (Software development) — это соединение программирования и кодирования на всех этапах жизненного цикла ПО: проектирования, разработки, тестирования, отладки, поддержки, сопровождения и модификации.
61
61
62
-
Давайте же стремиться к тому, чтобы наши программы, были простыми и для потребителя и для нас самих, как людей, которые будут их много раз модифицировать и постоянно сталкиваться с теми решениями, которые мы заложили в них при первичной разработке. А если мы ограничены во времени и вынуждены писать неэффективный или малопонятный код, то следует планировать его переработку, рефакторинг и оптимизацию до того, как мы забудем его структуру и у нас выветрятся все идеи по улучшению. Накопление проблем в коде называется "технический долг" и он приводит не только к тому, что программы становятся менее гибкими и понятными, но и к тому, что наши младшие коллеги, подключаясь к проектам, читают и впитывают не лучшие практики и перенимают наш оверинжиниринг. Простота решения сложных задач, является целью хорошего программиста, скрытие сложности за программными абстракциями, это метод опытного инженера.
62
+
Давайте же стремиться к тому, чтобы наши программы, были простыми и для потребителя и для нас самих, как людей, которые будут их много раз модифицировать и постоянно сталкиваться с теми решениями, которые мы заложили в них при первичной разработке. А если мы ограничены во времени и вынуждены писать неэффективный или малопонятный код, то следует планировать его переработку, рефакторинг и оптимизацию до того, как мы забудем его структуру и у нас выветрятся все идеи по улучшению. Накопление проблем в коде называется "технический долг" и он приводит не только к тому, что программы становятся менее гибкими и понятными, но и к тому, что наши младшие коллеги, подключаясь к проектам, читают и впитывают не лучшие практики и перенимают наш оверинжиниринг. Простота решения сложных задач, является целью хорошего программиста, скрытие сложности за программными абстракциями — это метод опытного инженера.
63
63
64
64
«Я всегда мечтал о том, чтобы моим компьютером можно было пользоваться так же легко, как телефоном; моя мечта сбылась: я уже не могу разобраться, как пользоваться моим телефоном» // Бьёрн Страуструп
0 commit comments