LINUX.ORG.RU

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

 , ,


19

5

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

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

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

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

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

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

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

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

★★★

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

Думаете, почему их в школе нет?

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

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

мануал по языку vim тоже объемный, суть книги для начинающих не в том, чтобы погрузить целиком в тему, а в том, чтобы показать читателю, что данная тема может быть интересна и показать ссылки на более подробную информацию. Я как-то читал книгу по сетям Олифер и Олифер, там html расписали на 0.25 станицы, когда как стандарт наверно занимает не менее 100 страниц, ссылку кстати не дали.

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

Кто сейчас платит деньги за указатели или алгоритмы сортировки пузырьком?

Молодежь надо готовить к специальностям востребованным на рынке, поэтому в качестве первого и единственного языка программирования надо преподавать Java. Это современно и модно. Один хрен, 90% выпускников ВМК, из тех кто работает по специальности, начинают программистами на Java.

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

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

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

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

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

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

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

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

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

Речь не о изучении ЯП С, а об обучении основам алгоритмизации и программированию. Учат программированию на конкретном языке только конченные дебилы, а результат подобного обучения- говнокодер обыкновенный.

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

Указатели поймёт любой чисто интуитивно, кто знаком с принципиальным устройством пк. Ну а например циклы, функции на примере си поймёт любой если , начать преподавать с самых важных символов ; {} (). Потом сама собой должна прийти мысль что цикл, или функция ничто иное как интерфейс блока и/или имя. А не наводить тень на плетень. Исходя из такого подхода гораздо легче понять и пространства имён и локальные переменные и тд.

anonymous
()

вообще знакомство с Linux следует начинать с редакторв, затем плавно перейти к возможности редактировать текст в автоматическом режиме, например встроенные функции vim, emacs, далее простые утилиты оболочки типа sort, tr, cut, join, find, seq test ит.п. затем плавно на примерах перейти к if, while, for until в sh с использованием ранее изученных утилит, затем regexp оболочки, затем sed и awk. Затем погрузить читателя в что-то более «осязаемое» например объяснить процесс загрузки системы, объяснить systemV, не забыть упомянуть и о systemd, показать, что есть пакеты, дистрибутивы, embeded системы, man страницы, ядро, жесткие диски, /proc и процессы, затем показать, что есть сети и таблицы маршрутизации, упомянуть динамичкую маршрутизацию, веб серверы и почтовые серверы, показать, что работать можно не только в консоле, а есть еще большое разнообразие всяких DE, затем уже можно переходить к «нормальным» компилируемым языкам и тут я бы все-таки взял си, так как система на нем написана и это касается не только ядра, а затем уже можно коснуться алгоритмов. Все это должно изобиловать отсылками к более подробному изложению, буквально каждый параграф должен иметь пару ссылок.

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

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

Какой у Вас педагогический стаж?

С 2000 года. Встречный вопрос: а вас на гугле забанили?

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

Между делом, ленивых студентов, которым ничего не интересно, существенно больше

подозреваю, что в среднем вузе таких 95%, в элитных технических наверно поменьше.

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

Я не Вам вопрос задавал, а Вашему оппоненту :)

У меня с 2003, по большей части в области информационных технологий

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

Я не Вам вопрос задавал, а Вашему оппоненту :)

Дык цитируйте кусочки-то, а то по ссылкам «ответ на» тяжело восстанавливать, кто тут кому что задаёт.

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

подозреваю, что в среднем вузе таких 95%, в элитных технических наверно поменьше.

У нас на ВМК по моим наблюдениям таких примерно треть. В ВУЗах третьего эшелона таких, я бы сказал, все 100%, но там и преподаватели соответствующие.

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

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

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

когда они это делают ради откоса от армии или ради «баснословной» карьеры

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

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

кандидат физико-математических наук (2002 г., специальность 05.13.11), доцент (2009 г.), кандидат философских наук (2012 г., специальность 09.00.11), работает на кафедре алгоритмических языков ф-та ВМК МГУ им. М.В.Ломоносова с 2002 г. в должности ассистента, с 2010 г. в должности доцента.

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

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

Да все так. Нулевая мотивация, а главное что нет никаких интересов в жизни... вообще нет. Как можно так жить? Или может я уже постарел?

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

во всяком случае они не знают, чего хотят

Это, кстати, не их полностью вина. Да и не так уж и плохо, к концу 2го курса обычно пролечивается.

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

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

IvanR ★★★
()

Во вы напутали. Собрат не вас, а меня спрашивал. Ответ - почти никакого. Я же даже не учу, а советую учить. С каких пор чтобы это делать нужно иметь опыт? Сужу по себе. Про указатели дошло классе в третьем, когда прочитал не профильную научно-популярную книжку годов 50-ых. Там были примеры в машинных кодах. Ну и раз мы должны что-то вызывать, куда то записывать результат адрес ячейки нужно где-то хранить... Даже без рассказов про оси всё понятно.

