LINUX.ORG.RU

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

 , , ,

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

4

4

Тихо и незаметно 30 апреля 2026 года вышло издание 2.92, которое наконец включает в себя читаемый текстовый слой.

Исправлены опечатки и ошибки, обнаруженные в предыдущих изданиях, в частности 2.91 (где введена кликабельная навигация) и 2.9 (первое чисто электронное издание).

Книга предназначена для самообучения основам программирования и в отличии от многих других изданий предполагает фундаментальный подход — вначале основы дискретной математики и использования GNU/Linux или BSD с командной строкой, затем паскаль, потом ассемблер и только потом Си, системное программирование и альтернативные парадигмы (функциональное, логическое и так далее).

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

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

>>> Ссылка на страницу издания

>>> Альтернативные способы скачивания

>>> Новость на сайте автора

★★★★★

Проверено: dataman ()
Последнее исправление: CrX (всего исправлений: 10)
Ответ на: комментарий от sunjob

всегда в этом сомневался. а из практики, мой кореш по высшему изучал/писал долго на паскале (в институте изучал и хорошо разбирался в си/структуре процессора, подмогал в понятиях мне), а тут недавно решил «системное программирование» для себя изучить (си/+) - и вы бы видели как его, блин, просто об колено ломает «это все, чуть ли не с истерикой» (а парень он «ой не дурак», сообразительный)…

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

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

[N] - это синтаксический сахар для +N

Для *( +N)

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

Зачем начинать с Python?

Затем.

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

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

Слушай, ну а вот как мне ещё объяснить твою религиозную убеждённость в том, что СУБД – это быстро и производительно? Откуда они должны брать эту свою быстроту и производительность? Или ты думаешь, что авторы СУБД умные настолько, что от одного факта установки их поделий на комп тут же на этом компе диски начинают крутиться вдвое быстрее, шины становятся вдвое шире, а вся оперативная память сама собой превращается в ассоциативную? Ну вот как ещё эту ахинею объяснить, если не верой в гномиков? Ну то есть не обязательно, конечно, именно в гномиков, но суть-то как раз такова.

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

убогие недоязычки и синдромы утёнка

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

как вы мучаетесь с ... СИ
да мы не мучаемся, мы тащимся!

все имхо :о)

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

даже здесь на лоре, кто по Столярову обучался

Это я, например. Я жертва книг Столярова. Ни о чём не жалею.

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

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

Ну да, можно придумать edge case, но это же не разрушает само понятие как таковое.

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

Процедура — действие, вроде открытия/закрытия файла, ввода/вывода, изменения состояния и тд. Обычно вызывается сама по себе отдельной строкой.

Что плохого в том, чтобы при изучении программирования сразу давать понятие функции/процедуры и побочного эффекта?

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

Это вы просто мало код писали.

Я уже давно прошел этап получения удовольствия от Си.

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

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

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

А Zig реально хорош на уровне концепции, потенциала. Но никогда не выстрелит, потому что за ним никакой корпорации не стоит.

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

а права доступа в восьмеричной системе пишем, которая нафиг не нужна

Права пишем в 8-ричной системе прежде всего потому, что это сочетает наглядность с компактностью. Развернутая запись вроде «rwxr-xr-x» плохо парсится глазами, а остальные варианты записи - ещё хуже этой. А так видишь восьмеричное «755», на каждого субъекта по разряду, и всё понятно сразу. Как и у большинства профессиональных инструментов, тут есть порог вхождения.

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

да бред-же, а?! функция/процедура - в сущности это одно и то-же! (а тут в паскале еще и «прототипятся» по разному, сколько раз натыкался на то, что процедуру надо переделать в функцию и пошло поехало, описание меняем, потом идем реализацию менят/дописывать... вот это реальный бред... даже если ide помогает писать код)

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

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

Непонятность с ненаглядностью.

Завернутая запись вроде «rwxr-xr-x» плохо парсится глазами, а остальные варианты записи - ещё хуже этой. А так видишь - 755, на каждого субъекта по разряду, и всё понятно сразу.

