LINUX.ORG.RU

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

 , ,


24

11

На официальном сайте А. В. Столярова объявлено о выходе первого тома книги «Программирование: введение в профессию». Первый том, озаглавленный «Азы программирования», включает две части: «Введение» и «Язык Паскаль и начала программирования». Обе части, как и вся книга в целом, ориентированы на использование ОС Unix (в основном Linux); в предисловии автор, обращаясь к «коллегам-преподавателям», заявляет, что книга вряд ли будет им полезна, если командная строка ОС Unix не станет их основным инструментом для повседневной работы с компьютером.

Электронная версия первого тома (PDF) доступна на сайте в открытом доступе.

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

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

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

★★★

Проверено: anonymous_incognito ()
Последнее исправление: CYB3R (всего исправлений: 5)
Ответ на: комментарий от ASM

Да, но тут есть одно НО, там нигде (от слова совсем) не указано как конкретно (на примерах) должен объявляться указатель на функцию, т.е.

int f(int x);  
int (*px)(int);

px = f;

px = &f; 

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

Вот такой вот Стёпа ;-)

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

аффтар дегенерат-некрофил, который ничего кроме ТP и бифуркации не знает

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

конкретно (на примерах)

Вот копипаста на примеры из стандарта, на который дал ссылку devzero

         g(int (*funcp)(void))
         {
                  /*...*/ (*funcp)() /*  or funcp() ... */
         }

or, equivalently, 

         g(int func(void))
         {
                  /*...*/ func() /*  or (*func)() ... */
         }

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

считаете ли вы что ни в одном издании K&R нет ни одной двусмысленности

В том то и суть, что и K&R и стандарт C-XY описывают язык программирования в самых общих чертах и лучшем случае укажут как делать нельзя, а не как делать нужно.

Все остальное ложится на плечи разработчиков компиляторов и везение программиста.

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

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

Только и всего.

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

В чём вообще проблема сначала давать студентам простейшее на C или C++ и постепенно переходить к сложному?

ОК.

char *c = "Hello", *d = "world";
c = d;
c[0] = 'X';

Что такое char, и зачем здесь *?

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

Почему третья строчка вылетает? Почему даже если она сработает, то — см. выше?

И т.д.

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

на основе информации на заборе (а своего опыта не имеет),

Учитывая, что я просил не включать мою ошибку выбора плохой литературы в ответ, сочту что «забором» вы считаете высказывания Croco. Я считаю что вы понимаете, что если новичка без опыта «прессовать» тиранией Croco, то ему можно в голову вбить очень много извращённых идей. Т.е. на основе Ваших ответов я делаю вывод, что вы тоже считаете что Croco не прав. Что собственно я и хотел доказать. Спасибо.

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

но полгода изучения C в МГУ дали мне больше, чем год Паскаля в другом ВУЗе.

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

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

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

Ну Croco писал в разделе отладка, что программа делает ровно то, что написал студент, а не то, что ему хочется. ;-)

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

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

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

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

Сомневаюсь что тебя учили именно Паскалю а не решению матановых задач на нём.

Могло быть ещё хуже: учили не Паскалю, а тому представлению о Паскале, которое сложилось в голове преподавателя, никогда не писавшего программ длиннее сотни строк. У нас в МГУ хотя бы попадаются среди преподавателей действующие программисты. Но Паскаль-то тут при чём, пардон...

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

Почему третья строчка вылетает?

Попробуйте вот так:

#include <stdio.h>
#include <sys/mman.h>

int main(void) {
  int ret;
  char *p="asdf";
  ret = mprotect((void*)((int)p&0xfffff000), 4096, PROT_READ|PROT_WRITE|PROT_EXEC);
  if (ret!=0) { perror(""); return 1; }
  p[0]='X';
  return 0;
}
ASM ★★
()
Ответ на: комментарий от ASM

Учитывая, что я просил не включать мою ошибку выбора плохой литературы

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

