Си в качестве «первого» языка
Внезапно поняв, что на третьем курсе политеха IT-специальности я толком не умею программировать, а хочется, я начал метаться. Программировать хочу конечно же для iOS, есть необходимый инструментарий в виде Мака и Айфона с Айпэдом для теста, но нет главного – нужных знаний в голове. Что-то знаю, где-то слышал, но в основном каша. Книгу «Become an Xcoder» я прочел, естественно сложного ничего там нет. Следующим этапом выбрал «классику» Денниса Ритчи и Брайана Кернигана «Язык программирования Си». Я правильно сделал? Спасибо.
- Вопрос задан более трёх лет назад
- 12282 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 9
Начинай сразу с objective-C, с реального приложения. Нет ничего хуже, чем отсутствие заинтересованности, даже если сейчас чешется, удержать это ощущение на долго не получится, а живой проект будет отличным мотиватором.
Язык — это лишь способ реализации определенных задач, если цель твоя iOS — просто глупо начинать с C. Я лично не вижу ни одного «за». А глубокие материи ты и на С все равно так вот сразу не познаешь, все прийдет с опытом.
Из литературы посоветую — Фаулер «Рефакторинг. Улучшение существующего кода.» — поможет сразу писать код более правильно и ускорить процесс «вникания в высшие матери»
Ответ написан более трёх лет назад
Нравится 7 3 комментария
P.S. Твоя цель — программирование, а не изучение языка. Это как вождение — какой смысл учиться на коробке-автомат, если после обучения придется ездить на ручной кпп? (или наоборот)
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 и терминал.
Существуют редакторы для программистов, включающие различные дополнения, в том числе терминал, просмотр каталогов и др. Например, Geany или Atom.
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-версия