Ловите инопланетяна! rwxr-xr-x у него хуже парсится, чем магические числа…

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

Всё равно что «языком» называть «английский язык», потому что это «язык по-умолчанию» (по умолчанию кого?)

Глобального ИТ сообщества, и не только ИТ, а просто лингва франка всего образованного мира.

А если год будет 2036 или 2046, то тогда что? Команда перестанет работать? Команда будет возвращать хэш иного типа? Пожалуется в спортлото?

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

Твой КО.

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

Слушай, ну а вот как мне ещё объяснить твою религиозную убеждённость в том, что СУБД – это быстро и производительно?

Ну а ты думаешь, что надо обязательно воткнуть СУБД для хранения любых данных?

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

Это вы просто мало код писали.

откуда вы знаете, вы шпиён?! :о)

у меня далеко не радужные представления/понятия об си/плюсах, есть и «минусы», но все-же плюсов бОльше и их еще бОльше при сравнении с другими языками (втч в разрезе приложения языка)

предлагаю остаться при своих и ... закончить?! :о)

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

Да я собственно и не настаиваю)

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

откуда вы знаете, вы шпиён?! :о)

Ага, глаза повсюду

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

да бред-же, а?! функция/процедура - в сущности это одно и то-же

Ну значит ты не понимаешь. Сам автор тоже не сразу это сформулировал. Да, на уровне машинного кода это одно и то же. Но как концепции - это разные вещи. И переделывать процедуру в функцию не надо.

Ещё раз, если ты берёшь данные и опираясь только на них получаешь какие-то ещё данные — это функция. Если ты что-то делаешь - это процедура, даже если тебе надо возвращать код успеха/неуспеха.

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

Ещё раз, если ты берёшь данные и опираясь только на них получаешь какие-то ещё данные — это функция. Если ты что-то делаешь - это процедура, даже если тебе надо возвращать код успеха/неуспеха.

И как же ты его будешь возвращать? =)

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

емнип, по старому треду, под процедурой автор понимает «чистую функцию», только как-то криво и по-своему.

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

Ну а ты думаешь, что надо обязательно воткнуть СУБД для хранения любых данных?

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

А если бы хранил данные не в файле, а в ACID субд (sqlite, postgresql), то ничего подобного не произошло бы. Вот и думай, обязательно ли это.

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

Да хотя бы через var-параметры или через указатели.

Понятно.

Теперь обратимся к коду Столярова из его CMS:

bool Database::Load(const char *filename)
{
    bool ok = inifile->Load(filename);
    if(subst)
        delete subst;
    subst = new DatabaseSubstitution(this);
    if(default_opt_selector.IsValid())
        inifile->SetTextParameter("general", 0, "opt_selector",
                                  default_opt_selector.c_str());
    return ok;
}

Перед нами «процедура по Столярову». Которая возвращает «код успеха/неуспеха» через return.

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

Что плохого в том, чтобы при изучении программирования сразу давать понятие функции/процедуры и побочного эффекта?

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

Я уже объяснял, перечитывай мои каменты из прошлого поста. Например, выделение памяти может не считаться побочным эффектом, а может и считаться, если ты пишешь обработчик прерывания, например. Наглядно это можно увидеть на примере функции-конкатенатора двух строк, которая выделяет память.

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

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

Зачем? Это конкретный пример кода не выглядит шизофреническим. А вот то, что ты предлагаешь - очень.

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

Ну а ты думаешь, что надо обязательно воткнуть СУБД для хранения любых данных?

Нет конечно. Проблема только в том, что столяров не знает, как работают СУБД, и не в курсе про существование банальных индексов, ускоряющих исполнение запросов по ней. Отсюда его усмешки по поводу гномиков.

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

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

Ну значит ты не понимаешь. Сам автор тоже не сразу это сформулировал.

на сколько я понял (могу ошибаться, попровьте) - сам «автор/столяров» не боевой программист!
(почему сложилось такое мнение умолчу, но оно вполне «логично построено» на жизненном опыте)

И переделывать процедуру в функцию не надо

это столярову или вам не надо, а в боевом проекте - вполне себе «обычная задача»!

