LINUX.ORG.RU

ansi c с чего начать

 ,


0

1

Есть мечта продвинуться в изучении C. У меня есть 3-е издание K&R, на русском. Первые главы я в принципе проходил, упражнения делал. Но наверное нужна ещё среда, в виде какой то IDE и компилятора. Я в принципе планирую использовать VIM+GCC. Вим я худо-бедно применяю. Но в K&R материал даётся без привязки к конкретной среде. Похоже что там не будет принципов работы Makefile, скриптов конфигурации, принципов сборки программы. По этому, периодически я поглядываю на другие учебники. Из того что наметил себе к прочтению - Крупник, «Изучаем С» и вот такой вариант: https://youngcoder.ru/map.php В книге Крупника упоминается среда Борланд, для варианта по ссылке выше можно поставить Pelles C IDE. Связываться с Pelles C IDE можно, из уважения к составителю курса, я себе поставил. Крупника наверное можно читать в отрыве от Борланд))) Хотелось бы услышать ваши советы - что почитать, на какие, может быть платные/бесплатные курсы пойти. Какое хорошее пособие вы можете посоветовать. Лучше может быть даже и на английском полностью языке. Куда можно будет устроиться, если удастся чему то научиться. Я бы в принципе подумал о втором образовании. Программирование меня увлекает. Немного есть положительного опыта с автолисп, наверное я человек не совсем бесталанный. Рядом со мной есть пример перехода из строительной области в бигдата. Но наверное C не очень хороший и возможный вариант в качестве второго образования. Какие бывают дипломы в этой области, что бы быть трудоустройенным? Извините за столь пространную формулировку, мне, в первую очередь, интересно хорошее онлайн-пособие с привязкой к UNIX, POSIX и современной практике. Если просто почитывать, потыкивать время от времени - я никуда не сдвинусь. Если пойти на платные курсы, шансов сдвинуться с мёртвой точки больше, может быть и поняв что я это не потяну ни при каких обстоятельствах. Спасибо.

★★★
Ответ на: комментарий от LamerOk

«В этом вашем интернете хрен поймешь, кто прикалывается, а кто реально дебил.»

anonymous
()

K&R это конечно хорошо в историческом плане, но учить по нему Си не стоит (и это не ANSI C). Учить, если по книгам, то написанным не раньше 90-х.

firkax ★★★★★
()
Ответ на: комментарий от Psychosis

Так эти дебилы, купавшиеся в молоке, вроде бы, из России?

anonymous
()
Ответ на: комментарий от Zhbert

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

anonymous
()

Но в K&R материал даётся без привязки к конкретной среде.

Это правильно.

Крупник

Не надо тратить время на чтение каких-то левых писак и изучение каких-то левых IDE. Если хочешь изучать язык, изучай язык и не отвлекайся. Возьми современную IDE где можно сразу писать код не думаю о том как он собирается, или если хочется vim + make, достаточно прочитать любой гайд по make и справку по ключам gcc на 10 минут.

Куда можно будет устроиться, если удастся чему то научиться

Если ограничивать себя голым C, то никуда. Во-первых, C сейчас это нишевый язык, и даже из своих ниш (эмбеддовка, драйвера, системное ПО) он активно вытесняется более современными языками. Во-вторых, язык в разработке имеет последнее значение, намного важнее фундаментальное понимание алгоритмов и структур данных (например, это первое что спрашивают на разработческих собеседованиях в big tech), знание API системы, предметной области и умение разбираться в чужом коде.

Но лучше не ограничивать себя C.

Я бы в принципе подумал о втором образовании

Какие бывают дипломы в этой области, что бы быть трудоустройенным?

Если просто почитывать, потыкивать время от времени - я никуда не сдвинусь. Если пойти на платные курсы, шансов сдвинуться с мёртвой точки больше

Без диплома не возьмут на работу. Только фриланс, нет?

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

Куда можно устроиться? Ну смотрим вакансии по C - на агрегаторах в основном IoT, прошивки. Можно предметно ткнуться в конторы построенные вокруг свободных C проектов, типа nginx inc, postgrespro. Напишешь ли ты с одним знанием C модуль для nginx, или перепишешь компрессию TOAST в постгресе? Modbus пакет соберёшь, или хотя бы софтовый i2c запрограммируешь? Нет. Учат ли этому где-то? Нет. Как научиться? Придумываешь себе проект и пилишь - читаешь исходники, читаешь спеки протоколов, экспериментируешь и развиваешься.

