C как первый язык
Перейти к содержимому

C как первый язык

  • автор:

Си в качестве «первого» языка

Внезапно поняв, что на третьем курсе политеха IT-специальности я толком не умею программировать, а хочется, я начал метаться. Программировать хочу конечно же для iOS, есть необходимый инструментарий в виде Мака и Айфона с Айпэдом для теста, но нет главного – нужных знаний в голове. Что-то знаю, где-то слышал, но в основном каша. Книгу «Become an Xcoder» я прочел, естественно сложного ничего там нет. Следующим этапом выбрал «классику» Денниса Ритчи и Брайана Кернигана «Язык программирования Си». Я правильно сделал? Спасибо.

  • Вопрос задан более трёх лет назад
  • 12282 просмотра

Комментировать
Решения вопроса 0
Ответы на вопрос 9

Начинай сразу с objective-C, с реального приложения. Нет ничего хуже, чем отсутствие заинтересованности, даже если сейчас чешется, удержать это ощущение на долго не получится, а живой проект будет отличным мотиватором.
Язык — это лишь способ реализации определенных задач, если цель твоя iOS — просто глупо начинать с C. Я лично не вижу ни одного «за». А глубокие материи ты и на С все равно так вот сразу не познаешь, все прийдет с опытом.

Из литературы посоветую — Фаулер «Рефакторинг. Улучшение существующего кода.» — поможет сразу писать код более правильно и ускорить процесс «вникания в высшие матери»

Ответ написан более трёх лет назад
Нравится 7 3 комментария

P.S. Твоя цель — программирование, а не изучение языка. Это как вождение — какой смысл учиться на коробке-автомат, если после обучения придется ездить на ручной кпп? (или наоборот)

gabex

gabex @gabex Автор вопроса

Ваш совет более привлекателен с точки зрения экономии времени. Другое дело, что очень часто (пример – курсы Стэнфорда CS193P) в учебных пособиях по Obj-C подразумевается знание C.
Книга «Программируем для iPhone и iPad» из серии Head First издательства O’Reilly подойдет для моего случая?

. Другое дело, что очень часто (пример – курсы Стэнфорда CS193P) в учебных пособиях по Obj-C подразумевается знание C.

Это так же подразумевает наличия опыта (вернувшись к аналогии с вождением — это как пересесть с легковой на грузовик скажем).

Просто начни и все. Язык не важен, важна платформа и прадигма. Си — это процедурный язык, obj-c — объектно-ориентированный. И это один из главных доводов против выбора Си, как первого. Второй — платформа. Практикуя сразу под iOS — ты постепенно ознакомишься с API девайсов и не будешь изучать не нужные тебе программные интерфейсы десктопов.
Литература не важна — подойдет любоая описывающая в подходящей тебе манере API и основы языка. Остальное легко найти в сети.

Дмитрий @EvilsInterrupt
System programming, Reversing Engineering, C++

Мой совет начинать в таком порядке, свою карьеру программером:

1) Плаксин.М «Тестирование_и_отладка_программ». Начните ковыряться с существующими программами, за основу можно взять calc.exe или еще что-либо. Умение тестировать дает возможность беспощадной работы со своим собственным кодом за который вы будете в ответе перед своими коллегами. Это очень полезный навык, пусть даже в минимальном объеме но программер должен уметь тестировать!

2) Язык С среди компьютерных языков сейчас занимает туже роль что и Английский среди человеческих. Зная С вам легче будет понять другие!

3) Никогда не делайте ничего что лично Вам хоть как-то не интересно. Любой проект, любая задача, любое действие должно быть интересно не только поставившему вам задачу, но и лично Вам!

4) Алгоритмы, без них никуда! Чем больше вы их знаете и умете применять на практике и давать оценку по сложности, тем лучше!

5) Паттерны, это имеет смысл когда у вас хоть какой-то опыт программирования. Хотя бы 20 программ напишите, потом поймете сразу что на практике вам встречалось, а что нет. Будете отчетливо понимать чем конкретно тот или иной паттерн может вам помочь.

6) Будьте прагматичны! Любое действие должно Вас приводить к какой-либо ранее поставленной Вами цели.

7) Почитайте «Мифический человеко-месяц» Брукса. То что изложено в книге нужно понимать для того чтобы знать какие конкретно задачи следует выполнять, а какие нет! Умение поправить руководителя правильно и корректно, причем аргументировано дает Вам возможность принести больше в программный проект и следовательно даст Вам преимущество перед коллегами.

Зачем и как эффективно учить язык программирования Си: исчерпывающая подборка ресурсов для освоения

Многим кажется, что язык Си уже устарел. Однако, хоть Си редко встретишь в промышленном программировании, его существованием пронизано в IT буквально все.

Обложка поста Зачем и как эффективно учить язык программирования Си: исчерпывающая подборка ресурсов для освоения

Язык Си был разработан Деннисом Ритчи и Брайаном Керниганом в 1969–1973 годах. Си задумывался для реализации операционной сети UNIX, но впоследствии он нашел себе более широкое применение.

На сегодняшний момент Си занимает стабильное второе место в индексе TIOBE.