берёшь данные и опираясь только на них получаешь какие-то ещё данные — это функция
что-то делаешь - это процедура

для меня «вот это вот» - «полный бред».
предлагаю остановиться на этом:
- для вас «вот это» имеет смысл
- для меня - нет

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

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

Как типичный великий сишник, программировать на си он не умеет.

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

штаны через голову? спосибо, я столько не выкурю :о)

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

В честном хелловорлде на С, ученик тыкая пальцем по строкам с «а это что» встречает: директивы препроцессора, сам препроцессор, заголовочные файлы, объявление функций, аргументы функций, возврат из функций, указатели, нуль-терминированные строки (которые одновременно массивы, которые одновременно указатели), указатели на нуль-терминированные строки (которые одновременно указатели на массивы и указатели на указатели), экранирование, и т.д. На С++ к этому автоматически добавляются неймспейсы, объекты, классы, перегрузка операторов, и т.д.

А в паскале весь хелловорлд это:

begin
  writeln('Hello, World!');
end.
Playermet
()
Ответ на: комментарий от wandrien

Ну, его сорцы кто-то недавно через ИИ-шку прогнал, даже с учётом галюциногенных бредней, присущих ИИ, она наловила кучу нелепых багов. Столярову пришлось аж чуть ли не через каждое предложение в ответе писать в стиле «башка у меня болела что-ли такое учинить…»

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

права доступа в восьмеричной системе пишем

А как надо? rwx: 3 бита. В восьмеричную систему идеально укладывается.

которая нафиг не нужна и является смутным отголоском забытой эпохи 6-битных байт.

Я вроде уже программирую не один десяток лет. Но вот до сих пор не могу с 16-ричными числами в голове спокойно работать. Постоянно на пальцах отсчитываю, чтобы вспомнить, чему соответствует «D». Про то, чтобы за долю секунды перевести 4 бита в шестандцатеричную цифру речь вообще не идёт. Буду долго и со скрипом складывать восьмерки с четверками, в десятичной системе, а потом на пальцах буду переводить в букву. При этом с восьмеричной системой таких проблем у меня вообще нет, цифры от 0 до 7 я в битах хорошо представляю и влёт переведу любое число из восьмеричной в двоичную и обратно.

Поэтому чисто для меня восьмеричная система возможно была бы удобна и для 8-битных байтов. Я, коненчо, всё равно использую 16-ричную, так принято. Но где-то в душе думаю, что 9-битные байты может быть не самая плохая идея. Есть в этом что-то.

Написал и задумался - может какой-то тренажёр для себя сделать, по развитию шестандцатеричной интуиции? Так-то вопрос тренировки, я полагаю.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)

Кста, а пащиму 1-й том это поцкал, а второй топ Си, третий том С++ ?

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

Паскаль не такой, он промежуточный между Си и функциональными языками, то есть разделение на функции/процедуры есть,

Нет. В плане процедур/функций Паскаль и Си - полностью одно и то же. В Си «процедуры» обозначаются словом void, отличие чисто декоративное - в Си есть слово для указания пустого типа, в Паскале вместо него специальные синтаксические конструкции уровнем выше (function - procedure, ^type - pointer, var-аргумент с типом - var-аргумент без типа).

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

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

Учитывая поверхностность суждений столярова, нейронка должна отлично с этим справиться.

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

Необходимость знать десятки понятий, чтобы стартовать обучение - плохо. Как плох и подход «игнорируйте 90% строк, через месяц расскажем что это».

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

всегда в этом сомневался. а из практики,

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

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

Нашел в прошлой ветке еще одну цитату гения.

питон можно освоить за пару-тройку часов, если уже уметь программировать

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

так и мой корешь тоже так-же: ассемблер/z80, си, си++, далее большой опыт боевого программирования на паскале/дельфях... а потом опять си... и тут началось :о) (может он долго на псакале сидел, х.з.?!)

sunjob ★★★★★
()

А запятая в заголовке «2,92» - это опечатка, или несёт какой-то сакральный смысл?

VIT ★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)