Написал, условно, свой postgis, в процессе выучил и C, и POSIX, и кишки постгреса, и вообще принципы работы рсубд, и чужого кода начитался, и решил интересно ли тебе это, и представление о дальнейших путях развития получил, и уже даже начал по некоторым двигаться. Можешь смело идти наниматься в postgrespro, а может и в ms/oracle их базёнки писать.

slovazap ★★★★★
()

Но наверное C не очень хороший и возможный вариант в качестве второго образования.

просто «программист C» мало кому нужен. Надо еще знать с т.з. программирования конкретное железо (проц/МК, шины данных) и какую-то ОС с т.з. системного программирования (Linux, RTOS и т.д. и т.п.).

С т.з. юзерспейса это всякие компиляторы, отладчики, IDE, виртуальные среды, СУБД, systemd.

В других нишах (просто прикладное ПО) голая сишка сейчас не особо нужна. Еще есть всякие корпоративные легаси проекты, но ориентироваться только на них при выборе профессии…

Просто собирать учебные программы можно из мейкфайла.

Рядом со мной есть пример перехода из строительной области в бигдата.

этот пример не релевантен профессии «программист на С»

seiken ★★★★★
()
Ответ на: комментарий от anonymous

На лоре чувак писал

– доктор, моему соседу Мойше 70 лет, и он говорит, что пять раз за ночь с женой может

– так и вы говорите, что можете

seiken ★★★★★
()

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

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

Заодно, какую-нибудь полезную приблуду для автоматизации домохозяйства сделаешь.

Потом постепенно на линуксе в юзерспейсе распишешься.

mv ★★★★★
()
Ответ на: комментарий от seiken

В других нишах (просто прикладное ПО) голая сишка сейчас не особо нужна. Еще есть всякие корпоративные легаси проекты, но ориентироваться только на них при выборе профессии…

Всё околожелезное требует сишечку. Железо цветёт и пахнет, бум такой, что прогресс тормозится нехваткой разработчиков микросхем и низкоуровневого софта.

mv ★★★★★
()
Ответ на: комментарий от mv

Всё околожелезное требует сишечку.

так точно. Это то, что у меня первым абзацем описано (МК, шины данных)

seiken ★★★★★
()

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

Берешь интересную тебе область, берешь открытый проект, или несколько, в ней. Читаешь. Достаточно понять хотя бы часть, и почувствовать общий подход. Потом придумываешь свой проект, пилишь. Если идей нет - тупо переписываешь что-то существующее с нуля. По ходу идеи появятся.

Захочется серьезнее язык узнать - осваиваешься постепенно со стандартом. Курсы нафиг, хороших книг о си практически нет. Да и ненужно.

anonymous
()
Ответ на: комментарий от Zhbert

Ты вроде на яве, ну и как, помогает тебе опыт с C/asm?

он не даст тебе понимания, что такое типы данных

Даст лучше чем си, в котором типов раз-два и обчелся.

что такое потоки ввода-вывода

Зачем за пределами си знать сишные потоки ввода-вывода?

Да, можно обойтись и без этого, говнокодя на питонах и прочих говноскриптах

Больше всего говнокода я видел именно на си. Эдик не даст соврать. Хороший код - это в первую очередь грамотное проектирование, а это у сишников как правило в пролете.

anonymous
()
Ответ на: комментарий от seiken

@e000xf000h расскажи @seiken как писал ПО для Су-57 в Швеции? Я уже подзабыл эту историю, как МО РФ тебе кланялось и ноги целовало.

anonymous
()
Ответ на: комментарий от ox55ff

Программирование это творческая профессия. Или дано Богом или нет.

Хахаха, давно так не смеялся. Программирование - весьма посредственное ремесло.

Psychosis
()
Ответ на: комментарий от seiken

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

Существуют-ли ещё суровые промышленные эмбедеры? (комментарий)

anonymous
()

Но наверное нужна ещё среда, в виде какой то IDE и компилятора.

Если бесплатно, то NetBeans с поддержкой C/C++ (версия 8.x).

Если платно, то CLion.

Оба могут в GCC в качестве компилятора.

DarkAmateur ★★★★
()

Внимательно изучи все это, чтобы знать, как делать не надо!

anonymous
()
Ответ на: комментарий от rupert