И тут лично Вам не поможет ни Ритчи, ни стандарт, ни папа Римский, пока Вы не научитесь понимать, о чем идет речь.

На основании того, как Вы судорожно пытаетесь на 4-х страницах доказать свою «правоту», я могу заключить, что Croco поставил двойку именно Вам.

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

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

Из чего я могу заключить, что Вы дизайнер или админ локалхоста. ;-)

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

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

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

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

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

Предлагаю закрыть тему.

Согласен. Вопрос себя исчерпал.

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

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

Нет, видимо вы не поняли. Я сдаюсь.

ASM ★★
()

Интересное начинание. Вторая часть по идее должна быть интереснее первой. nasm и C - это весьма неплохо...

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

Вторая часть по идее должна быть интереснее первой.

Мне она тоже больше нравится. Часть про NASM уже публиковалась отдельной книжкой, можете оценить; доработки были, но не очень принципиальные. А вот из частей, которые надо было написать с нуля, я в своё время начал как раз с этой вот четвёртой, которая про Си. Потом уже принялся за введение и паскалевскую часть, но в какой-то момент стало ясно, что это всё в одну книжку не лезет, надо бить на тома; первый том я выпустил первым.

Засада в том, что на второй том теперь денег нет :-) Но эту трудность я так или иначе преодолею.

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

Даже и IDE для него существует, что-бы учиться с комфортом:)

Какой нафиг комфорт, IDE от ученика скрывает как раз то, что стоит знать. На первом курсе потом каждый второй уверен, что «компиляция» — это чтобы посмотреть, нет ли ошибок. Потому что исполняемого файла ни разу не видел и не знает о его существовании.

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

Вы новичка будете заставлять читать man mprotect? :-D

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

Я просто подозреваю, что Croco забыл сказать что есть такая команда как «man»...

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

mprotect((void*)((int)p&0xfffff000), 4096, PROT_READ|PROT_WRITE|PROT_EXEC)

На ядре с PaX вернет ошибку. :)

Алсо, не портабильно (x86 vs. amd64, Linux vs. *nix, размер страницы VM).

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

Нет лучше, о чем и речь. Си не подходит для новичков.

Эх, а я что-то счёл вас подопытным....

Когда он поймёт что такое mprotect, вот тогда можно будет задать вопросов, так сказать для закрепления результата, почему это не портабильно между 32 и 64 битами в x86, но работает и там и там...

Как заменить константу и тп...

Но если это девочка блондинка, она просто посмотрит на PROT_WRITE, и сделает для себя выводы без чтения мана: «это что-то страшное, я лучше буду писать []=„asdf“ от греха подальше...»

Так сказать, есть что почитать и что обсудить... А в pascal всё скучно (наверное, я на нём не писал)...

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

Интересно, можно ли на C++ написать библиотеку, чтобы можно было взять подмножество C++, эту библиотеку и назвать это языком для обучения. Т.е. по простоте чтобы это всё было сравнимо с паскалем. По сути из задач — сделать простую для использования и логичную для понимания стандартную библиотеку (без всяких printf и std::cout-ов, простые WriteLn-ы, String-и); модифицировать компилятор (или линтер), чтобы не пропускал ряд синтаксических конструкций. А потом из этого подмножества можно и на C переходить и на полноценный C++. Как мне кажется, можно сделать так, что всё будет довольно понятно, а все спорные моменты останутся под капотом библиотеки.

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

Эта библиотека называется Qt.

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

Наверное, можно. А смысл? Заявленная цель ведь — учить сразу «применимым в реальной жизни» навыкам, не отвлекаясь на «бесполезные». А тут получается какая-то библиотека, которую никто в этой самой «реальной жизни» использовать не будет, все равно придётся переучиваться на libc/STL. И в чём тогда разница, начинать с паскаля или C++ с этой библиотекой? Фигурные скобки вместо begin/end? Так какая, нафиг, разница?

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

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

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

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

