LINUX.ORG.RU

Книга для начинающих программистов, ориентированная на Linux

 , ,


19

5

На сайте А.В.Столярова продолжается сбор средств на написание и последующее издание книги «Программирование: введение в профессию».

Автор проекта уже известен публике по своим книгам Программирование на языке ассемблера NASM для ОС Unix, Сверстай диплом красиво: LaTeX за три дня и другими. Электронные версии всех своих книг автор сразу после выхода бумажного издания выкладывает на сайт, считая это принципиальной позицией.

Книга, задуманная Столяровым в этот раз, должна стать руководством для начинающих, ориентированным на *nix-системы (с использованием командной строки в качестве основополагающего принципа при обучении) и покрывающим при этом предмет от нулевого уровня (школьной информатики) до ООП и парадигм программирования; структура книги приблизительно соответствует последовательности программистских курсов на факультете ВМК МГУ, но отличается от программы ВМК наличием общей платформы (*nix), полным исключением заведомо мёртвых инструментов вроде всё ещё применяющихся на ВМК Турбо-Паскаля и ассемблера MASM для MSDOS, а также существенно иначе расставленными акцентами. Примерный план книги представлен здесь, а с оглавлением неоконченной рукописи, уже включающей три части из предполагающихся семи или восьми — здесь.

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

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

Даже без дополнительных глав ожидаемый объём книги составляет порядка 1000 страниц; автор планирует уложиться в 500 рабочих часов, для выделения которых необходимо на некоторое время отказаться от подработок. Кроме того, издание книги в бумаге потребует серьёзных расходов, а сотрудничество с издателями на их условиях означало бы невозможность распространения (по крайней мере, открытого) её электронной версии. Автор предпочёл объявить о сборе средств.

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

>>> Подробности

★★★

Проверено: maxcom ()
Последнее исправление: CYB3R (всего исправлений: 2)

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

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

Жабаскриптовый код (как и всю html страницу) можно подменить если там используется незащищенный http. С пакетным менеджером так не прокатит, там используются цифровые подписи

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

кури акторную модель (это и есть суть) - Кей как и создательObject-C по первому образованию биологи.

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

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

Да очень просто.

Просто? Просто, итиегомать?!!!! Это та называешь просто??? :

Рассказать ему про то, что тип кроме direct части (C99 6.7.5) имеет indirect (и да, это не только *, ещё [] и ()), объяснить, что это связано с тем, что indirect может включать в себя другие indirect (напр., указатель на указатель и массив указателей). Что indirect часть описывается около имени переменной (если это не абстрактный декларатор, конечно), а direct в начале декларации.

Это всё можно подкрепить сорцами GCC или, что лучше, clang'а (ибо парсят через RDP)...

Ты издеваешься.

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

0.http://codeforces.com/blog/entry/2139
1.его лекции в русле «Программирование вторая грамотность» Ершёва
1.1. Список из «Как читать книги(Руководство по чтению)„Мортимера Адлера
2.он второй по вкладу в С++ после Страустпупа.
3.Страуструп долгое время был первым по вкладу в old-C(пока окончательно не разрезали языки(хотя конвергенция сохраняется))

-4.Линукс против плюсов.

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

Не отменяет человеческий фактор, всё доверие в итоге к мейнтейнерам.

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

Одну работу смог качественно сделать. Правда пом все раво песел на LO ;)

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

хорошие программисты пишут на фортране все остальные на mainstreamlangugeofdecade

вся память это занумерованная.(Гедёль с теоремой о нумерации теорем.«совпадение? не думаю»)

по номеру можно получить номер по которому ...

привет ассоциативные структуры.

Си хорош ибо:

int a[]

int i;

... ...

i[a]

i[a][a]

i[a][a][a] и т.д.

qulinxao ★★☆
()

План содержания:

Почему за использование gets и scanf(«%s»,...) увольняют с работы

«Скандалы, интриги, расследования».
Что, действительно увольняют? Может всё же стоит просто объяснить особенности работы данных функций и в каких случаях их использования следует избегать без подобной «желтухи»?

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