можно поискать в интернете проекты на ansi-C и там подсмотреть, как оно выглядит спустя более 10 лет разработки. Что пишут в книгах и результирующая реальность - две разные вещи.

MKuznetsov ★★★★★
()
Ответ на: комментарий от rupert

Это чем тебе K&R не нравится? На мой взгляд - идеал! А все современное УГ — адов отстой обычно. Недавно читал книжку «современное программирование С», оплевался!

anonymous
()
Ответ на: комментарий от Zhbert

Со мной могут быть несогласны

с тобой все согласны: то, о чем ты говоришь – единственно-адекватный подход. Без этого как раз и получаются питонисты-джаваскриптисты, которых все заслуженно «любят» и «уважают»

pihter ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Gdb это игрушки. Надо один раз досовский дебаг попробовать.

luke ★★★★★
()
Ответ на: комментарий от seiken

Ой-вей, таки оно ж не самое плохое, даже если ви нэ думали, шо оно могет быть хужее… Бо оно могет быть ещё хужее…

НИИ ТВЧ, СПб, благополучно накрывшееся медным тазом… Это - гетерогенная броня в наилепшей её реализации. И куды там сдриснул некий мальчонка с полным портфелем секретных секретов??? Как вы правильно догадались - в светлый град на холме. Таки я же тоже хотел сказать, шо оно же не могет быть, и играть надо по правилам - воровать секреты врага с трудом и жертвами… Но таки оказалося шо нет. Оно не предусмотрено «ни законама, ни подзаконнама актама».

Абидна, сущай… Было бы…

А теперь поинтересуйся средним сроком существования реального разраба - электронщика или кодера - в Алмаз-Антей… Ну, скока он там трудится… Точнее сказать, сколько ему там интересно трудиться? Пока он не поймёт, при всём своём хучь поцреотизме, хучь полном похуизьме и желании служить одной лишь науке, куда он попал. Ну нету у нас системы Государственного Арсенала - Чистая Коммэрция… И таки ой - не учите нас её делать. Нэ нада!!!

При таком раскладе никакое желание сотворить «кюнст унд эстетик» на сишечке - ни разу не спасает.

anonymous
()
Ответ на: комментарий от anonymous

Ой, совсем забыл… Ну, звиняйте, мну уже старэнький. Забудьте, если кто не понял с первого разу, то ще раз - забудьте. Про режим секретности. Если не голодный разраб, то сытенький коммерс, который всегда рядом, даже и с погонами фебса - сделает усё как надо.

Удачи, мальчики!

anonymous
()
Ответ на: комментарий от Zhbert

Похоже что там не будет принципов работы Makefile, скриптов конфигурации, принципов сборки программы.

Это все можно потом познать. А сначала все равно сам язык.

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

Иначе придется натыкаться на «магию».

Например, как объяснить новичку, который изучает Си, в том числе путем вникания в чужой код, зачем нужна опция компилятора -fPIE и почему без нее (иногда наоборот с ним) вроде бы корректная программа может сегфолтиться?

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от seiken

В других нишах (просто прикладное ПО) голая сишка сейчас не особо нужна. Еще есть всякие корпоративные легаси проекты, но ориентироваться только на них при выборе профессии…

Си тем не менее полезно знать, хотя бы в общих чертах. Деньги зарабатывать можно и не зная Си, но если хотеть себя считать программистом его надо знать.

praseodim ★★★★★
()
Ответ на: комментарий от anonymous

почему такие выводы? )

не, я не люблю такое

pihter ★★★★★
()

В книге Крупника упоминается среда Борланд, для варианта по ссылке выше можно поставить Pelles C IDE. Связываться с Pelles C IDE можно, из уважения к составителю курса, я себе поставил.

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

Крайне не советую вообще пользоваться IDE при изучении языка (И не только Си). Так как крупных программ писать пока не будешь, лучше используй любимый текстовый редактор, если в нем есть подсветка синтаксиса и командную строку для вызова компилятора и других программ.

Что до нормальных книг сейчас, то затрудняюсь даже. В принципе современный K&R - неплохой вариант, но желательно еще что-то. Например, Б.Керниган, Р.Пайк. «UNIX — универсальная среда программирования» - как раз хотя и довольно сильно устарело (с 1992) , но там есть про make и т.п. многое в культуре *nix программирования, в т.ч. на Си станет понятнее.

praseodim ★★★★★
()
Ответ на: комментарий от ox55ff