Остальное уже позже. Я туповат и пошёл по простому пути, вычленив ; {} как печку откуда нужно плясать. Так что когда бухтели про функцию, приплетая математику, в момент когда она не нужна, я это пропускал через своё представление.

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

Я своих детей лучше буду учить по HtDP или SICP, учить Лиспу

Кармак в треде, все в Quake DeathMatch.

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

сами указатели это вообще-то ерунда, важнее адресная арифметика (в структурах, массивах, объединениях и т.п.), возможно вы и подразумеваете это под «указателями»

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

Я уже джва года жду такую книгу

а я уже 10 лет жду книгу «вся теоретическая физика», чтоб сначала сопромат, потом магнетизм, а потом теория струн и это все должно изобиловать отсылками к первоисточным докторским диссерам

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

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

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

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

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

ого автор на лоре )

хотел заказать книги по почте но там счет по электронке и поход в сбербанк

а нельзя как нибудь просто через киви кошелек заплатить не отрывая попу от стула

хотел заказать все три книги а тут такое

запилите киви кошелек

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

Ну да, само собой. Pointer arithmetic как бы. Зачем они нужны без операций с ними и с помощью их? Основа даётся элементарно - «номер» ячейки откуда будем брать, номер куда будем класть. Ну и наконец номера где хранятся номера ячеек с ответом и пр, что-бы каждый раз не указывать в коде куда писать, или иметь возможность изменить адрес и тд.

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

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

p.s. Чё-то меня понесло. Звиняйте(температура поднялась) :)

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

*Проще и естественнее переменной.

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

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

int main(void)
{
        char a[24], b[24], i;
        for (i = 0; i < 24; i++) {
                a[i] = i;
        }
        for (i = 0; i < 24 / sizeof(int); i++) {
                *((int *)b + i) = *((int *)a + i);
        }
        for (i = 0; i < 24; i++) {
                printf("%c\n", b[i] + 'a');
        }
        return 0;
}
IvanR ★★★
()
Ответ на: комментарий от anonymous

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

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

А вот тут я с Вами поспорю.

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

Как преподашь, так и будет. Вообще было бы неплохо просто несколько примеров с разными! подходами. Это как Хаскел без матана.

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

Я вот на своём примере рассказываю. Долго не мог слезть с паскаля, но при этом потихонечку осваивал самые азы ассемблера, просто потому, что на моём личном компьютере (с процессором i286) был только TASM v2. Это уже потом я смог перенести на дискетах Turbo C v2 и стал писать для него графику (почему-то дистрибутив был неполон). Самое забавное, что было всё это в 2008 году, совсем недавно.

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

То есть вообще с самого начала? По духу может быть согласно с тем что я имею ввиду, но в этом примере многовато тем... Если конкретно Си, то начать можно с блока и с такого кода s(){;} Показать что компилируется. Как то так и делают наверное, только не выстраивают логику от блока. Потом, когда наступит момент типа данных, использовать указатели вместо переменных. Потому, что получается смешно - говорим о занимаемых ячейках памяти, а используем абстракцию когда указатели органично вписываются. В этом случае безмзгло скопированная американская подача материала даёт редкий сбой.

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

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

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

ненене

*p;
main(){
.....
****p
.....
}

и

p[];
main(){
....
0[p][p][p][p]
.....
идентичны - т.е разыменование цепочки.

когда стали прикручивать «типобезопасность» так лаконично как второй вариант уже не напишешь в общем случае типов

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

в патриции берут.

ох щи.

патриции(которые в первом поколении) это selfmademan's и/или банда таковых.

берут же коней в патриции Калигулы.

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

А ничего что для ОБУЧЕНИЯ программированию язык желательно выбирать без вот таких вот костылей?

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

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

указатель на 3й элемент массива j[3]
3й элемент

Гхрм, может всё-таки четвертый? Ибо нумерация-то, с нуля, не?

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

патриции(которые в первом поколении) это selfmademan's и/или банда таковых.

Я про римских. Отважные войны награждались землями. Собственно весь спор между патрициями и плебеями был из-за собственности на землю.

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

всадники отдельно, патриции отдельно.

пока патриции были патрициями а не конями - стать патрицием было почти не возможно

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

Я к паскалю приравнял, и потому явно указал - элемент равен «6», т.е. 3й по-Сшному и 4й по-Паскалевски ;)

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

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

Верно отчасти. Языки-обучалки - бэйсик, паскаль(ща аноны налетят доказывая что это не так) и пр.
Они предназначены дать понятие бывшему школьнику о логике, математике, алгоритмии и работе с машинами.
Языки для продакшена - Тут большинство от воли заказчика и договорённости с исполнителем, т.к тот же «русскоязычный и какстрированный паскаль» - язык 1С тоже продакшен(и не хило бабло пилит), хотя ему даже до паскаля как до Луны пешком...

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

всадники отдельно, патриции отдельно.

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

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