Skip to content

Instantly share code, notes, and snippets.

@Frosne
Last active April 2, 2017 20:05
Show Gist options
  • Save Frosne/8856f2154c46cb158a40c7ec69ac9270 to your computer and use it in GitHub Desktop.
Save Frosne/8856f2154c46cb158a40c7ec69ac9270 to your computer and use it in GitHub Desktop.

Introduction

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

  • На этом языке написаны основные модули операционных систем

  • До сих пор множество программного обеспечения пишется наC , в частности для embedded-устройств. Так есть и будет долгое время.

  • Этот язык позволяет понять принципы работы с памятью, для того, чтобы избежать распространенных уязвимостей, которые могут привести к серьезным утечкам данных или system compromise. Да и просто из интереса.

  • Язык - статически типизированный. Что значит, что программа должна знать что конкретно вы от нее ожидаете. Var(присвоение типа динамически) и прочее не прокатит. Ты должен прекрасно понимать, ЧТО ты хочешь от программы.

  • Язык довольно простой для понимания.

Итак, Си. C — компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би (уперто с википедии). Отец C++ (тоже must-read) и объектно-ориентированных мейнстрим языков. Отсутствует garbage-collector и присутствуют указатели. Enjoy.

С чего вообще начать

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

Компилятор

Хаааачу кодить - Самое начало

  • Основы программирования - http://cppstudio.com/cat/271/273/.
  • Типы данных - http://cppstudio.com/post/271/. На начальных уровнях достаточно понимать что такое bool, char, int и сколько места оно занимает (либо запомнить, что такое sizeof(..)).
  • Конкретно структуры данных - https://habrahabr.ru/post/263765/. На начальных уровнях достаточно понимать, что такое лист и массив.

Не компилируется. Что делать?

  • Во-первых, необходимо проверить запятые, точки с запятой и прочее. Особенно есть вы пришли из Пайтона. Решает 90% проблем.
  • Во-вторых, читать, что пишет компилятор. Иногда полезно.
  • Во-вторых-с-половиной, совет от меня, иногда полезно руками (или мозгом, у кого что лучше работает) пробежаться по программе и посмотреть не только на то, то вы хотели написать, но и что вы написали. Си - глупый, он выполнит второе, первое пока не умеет.
  • В-третьих, гугл. Вбить ошибку. Уже было. Уже проходили. Уже решили.

Level Low

Вики-учебник - https://ru.wikibooks.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%A1%D0%B8_%D0%B2_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D1%85

Курсы на Си - на русском - http://www.intuit.ru/studies/courses/97/97/info
Курсы на Си - на английском - https://www.coursera.org/courses?query=c%20programming

Level Mod

Для среднего уровня знания языка, кроме знания самих конструкций, я бы упомянула следующие темы:

Level High

Общее

Правила хорошего кода: https://habrahabr.ru/company/geekbrains/blog/270001/. Распечатать и выучить.

Для высокого уровня знания языка, я уже сделаю деление на специализации:

Security

Высокое знание memory layout - что как и зачем. Как писать безопасный код - https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard

Peter Van der Linden, Expert C Programming. Deep C Secrets.

Игры на Си

Почему и стоит ли: https://habrahabr.ru/post/275135/

Kernels && microcontrollers

The Linux Kernel Module Programming Guide: http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html
Drivers: http://stackoverflow.com/questions/2222763/how-should-i-get-started-on-writing-device-drivers

Beginner's Guide To Embedded C Programming: https://www.amazon.com/Beginners-Guide-Embedded-Programming-Microcontroller/dp/1438231598 FPGA coding in C: http://stackoverflow.com/questions/5603285/c-to-hardware-compiler-hll-synthesis

Generic

Ваш вопрос уже был задан и на него уже ответили. Если гугл не помогает, советую следующие Вопросы-ответы - на русском http://www.cyberforum.ru/c-beginners/
Вопросы-ответы - на английском https://www.reddit.com/r/C_Programming/

Стандарты

Стандарт С 2011
Стандарт С 99

Вместо заключения.
В целях соблюдения right management я не указывала ссылки на онлайн-хранилища, где можно скачать книги.
Вместо заключения[2]. Мое мнение может не соответствовать мнению остальных членов команды. Данная информация представлена только в образовательных целях.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment