SlideShare a Scribd company logo
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
toString().padStart(width) : cell.padEnd(width); }).join(''))).join
}; const proportion = (max, val) => Math.round(val * 100 / max); co
calcProportion = table => { table.sort((row1, row2) => row2[DENSITY
row1[DENSITY_COL]); const maxDensity = table[0][DENSITY_COL]; table
forEach(row => { row.push(proportion(maxDensity, row[DENSITY_COL]))
return table; }; const getDataset = file => { const lines = fs.read
FileSync(file, 'utf8').toString().split('n'); lines.shift(); lines
return lines.map(line => line.split(',')); }; const main = compose
(getDataset, calcProportion, renderTable); const fs = require('fs'
compose = (...funcs) => x => funcs.reduce((x, fn) => fn(x), x); con
DENSITY_COL = 3; const renderTable = table => { const cellWidth = [
8, 8, 18, 6]; return table.map(row => (row.map((cell, i) => { const
= cellWidth[i]; return i ? cell.toString().padStart(width) : cell.p
(width); }).join(''))).join('n'); }; const proportion = (max, val)
Введение в
программирование (1 часть)
Тимур Шемсединов
github.com/HowProgrammingWorks
Chief Software Architect at Metarhia
Lecturer at Kiev Polytechnic Institute
github.com/tshemsedinov
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что вы уже знаете/слышали
Переменная и константа 96%
Условие и цикл 95%
Процедура, функция 94%
Массив, матрица 88%
Объект и класс 72%
Метод, свойство 65%
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что вы уже знаете/слышали
Идентификатор
Итерирование
Лексический контекст
Структура данных
Система типов
Член класса
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Терминология — это важно
Чем отличается:
● Инструкция
● Операция
● Команда
● Выражение
● Оператор
● Директива
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Statements
Инструкция или оператор —
наименьшая синтаксическая
часть языка программирования,
исполняемая интерпретатором,
средой или компилируемая в
машинный код.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Syntax
Синтаксис —
правила построения программного кода
из символов, но не затрагивающие
смысловую (семантическую)
нагрузку кода. Синтаксис определяет
только формальную структуру кода.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Statements
● Операторы присваивания
● Операторы сравнения
● Арифметические операторы
● Бинарные и логические операторы
● Строковые операторы
● Оператор вызова функции
● Унарные и тернарный операторы
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Терминология — это важно
● Операция - иногда имеют в виду оператор
(operator), а иногда инструкцию (statement)
● Команда - атомарная задача для
интерпретатора или CLI (командной строки)
● Директива - инструкция препроцессора
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Expression
Выражение —
синтаксическая конструкция языка
программирования предназначенная для
выполнения вычислений. Выражение
состоит из идентификаторов, значений,
операторов и вызова функций.
Пример: (len - 1) * f(x, INTERVAL)
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Value
Значение —
величина, записанная в определенное место
памяти в определенном формате и
представляющая данные, которым может
манипулировать программа.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Type
Тип —
множество значений и операции, которые
могут быть произведены над этими
значениями.
Например, в JavaScript тип Boolean
предполагает два значения true и false и
логические операции над ними.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Type
Тип Null предполагает одно значение null,
а тип Number множество рациональных чисел
с дополнительными ограничениями на
минимальное и максимальное значение,
а также ограничения на точность и операции:
+ - * ** / % ++ -- > < >= <= & | ~ ^ << >>
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Literal
Литерал — запись значения в коде программы.
Например: литералы чисел, логических
значений, null и undefined, строк, массивов,
объектов, функций. Литералы могут иметь
различный синтаксис, от очень простого, для
записи чисел, до сложных синтаксических
конструкций, для записи объектов.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Scalar / Primitive / Atomic value
Скаляр —
значение примитивного типа данных.
Скаляр копируется при присвоении и
передается в функцию по значению.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Reference
Ссылка
указывает на значение ссылочного типа,
т.е. сложное (не скалярное) значение.
Например, для JavaScript это подтипы:
Object, Function, Array
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Identifier
Идентификатор —
имена переменных, констант, функций,
методов, аргументов, классов, как
внутренние, так и импортированные из
других модулей и глобальные.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Variable
Переменная —
именованная область памяти
(идентификатор), имеющая тип данных,
адрес и значение. Мы можем менять
значение переменной в отличие от
константы (а для некоторых языков и тип):
let cityName = 'Beijing';
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Assignment
Присвоение —
связывания значения и идентификатора
(например переменной). Операция
присвоения во многих языках возвращает
присваиваемое значение (имеет поведение
выражения).
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Constant
Константа —
идентификатор, с которым связано
неизменяемое значение и тип:
const WATCH_TIMEOUT = 5000;
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Composed types
Структурные типы —
композитные типы или структуры состоят
из нескольких скалярных значений,
объединенных в одно таким образом, чтоб
над этим объединенным значением можно
выполнять набор операций, например:
объект, массив, множество, кортеж.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Flag
Флаг — обычно логическое значение,
определяющее состояние чего-либо,
например, признак закрытия соединения,
признак завершения поиска по структуре
данных и т.д. Например: let flagName = false;
Иногда флагами могут называть не
логические, а перечислимые или другие типы.
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Алгоритм —
это формальное описание порядка
вычислений для определенного класса
задач за конечное время (способность
завершаться для любого множества
входных данных).
Algorithm
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Программа —
программный код и данные,
объединенные в одно целое для
вычисления и управления ЭВМ.
Programm
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Инженерия —
извлечение практической пользы из
имеющихся ресурсов при помощи науки,
техники, различных методик,
организационной структуры, а также
приемов и знаний.
Engineering
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Инженерия программного обеспечения —
приложение инженерии к индустрии
программного обеспечения. Включает
архитектуру, исследование, разработку,
тестирование, развертывание и
поддержку ПО.
Software engineering
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Программирование —
это искусство и инженерия
решения задач при помощи
вычислительной техники.
Programming
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Кодирование —
написание исходного кода программы
при помощи определенного синтаксиса
(языка), стиля и парадигмы
по готовому ТЗ.
Coding
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Разработка программного обеспечения —
это соединение программирования и
кодирования на всех этапов жизненного
цикла ПО: проектирования, разработки,
тестирования, отладки, поддержки,
сопровождения и модификации.
Software development
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что такое программы?
Алгоритмы + Структуры данных = Программы
// Никлаус Вирт
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что такое программы?
Программы становятся медленнее быстрее,
чем «железо» становится быстрее
// Никлаус Вирт
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что такое программирование?
Программирование сегодня — это гонка
разработчиков программ, стремящихся писать
программы с большей и лучшей
идиотоустойчивостью, и вселенной, которая
пытается создать больше отборных идиотов.
Пока вселенная побеждает.
// Рик Кук
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что вы уже знаете/слышали
Чем отличаются?
● Процедура
● Функция
● Подпрограмма
● Метод
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Блок кода —
логически связанная группа инструкций или
операторов. Блоки создают область
видимости. Блоки могут быть вложенными.
Примеры:
{}, (+ a b),
begin end, отступы в Python
Block of code
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Процедура или подпрограмма —
логически связанная группа инструкций
или операторов, имеющая имя.
Процедура способствует повторному
использованию кода и может быть вызвана из
разных частей программы, много раз и с
разными аргументами.
Procedure or Subroutine
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Процедура не возвращает значений,
в отличие от функций, но может
модифицировать свои аргументы.
Во многих языках процедура описывается
при помощи синтаксиса функций
(например, типа void).
Procedure or Subroutine
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Функция —
абстракция преобразования значений.
● Функция однозначно отображает одно
множество значений в другое множество
значений.
● Функция может быть задана блоком
операторов или выражением.
Function
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
● Функция имеет набор аргументов.
● Функция может быть вызвана по имени или
через указатель.
● Функция способствует повторному
использованию кода и может быть вызвана
из разных частей программы, много раз и с
разными аргументами.
Function
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Сигнатура функции — это:
● имя (идентификатор),
● количество аргументов и их типы
(а иногда и имена аргументов),
● тип результата.
Function signature
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Метод —
процедура, связанная с объектным
контекстом или программным
интерфейсом;
{ a: 10, b: 10, sum() { return this.a + this.b; } }
Method
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Цикл —
многократное исполнение
блока операторов
Loop
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Условие —
синтаксическая конструкция,
позволяющая выполнить разные действия
или возвращающая разные значения
(тернарный оператор) в зависимости от
логического выражения (возвращающего
true или false).
Conditional statements
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Парадигма программирования —
Парадигма задает набор идей и
понятий, допущений и ограничений,
концепций, принципов, постулатов,
приемов и техники программирования
для решения задач на ЭВМ.
Programming Paradigm
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Парадигма предлагает модель решения
задач, определенный стиль, шаблоны
(примеры хороших и плохих решений)
применяемых для написания
программного кода.
Programming Paradigm
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что такое ООП?
Я изобрел понятие «объектно-
ориентированный»,
и могу заявить, что не имел в виду C++
// Алан Кей
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что такое отладка?
Отладка кода вдвое сложнее, чем его
написание. Так что если вы пишете код
настолько умно, насколько можете, то вы по
определению недостаточно сообразительны,
чтобы его отлаживать.
// Брайан Керниган
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Что такое программное обеспечение?
Большинство программ на сегодняшний день
подобны египетским пирамидам из миллиона
кирпичиков друг на друге и без
конструктивной целостности — они просто
построены грубой силой и тысячами рабов
// Алан Кей
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Как вообще все это может работать?
Большинство хороших программистов делают
свою работу не потому, что ожидают оплаты
или признания, а потому что получают
удовольствие от программирования
// Линус Торвальдс
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Код позволяет найти общий язык
Болтовня ничего не стоит.
Покажите мне код.
// Линус Торвальдс
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Алгоритмы vs структуры данных
Плохие программисты беспокоятся о коде.
Хорошие программисты беспокоятся о
структурах данных и связям между ними.
// Линус Торвальдс
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Алгоритмы vs структуры данных
Умные структуры данных и тупой код
работают куда лучше, чем наоборот
// Эрик Рэймонд
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Человекочитаемость
Программы должны писаться для людей,
которые будут их читать,
а машины, которые будут эти программы
исполнять — второстепенны
// Гарольд Абельсон
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Защита от дурака
Ограничение возможностей языка с целью
предотвращения программистских ошибок
в лучшем случае опасно
// Бьёрн Страуструп
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Сложность
Я всегда мечтал о том, чтобы моим
компьютером можно было пользоваться так
же легко, как телефоном; моя мечта сбылась:
я уже не могу разобраться, как пользоваться
моим телефоном
// Бьёрн Страуструп
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Так что же такое программирование?
Если отладка — процесс удаления ошибок,
то программирование должно быть
процессом их внесения
// Эдсгер Дейкстра

More Related Content

PDF
Introduction to Node.js
PPTX
Introduction Node.js
PPTX
Diabetes Mellitus
PPTX
Hypertension
PPTX
Republic Act No. 11313 Safe Spaces Act (Bawal Bastos Law).pptx
PPTX
Power Point Presentation on Artificial Intelligence
PDF
Caça palavras - Bullying
Introduction to Node.js
Introduction Node.js
Diabetes Mellitus
Hypertension
Republic Act No. 11313 Safe Spaces Act (Bawal Bastos Law).pptx
Power Point Presentation on Artificial Intelligence
Caça palavras - Bullying

What's hot (20)

PDF
Базы данных в 2020
PDF
Prototype programming in JavaScript
PDF
Programming Languages: comparison, history, future
PDF
Введение в SQL
PDF
Node.js middleware: Never again!
PDF
Sequence and Traverse - Part 1
PDF
Your code sucks, let's fix it
PDF
Beyond Scala Lens
PDF
ZIO-Direct - Functional Scala 2022
PPTX
10 big data hadoop
PDF
The MySQL Query Optimizer Explained Through Optimizer Trace
KEY
Object Calisthenics Applied to PHP
PDF
Introduction to RxJS
PDF
Introducción a Celery y las colas de tareas asíncronas
PDF
How to setup your virtual environments with Red Hat Satellite
PPTX
Semantic UI Introduction
PPTX
18. Java associative arrays
PDF
Hot C++: Rvalue References And Move Semantics
ODP
Sql lite android
PPTX
Function in PL/SQL
Базы данных в 2020
Prototype programming in JavaScript
Programming Languages: comparison, history, future
Введение в SQL
Node.js middleware: Never again!
Sequence and Traverse - Part 1
Your code sucks, let's fix it
Beyond Scala Lens
ZIO-Direct - Functional Scala 2022
10 big data hadoop
The MySQL Query Optimizer Explained Through Optimizer Trace
Object Calisthenics Applied to PHP
Introduction to RxJS
Introducción a Celery y las colas de tareas asíncronas
How to setup your virtual environments with Red Hat Satellite
Semantic UI Introduction
18. Java associative arrays
Hot C++: Rvalue References And Move Semantics
Sql lite android
Function in PL/SQL
Ad

Similar to Введение в программирование (1 часть) (20)

PDF
Node.js security
PDF
Objects have failed
PDF
Почему хорошее ИТ-образование невостребовано рыночком
PDF
Information system structure and architecture
PDF
Node.js in 2019
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PDF
Rust: абстракции и безопасность, совершенно бесплатно
PDF
8 встреча — Язык программирования Python (В. Ананьев)
ODP
Charming python sc2-8
PDF
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
PPTX
Reactive extensions
PPTX
Работа с БД в Java
PDF
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
PDF
Clojure #2 (2014)
PDF
Scala on android
PDF
Лекция 8. Intel Threading Building Blocks
PDF
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
PPTX
Павел Беликов, Как избежать ошибок, используя современный C++
Node.js security
Objects have failed
Почему хорошее ИТ-образование невостребовано рыночком
Information system structure and architecture
Node.js in 2019
DevConf. Дмитрий Сошников - ECMAScript 6
Rust: абстракции и безопасность, совершенно бесплатно
8 встреча — Язык программирования Python (В. Ананьев)
Charming python sc2-8
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Reactive extensions
Работа с БД в Java
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
Clojure #2 (2014)
Scala on android
Лекция 8. Intel Threading Building Blocks
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Павел Беликов, Как избежать ошибок, используя современный C++
Ad

More from Timur Shemsedinov (20)

PDF
How to use Chat GPT in JavaScript optimizations for Node.js
PDF
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
PDF
Multithreading in Node.js and JavaScript
PDF
Node.js threads for I/O-bound tasks
PDF
Node.js Меньше сложности, больше надежности Holy.js 2021
PDF
Rethinking low-code
PDF
Hat full of developers
PDF
FwDays 2021: Metarhia Technology Stack for Node.js
PDF
Node.js for enterprise - JS Conference
PDF
Node.js for enterprise 2021 - JavaScript Fwdays 3
PDF
Node.js in 2021
PDF
Patterns and antipatterns
PDF
Race-conditions-web-locks-and-shared-memory
PDF
Asynchronous programming and mutlithreading
PDF
Node.js in 2020 - part 3
PDF
Node.js in 2020 - part 2
PDF
Node.js in 2020 - part 1
PDF
Web Locks API
PDF
Node.js in 2020
PDF
Serverless Clouds (FaaS) and request context isolation in Node.js
How to use Chat GPT in JavaScript optimizations for Node.js
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
Multithreading in Node.js and JavaScript
Node.js threads for I/O-bound tasks
Node.js Меньше сложности, больше надежности Holy.js 2021
Rethinking low-code
Hat full of developers
FwDays 2021: Metarhia Technology Stack for Node.js
Node.js for enterprise - JS Conference
Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js in 2021
Patterns and antipatterns
Race-conditions-web-locks-and-shared-memory
Asynchronous programming and mutlithreading
Node.js in 2020 - part 3
Node.js in 2020 - part 2
Node.js in 2020 - part 1
Web Locks API
Node.js in 2020
Serverless Clouds (FaaS) and request context isolation in Node.js

Введение в программирование (1 часть)

  • 1. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c toString().padStart(width) : cell.padEnd(width); }).join(''))).join }; const proportion = (max, val) => Math.round(val * 100 / max); co calcProportion = table => { table.sort((row1, row2) => row2[DENSITY row1[DENSITY_COL]); const maxDensity = table[0][DENSITY_COL]; table forEach(row => { row.push(proportion(maxDensity, row[DENSITY_COL])) return table; }; const getDataset = file => { const lines = fs.read FileSync(file, 'utf8').toString().split('n'); lines.shift(); lines return lines.map(line => line.split(',')); }; const main = compose (getDataset, calcProportion, renderTable); const fs = require('fs' compose = (...funcs) => x => funcs.reduce((x, fn) => fn(x), x); con DENSITY_COL = 3; const renderTable = table => { const cellWidth = [ 8, 8, 18, 6]; return table.map(row => (row.map((cell, i) => { const = cellWidth[i]; return i ? cell.toString().padStart(width) : cell.p (width); }).join(''))).join('n'); }; const proportion = (max, val) Введение в программирование (1 часть) Тимур Шемсединов github.com/HowProgrammingWorks Chief Software Architect at Metarhia Lecturer at Kiev Polytechnic Institute github.com/tshemsedinov
  • 2. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что вы уже знаете/слышали Переменная и константа 96% Условие и цикл 95% Процедура, функция 94% Массив, матрица 88% Объект и класс 72% Метод, свойство 65%
  • 3. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что вы уже знаете/слышали Идентификатор Итерирование Лексический контекст Структура данных Система типов Член класса
  • 4. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Терминология — это важно Чем отличается: ● Инструкция ● Операция ● Команда ● Выражение ● Оператор ● Директива
  • 5. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Statements Инструкция или оператор — наименьшая синтаксическая часть языка программирования, исполняемая интерпретатором, средой или компилируемая в машинный код.
  • 6. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Syntax Синтаксис — правила построения программного кода из символов, но не затрагивающие смысловую (семантическую) нагрузку кода. Синтаксис определяет только формальную структуру кода.
  • 7. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Statements ● Операторы присваивания ● Операторы сравнения ● Арифметические операторы ● Бинарные и логические операторы ● Строковые операторы ● Оператор вызова функции ● Унарные и тернарный операторы
  • 8. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Терминология — это важно ● Операция - иногда имеют в виду оператор (operator), а иногда инструкцию (statement) ● Команда - атомарная задача для интерпретатора или CLI (командной строки) ● Директива - инструкция препроцессора
  • 9. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Expression Выражение — синтаксическая конструкция языка программирования предназначенная для выполнения вычислений. Выражение состоит из идентификаторов, значений, операторов и вызова функций. Пример: (len - 1) * f(x, INTERVAL)
  • 10. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Value Значение — величина, записанная в определенное место памяти в определенном формате и представляющая данные, которым может манипулировать программа.
  • 11. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Type Тип — множество значений и операции, которые могут быть произведены над этими значениями. Например, в JavaScript тип Boolean предполагает два значения true и false и логические операции над ними.
  • 12. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Type Тип Null предполагает одно значение null, а тип Number множество рациональных чисел с дополнительными ограничениями на минимальное и максимальное значение, а также ограничения на точность и операции: + - * ** / % ++ -- > < >= <= & | ~ ^ << >>
  • 13. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Literal Литерал — запись значения в коде программы. Например: литералы чисел, логических значений, null и undefined, строк, массивов, объектов, функций. Литералы могут иметь различный синтаксис, от очень простого, для записи чисел, до сложных синтаксических конструкций, для записи объектов.
  • 14. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Scalar / Primitive / Atomic value Скаляр — значение примитивного типа данных. Скаляр копируется при присвоении и передается в функцию по значению.
  • 15. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Reference Ссылка указывает на значение ссылочного типа, т.е. сложное (не скалярное) значение. Например, для JavaScript это подтипы: Object, Function, Array
  • 16. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Identifier Идентификатор — имена переменных, констант, функций, методов, аргументов, классов, как внутренние, так и импортированные из других модулей и глобальные.
  • 17. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Variable Переменная — именованная область памяти (идентификатор), имеющая тип данных, адрес и значение. Мы можем менять значение переменной в отличие от константы (а для некоторых языков и тип): let cityName = 'Beijing';
  • 18. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Assignment Присвоение — связывания значения и идентификатора (например переменной). Операция присвоения во многих языках возвращает присваиваемое значение (имеет поведение выражения).
  • 19. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Constant Константа — идентификатор, с которым связано неизменяемое значение и тип: const WATCH_TIMEOUT = 5000;
  • 20. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Composed types Структурные типы — композитные типы или структуры состоят из нескольких скалярных значений, объединенных в одно таким образом, чтоб над этим объединенным значением можно выполнять набор операций, например: объект, массив, множество, кортеж.
  • 21. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Flag Флаг — обычно логическое значение, определяющее состояние чего-либо, например, признак закрытия соединения, признак завершения поиска по структуре данных и т.д. Например: let flagName = false; Иногда флагами могут называть не логические, а перечислимые или другие типы.
  • 22. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Алгоритм — это формальное описание порядка вычислений для определенного класса задач за конечное время (способность завершаться для любого множества входных данных). Algorithm
  • 23. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Программа — программный код и данные, объединенные в одно целое для вычисления и управления ЭВМ. Programm
  • 24. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Инженерия — извлечение практической пользы из имеющихся ресурсов при помощи науки, техники, различных методик, организационной структуры, а также приемов и знаний. Engineering
  • 25. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Инженерия программного обеспечения — приложение инженерии к индустрии программного обеспечения. Включает архитектуру, исследование, разработку, тестирование, развертывание и поддержку ПО. Software engineering
  • 26. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Программирование — это искусство и инженерия решения задач при помощи вычислительной техники. Programming
  • 27. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Кодирование — написание исходного кода программы при помощи определенного синтаксиса (языка), стиля и парадигмы по готовому ТЗ. Coding
  • 28. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Разработка программного обеспечения — это соединение программирования и кодирования на всех этапов жизненного цикла ПО: проектирования, разработки, тестирования, отладки, поддержки, сопровождения и модификации. Software development
  • 29. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что такое программы? Алгоритмы + Структуры данных = Программы // Никлаус Вирт
  • 30. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что такое программы? Программы становятся медленнее быстрее, чем «железо» становится быстрее // Никлаус Вирт
  • 31. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что такое программирование? Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы с большей и лучшей идиотоустойчивостью, и вселенной, которая пытается создать больше отборных идиотов. Пока вселенная побеждает. // Рик Кук
  • 32. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что вы уже знаете/слышали Чем отличаются? ● Процедура ● Функция ● Подпрограмма ● Метод
  • 33. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Блок кода — логически связанная группа инструкций или операторов. Блоки создают область видимости. Блоки могут быть вложенными. Примеры: {}, (+ a b), begin end, отступы в Python Block of code
  • 34. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Процедура или подпрограмма — логически связанная группа инструкций или операторов, имеющая имя. Процедура способствует повторному использованию кода и может быть вызвана из разных частей программы, много раз и с разными аргументами. Procedure or Subroutine
  • 35. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Процедура не возвращает значений, в отличие от функций, но может модифицировать свои аргументы. Во многих языках процедура описывается при помощи синтаксиса функций (например, типа void). Procedure or Subroutine
  • 36. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Функция — абстракция преобразования значений. ● Функция однозначно отображает одно множество значений в другое множество значений. ● Функция может быть задана блоком операторов или выражением. Function
  • 37. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c ● Функция имеет набор аргументов. ● Функция может быть вызвана по имени или через указатель. ● Функция способствует повторному использованию кода и может быть вызвана из разных частей программы, много раз и с разными аргументами. Function
  • 38. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Сигнатура функции — это: ● имя (идентификатор), ● количество аргументов и их типы (а иногда и имена аргументов), ● тип результата. Function signature
  • 39. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Метод — процедура, связанная с объектным контекстом или программным интерфейсом; { a: 10, b: 10, sum() { return this.a + this.b; } } Method
  • 40. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Цикл — многократное исполнение блока операторов Loop
  • 41. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Условие — синтаксическая конструкция, позволяющая выполнить разные действия или возвращающая разные значения (тернарный оператор) в зависимости от логического выражения (возвращающего true или false). Conditional statements
  • 42. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Парадигма программирования — Парадигма задает набор идей и понятий, допущений и ограничений, концепций, принципов, постулатов, приемов и техники программирования для решения задач на ЭВМ. Programming Paradigm
  • 43. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Парадигма предлагает модель решения задач, определенный стиль, шаблоны (примеры хороших и плохих решений) применяемых для написания программного кода. Programming Paradigm
  • 44. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что такое ООП? Я изобрел понятие «объектно- ориентированный», и могу заявить, что не имел в виду C++ // Алан Кей
  • 45. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что такое отладка? Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать. // Брайан Керниган
  • 46. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Что такое программное обеспечение? Большинство программ на сегодняшний день подобны египетским пирамидам из миллиона кирпичиков друг на друге и без конструктивной целостности — они просто построены грубой силой и тысячами рабов // Алан Кей
  • 47. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Как вообще все это может работать? Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования // Линус Торвальдс
  • 48. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Код позволяет найти общий язык Болтовня ничего не стоит. Покажите мне код. // Линус Торвальдс
  • 49. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Алгоритмы vs структуры данных Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и связям между ними. // Линус Торвальдс
  • 50. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Алгоритмы vs структуры данных Умные структуры данных и тупой код работают куда лучше, чем наоборот // Эрик Рэймонд
  • 51. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Человекочитаемость Программы должны писаться для людей, которые будут их читать, а машины, которые будут эти программы исполнять — второстепенны // Гарольд Абельсон
  • 52. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Защита от дурака Ограничение возможностей языка с целью предотвращения программистских ошибок в лучшем случае опасно // Бьёрн Страуструп
  • 53. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Сложность Я всегда мечтал о том, чтобы моим компьютером можно было пользоваться так же легко, как телефоном; моя мечта сбылась: я уже не могу разобраться, как пользоваться моим телефоном // Бьёрн Страуструп
  • 54. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c Так что же такое программирование? Если отладка — процесс удаления ошибок, то программирование должно быть процессом их внесения // Эдсгер Дейкстра