Как изучить программирование на C и основы работы с операционными системами на практике?

Значок программирования

Есть много способов научиться программировать, есть множество веб-страниц с учебными пособиями, примерами кода и т. д. Вы также можете найти множество книг по программированию как на C, так и на многих других языках. Существуют также онлайн-курсы или курсы программирования лицом к лицу, где вы можете начать понимать эти методы, чтобы создавать собственное программное обеспечение с нуля до продвинутого уровня.

С другой стороны, есть несколько физических тренажеров с определенными микропроцессорами или микроконтроллерами, которые вы можете запрограммировать, чтобы изучать это искусство, почти играя и создавая проекты. Очень хороший пример - сама Raspberry Pi, платы Parallaz или национальные, которые вы можете найти в магазине MKElectronics, или известная плата. Arduino, Scratch. Однако, если вы хотите больше сосредоточиться на разработке программного обеспечения, я всегда советую то же самое: читать и изменять код.

В этой статье Я не буду пытаться давать вам уроки программирования, так как это тема, которую я бы дал для многих подобных статей, объясняя из основы программирования к самому продвинутому программированию. Я просто хочу дать вам некоторые ресурсы или способы начать укреплять свои знания. И уверяю вас, что они очень эффективны. Кроме того, вы знаете, что можете начать с любого дистрибутива GNU / Linux с необходимыми пакетами для программирования, такими как текстовый редактор или IDE, а также GCC и GDB, если вы хотите отлаживать ... Или также использовать некоторые раздача для программистов. Я также думаю, что вы уже знаете или должны знать этот тип инструментов, которые есть в вашем распоряжении.

Как начать?

Исходный код на экране

Вы можете найти фрагменты кода в сети до миллионов, то есть фрагментов кода, которые можно использовать или изменять для выполнения очень специфических задач. Эти исходные коды являются основой для обучения, поскольку они представляют собой очень простые функции, которые помогут вам понять, как работают программы, и вы можете изменить некоторые параметры, чтобы заставить их делать что-то другое. И вот как это начинается!

По мере продвижения вперед вы можете прыгнуть в прочитать исходный код, который, если хорошо прокомментировать, будет особенно полезен для ваших знаний. К сожалению, не все разработчики имеют хорошую привычку комментировать написанные ими строки, а в некоторых случаях комментарии редки или сбивают с толку даже опытных людей. Но, к счастью, у нас есть большая часть сообщества, которая довольно хорошо комментирует свои проекты.

Платформы, на которых программный код, например GitHubНапример, хотя их гораздо больше, они являются очень важными источниками мудрости. Фактически, я рекомендую, чтобы после того, как вы немного научились работать с фрагментами или небольшими программами, перейти на эти типы платформ и получить доступ к исходному коду простых проектов. Вы можете использовать функции фильтра и поисковой системы, чтобы найти определенный код в язык программированияКак C а затем выберите более простой.

Так мало-помалу ты можешь идти увеличение сложности программ чтобы поднять свои знания на достаточно продвинутый уровень. Не начинайте с проектов с большим количеством строк, иначе вы будете разочарованы, не понимая, для чего нужен этот большой объем кода или для чего он нужен. Он начинается с небольших программ из нескольких десятков строк, затем для нескольких из 100 или более строк и так далее, пока мало-помалу вы дойдете до более сложных программ.

Кроме того, я советую вам поискать программы, которые вы достаточно хорошо знаете с точки зрения их использования. Например, представьте, что вы используете определенный текстовый редактор с открытым исходным кодом или калькулятор. Зная, что эта программа делает на практике, вам будет легче связать строки исходного кода, которые вы увидите, с функциями, которые имеет программа. С другой стороны, если вы выберете код, о котором не знаете, только с помощью ваших базовых знаний в области программирования и комментариев, которые вы найдете в файлах кода, будет недостаточно.

Например, взгляните на второй пример, показанный в моем поиске программ расчета в язык C следующего изображения. Описание показывает, что это программа командной строки, которая реализует простой калькулятор. Это хороший код для начала, не только из-за простоты кода, но и из-за того, что, будучи основанным на тексте, у вас не будет файлов кода, связанных с графическим интерфейсом и т. Д., Все это отвлекает вас и затрудняет обучение:

Github

Если мы войдем в этот проект, чтобы увидеть его код, мы сначала найдем файлы, которые разработчик загрузил на эту платформу. Подобно деталям ЛИЦЕНЗИИ, файл с информацией по преимуществу README и т. Д. Но обратите внимание, что есть файлы заголовков как helpers.h и struct.h, эти два важны, а также два .c, которые имеют фактический исходный код C для этой программы:

Заголовки

Если мы обратимся к одному из заголовков или .h, мы увидим, что это простая программа без слишком большого количества строк. Вы найдете эти типы файлов много раз, если только это не достаточно простая программа, которая в них не нуждается, но это включить файл где включены некоторые детали или дополнительные файлы, которые компилятор должен обработать, чтобы сформировать окончательный двоичный файл программы.

В файле заголовка вы найдете прямые объявления классов, подпрограмм, определенные переменные и другие. Иногда эти .h Библиотеки который вы можете использовать из основного файла кода (.c), делая прямую ссылку на то, что объявлено в этих заголовках, без необходимости повторять всю структуру каждый раз, когда это необходимо:

Заголовок кода

В случае самого исходного кода, например файл calc.c в нашем примере вы найдете больше строк. Примерно 400 с чем-то, и в данном конкретном случае они не комментируются. Что серьезно затрудняет понимание кода. Однако, будучи программой, такой же простой, как калькулятор, вы можете читать и изменять ее без проблем, поскольку она будет интуитивно понятной:

помните, прочитать код и изменить его. Те ключи к обучению программированию наилучшим образом ...

Еще один шаг: ядро

Ядро Linux

Теперь, когда вы уже приобрели некоторые базовые навыки программирования на языке C, вы можете сделать еще один шаг и войти в увлекательный мир операционные системы и компьютерные архитектуры. Для этого вы должны иметь несколько более глубоких знаний о том, как работают компьютеры, но, опять же, существующие проекты с открытым исходным кодом могут нам очень помочь.

Проанализируйте исходный код ядра он может помочь нам лучше понять, как работает этот мир операционных систем, и это также будет мастер-класс для получения нашей «докторской степени» в программировании на C, поскольку это что-то важное. Вы можете подумать, что лучший проект для изучения этого - это ядро ​​Linux.

Вместо этого текущие размеры последние версии ядра Linux они слишком сложны, чтобы их могло понять большинство смертных. Специально для большой объем кода для других подсистем и драйверов, которые вы найдете добавленными к самому ядру. Это может привести вас к мысли, что на kernel.org вы можете найти более примитивные версии ядра, такие как "исторические", где есть некоторые "старые версии", такие как Linux 0.01, первая, в которой код значительно сокращен и прост для анализа.

Захват Kernel.org

И хотя код C, который вы найдете в ядре Linux, изыскан, Я не рекомендую ядро ​​Linux из-за того, что во многих случаях оно обычно почти не комментируется. Я не говорю, что у разработчиков плохая политика в отношении комментариев, но это может сбивать с толку тех, кто только начинает. Так что оставьте ядро ​​Linux и LKML на потом ...

И это правда, что они существуют несколько очень хороших книг и курсы, чтобы узнать о ядре, модулях и драйверах, но, возможно, это не лучшее место для начала. Вот некоторые примеры (некоторые из них, например, у Грега, вы можете скачать бесплатно, поскольку они были выпущены):

  • Разработка ядра Linux 3-е издание пользователя Роберт Лав.
  • Общие сведения о диспетчере виртуальной памяти Linux от Мела Гомана, хотя последний фокусируется только на управлении памятью ядра.
  • Драйверы устройств Linux 3-е издание от Грега Кроа-Хартмана, хотя он ориентирован на ядро ​​2.6, но это отличная работа для понимания драйверов и модулей ядра.
  • Ядро Linux в двух словах - еще один из великих Грега Кроа-Хартмана, который дает вам гораздо более глобальное видение.

Вы также можете найти несколько очень интересных веб-сайтов, помимо вашего собственного. информация и документация который вы можете найти на kernel.org, например:

Еще один замечательный проект, который все еще изучается и используется в качестве обучения, - это UNIX шестой, чей код необычным образом анализируется в таких книгах, как Комментарий Льва к 6-му изданию UNIXпользователя John Lions. Я оставляю это вам как еще одну альтернативную идею, хотя я продолжаю рекомендовать следующее, что я собираюсь прокомментировать ...

Но я думаю что лучший ресурс, который у вас есть в вашем распоряжении, - это изучение и анализ исходного кода MINIX.. Это гораздо более простая система, на которую изначально был вдохновлен Linux, но которая была специально разработана для обучения и изучения. Предназначенный для изучения будущими архитекторами операционных систем, он дает необычную обратную связь для тех, кто только начинает.

Больше информации - МИНИКС3

Там вы найдете много информации и документации по проекту. И вы можете скачать сама операционная система, но также иметь в своем распоряжении хорошую Wiki, где также есть тексты для разработчиков. Но, поскольку речь идет об изучении C и анализе того, как устроена операционная система, я рекомендую вам загрузить первую версию исходного кода MINIX 1:

Исходный код - МИНИКС1

Например, если вы перейдете в основной файл main.cВы увидите, что код здесь сильно отличается от того, как вы его найдете в Linux или в программе калькулятора, которую я использовал в качестве примера в начале этого поста. В этом случае вы заметите, что комментариев намного больше:

Исходный код MINIX

Здесь почти каждая строка или каждый фрагмент Отзыв. Делая ваш чтение и понимание. Я снова настаиваю на том, что речь идет не только о чтении и понимании, но и о модификации. Внесите свои собственные модификации и тесты, затем скомпилируйте и посмотрите результат. Это будет лучший мастер программирования, которого вы можете найти. Уверяю вас, как я всегда говорю своим студентам, чтение и изменение кода - лучший компьютерный класс, который у вас будет ...

Вы сможете анализировать не только ядро ​​операционной системы, но и другие вспомогательные элементы, которые составляют полную операционную систему и также команды который вы можете запустить в оболочке. Это отличный способ узнать «изнутри», как работают такие команды, как ls, cat, cp, grep, echo и т. Д., Которые вы выполняете ежедневно, также с довольно хорошо прокомментированным кодом ...

Исходный код команды - МИНИКС1

Наконец, я знаю парня, который создал ядро ​​с нуля. Его зовут Луис, и вы можете найти его проект по этому адресу. GitHub, еще один хороший учебный пример, который я бы порекомендовал. Его система называется Индия, получить базовые знания достаточно просто и идеально. Кто знает? Может быть, вы следующим осмелитесь создать ядро ​​...

Если вы хотите учиться ассемблер или ASM, интересный язык наряду с C для программирования на низком уровне и, особенно, для операционных систем ..., есть также очень интересные проекты, такие как случай КолибриОС, бесплатная система, написанная на ассемблере. Находясь в ASM, это намного сложнее, но также дает хорошее представление о том, как машины работают на более глубоком уровне в отношении оборудования.

Учебник: распечатайте исходный код, чтобы изучить его на бумаге

PDF с красочным исходным кодом

Если вы из тех, кто не любит часами сидеть перед экраном и смотреть на него, возможно, вы предпочитаете бумагу. Я собираюсь показать вам небольшой учебник о том, как вы можете распечатать все эти исходные коды, о которых мы говорили, или те, которые вы хотите проанализировать. Так что вы можете иметь PDF-файл с выделенным синтаксисом готовы к печати на принтере и чтению на бумаге, где вы можете делать свои примечания и многое другое.

Для этого первым делом будет установить необходимые пакеты в нашем дистрибутиве:

 

sudo apt-get install texlive-latex-extra latex-xcolor textlive-latex-recommended

Как только у нас появятся эти файлы, мы будем использовать LATEX Чтобы преобразовать исходный код в PDF, и для этого мы должны сохранить этот скрипт, дать ему права на выполнение и выполнить его в Bash:

#!/usr/bin/env bash

tex_file=$(mktemp) ## Random text file name

