LINUX.ORG.RU

Книги по Си, системному программированию и Computer Science

 , ,


6

5

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

Пробовал трехтомник Столярова. Некоторые моменты хорошо объяснены, но есть много воды и шизы автора вроде «ВЫ ОБЯЗАНЫ НАЗЫВАТЬ ДИРЕКТОРИИ ДИРЕКТОРИЯМИ, НЕ ПАПКАМИ, Я ЛИНУКСОИД!!!».

Еще у Столлмана недавняя книга норм, но она как мануал и достаточно сухая.

Поделитесь источниками знаний!

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

Снова NixOS, почему спрашивается я не удивлен?

Ну ок, допустим вот это https://github.com/t184256/nix-on-droid максимально похоже на продукт для конечного пользователя (если кто-то поедет настолько что захочет себе NixOS на андроиде).

Вижу что проект достаточно давний, есть какая-то активность, придумали не вчера.

Теперь вопрос: завтра владелец вашего «low level» стека (поверх чего вы работаете) меняет приоритеты и вместо YAML (или что у вас там используется для конфигов) выкатывает новый язык.

Что станет с вашим проектом на следующий день, как думаете?

P.S. Ну и не стыдно будучи ментейнером и автором наезжать на другого автора? Вы же прекрасно понимаете в чем заключается сложность создания и развития своего продукта и как тяжело его поддерживать годами.

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

Теперь вопрос: завтра владелец вашего «low level» стека (поверх чего вы работаете) меняет приоритеты и вместо YAML (или что у вас там используется для конфигов) выкатывает новый язык.

Что станет с вашим проектом на следующий день, как думаете?

Что ты какую-то пургу спрашиваешь.

Какого low-level стека, какие приоритеты, какой YAML? Мой проект, грубо говоря — порт Nix на Android. Если завтра изменится Nix, то он будет портом Nix на Android. Если завтра изменится Android, он будет портом Nix на Android. Если завтра в твоей голове изменятся приоритеты, он этого не заметит.

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

Это ты всё правильно написал (кроме того, что переоценил способности авторов ЯП и компиляторов). Вопрос - как связаны «сложный технический текст» и учебники Столярова? Я не хочу диссить, но искренне считаю, что для самообучения его трёхтомник не годится.

Школьникам, у которых много времени и желание заняться CS я бы вообще рекомендовал начать с серии учебников AOPS (от преалгебры, основ комбинаторики, теор. вероятностей и пр. до анализа через решение олимпиадных задачек), Higher Algebra by Hall, How to prove it by Velleman. Это будет настоящая база, открывающая все хорошие учебники по CS.

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

ChatGPT> Серия учебников AOPS расшифровывается как «Art of Problem Solving» и не имеет отношения к Computer Science. Это серия учебников по математике, которая была создана для подготовки школьников к олимпиадам по математике. Учебники AOPS покрывают широкий спектр математических тем, включая алгебру, геометрию, комбинаторику, теорию чисел и т.д. Учебники AOPS известны своими инновационными методами обучения, которые помогают ученикам развивать креативное мышление и решать сложные математические задачи.

https://artofproblemsolving.com/store

Hall & Knight, Higher algebra
https://www.amazon.com/Higher-Algebra-Hall-Knight/dp/935176253X
тоже по математике для школьников

Daniel J. Velleman, How to Prove It: A Structured Approach, 2nd Edition
https://www.amazon.com/How-Prove-Structured-Approach-2nd/dp/0521675995

Это всё на английском языке. А пора учить на китайском.

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

Shushundr ★★★★
()
Последнее исправление: Shushundr (всего исправлений: 4)
Ответ на: комментарий от Alexey_Tor_

Если что, вот баги, про которые Столяров писал. Там даже видно, что он их репортил:

https://gitlab.com/freepascal.org/fpc/source/-/issues/37716

https://gitlab.com/freepascal.org/fpc/source/-/issues/37833

Обсуждение: https://forum.lazarus.freepascal.org/index.php/topic,51353.0.html

А вот история собственно:

http://www.stolyarov.info/node/290

Как думаешь, кто в этой истории неадекватен?

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от Rabinovich

Школьникам, у которых много времени и желание заняться CS я бы вообще рекомендовал начать с серии учебников AOPS (от преалгебры, основ комбинаторики, теор. вероятностей и пр. до анализа через решение олимпиадных задачек)

Aops is a monotypic genus of scorpions in the Urodacidae family. Its sole species is the troglobitic Aops oncodactylus, which is endemic to Australia. It was first described in 2008 by Erich Volschenk and Lore.

Я думаю, в таких случаях стоит аббревиатуры раскрывать, если конечно это была аббревиатура. Их очень неудобно искать в интернете.

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

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

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

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

Нормальный язык.

Лично я - на стороне вашего оппонента. По многим причинам.

К тому же народу, знающего паскаль не меньше чем C

Конечно - я думаю многие через него прошли на этапе обучения.

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

Вот, а вот здесь стОит задуматься почему именно так произошло. Ну не прижился он в реальном производстве. Иначе бы вопрос «вспомнить» вообще бы не стоял.

ПыСы. Тут ведь ещё такой интересный вопрос - а что именно входит в понятие «знать язык»? Способность понять написанное и внести минимальные изменения? Это одно и довольно просто. А вот быть в состоянии реализовать с нуля что-то действительно сложное близким к оптимальному способом - это совсем другое. И найти людей с таким уровнем понимания Паскаля Вам будет очень непросто, кмк.

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

Вот, а вот здесь стОит задуматься почему именно так произошло. Ну не прижился он в реальном производстве.

Ну, вообще-то вполне прижился, но в основном в форме Delphi, которая к сожалению не кроссплатформенная.

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

У паскаля главная проблема — это порядок параметров в стеке, не позволяющий делать вариадические функции/процедуры типа printf, где первый параметр задаёт сколько всего параметров в конкретном вызове. Ну и синтаксис тяжеловатый с постоянными begin / end.

а что именно входит в понятие «знать язык»? Способность понять написанное и внести минимальные изменения? Это одно и довольно просто.

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

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

Раз уж автор изначального кода выбрал именно паскаль, он, наверное, это умеет? Ну или только начал изучать программирование и кроме паскаля ничего не знает.

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

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

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

но в основном в форме Delphi

Эхо 90ых? Тогда было модно - да. Но я не знаю ни одного серьёзного проекта который бы до сих пор был на Delphi. Оно умерло вместе с Borland.

Я думаю дело в том, что C имеет те же возможности

Как я это вижу - в C возможностей гораздо больше.

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

Я ни в одном глазу не хочу разжигать flame war “какой язык лучше”. Я буду апеллировать исключительно к практике и статистике. И согласно ей - “C/C++” однозначно более жизнеспособны в промышленной разработке, кмк.

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

Ну и кстати, в программе главное, чтобы она не тормозила.

Глубочайшее заблуждение. Программа прежде всего должна корректно решать поставленные задачи. А программа которая быстро-быстро делает неправильные вещи потенциально будет Вам стоить очень дорого, вплоть до разорения. Есть несколько классических примеров. Погуглите Knight Trading например - сколько у них там заняло - порядка 40 минут чтобы слиться? Не надо так делать.

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

Как думаешь, кто в этой истории неадекватен?

Ложная дихотомия. В этой истории неадекватны все:

  • странные мейнтейнеры, умудрившиеся сломать пайпы

  • Столяров, преподающий непопулярный еще по меркам нулевых язык

cumvillain
()

Большинство курсов и гайдов по Си учат писать хелло ворлды через printf. А хочется жести с системными вызовами.

Если хочется прикладной жести, то нужно читать 2 книги:

  1. про ядро линукса;
  2. про то как системная библиотека языка Си оборачивает эти системные вызовы, чтобы они выглядели как функции языка Си для остального кода;

А если хочется ядерного программирования, то тут я не знаю, наверное надо читать про то, как делают модули ядра, про то как модули ядра видны в юзерспейсе (вероятно через файловую систему и специальные пути в ней).

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

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

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

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

Это один из самых фееричных способов заставить читателя осознать бесполезность только что усвоенных знаний что я видел.

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

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

кто в этой истории неадекватен?

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

rupert ★★★★★
()
  • «Compilers: Principles, Techniques, & Tools» Авторы: Альфред В. Ахо, Моника С. Лам (известная кника с драконом на обложке)

  • https://inria.hal.science/hal-02383654v1/file/ModernC.pdf - «Modern C», Jens Gustedt. Овежает знания по C. База должна уже быть.

  • По алгоритмам книги Макконнел «Основы современнх алгоритмов» (больше теории) и Седжвик «Алгоритмы» (больше примеров кода)

  • Прикладное юниксвейное: древние, как сам юникс, книги Уильяма Стивенсона (там и про сети, и про системное программирование)

  • По Линуксу была книга про ядро от издательства o’really, считается классической, не помню конкретно. Кажется, сейчас есть на выбор несколько книг про внутреннее устройство ядра.

