LINUX.ORG.RU
ФорумTalks

Рецензия на книги А. В. Столярова

 , ,


1

2

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

Что важно, этот курс стал бесплатно доступен любому желающему в два клика, без необходимости проходить бюрократический фильтр и платить цену автомобиля за доступ к информации. Благодаря работе Столярова любой заинтересованный человек получает качественно отредактированный конспект лекций МГУ по программированию с пояснениями. По содержанию это +/- 1999 или 2000 год.

Абсолютно ничего нового, революционного, свежего Столяров не написал. К моменту публикации (2016 год) по темам, затронутым Столяровым, было опубликовано десятки книг, которые пережили множество изданий. Например, книги по TCP/IP от издательства O’Reilly к тому времени издавались уже 20 лет и имели по 7-8 улучшенных и дополненных изданий.

Мало того, что Столяров опубликовал прописные истины администрирования и программирования, он еще их щедро разбавил философией лаборанта из 90-х. То есть технические книги стали содержать в себе конспекты типовых разговоров второкурсников за бутылкой водки. Что, конечно, добавило живости в чтиво, но дурно влияет на 17-летних подростков, которые пьяный трёп обслуживающего персонала воспринимают за жизненную философию и руководство к действию.

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

Но как разработчик, как автор, он не сделал ничего нового. И сам по себе является карикатурным образом админа 90-х, про которых писали юмористические рассказы в Fido. Попытка доказать всему честному люду, какой он великий инженер, через постройку велосипеда, развалившегося на первой кочке, — это типичный пример творчества тех лет. Рассказов про Винипуха и боды и записок Жены программиста.

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

Вывод: Столяров — это классический, можно сказать, эталонный системный администратор из 90-х. Человек, который отказался развиваться, отринул курсы повышения квалификации и навсегда остался в сладком возрасте 20 лет в рамках того давно ушедшего социума, его стереотипов и правил.

Книги Столярова — это книги 90-х, хотя они написаны через четверть века, в конце 2010-х. Это памятник эпохи начала массовой компьютеризации в России. Это надо понимать при работе с ними. Читая работы Столярова, надо давать «поправку на ветер», и всё будет хорошо.

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

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

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

И так не только в программировании.

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

А еще процедура вполне может быть частью выражения:

a = (inc(a), a++, a);
soomrack ★★★★★
()
Последнее исправление: soomrack (всего исправлений: 1)
Ответ на: комментарий от liksys

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

Фанбои Столярова вообще не будут делать веб-приложений. У них будут или веб-сайты, то есть страницы с информацией в гипертексте с опциональной возможностью добавлять комменты или приложения, то есть программа на нативном коде, обращающаяся к Xlib или там Tk или вообще консольная.

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

И кстати о форуме. Рендер на стороне клиента позволяет снизить нагрузку на сервер.

Если так важна нагрузка, то просто сделать подмножество HTML в комментах, как у Столярова. Тогда ничего рендерить и не придётся, только валидация, которая в любом случае нужна.

когда ты захочешь из терминала с UTF-8 поредактировать эти файлы, то случится конфуз

У Столярова и терминал в KOI8, так что ему норм, а у меня сайт если и будет, то таки в UTF-8.

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

Отличаю. Но говорю я о другом. void func это функция или процедура?

В Паскале есть функции и процедуры и там нет никаких void func.

В Си процедур нет, поэтому их можно заменять функциями возвращающими void.

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

В Си процедур нет, поэтому их можно заменять функциями возвращающими void.

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

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

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

А что за драма у аськи с контактами произошла?

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

ващет интенции могли быть разные - и были разными

proc vs func

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

а proc оверпилхолить чуть ли не инлайнингом али ещё каким размазыванием по бинарю со сверхкомпиляцией по Турчину

по факту pure прозразчны по ссылкам(ака всё тавтология) по этому gleam интересен

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

Копирайт позволяет крупным корпорациям жировать, подавляя авторов. И никаких прав он не защищает, а как раз наоборот.

Два чая!

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

Если нельзя использовать в выражение, то процедура.

Во-первых в документации это функция. Во-вторых насчет использования в выражении выше привели пример Рецензия на книги А. В. Столярова (комментарий)

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