Со scanf то что не так? Имеется ввиду случай, когда мы ограничиваем количество символов читаемых из потока?

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

Kicking Away the Ladder: Development Strategy in Historical Perspective

Что сказать-то хотел? Что вы сейчас из астрала все знания сами подымете?

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

это не вполне так.

их «модуль» lines совсем не независим от клиента и под каждую задачу они его правят.

K&R(1ое издание) хорошо многим в том числе:

1. велосипедной реализацией malloc

2. подчёркиванием(в предисловии) что язык С в курсе что вокруг него есть ОС c системными вызовами и поэтому язык (тут прямая речь):

«не имеет инструментов мультипрограммирования и динамической памяти»

qulinxao ★★☆
()

в поддержку подвижничества:

https://www.youtube.com/watch?v=R9bHcmXbs94&t=1242&lc=z135ttxihmmayjuie04cinpyuuq2vne43qg0k

How impoverished some of these students are. They are adults, professionals in their fields, and yet some of them ask these questions as if for the first time... how sad that they haven't already considered these things, that they hadn't already read the classics... That one of the students even gave any time to the absolutely mad conception of 'keeping score' via how much money you earn, how tragic! All these people who are being churned out of college, and yet they just enter the economic machine unthinkingly. Whatever you think of Stepanov (and nobody can fail to appreciate the massive achievement of the STL), at least he sees the urgent need to have these conversations, in the world where software is changing our world dramatically and so rapidly.

qulinxao ★★☆
()
Ответ на: в поддержку подвижничества: от qulinxao

That one of the students even gave any time to the absolutely mad conception of 'keeping score' via how much money you earn, how tragic!

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

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

как вариант твоего соглассия.

ты в лице твоих предков стал патрицием

и ты(в этом поколении) уже занимаешься классикой в итоне там али в какой алексАндрии.

qulinxao ★★☆
()

from http://www.stolyarov.info/books/programming_intro/about.html:

дальше vector'а и list'а обучение никогда не заходит (при этом эти два контейнера, пожалуй, самые бесполезные из всего STL

эээ вот тут Bjarne Stroustrup: Why you should avoid Linked Lists с несколько иным чем у вас мнением

ну и топ комент:

«Why you should avoid using linked lists...» a loaded title with a lot of caveats, but a good video to critique and think about. TL;DR: linear search time dominates insertion/deletion in large lists, which is counter to accepted wisdom of «linked lists have low insert/delete costs». By contrast, vector representation is more compact and faster to search, so even with the large shuffle costs, it still «scales better». <insert debate here>

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

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

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

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

Бегу в магазин )))

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

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

anonymous
()
Ответ на: про Free Pascal от Croco

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

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

Eric Raymond - тролль, расист, gun rights активист, ультраправый. Ну да, хорошая компания.

anonymous
()
Ответ на: про Free Pascal от Croco

Как ни странно, альтернативы Паскалю в этом плане просто нет.

Паскаль устарел. Давно. Альтернативу сам автор создал еще в 86м году. Учить надо на Обероне.

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

заведомо бесполезный язык

Для «учить на программиста» или для «познакомить школьника с программированием»?

anonymous
()
Ответ на: про Free Pascal от Croco

Как ни странно, альтернативы Паскалю в этом плане просто нет. Вообще.

Это полнейший бред, уж простите за прямоту. Вы видимо из того самого поколения, которое намертво привязалось к старому дерьмовому legacy и тупо не осиливает ничего нового. Для изучения C вполне достаточно материалов по С, а Pascal & Delphi, которые подобные вам идиоты рекламируют как «языки для обучения без которых программистом не стать» пригодны сейчас разве что для работы в музее.

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

Но ведь если немного разобраться, то всё становится действительно простым. Зато сразу ясно откуда берётся известное правило чтения сложных объявлений («двигайтесь вправо, если возможно, и влево, если это необходимо»).

loyd
()
Ответ на: про Free Pascal от Croco

Паскаль используется в роли учебного пособия как переходной этап перед Си

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

anonymous
()