Зачем нужен Си?

Мы уже писали о важности языка Си, поэтому пробежимся по основным пунктам.

Начнем с того, что большая часть системного программного обеспечения пишется на языке Си. Ядро популярнейшей open source ОС Linux было написано на Си.

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

Стоит также отметить, что наиболее популярные языки программирования тем или иным образом связаны с Си. Так, например, Java и C# имеют так называемый Си-подобный синтаксис, а C++ и Objective-C в том или ином роде являются расширениями Си.

Если вы пишете код на каком-нибудь динамическом языке программирования, будь то PHP, JavaScript или Python, то его интерпретатор, среда исполнения и большинство библиотек в основном написаны на Си. Следовательно, чтобы понять особенности поведения того или иного языка, нужно знать особенности языка Си. А если вы вышли за рамки возможностей своего языка программирования, то не успеете оглянуться, как начнёте писать новое расширение на Си.

К тому же, знание Си позволяет программисту по-настоящему оценить все прелести высокоуровневых языков программирования, а также и ограничения, которые возникают при их использовании.

И это далеко не все доводы в пользу изучения Си.

Что дальше?

Теперь, когда мы разобрались, зачем нам нужен Си, возникает логичный вопрос: «А как его выучить?».

Далее мы подготовили для вас несколько курсов и материалов, которые помогут вам освоиться в новом для вас языке программирования.

Книга «Язык программирования Си»

Никто не расскажет вам о Си лучше, чем создатели этого языка программирования. Поэтому книга «Язык программирования Си», написанная Деннисом Ритчи и Брайаном Керниганом, является must-have для каждого, кто хоть как-то решил связать свою жизнь с Си.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Курс «The Complete C Developer Course — Build 7 Exciting Projects»

Курс покрывает как начальные аспекты языка, так и более продвинутые: программирование графики, модели памяти и многое другое. В процессе прохождения курса вы создадите 7 захватывающих проектов, таких как систему по управлению базами данных и свой собственный компьютерный вирус.

Курс платный, но он однозначно стоит своих денег. Дальше предлагаем бесплатные материалы.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Знаменитый гарвардский курс «CS50»

Теперь он доступен на русском языке. Прежде всего CS50 научит вас думать. Некоторые из тем, которые вы пройдете в течение курса: абстракция, алгоритмы, структуры данных, инкапсуляция, управление ресурсами, безопасность, разработка программного обеспечения и веб-разработка. Языки, которые вы будете использовать: C, Python, SQL и JavaScript вместе с HTML и CSS. И что немаловажно, курс бесплатный.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Бесплатный курс «C Tutorial for Beginners»

С этой программой вы изучите основы языка Си, разберётесь с указателями, структурами и объединениями, а также научитесь писать простые программы.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Бесплатные онлайн-курсы по Си от двух ведущих финских университетов

Курс включает в себя комплексные материалы и множество упражнений по программированию, а также автоматическую систему тестирования.

Над курсом совместно работали университет Аалто и университет Хельсинки (тот самый, где когда-то обучался Линус Торвальдс), а объясняемый в нем материал полностью дублирует курсы по Си, преподаваемые в этих университетах.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Книга «Learn C The Hard Way»

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

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Интерактивное обучение Си

Руководство покрывает как базовые конструкции языка, так и более продвинутые, такие как указатели, объединения, бинарные деревья и многое другое.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Введение в Си от Hexlet

Курс предназначен для абсолютных новичков в программировании. Он познакомит вас с главными концепциями языка Си.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Еще больше материалов по Си можно найти в нашей огромной подборке «Бесплатные материалы для программистов».

Следите за новыми постами по любимым темам

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

Си как первый язык программирования

Несмотря на то, что сегодня в качестве первого языка программирования часто рекомендуют варианты наподобие Python или Javascript, C (Си) тоже является надёжным выбором – он удачен как для начинающих кодеров, так и для углубления и расширения компетенции, если вы специализируетесь на чём-то другом.

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

Ещё одно достоинство – то, что знание Си значительно облегчает в дальнейшем изучение высокоуровневых языков вроде Java, D, C++ и других, поскольку их синтаксис в известной мере происходит именно от него. Поэтому он подходит для первичного ознакомления тем, кто ещё не решил, на какой области планирует сконцентрировать усилия в дальнейшем. На нем же написаны интерпретаторы, среды исполнения и большинство библиотек Python, PHP и JavaScript – зная первоисточник, вы будете полностью понимать особенности их поведения.

Введение в язык программирования C

C — это достаточно «древний» язык программирования, он сформировался в начале 70-х. Не смотря на это, C — живой язык в том смысле, что он активно применяется в настоящее время. Он был придуман, использовался и используется для написания частей программного кода Unix-подобных операционных систем. Также на нем пишут утилиты, компиляторы и реже прикладные программы. Поэтому C называют системным языком программирования.

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

C в чистом виде не поддерживает объектно-ориентированного программирования (хотя есть библиотека, в которой эмулируются возможности ООП). Поддержка ООП реализована в C++. Хотя последний возник на основе языка C, он не является его «продолжением», а представляет собой отдельный язык, который можно изучать, не зная C. Однако изучение C полезно перед знакомством с его «продвинутым младшим братом», т.к. синтаксис языков похож, C не перегружает мозг начинающего программиста сверхвозможностями и приучает к пониманию сути происходящего.

