Мой опыт программирования ~9 лет. Я писал на паскале, дельфи, перл и пхп. По-настоящему умею писать лишь на PHP. Кроме того у меня нет специального образования. Приходилось учиться всегда. У меня даже был кризис на эту тему, устал. Где-то пару лет назад я осознал наличие так называемой «базы». У каждой предметной области будь то бухгалтерия, медицина, программирование есть пласт информации который каждый соответствующий специалист должен обладать — базовые знания.
Так как базы у меня не было, не было и единой картины мира. Соответственно многие знания не получалось связывать вместе. Отсутствие связей очень усложняет запоминание и понимание. Так-же усложняется понимание куда двигаться дальше.
Всегда хотел изучить си. На нём написано очень-очень-очень много всего, мне казалось не спроста. Я считаю знание си даёт реальное представление о том как работает компьютер на низком уровне. Так-же даёт представление об алгоритмах, структурах данных. В общем знание си — это и есть база.
Я много лет пытался овладеть сями. Много лет, мне это не удавалось. В общем чудо произошло наступило понимание как это работает. Здесь я хочу дать ссылки на литературу и указать с чего начать.
Первое с чего следует начать это с поиска практической задачи.
Следующее. Поставить себе цель должна быть полностью понимать исходный код. Для этого нужно этот исходный код где-то взять. Пару лет назад я перешёл на линукс, здесь с этим проблем нет. Можно посмотреть исходные коды проектов nginx, pgbouncer, whois, так-же взять что-нибудь с GNU. Получить исходный код при помощи apt-get, можно командой
cd ~/src
apt-get source package_name
Понимание что изучение языка программирования сводится к освоению его синтаксиса, конструкций, а так-же стиля как принято на нём писать. Первое и второе это:
- Типы данных и их об явление
- Выражения и присваивания
- Операторы
- Функции
- Работа с файлами
- Если язык объектно ориентированный то ещё классы
Понимание как нужно писать приходит с опытом. Нужно использовать чужой код и смотреть как он исполнен.
В общем главное — не бояться! © :)
Так-же необходима среда для экспериментов. Чем быстрее и проще появляется возможно ставить эксперименты, тем проще освоить тему.
Книги
- Отличное скучное начало. Громов Ю.Ю.,Татаренко С.И. Программирование на языке СИ: Учебное пособие
- Отличное весёлое начало Крупник Александр. Изучаем Си. Поискать.
Инструменты
- Eclipse CTD
- Geany
- Code::Block
Geany — мой выбор. Спасибо статье Алексея Снастина «Обучение программированию в Linux на примере интегрированной среды разработки Geany: Часть 1.Основы работы в Geany – создание простого приложения». Почитать.
Первая компиляция
Так-же скажу ещё что такой код сохранённый в файл test.c
#include <stdio.h>
int main (void)
{
printf("Hello, world!\n");
return 0;
}
Компилируется такой командой
gcc -Wall -o "test" "test.c"
Будет создан исполняемый файл с именем test.