У автора бомбануло с комментариев и теперь он гадит из-под анонимуса?

P.S. Паскаль мёртв, и ваше вуду ничего не изменит. :-P

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

На Лиспе можно писать в функциональном стиле,

Не нужно. Да и нельзя, по причине отсутствия гарантии TCO.

anonymous
()

А давайте еще к каждому долбо*бу-неосилятору приставим личного учителя? Нужно больше программистов! Больше!!1

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

На *nix системы или на Linux?

Привязки к Linux нигде в книге нет. Единственное место, где имеется какая-то линуксовая специфика — это в части, посвящённой ассемблеру, конвенция системных вызовов; она в книге даётся для Linux и FreeBSD, заодно демонстрируется, что такое OS-specific вообще. Собственно, в основу этой части практически без изменений ляжет уже существующая книга по NASM, можете её сами посмотреть, по ссылке электронный вариант доступен. В остальном — bash, fpc, nasm, gcc, gdb, make (ох, пардон, вот тут таки GNU make, и сделаны оговорки, что за пределами линукса это таки gmake), а ещё vim, nano и joe — короче, это всё ни разу не linux-specific.

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

вообще-то да. программистов настолько нехватает, что им приходится создавать аж особые условия. Меня всегда удивляло чем отличается инженер строитель ГЛОБАЛЬНО от инженера программиста, суть то одна, но отдел строительный за стенкой ходит по дрескоду, не может работать из дома, не имеет печенек, гамаков, консоли и свобоного графика посещения. А все потому, что строителей современного уровня штампуют уже сто лет, а программистов в индустральных масштабах только лет 30. Причем за обрушение конструкции строитель или начальник их отдела может и под суд пойти, а если мой кусок кода падает будет «ПОФИКСИМ В СЛЕДУЮЩЕМ РЕЛИЗЕ», грубо говоря. В идеале в новом веке на одного человека должно приходиться МИНИМУМ пол программиста.

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

Указатели через ассемблер можно хорошо понять.

Можно. И даже хорошо. Примерно одному человеку из двадцати изучающих предмет (в смысле, из тех, кто уже прошел первичный отсев).

Но дело даже не в этом. Понимание «что такое указатель» само по себе ничего не даёт, ощутить прелесть концепции можно только при работе со списками. Чтобы выстраивать на асме списки и деревья, нужно для начала на этом же асме сделать менеджер кучи; я ни разу не видел и не слышал, чтобы такое делали. Причём даже если стиснуть зубы и таки сотворить ассемблерную кучу, в отсутствие структурных типов данных попытки работы со списками будут напоминать мазохизм в особо изощрённой форме, каковой для БОЛЬШИНСТВА (нет, не для всех) обучаемых окажется причиной вообще дальше не идти.

Croco ★★★
() автор топика

Тред не читал. Автору успехов.

Ретроградство и зашоренность автора уже успели разобрать?

(ниже цитаты из 2011 года, из обсуждения книги по NASM)

Самая мощная машина у меня дома представляет собой Celeron 1.7 с 512 Mb RAM и я не вижу никакого резона для её замены

Так или иначе, именно домашние и офисные машины, ну и примкнувшие к ним серверные решения, которым мощность тоже нафиг не нужна, поскольку они упираются не в процессор, а в скорость сети, диска и объём памяти — это и есть основа компьютерной индустрии

Автор, вы слышали про Gentoo Linux? :) Ну и про видеозвонки, например.

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

Что, действительно увольняют? Может всё же стоит просто объяснить особенности работы данных функций и в каких случаях их использования следует избегать без подобной «желтухи»?

Увольняют, сам видел. Объяснять тут нечего, если человек пришел устраиваться на работу, не понимая этого, то с ним просто не о чем разговаривать.

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

Давай отличать программистов от кодеров? Там нету ничего для программиста, в этой книге.

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

Касательно scanf - в связи с опасностью переполнения буфера, как и в gets?

char buf[20];
scanf("%19s", buf);

Для cin ситуация аналогичная или нет?

char buf[20];
cin>>buf;

