Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
Версия презентации по основам C++ с летней школы учителей информатики 2016 года.
Презентация расширена слайдами Незнанова А.А., изменён порядок материала, добавлены задачи.
Презентация для JuJa вебинара о том, как писать рекурсивные программы с примером о вычислении факториала и чисел Фибоначчи. Также рассказывается о поиске линейном, бинарном, в глубину и в ширину, как работает поисковая система.
Презентация сделана для новичков в деле программистов.
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Видео: https://www.youtube.com/watch?v=IUtbbN9aevU
Веб-приложения становятся все больше и сложнее, так что многое остается вне нашего поля зрения. Поэтому фреймворки и приложения должны предоставлять дополнительные инструменты, упрощающие разработку и понимание того, что же происходит у них там — «под капотом». В ходе доклада я расскажу о таких инструментах: какими они могут быть, какие задачи решать, что необходимо для их создания.
SPA Meetup, 28 февраля 2015, Москва, Авито
Кратский список слайдов с основной информацией по применению декларативно-функционального стиля в PHP как инструмента для написания более безопасного и масштабируемого кода
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
Вот уже более двух лет мы создаём онлайн-специализацию по С++ на платформе Coursera. Её цель — обучить языку C++ с нуля до уровня, достаточного для решения практических задач, с которыми приходилось сталкиваться авторам в своей практике. В своём докладе я расскажу, как мы создаём наши онлайн-курсы, и уделю особое внимание техническим проблемам, которые нам пришлось решить в процессе создания автоматической системы проверки программ студентов.
Версия презентации по основам C++ с летней школы учителей информатики 2016 года.
Презентация расширена слайдами Незнанова А.А., изменён порядок материала, добавлены задачи.
Презентация для JuJa вебинара о том, как писать рекурсивные программы с примером о вычислении факториала и чисел Фибоначчи. Также рассказывается о поиске линейном, бинарном, в глубину и в ширину, как работает поисковая система.
Презентация сделана для новичков в деле программистов.
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Видео: https://www.youtube.com/watch?v=IUtbbN9aevU
Веб-приложения становятся все больше и сложнее, так что многое остается вне нашего поля зрения. Поэтому фреймворки и приложения должны предоставлять дополнительные инструменты, упрощающие разработку и понимание того, что же происходит у них там — «под капотом». В ходе доклада я расскажу о таких инструментах: какими они могут быть, какие задачи решать, что необходимо для их создания.
SPA Meetup, 28 февраля 2015, Москва, Авито
Кратский список слайдов с основной информацией по применению декларативно-функционального стиля в PHP как инструмента для написания более безопасного и масштабируемого кода
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
Вот уже более двух лет мы создаём онлайн-специализацию по С++ на платформе Coursera. Её цель — обучить языку C++ с нуля до уровня, достаточного для решения практических задач, с которыми приходилось сталкиваться авторам в своей практике. В своём докладе я расскажу, как мы создаём наши онлайн-курсы, и уделю особое внимание техническим проблемам, которые нам пришлось решить в процессе создания автоматической системы проверки программ студентов.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
В докладе я расскажу, как выглядит World of Tanks Server (кластер кластеров) со всеми веб-сервисами, которые существуют вокруг. Какие узкие места с точки зрения отказоустойчивости есть внутри кластера, между кластерами, во взаимодействии с внешними веб-сервисами. Как мы решаем возникающие проблемы технически, процессно, проектно.
World of Tanks Experience of Using KafkaLevon Avakyan
In this paper I speak about BigWorld technology, WoT server, Apache Kafka and how we started to use it together. What difficulties we had and how we had solved them.
In this presentation I will speak how are the SRE and DevOps, what is a reliability. Also about the reliability approach in Competitive Gaming in Wargaming and show a few cases.
Архитектура мета игры Wargaming. Глобальная карта 2.0.Levon Avakyan
В своем докладе я расскажу что такое Глобальная карта, как она устроена, какие технологии, архитектурыне решения, принципы и подходы используются. Как мы боремся с высокими нагрузками, с какими проблемами сталкиваемся, и как их решаем.
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...Levon Avakyan
Доклад о том, зачем нам понадобился сервисный шлюз для клиента WoT, как выбирались и проверялись технологические решения, плюсы и минусы использования Python 3 + asyncio в этом конкретном случае. +Бонус: выбор, отслеживание и визуализация метрик приложения
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...Levon Avakyan
Кланы являются неотъемлемой частью любой MMO. И игры Wargaming не стали исключением, а вместе с бурным развитием трилогии ,и World of Tanks в частности, быстро изменялись требования к кланам как у пользователей так и у бизнеса. Доклад расскажет о том пути, который мы прошли ,создавая поддержку кланов в Wargaming, какие трудности преодолевали и какие уроки выучили, создавая игровой сервис, который радует миллионы наших игроков.
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый деньLevon Avakyan
Оперирование - это важный компонент в жизненном цикле любого продукта или сервиса. Для высоконагруженных проектов с огромным количеством связей, простейшие запросы на оперирование, представляют собой достаточно нетривиальную задачу. А бизнес требует вносить изменения ASAP. Кроме того, несмотря на высокую нагрузку, мы должны обеспечивать высокое качество сервиса для пользователей несмотря ни на что. Каждый раз мы решаем уникальные инженерные задачи, чтобы можно было играть в «Кланах» и на «Глобальной карте» по всему миру. Доклад расскажет о тех проблемах с которыми мы сталкиваемся и о best practices по управлению приложениями, инфраструктурой и сторонними компонентами для их решения
2. Оглавление 2
• Как работает современный компьютер
• Немного истории
• Алгоритмы
• Внутреннее устройство
• Языки программирования
• Какие бывают
• Чем отличаются
• Для чего используются
• Python
• Философия
• Основные конструкции
• Примеры
О чем я буду говорить
4. Вычислительные машины 4
Вычислительная машина, счётная машина — механизм, электромеханическое
или электронное устройство, предназначенное для автоматического
выполнения математических операций
Они были очень давно
5. Алгоритм 5
Алгоритм — набор инструкций, описывающих порядок действий исполнителя для достижения
некоторого результата.
Свойства алгоритма:
• Дискретность
• Детерминированность
• Понятность
• Завершаемость
• Массовость
• Результативность
Все знают, но боятся сказать
6. Машина Тьюринга 6
Машина Тьюринга — абстрактная вычислительная машина. Способна имитировать всех
исполнителей, каким-либо образом реализующих процесс пошагового вычисления, в котором
каждый шаг вычисления достаточно элементарен.
Состоит из:
• Неограниченная в обе стороны лента, разделённая на ячейки
• Управляющее устройство
• Головка
Конкретная реализация требует:
• Алфавит, включающий пустой символ
• Множество состоянии головки
• Правила перехода
Звучит круто, может быть дело в слове «машина»
8. Архитектура фон Неймана 8
Архитектура фон Неймана — широко известный принцип совместного хранения команд и
данных в памяти компьютера.
Звучит еще круче чем «машина Тьюринга»
9. Архитектура фон Неймана 9
Основные принципы:
• Принцип однородности памяти
• Принцип адресности
• Принцип программного управления
• Принцип двоичного кодирования
12. Язык программирования 12
Язык программирования — формальный язык, предназначенный для записи компьютерных
программ. Язык программирования определяет
набор лексических, синтактических и семантических правил, определяющих внешний вид
программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.
А что это?
13. Парадигмы программирования 13
Императивное программирование — это парадигма программирования для которой
характерно следующее:
• в исходном коде программы записываются инструкции (команды);
• инструкции должны выполняться последовательно;
• при выполнении инструкции данные, полученные при выполнении предыдущих инструкций,
могут читаться из памяти;
• данные, полученные при выполнении инструкции, могут записываться в память.
Декларативное программирование — это парадигма программирования, в которой
задаётся спецификация решения задачи, то есть описывается, что представляет собой
проблема и ожидаемый результат.
Классификация
15. Процедурное программирование 15
Процедурное программирование — программирование на императивном языке, при котором
последовательно выполняемые операторы можно собрать в подпрограммы, то есть более
крупные целостные единицы кода, с помощью механизмов самого языка.
Примеры:
• C
• Pascal
Классификация
16. Функциональное программирование 16
Функциональное программирование - раздел дискретной математики и
парадигма программирования, в которой процесс вычисления трактуется как вычисление
значений функций в математическом понимании последних (в отличие от функций как
подпрограмм в процедурном программировании).
Примеры:
• Erlang
• Hasckell
Классификация
17. Логическое программирование 17
Логическое программирование - парадигма программирования, основанная на
автоматическом доказательстве теорем, а также раздел дискретной математики, изучающий
принципы логического вывода информации на основе заданных фактов и правил вывода.
Примеры:
• Planner
• Prolog
Классификация
18. Объектно-ориентированное программирование 18
Объектно-ориентированное программирование — методология программирования,
основанная на представлении программы в виде совокупности объектов, каждый из которых
является экземпляром определенного класса, а классы образуют иерархию наследования
Примеры:
• Java
• C#
• C++
Классификация
19. Уровень Абстракции 19
Уровень Абстракции — один из способов сокрытия деталей реализации определенного набора
функциональных возможностей. Применяется для управления сложностью проектируемой
системы при декомпозиции, когда система представляется в виде иерархии уровней
абстракции.
Пример уровней абстракции.
• Слой аппаратных абстракции
• Прошивка
• Язык ассемблера
• Ядро операционной системы
• Приложения
Классификация
22. История 22
• Создатель Гвидо Ван Россум
• Появился после того, как Гвидо работал над учебным языком ABC в конце 80х годов
• Первую версию опубликовал в 1991 году.
• Текущая версия 3.7 ( 14 августа 2017 года)
23. Философия 23
• Красивое лучше, чем уродливое.
• Явное лучше, чем неявное.
• Простое лучше, чем сложное.
• Сложное лучше, чем запутанное.
• Плоское лучше, чем вложенное.
• Разреженное лучше, чем плотное.
• Читаемость имеет значение.
• Особые случаи не настолько особые, чтобы нарушать правила.
• При этом практичность важнее безупречности.
• Ошибки никогда не должны замалчиваться.
• Если не замалчиваются явно.
• Встретив двусмысленность, отбрось искушение угадать. Должен существовать один — и,
желательно, только один — очевидный способ сделать это.
• Хотя он поначалу может быть и не очевиден, если вы не голландец.
• Сейчас лучше, чем никогда.
• Хотя никогда зачастую лучше, чем прямо сейчас.
• Если реализацию сложно объяснить — идея плоха.
• Если реализацию легко объяснить — идея, возможно, хороша.
• Пространства имён — отличная штука! Будем делать их побольше!
24. Утиная типизация ( Duck Typing) 24
Если это выглядит как утка, плавает как утка и крякает как утка, то это, возможно, и есть утка.
25. Переменные 25
Переменная — это простейшая именованная структура данных, в которой может быть сохранён
промежуточный или конечный результат работы программы.
Пример:
a = 10
b = 3.1415926
c = "Hello"
d = [1, 2, 3]
Типы переменных (объектов):
• Целочисленные (int) Список (list)
• С плавающей точкой (float) Словарь (dict)
• Строки (юникод строки) (str) Множество (set)
• None
26. Операторы 26
Большинство предложений (логических строк) в программах содержат выражения. Простой
пример выражения: 2 + 3. Выражение можно разделить на операторы и операнды.
Операторы – это некий функционал, производящий какие-либо действия, который может быть
представлен в виде символов, как например +, или специальных зарезервированных слов.
Операторы могут производить некоторые действия над данными, и эти данные
называются операндами. В нашем случае 2 и 3 – это операнды.
Примеры операторов:
• +,-,*,/ - операторы математических действий
• >,<,<=,>=, == - операторы сравнения
• not, and, or – логические операторы
• x[индекс] – обращение по индексу
• f(аргумент, …) – вызов функции
27. Условные операторы 27
if test1:
state1
elif test2:
state2
else:
state3
if test1:
state1
else:
state2
if test1:
state1
28. Циклы 28
for i in range(0,5):
print(i * 2)
0 2 4 6 8
i = 5
while i < 15:
print(i)
i = i + 2
5 7 9 11 13
29. Функции 29
Фукнция - последовательность инструкций, возвращающая некое значение.
def add(x, y):
return x + y
>>> add(1, 10)
11
>>> add('abc', 'def')
'abcdef’
Анонимные функции:
>>> (lambda x, y: x + y)(1, 2)
3
>>> (lambda x, y: x + y)('a', 'b')
'ab'
Additional information
30. Классы и объекты 30
Класс – тип, описывающий устройство объектов.
Объект — это экземпляр класса.
Класс можно сравнить с чертежом, по которому создаются объекты.
В Python все абсолютно является объектами.
>>> class Car:
def move(self): # self - обязательный аргумент, содержащий в себе экземпляр
# класса, передающийся при вызове метода,
# поэтому этот аргумент должен присутствовать
# во всех методах класса.
return “Car is moving”
>>> my_car = Car()
>>> my_car.move()
“Car is moving”
31. Пример 31
Задача. Создать список студентов. Реализовать возможность выводить отсортированный по
возрастанию среднего бала список.
Выглядит не сложно
32. Пример 32
Описываем студента
class Student:
description = "This is shared attribute for all instances of students"
def __init__(self, name, group_id):
self.name = name
self.avg_grade = 0
self.group_id = group_id
self.marks = []
def describe(self):
print("My name is %s, I'm studing in group %d and my average_grade is %.2f»
%(self.name, self.group_id, self.avg_grade))
def get_marks(self):
for i in range(0,10):
mark = random.randint(1,10)
self.marks.append(mark)
self.recalculate_avg()
def recalculate_avg(self):
self.avg_grade=sum(x for x in self.marks)/len(self.marks)
33. Пример 33
Создаем студентов
NAMES = ["Olga", "Petr", "Natalia", "Fedor", "Vlad", "Maksim"]
GROUPS = [121,221]
def create_student(name, group_id):
s = Student(name,group_id)
s.get_marks()
s.describe()
return s
if __name__ == '__main__':
students = []
print ("Creating students")
while len(NAMES) >0:
name = NAMES.pop()
random_group_id = random.randint(0,1)
student = create_student(name, GROUPS[random_group_id])
students.append(student)
34. Пример 34
Сортируем студентов
print ("Ordered students by avg mark")
sorted_students = sorted(students,key=lambda student:student.avg_grade)
for s in sorted_students:
s.describe()
Creating students
My name is Maksim, I'm studieng in group 221 and my average_grade is 7.10
My name is Vlad, I'm studieng in group 221 and my average_grade is 6.40
My name is Fedor, I'm studieng in group 221 and my average_grade is 4.60
My name is Natalia, I'm studieng in group 121 and my average_grade is 5.50
My name is Petr, I'm studieng in group 221 and my average_grade is 6.20
My name is Olga, I'm studieng in group 121 and my average_grade is 5.10
Order students by avg mark
My name is Fedor, I'm studieng in group 221 and my average_grade is 4.60
My name is Olga, I'm studieng in group 121 and my average_grade is 5.10
My name is Natalia, I'm studieng in group 121 and my average_grade is 5.50
My name is Petr, I'm studieng in group 221 and my average_grade is 6.20
My name is Vlad, I'm studieng in group 221 and my average_grade is 6.40
My name is Maksim, I'm studieng in group 221 and my average_grade is 7.10
35. Вместо вывода 35
• Существует огромное количество различных языков программирования
• Язык программирования – это инструмент, который позволяет «сказать» машине, что ей
нужно сделать
• Самыми простыми для восприятия и пользования являются процедурные языки
• Многие современные языки совмещают в себе несколько парадигм программирования
• Само по себе кодирование не является сложной задачей ( на мой взгляд скоро тут человека
заменит ИИ)
• Более сложной и интересной задачей является описание сущностей, связей между ними и
построение систем.
• Написание кода это навык – пробуйте, тренируйтесь и вы сможете облегчить себе и другим
жизнь, поручив машине выполнять рутинную работу.
Машина Беббиджа. Адда Лавлейс вычисление числе Бернулли.
Вычислительные алгоритмы и управляющие.
Попытки формализации: рекурсивные функции, лямда исчесления, нормальный алгоритм Маркова, Машина Тьюринга
30ые годы.
Тезис Чёрча — Тьюринга
Конечный автомат
А какое дальнейшее развитие вы видите?
А как сейчас пытаются обойти ограничения модели фон Неймана
Привести пример использования функционального языка на практике. Телекоммуникации, лямбда-исчесления. Нет переменных! Мы оперируем только понятием функция.