Зара Горенко – Мыслим на Си (страница 10)
Часть 7: Инициализация – создание и заполнение
Вы можете объявить переменную и присвоить ей значение в одной строке:
cint age = 11;
char initial = 'Z';
float pi = 3.14159;
Это инициализация. Безопаснее, чем в два шага.
Почему? Потому что неинициализированная переменная содержит мусор:proza+1
cint x; // Не инициализировали!
printf("%d\n", x); // Может вывести 0, может 184759392, может -5
В Unix-философии: "Будь явным, не неявным". Если создаёшь переменную – сразу скажи, что в ней должно быть.
Часть 8: Константы – переменные, которые не меняются
cconst int MAX_WORDS = 10000;
const float PI = 3.14159;
MAX_WORDS = 5000; // ОШИБКА! Компилятор не позволит
Или через препроцессор:
c#define MAX_WORDS 10000
#define MAX_WORD_LEN 50
#define – текстовая замена до компиляции. Препроцессор просто заменяет MAX_WORDS на 10000 везде в коде.
Часть 9: Метафора – память это файл
В Unix всё – файл. Клавиатура – файл (/dev/input). Экран – файл (/dev/fb0). Память – тоже файл (/dev/mem).
Переменная – это имя файла в памяти. Тип – это формат файла. Значение – это содержимое.
cint age = 11;
Это как создать файл /memory/age размером 4 байта с содержимым 00 00 00 0B.
cage = 12;
Это как открыть файл, стереть содержимое и записать новое: 00 00 00 0C.
В Linux вы можете увидеть память процесса:
bashcat /proc/self/maps
Всё прозрачно. Всё доступно. Это Unix.
Часть 10: Философия обучения через код
Когда я учила английский через частотный анализ, я не учила грамматику. Я учила паттерны.
Neural networks process data – паттерн: прилагательное + существительное + глагол + существительное.The program thinks – паттерн: артикль + существительное + глагол.
Компьютер помог мне увидеть структуру. Как компилятор видит структуру кода.
Через месяц я писала:
Neural network = weighted graph. Thinking = pattern recognition. Consciousness = emergent property?
Короткие фразы. Без артиклей. Без сложных времён. Но понятные. Логичные. Правильные.
Один пользователь написал:
@PhoeNIX Your English is improving fast. How old are you, by the way?
Я ответила:
Age = irrelevant. Ideas = relevant.
Он засмеялся (написал lol ) и больше не спрашивал.
На Reddit важен только код. Только идеи. Возраст не имеет значения.
Заключение главы
Теперь вы знаете:
Что такое переменные и типы данных
Как объявлять и инициализировать переменные
Что такое структуры и массивы
Как память работает как файловая система
Что код может помочь учить человеческий языкotvet.mail
В следующей главе мы изучим операторы – сложение, вычитание, сравнение, логику. Мы научимся принимать решения и повторять действия.
Практическое задание:
Напишите программу, которая подсчитывает частоту слов в тексте. Используйте структуры и массивы. Не обязательно делать сортировку – просто посчитайте и выведите.
Потом возьмите любой текст на английском (статью, форум, книгу), пропустите через программу и начните учить самые частые слова.otvet.mail
Компьютер – лучший учитель языка. Он не осуждает ошибки. Он просто показывает паттерны
P.S. от PhoeNIX:
Кто-то сказал мне на Reddit: You think in code, not in language.
Я ответила: Code IS language. Universal language.
И это правда.
Переменные – это слова. Типы – грамматика. Программы – предложения.
Если вы понимаете это, вы можете говорить с кем угодно. На любом языке.
Потому что логика универсальна.
Зара
Часть 11: Код говорит громче слов
Через две недели после первого поста я заметила изменение. Люди начали скидывать свои исходники на Си – прямо в тред. Не абстрактные рассуждения о философии сознания, а реальный код.
@PhoeNIX Here's my attempt at a simple pattern matcher. Thoughts?
cint match_pattern(char *text, char *pattern) {