cat<<EOF >$tex_file   ## Print the text file header
\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color}  %% Allow color names
\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  xleftmargin=\parindent,
  language=C++,   %% Change this to whatever you write in
  breaklines=true, %% Wrap long lines
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{Gray},
  stringstyle=\color{Black},
  keywordstyle=\bfseries\color{OliveGreen},
  identifierstyle=\color{blue},
  xleftmargin=-8em,
}        
\usepackage[colorlinks=true,linkcolor=blue]{hyperref} 
\begin{document}
\tableofcontents

EOF

find . -type f ! -regex ".*/\..*" ! -name ".*" ! -name "*~" ! -name 'src2pdf'|
sed 's/^\..//' |                 ## Change ./foo/bar.src to foo/bar.src

while read  i; do                ## Loop through each file
    name=${i//_/\\_}             ## escape underscores
    echo "\newpage" >> $tex_file   ## start each section on a new page
    echo "\section{$i}" >> $tex_file  ## Create a section for each filename

   ## This command will include the file in the PDF
    echo "\lstinputlisting[style=customasm]{$i}" >>$tex_file
done &&
echo "\end{document}" >> $tex_file &&
pdflatex $tex_file -output-directory . && 
pdflatex $tex_file -output-directory .  ## This needs to be run twice ## for the TOC to be generated  </pre><pre>

После сохранения в файл с имя pdf.sh, вы можете предоставить ему разрешения и выполнить его простым способом:

chmod +x pdf.sh
./pdf.sh

В результате получится PDF-файл с выделенным цветом текстом для лучшего чтения файлов исходного кода текущего каталога. Имя PDF-документа будет все.pdf. Теперь он будет готов для того, чтобы вы поместили его в очередь печати, чтобы получить на бумаге.

Кстати, проблема только в том, что файлы исходного кода Каталог, в котором вы запускаете этот скрипт, который содержит пробелы в своих именах, не будет работать с этим скриптом. Так что, если они есть, вы можете изменить их имя или скрипт для их поддержки ...

Не забывайте оставлять свои комментарии, Я буду рад ответить на любые ваши вопросы по этому поводу или выслушать ваши отзывы, чтобы улучшить сообщение. И я надеюсь, что это послужило руководством для начала работы в этом мире ...


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Слэм сказал

    Очень хороший пост… !!!
    У меня проблема только со скриптом, он голосует за ошибки в строке 5.

  2.   Ксавье сказал

    Привет, спокойной ночи здесь, в Мексике, было бы хорошо, если бы вы продолжили писать через этот носитель и, если возможно, продолжали наполняться знаниями. С другой стороны, спасибо за то, что вы посвятили свое время и опыт, от которых нам осталась половина. В моем случае я бросил карьеру из-за проблем, теперь я работаю, чтобы поддерживать себя. Постепенно я улавливаю вещи в этом смысле, действительно, полное спасибо.

  3.   ангел мартинес сказал

    Как мне получить всю информацию о программировании

  4.   Нелюбимая изма сказал

    Проблема со строкой 5, возможно (потому что я еще не пробовал xd), заключается в том, что она написана так:

    кошка < $ tex_file ## Распечатать заголовок текстового файла

    когда должно быть так:

    cat <$ tex_file ## Распечатать заголовок текстового файла

    Или я так себе представляю: U ...

    Привет.

  5.   Нелюбимая изма сказал

    О черт, на этот раз он все сделал правильно>: v

  6.   Грегори Рос сказал

    Поздравляю со статьей, она мне очень понравилась! Прекратить программирование назад…. xD почти тридцать лет, бесчисленное количество раз я думал вернуться к этому, и из-за нехватки времени и особенно ЛЕНИ я всегда откладывал это. Я признаю, что документация, которая существует сейчас, просто фантастическая, жаль, что большая ее часть на английском языке, я знаю, что теперь все хотят ее понять, но мои знания ограничиваются немногим более двух десятков слов, используемых в программировании. Есть ли учебник по ядру на испанском языке? Я не обещаю возобновить программирование, я слишком много раз оставлял это, чтобы поверить, что смогу сделать это сейчас, но если есть что-то, что я никогда не терял, то это было любопытство. Спасибо за статью и с наилучшими пожеланиями.