Подходит ли C для первого знакомства с программированием? Если вы не обучаетесь в вузе по специальности, связанной с IT, то нет. C предполагает понимание организации и принципов работы аппаратного обеспечения, в частности – памяти. Здесь многое делается с помощью указателей, они играют ключевую роль; эта тема достаточно сложная для понимания и обычно не изучается в школе.

Конечно, с помощью C можно изучать основы программирования и не изучать при этом указатели. Однако человек будет думать, что знает C, мало зная о нем по существу. Язык C был создан разбирающимися в устройстве «железа» профессиональными программистами для написания операционной системы UNIX. Его не задумывали как язык для обучения начинающих.

Среды и компиляторы для программирования на C

Если вы пользуетесь одним из дистрибутивов GNU/Linux, вам подойдет любой текстовый редактор с подсветкой синтаксиса, также понадобятся GCC и терминал.

Редактор и терминал для программирования на C

Существуют редакторы для программистов, включающие различные дополнения, в том числе терминал, просмотр каталогов и др. Например, Geany или Atom.

Программирование в Geany

C – компилируемый язык программирования. В GNU/Linux для получения исполняемых файлов используется GCC – набор компиляторов, включающий в том числе компилятор для C. Чтобы из исходного файла (обычно таким файлам дают расширение *.с) получить исполняемый, надо выполнить в терминале команду примерно следующего вида:

gcc -o hello hello.c

, где gcc — команда, запускающая программу, выполняющую компиляцию и иные действия; -o – ключ, сообщающий, что мы вручную указываем имя исполняемого файла; hello – имя получаемого исполняемого файла; hello.c – имя файла с исходным кодом. Имя исполняемого файла можно не указывать:

gcc hello.c

В этом случае исполняемый файл будет иметь имя по умолчанию a.out.

Для Windows существует свой набор компиляторов – MinGW. Его можно использовать самостоятельно, однако он входит в состав простой среды разработки Dev-C++, которая может оказаться хорошим выбором для обучения программированию на языках C и С++.

При сохранении выбирайте тип файла «C source files (*.c)». Компиляция и запуск программы выполняется при нажатии клавиши F9. После исполнения программа сразу закрывается и результат невозможно увидеть. Чтобы этого не происходило, прописывают две дополнительные строки: #include и getch(). (Возможно это не актуально для более новой версии Dev-C++.)

«Hello World» в GNU/Linux:

#include int main () { printf ("Hello World\n"); }

«Hello World» в Windows:

#include #include int main () { printf ("Hello World\n"); getch(); }

С другой стороны, существует большое количество кроссплатформенных сред разработки. Например, Eclipse + модуль CDT, KDevelop, CLion.

«Hello World» на C

На примере простейшей программы сразу отметим некоторые особенности языка программирования C.

В языке C роль основной ветки программы берет на себя функция main(). Она является точкой входа в программу. Эта функция всегда должна присутствовать в законченной программе на языке C, и исполнение программы начинается именно с нее. Однако объявленные внутри нее переменные не являются глобальными, их область видимости простирается только на main(). Тем не менее в языке программирования C почти весь программный код заключается в функции, и функция main() является главной и обязательной.

По умолчанию функция main() возвращает тип данных int, поэтому можно не указывать тип возвращаемых данных. Однако компилятор в этом случае выносит предупреждение.

Функция printf() предназначена для вывода данных. Ее назначение аналогично функции print() в Python. Однако функция printf() после вывода не выполняет переход на новую строку. Поэтому для перехода используется специальный символ, который обозначается комбинацией \n.

Выражения на языке C разделяются точкой с запятой.

В языке C функции ввода-вывода не являются частью языка. Например, в Python нам не надо импортировать никакой модуль, чтобы пользоваться функциями print() и input(). В C мы не можем просто вызвать функцию printf(), т. к. в самом C ее просто нет. Эту функцию, а также ряд других, можно подключить с помощью заголовочного файла stdio.h. Именно для этого в начале программы прописана строка #include . Include с английского переводится как «включить», а stdio есть сокращение от «стандартный ввод-вывод (input-output)».

В заголовочных файлах (они оканчиваются на *.h) обычно содержаться объявления тех или иных функций. Объявление — это просто описание функции: какие параметры она принимает и что возвращает. Сам код функции (определение) находится не в заголовочном файле, а в библиотеках (других файлах), которые могут быть уже скомпилированы и расположены в системных каталогах. Перед компиляцией программы запускается препроцессор языка C. Помимо прочего он включает в начало файла программы содержимое указанных в ней заголовочных файлов.

Закомментируйте 1 первую строчку кода программы HelloWorld. Попробуйте скомпилировать программу. Удалось ли получить исполняемый файл? Какое предупреждение выдал компилятор?

1 // — однострочный комментарий на языке C; /* … */ — многострочный комментарий на языке C.

Курс с решением части задач:
pdf-версия

Добавить комментарий

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