реклама
Бургер менюБургер меню

Зара Горенко – Мыслим на Си (страница 10)

18

Часть 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) {