если человек пришел устраиваться на работу, не понимая этого, то с ним просто не о чем разговаривать

Мы всё ещё говорим об учебном материале или о методичке о том, как устраиваться на работу и требованиях к кандидатам?

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

Указатель это ярлык на переменную,

С таким же успехом можно сказать, что указатель - это указатель.

Не трудитесь, единственно верного заклинания не существует. Указатели - это такая штука, которую нужно прочувствовать на уровне печёнки, а на печёнку (a.k.a. интуицию) не действуют слова, интуиция работает образами.

Надо сказать, что для меня в своё время тоже было открытием, насколько бывает сложно объяснить ученику то, что мне самому никто никогда не объяснял. Вот те же вложенные циклы — вы не поверите, сколько народу их не осиливает. Вот просто не понимают, и всё. Можно рисовать блок-схемы, можно рисовать дорогу с кольцевым движением, где к большому кольцу примыкает ещё маленькое, которое на каждом витке по большому кольцу тоже нужно сколько-то раз проехать, а вдоль дороги расставлены щиты с надписями, что делать. Можно придумывать самые разные варианты. И вот хрена лысого, некоторые люди просто не могут (на уровне всё той же печёнки) понять, что программа выполняется последовательно оператор за оператором, а тут вот ещё по кругу. То есть соглашаются, кивают, даже формулировки с удовольствием повторяют, но толку никакого.

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

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

И потом такие люди детей учат «программировать». Позорище :(

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

Касательно scanf - в связи с опасностью переполнения буфера, как и в gets?

Да.

char buf[20];
scanf(«%19s», buf);

Ага (в смысле, переполнения не будет), только в отличие от printf это вот 19 в scanf'е почему-то нельзя взять из параметров. Следовательно, нельзя привязать к тем 20. Уволить не уволят, но публичную порку устроят.

Для cin ситуация аналогичная или нет?

Обычно если уж используют namespace std, то работают не с char[], а со string'ами. А так да, istream::operator>>(char*) никаких проверок не делает, да и не может.

Мы всё ещё говорим об учебном материале

Если говорить об учебном материале, то исходная цитата была заголовком параграфа, причём довольно обширного. Там, естественно, имеется исчерпывающее объяснение, вплоть до рассказа о том, как перекрывают адрес возврата и чем спасает non-executable stack. А заголовок такой «желтый» исключительно для того, чтобы его не игнорировали по принципу «чё-та сложна, как нибудь так сойдёт».

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

И пусть кто-то еще попробует вякнуть, что на ВМК не сброд.

anonymous
()

вообще хотелось бы иметь в одной книге:

advanced bash scripting + руководство системного администратора Linux + средний мануал по Make + k&r + Кормен Алгоритмы (именно в таком порядке), но объем будет 10000 стр. не меньше, а если информацию подавать более обще, чем в этих книгах, то особого смысла в таком талмуде нет. Еще надо что-то по разработке в ядре типа LDD и что-нибудь по сетям типа Стивенс и что-нибудь по операционным системам типа Таненбаума, тогда получится на 20000 страниц, зато в одной книге, в общем, книги для начинающих нужны только чтобы человек получил какой-то «вектор» в развитии, в таком случае книга должна быть «очень обобщенной» и в каждой затрагиваемой теме должна иметь отсылки к более подробному изложению, причем желательно в самом тексте, а то обычно это делается в конце главы или вообще в конце книги и влом искать доп. литературу после прочтения главы.

Это исключительно мое видение, можете не соглашаться.

IvanR ★★★
()

еще, прежде чем писать про bash я бы написал про vim и emacs (страниц на 5 для каждого), чтобы у будущего программиста был выбор и естественно сделал бы сноски на более полное изложение темы.

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

Вот те же вложенные циклы — вы не поверите, сколько народу их не осиливает.

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

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

еще, прежде чем писать про bash я бы написал про vim и emacs (страниц на 5 для каждого)

Описать Emacs, мануал которого более тыщи страниц, 5-ю страницами - это если какой-нибудь LZH применить :-)

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