Во-первых в документации это функция.

Какой документации?

Во-вторых насчет использования в выражении выше привели пример Рецензия на книги А. В. Столярова (комментарий)

Это пример чего? В Паскале так нельзя.

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

Если полностью, в своих определениях, книга ограничивается Паскалем, те ее нельзя позиционировать, как «введение в профессию». Для С/C++, в Python, в Javascript, в Java и других топовых по востребованности языках эти определения не корректны, а Паскаля что-то в топе давно не наблюдается.

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

У тебя с логикой что-то не то:

  1. определение «expression» из стандарта словаря IT и из стандарта языка Си говорит, что строка написанная на языке Си
a = (inc(a), a++, a);

является выражением.

Если inc(a) определена как

void inc(int a);

то согласно словарю терминов IT, она является процедурой.

Ты же утверждаешь, что первое это не выражение, второе это не процедура, и процедуры в выражениях использовать невозможно.

И сейчас ты говоришь, что «Все корректно. И нет никаких противоречий».

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

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

В Си нет процедур как таковых. Ещё там нет массивов, строк, символьного типа (char - это однобайтовое целое) и многого другого. Но всё это можно эмулировать, например строку через массив (не совсем настоящий массив) char-ов с нулём в конце.

Различие между процедурами и функциями есть в паскале, там они объявляются соответствующими словами, процедура не возвращает значение и её вызов сам по себе является оператором (statement), а функция возвращает значение и используется в выражении.

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

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

В Си ситуация другая, там нет процедур, поэтому в тех ситуциях где в паскале была бы процедура, лучше использвать void-функцию, если не нужно возвращать значение. Но если нужно, можно взять и просто функцию, но если у неё есть побочные эффекты, стараться использовать её только в самых простых выражениях вроде var=side_effect_func(); и не пихать её например в заголовки циклов, аргументы других функций и подобное.

Все эти рекомендации служат для облегчения чтения кода в дальнейшем и уменьшения количества ошибок.

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

Всё просто. То что так можно (физически) делать, не значит что так нужно делать. Можно и вообще в стиле iocc всё писать. Но лучше не надо.

В остальном смотри предыдущий ответ прямо над этим.

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

Если inc(a) определена как

void inc(int a);

то согласно словарю терминов IT, она является процедурой.

Если inc – функция, то она отображает множество целых в пустое множество.

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

неа речь в сёж

о очках через которые мы осваиваем реальность

например без представления о стеке (возвратов и аргументов)

хуже воспринимается блочность и привлекательней вычесляемые goto

например так как блочность «algol-60» была предэкспозицией ( если забыть про gosub :_ ) - то было забавно обнаружить что в js в первых уже стандартах ( т/е 1995+-) был не стек как область а список-LIFO - активаций ибо за счёт «асинхроности» кактусный стек более ожидаем в динамическом js где SetTimeOut и прочие хаки реальности не гарантируют строгую вложенность завершений - как и Simula :)

так что как вариант подпускать к С через Паскаль вполне здраво - это не единственный верный - один из

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

Причем здесь Си, если речь про Паскаль?

С логикой у вас как-то сложно:

Если полностью, в своих определениях, книга ограничивается Паскалем, те ее нельзя позиционировать, как «введение в профессию». Для С/C++, в Python, в Javascript, в Java и других топовых по востребованности языках эти определения не корректны, а Паскаля что-то в топе давно не наблюдается.

Все корректно. И нет никаких противоречий.

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

оглавление 3 томов достаточно информативно что бы не

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

«void func это функция или процедура?».

В Algol-68 это void proc

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

В каждом языке своя терминология.

В советском ГОСТ 28397-89 (ИСО 2382-15-85) © Языки программирования. Термины и определения. Партия™ для всех языков однозначно определила определения, определяющие определённые термины :)

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

От, наверное, хотел написать что то типа такого

void inc(int *a)

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

Ну тогда термина «функция» просто не существует в программировании, что правильно, в общем-то. И void inc(int a) является процедурой.

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

не пихать её например в заголовки циклов

Вы предлагаете так оформлять циклы на Си?

int t(){
	int i =0;
	for ( ; i < 10; ){
		d(i);
		++i;
	}
}

вместо