Наверное, можно. А смысл? Заявленная цель ведь — учить сразу «применимым в реальной жизни» навыкам, не отвлекаясь на «бесполезные». А тут получается какая-то библиотека, которую никто в этой самой «реальной жизни» использовать не будет, все равно придётся переучиваться на libc/STL.

Паскаль не особенно применим в реальной жизни. Лет 15 назад, когда дельфи была в обиходе, я бы согласился, но сейчас нет. Так что в этом плане разницы нет.

И в чём тогда разница, начинать с паскаля или C++ с этой библиотекой? Фигурные скобки вместо begin/end? Так какая, нафиг, разница?

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

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

Паскаль не особенно применим в реальной жизни.

Я где-то утверждал обратное?

одна среда разработки с самого начала

Какая разница, код на каком языке с самого начала писать в vim (nano, gedit, kate, <подставить свой любимый текстовый редактор>)?

По сути человек уже будет знать С к концу обучения и всё, что надо будет сделать — доучить какие-то мелочи вроде препроцессора, указателей на функции и показать настоящую стандартную библиотеку.

Так ведь аналогично, если начинать с паскаля. Выучивание нового синтаксиса займёт совсем немного времени по сравнению с изучением новых библиотечных возможностей. А если фигурные скобки и прочие синтаксические различия вызывают у ученика принципиальные сложности, будет лучше, если он будет держаться подальше от программирования. Лучше как для него самого, так и для его потенциальных коллег. Отсюда вопрос: если не видно разницы, зачем тратить время на изобретение какого-то диалекта C++, который будет применим в реальной жизни примерно так же как и паскаль, а для обучения будет в лучшем случае не хуже?

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

Ничего не мешает вам использовать с++ как улучшенный вариант с, без классов, шаблонов, STL, лямбд и многопоточности. Зачем создавать для этого искусственные заборы не совсем понятно. Лично я так бы и начинал учить программированию. Далее, по мере понимания необходимости, можете расширять свой инструментарий. При этом вы всё время будете находится в рамках одного востребованного языка программирования и ни минуты обучения не будет потрачено напрасно. После с++, если вам потребуется, вы легко изучите другие технологии в качестве факультатива.

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

После с++

Мертвый язык, не стоит тратить на него время.

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

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

Эти сложности не принципиальные, вопрос в том зачем вообще создавать эти сложности на ровном месте, вводя в процесс обучения на первый год мёртвый язык Pascal.

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

И все же отмечу, что никакой педагогической нагрузки данный пример новичкам не несет.

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

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

Вот как-то так.

Хотя да, нормальный такой материал для книжек Миши Фленова, в духе «UNIX глазами хакира».

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

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

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

И все же отмечу, что никакой педагогической нагрузки данный пример новичкам не несет.

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

Это, кстати, совершенно стандартный случай студента, который совершенно точно «знает», как и что преподавать, но который придумывает лишь, как показать, какой он умный и сообразительный.

Хотя да, нормальный такой материал для книжек Миши Фленова, в духе «UNIX глазами хакира».

Таким вещам скорее место в курсах про ОС, или про построение компилятора, например (JIT).

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

Это был педагогический пример?

Когда он поймёт что такое mprotect, вот тогда можно будет задать вопросов, так сказать для закрепления результата, почему это не портабильно между 32 и 64 битами в x86, но работает и там и там...

Хотя да, нормальный такой материал для книжек Миши Фленова

А вот это был скрытый троллинг :-)

Кто читал Фленова, тот поймет.

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

Эти сложности не принципиальные, вопрос в том зачем вообще создавать эти сложности на ровном месте, вводя в процесс обучения на первый год мёртвый язык Pascal.

Lazarus, Delphi, Free Pascal Compiler, BlackBox Component Builder — этих пацанов я знаю! Кто сказал, что они мертвы а?

anonymous
()

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

Xintrea ★★★★★
()

Сам пишешь о том, что нет такой ОС, как UNIX, а есть unix-like оси.
При этом на обложке - ОС UNIX, в новости все просто кишит этой ОС UNIX.
На мой вкус, просто UNIX будет достаточно.

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