Всё ищи посвежее изданием.

zendrz ★★
()
Последнее исправление: zendrz (всего исправлений: 5)
Ответ на: комментарий от rupert

Столяров думал, что если он прав, то ему кто-то что-то должен. Его обломали. Так ему и надо.

Да причём здесь Столяров? Любой язык должен позволять писать без извращений приложения с пайпами.

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

thank you for fixing SeekEof. Unfortunately, your effort to also «fix» Do_IsDevice which wasn’t broken, made fpc effectively useless for the whole class of programs known as «unix filters», and many more, which looks totally inappropriate for me; so I’ve just created another ticket on that issue.

Я бы тоже нахер послал с такими патчами, извините.

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

Да причём здесь Столяров? Любой язык должен позволять писать без извращений приложения с пайпами.

Удивительно, но если пытаться использовать непопулярный язык с одной живой реализацией, можно огрести. Кто бы мог подумать :)

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

сейчас есть на выбор несколько книг про внутреннее устройство ядра.

  • Керриск Майкл К36 «Linux API. Исчерпывающее руководство». — СПб.: Питер, 2019. — 1248 с.

  • Уорд Б. У64 «Внутреннее устройство Linux». — СПб.: Питер, 2016. — 384 с.

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

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

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

Если интересна именно сишка, то C Programming Modern Approach, King (полезнее, чем K&R, если цель - начать писать, а не просто ознакомиться с ЯП). Просто для введения в программирование как первая книга, может быть, How to Design Programs (но очень сумбурная).

Это всё на английском языке. А пора учить на китайском.

Нет.

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

Столяров, преподающий непопулярный еще по меркам нулевых язык

Следование веяниям моды в программирование, конечно, даст фору даже французским кутюрье. Но это совсем не то, на что стоит ориентироваться при преподавании, тем более, что «непопулярный ЯП» он использует только как введение. Его книгу, я считаю, есть за что критиковать, но делать это за паскаль - чистая вкусовщина.

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

Озвучьте список, пожалуйста.

  • Workqueue перестали быть просто кучей тредов и стали выделенными процессами

  • Блочный стек переписали и он стал mq, очень сильно поменялся API

  • Основным методом асинхронки становится iouring

  • BPF стал идеальным способом отладки в процессе разработки

Это вот просто из головы.

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

но делать это за паскаль - чистая вкусовщина

Ты понимаешь насколько странно выглядит:

  1. Обучаем человека писать на X
  2. Две сотни страниц спустя говорим что X не нужен :))))
cumvillain
()
Ответ на: комментарий от cumvillain

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

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

Тут упоминание слова «паскаль» призывает в дискуссию цирк с конями на 1..10 ходов; боюсь даже представить последствия выложи я старые книги по паскалю с примерами реализаций нейросетей, графики, аудио и подобного (но всё под дос). А «живых» и не сильно геморройных способов поставить любую из дос как основную систему не под виртуалку вроде бы нет.

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

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

Ещё раз: он сперва учит чему-то, а потому заявляется что это что-то сдохло. При этом ничего не мешает показать те же функциин на Go, который выглядит так же, только не сдох.

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

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

А я тоже еще раз напишу, что показаны, например, сущность функции и процедуры. И нет разницы на каком языке она показана. Если у вас претензии только к этому, то Паскаль ближе к «младшей группе» - его хотя бы в школе проходили.

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

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

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

Мы с тобой его в школе проходили. А теперь вспомни сколько лет назад это было и почисти себе кеш :)

И, да, считать паскаль мертвым языком… хм… уже вроде писали…

Писали такие же пердеды. То что есть энтузиасты, которые его используют, никак не отрицает того что язык в забвении.

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

У меня претензия только к тому, как он это делает. А так, популярный конкурент SICP - HTDP вообще использует несколько своих ЯП! Уж на «beginner's programming language» ты в прод точно ничего писать не будешь (они, правда, учат созданию графических приложений, чему, по мнению Столярова, начинающих научить невозможно). У кого-то ещё видел asm-подобный. Это то, что преподаётся (или преподавалось) в частных ВУЗах США (это те, что элитные).

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

Псевдоязыки ваще ок. Меня восхищает своим упорином именно переход от «сейчас мы будем учить реальный ЯП» к «только вот тот ЯП что мы выучили, вы его не сможете использовать». Это шиза же :D

cumvillain
()