У меня есть 3-е издание K&R

Уже проигрыш. Программирование это творческая профессия. Или дано Богом или нет. Если нужна книжка, то не нужна книжка.

да ты верно шутишь: человек изучает Си, а ты его от K&R отговариваешь! Да без нее вообще говорить но о чем!

Я согласен с тем, что программирование должно быть дано (навроде как музыкальный слух), но, блин, если этот дар книгами не обмазать – грош цена такому дару

pihter ★★★★★
()
Ответ на: комментарий от anonymous

программирование это ад и погибель. Не советую.

есть вещи, которыми нельзя не заниматься – ну вот лезет оно из тебя и все тут: в таком случае остается только смириться и найти мирное применение

pihter ★★★★★
()
Ответ на: комментарий от untitl3d

Забудь про си и unix в контексте зарабатывания денег. Это технологии 80ых.

Забудь про письменность еще: это вообще – технологии из прошлой эры

В очень скором будущем ядра популярных ОС будут на C++ и знания именно си в ядре устареют как и сам си.

Кажется, я где-то это уже слышал… а, вспомнил, Таненбаум с 80-го года в своей, ставшей уже классикой, нетленке только об этом и говорит, что объекты-де уже, считай, победили и все ядра, с минуты на минуту перепишут на плюсах…

pihter ★★★★★
()
Ответ на: комментарий от anonymous

Какая гостайна в Этой стране?

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

pihter ★★★★★
()
Ответ на: комментарий от baaba

Без диплома не возьмут на работу.

берут только в путь. Кадры нужны всем. Если ты умеешь работу работать, то отсутствие диплома – это, конечно, минус, но на безрыбье – берут и добавки просят

pihter ★★★★★
()
Ответ на: комментарий от hibou

Зачем вообще IDE? Так сложно что ли написать Makefile для простой проги?

Незачем. И для повседневной-то работы – спорно, а для учебы – вообще вредно.

Тред вредных советов..

pihter ★★★★★
()
Ответ на: комментарий от anonymous

И не нужно упарываться указателями.

Си без указателей все равно что кружка без пива.

а это можно и на ссылках в Питоне сделать.

да все можно на питоне сделать, кроме того чтоб стать программистом

pihter ★★★★★
()
Ответ на: комментарий от untitl3d
  • там функция main без типа возвращаемого значения:
main()
{
...
   return 0;
}
  • строчки копируются так:
while (*t++ = *s++)
    ;
  • присваивания внутри if/while типа:
if ((fp = fopen(*++argv, "r")) == NULL) {...
  • отсутсвуют какие-либо проверки диапазонов
  • проверки входных параметров тоже нет
  • assert вообще никогда не используется

Я не говорю, что по K&R ничему не научишься. Научишься программировать, как это делали в 70-80х. В принципе, не конец света. Я учился программировать на книгах, которые гораздо хуже (Шилдт!). Если делаешь это для себя, то какая разница. Но если хочешь стать профессионалом, то точно придется переучиваться.

rupert ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Программирование это творческая профессия. Или дано Богом или нет.

Вранье

Пиликать на пианине можно научить кого угодно. Но чтоб играть – нужны способности.

Одинаковые ли у всех, от рождения, способности, скажем, к математике? Все ли годны быть инженерами? Вопросы риторические. Отчего же с программированием должно быть не так?

pihter ★★★★★
()
Ответ на: комментарий от anonymous

Зачем за пределами си знать сишные потоки ввода-вывода?

затем, что они ОСные, а не сишные

pihter ★★★★★
()
Ответ на: комментарий от rupert

строчки копируются так:

и это дает отличное понимание того как на самом деле копируются строчки

присваивания внутри if/while типа:

почему это плохо?

pihter ★★★★★
()
Ответ на: комментарий от pihter

главное желание. все эти терренсы тао просто имели неограниченное желание и интерес, и больше ничего

anonymous
()
Ответ на: комментарий от pihter

Присваивание легко спутать со сравнением. (= и ==)

В этом нет проблем, если язык позволяет определять переменную в if/while, как C++:

if (auto fp = fopen(*++argv, "r"); fp == NULL) { ...

Ну а в Си это невозможно, поэтому лучше присваивать там же, где определяешь, т.е. до if:

FILE * fp = fopen(*++argv, "r");
if (fp == NULL) {...
rupert ★★★★★
()
Ответ на: комментарий от anonymous

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

pihter ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.