sl.aleksandr28@gmail.com
1 дедлайн. После него домашние задания принимаются только в случае опоздания по обстоятельствам непреодолимой силы. Непреодолимость оцениваю я.
Qui damnare potest, is absolvendi quoque potestatem habet. Julius Paulus
За списыванием следует
о
для обеих сторон
Пропуск нескольких домашек может и не сказаться на ваших оценках, все зависит от вашей активности
Будут бонусные задания
Надо настраивать
Не знаю как там с инспекциями
Пытался несколько раз им пользоваться, но из-за различия раскладок горячих клавиши прочих мелких различий так и не слез с PyCharm
Очень удобный текстовый редактор в принципе
Если надо что-то очень быстро написать, и лень ждать пока PyCharm откроется и проиндексируется
Тоже есть куча каких-то плагинов, их не пробовал
Когда я его видел в последний раз, выглядел отвратительно
Не пользовался, поэтому по сути предъявить нечего
Поддержка этих Jupyter ноутбуков есть в PyCharm
Нет инспекций и прочей интересной фигни
Кэширует результаты исполнения фрагментов
кода, часто можно отстрелить себе ногу
Возможно для Data Science он и хорош, но мы тут программированием попробуем заняться
Настоятельно прошу не использовать его для нашего курса (за пределами сколько угодно)
и мои нелепые отмазки
Времени мало, тем много
А потом вам кто рассказывать будет
Гораздо лучше попробовать понять материал самому, а потом просто уточнить непонятные моменты
Объясняющему полезно - лучше поймет во время объяснения
Плюс его объяснение может быть проще, так его бэкграунд гораздо ближе к вашему
Любой код - чужое решение
Пальцами мы ни на кого показывать не будем
Удобные и реальные примеры для иллюстрации некотрых моментов
Я тоже пишу говнокод, стыдного в этом ничего нет
Проверять домашки, которые приходят в разное время тяжело
Пояснять их тоже тяжело, так как идет запоздание в 2 недели
Плюсов от этого мало, все равно все всё делают в последний день
Простых заданий много в интернете, было бы желание их решать
Простые приложения, типа работы с биоинформатическими форматами данных мы рассмотрим
Будут задачи связанные с тем, что вы на дискретной математике проходите
Для остального есть проекты
Цель курса научиться программировать в целом, как вы потом приложите свои знания зависит от вас
Реальные задачи - редкие и сложные
Автоматизация задач
Задачи могут быть разными, начиная от парсинга файлов, заканивая созданием машин, управляемых искусственным интеллектом
Задачи могут быть сложными, наша цель как программистов в первую очередь решить их максимально понятно для людей
Неплохая книжка про то как надо подходить к программированию, мысли верные, но обещанного научного подхода я в ней не увидел.
Хорошо хоть короткая
Все круто:
больше думаем/планируем
меньше пишем
общаемся с коллегами
Но есть ньюанс...
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
По большому счету он умеет только двигать байты между регистрами и производить над ними арифметические операции (очень грубо)
К счастью для нас был придуман ряд абстракций в виде языков программирования, скрывающих от нас низкоуровневые детали,
но есть нюанс...
И сказал Господь: вот, один народ, и один у всех язык; и вот что начали они делать, и не отстанут они от того, что задумали делать; сойдем же и смешаем там язык их, так чтобы один не понимал речи другого (Бытие:11 6-7)
Близость к железу (ручному копанию в памяти компьютера) - низко/высокоуровневость
Типизация - статическая/динамическая, строгая/слабая
Способ трансляции в машинный код - компилируемый/интрепретируемый
Богатство экосистемы
Понятность простым смертным
Высокоуровневый
Динамически типизированный
Интерпретируемый*
Много бибилиотек
Создан в 1991
Назван в честь шоу Monty Python
Две основные версии - 2 и 3
Наконец-то 2 версия отдает концы (в конце этого года)
Guido van Rossum. Python's
Benevolent Dictator For Life*
Компьютер воспринимает все команады однозначно, поэтому у языков программирования все немного строже, чем у обычных языков
Синтаксис - определяет из каких наборов символов в каком порядке может состоять программа
Семантика - определяет к каким действиям приведет наш набор символов
print('Hello world')
console.log('Hello world')
fun main() {
println("Hello world")
}
print("Hello world")
#include <stdio.h>
void main()
{
printf("Hello world\n");
}
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.
На ассемблере вы уже видели
У питона строгой спецификации нет. Реализации могут отличаться
a = "Hello"
b = "World"
print(a / b)
Lines
Identifiers
Keywords
Literals
Operators
# identifier := _A-Za-z[_A-Za-z0-9]* - Упрощенно, 3 версия питона понимает и юникод, но не весь
π = 3.14159
jalapeño = "a hot pepper"
ラーメン = "delicious"
# ☃ = "brrr!" эмодзи, например, нельзя
_one = 1
__two = 2
_4ever = 0
snake_case = "python variables"
camelCase = "not python"
CamelCase = "python classes"
AAAAA_AAAAA = "constant varibles"
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
+ - * ** / // % @
<< >> & | ^ ~
< > <= >= == !=
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=
Константные значения некоторых встроенных типов
Вот тут можно про все это почитать самому
Вся программа состоит из инструкций (statements)
Некоторые инструкции могут включать в себя выражения или являться выражением
Выражение - что-то что можно вычислить
a = 1 + 1
print(2 + 3)
statement
expression
b = 42 # type: int
c = 6.022e23 # type: float
d = False # type: bool
e = b"W3C" # type: bytes
a = "Why do I exist?" # type: str
g = 1, 2, 4 # type: tuple
h = 1, # type: tuple
f = [1, 2, 4] # type: list
k = {1, 2, 3} # type: set
q = {"dog": "god", "artist": "behemoth"} # type: dict
x = print # type: callable
Text