int p(){
	for (int i =0; i < 10;  ++i)
		d(i);
}
vM ★★
()
Ответ на: комментарий от vM

Это вообще к чему было? Имелось ввиду что не стоит пихать функции с побочными эффектами в заголовки циклов, где предполагается выражение. i=0 и ++i — это не процедуры

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

Ну что поделать если в C такой синтаксис арифметического цикла? В том же паскале например не совсем так. И нафига ты объявляешь переменную в заголовке цикла? Это вроде уже не C, а C++.

Имелось ввиду что-то вроде if, while и тд.

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

Это вроде уже не C

Это стандартный Си, решительно неодобряемый самим Андреем Викторовичем.

Имелось ввиду что-то вроде if, while и тд.

Т.е. позиция, где значение выражения неявно приводится к bool (которого в Си может не быть) и используется?

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

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

liksys ★★★★
()

http://stolyarov.info/guestbook/archive/10/#cmt605

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

Я просмотрел много книг по программированию и интересующему меня C, в частности.

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

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

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

можно сказать, нет права на ошибку.

Вы уже допустили ошибку выбрав язык Си вместо Python.

Вывод. Ничего в рецензии кроме личной неприязни я не увидел.

Продолжайте жить в мире 90-х вместе с понимающим вас Андреем Викторовичем. Вас предупредили, далее — уже ваше дело.

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

Фанбои Столярова вообще не будут делать веб-приложений. У них будут или веб-сайты, то есть страницы с информацией в гипертексте с опциональной возможностью добавлять комменты или приложения, то есть программа на нативном коде, обращающаяся к Xlib или там Tk или вообще консольная.

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

У фанбоев столярова вообще ничего не будет. Во-первых, у вас нет времени писать код, потому что вы бегаете и рассказываете, как его писать другим. А во-вторых, потому что этим никто не будет пользоваться, и, соответственно, платить за это деньги.

Если так важна нагрузка, то просто сделать подмножество HTML в комментах, как у Столярова. Тогда ничего рендерить и не придётся, только валидация, которая в любом случае нужна.

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

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

Это было бы вообще эпично: сидит тут, рассуждает о побочных эффектах, как другие их не понимают, в то время как сам ни строчки боевого кода не написал.

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

Какой документации?

Любой.

В Паскале так нельзя.

В паскале нельзя. Но мы не конкретно про паскаль вроде как.

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

А вообще говоря - стили, скрипты и прочая статика кешируются

Это сокращает загрузку, но не время отрабатывания скриптов, и применения стилей, если проблема не в медленном интернете, то кеширование никак не поможет. А сайт госуслуг это SPA.

И кстати о форуме. Рендер на стороне клиента позволяет снизить нагрузку на сервер.

Да ладно, SPA это прошлый век, сейчас SSR, это тормозящий SPA работающий на сервере.

Что бы SPA меньше нагружал сервер, он должен делать меньше запросов чем обычный сайт, а сколько запросов делает обычный сайт? Зависит от сайта, но явно меньше чем SPA.

Ты говоришь что у SPA меньший обмен данными, но для загрузки поста и комментариев нужно отправить HTML или текст и там и там, в HTML экранировать Unicode не надо, в JSON надо. Навигация браузера лучше работает в классических приложениях, работает кеш страниц.

В случае если данных много, и к ним добавляется иногда еще немного, и их нужно показать, как новый комментарий на ЛОРе, то в классическое приложение всегда можно добавить немного JS. Причем эффективнее будет для сервера и клиента получать и отдавать сразу html а не json, сервер может использовать единый кеш для рендера страницы, клиент получает более быструю вставку чем поэлементную сгенерированную из json.

У SPA еще свои ограничения и проблемы с производительностью, из за которых всплывают неудобные вещи, такие как отсутствия юзабельного браузерного поиска, потому что рендерить весь список будет слишком медленно, приходится рендерить только элементы из list viewport.

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

VNC или Google Maps очень эффективны в виде SPA приложений, обычные сайты как у Столярова нет.

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

Любой.

Согласно документации на Pascal это не так ⇒ уже не любой.

В паскале нельзя. Но мы не конкретно про паскаль вроде как.

Вроде как про Паскаль.

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