LINUX.ORG.RU

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

 , ,


24

11

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

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

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

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

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

★★★

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

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

На все выпады с лора будете отвечать, не нравится сделайте форк?

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

Ещё уточните, у вас действительно есть такое большое количество свободного времени, что вы готовы написать книгу?

Да.

На ком потом эту книгу тестировать?

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

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

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

Да, договорились. Как надумаю, я создам тред в www.linux.org.ru/forum/development/ и кастану тебя и be_nt_all раз такое дело.

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

Ещё, кстати, что меня давно волнует, это целевая аудитория. Начинать учится программировать могут как студенты, которым лет по 18-19, или школьники которым ещё нет 14 лет.

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

Croco, я так понимаю, имел опыт только со студентами, которые приходили к нему в определённом возрасте... ЦА около 18-19 лет.

ASM ★★
()
Ответ на: Я попросту собираю готовый продукт из... от mister_VA

Это называется реферат и никакой закон или лицензии этого не запрещают. Однако реферат — это ваш и только ваш труд, как раз вы и решаете, что туда цитировать, что нет и как комментировать цитированное.

Все тут не так однозначно. Например если кому-то взбредет в голову начать выпускать мультики/книги/комиксы с Микки-Маусом и Гарри Поттером, я почти 100% уверен что обладатели авторских прав на данных персонажей попробуют подать в суд и запретить использовать этих персонажей, или потребуют платить какие-то авторские отчисления. Или права на литературных/анимационных персонажей регулируются какими-то другими законами? Чем больше я размышляю над всеми этими, тем больше убеждаюсь что все это(копирайты, авторские права, патенты, права на торговую марку) в корне неправильно и попросту является абсурдным.

Вот кстати про этого самого Микки-Мауса и то, как ради него продавливали очередное продление срока действия этих всех авторских прав https://www.techdirt.com/articles/20090811/0123105835.shtml

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

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

А с людьми, которые уже программировали что-то на чем-то процедурном-императивном, получается достаточно просто. Например вот https://paste.fedoraproject.org/332708/91779145/ этот код крестиков-ноликов, учил одного питонщика (он уже не школьник) сишке, как работать с иксами на низком уровне, притом до этого я ему уже как следует разжевал то, что такое указатели и всякие callback-и, а про всякие циклы и условия(ветвления) он и так имел отличное представление т.к. знал питон. Никаких проблем с пониманием природы указателей там не возникло. Аналогично я могу наобъяснять насчет того, как сделать какую-нибудь примитивную графическу штуку, вроде игры Life или тетриса например.
Так, к чему я? К тому что вот именно программирование всяких игр может заинтересовать школьников, а современные школьники обычно неприемлят всякие псевдографические игры (типа nethack) и потому надо пораньше начинать рисовать что-то на экране. А как дойдет до афинных преобразований, можно таким образом будет мотивировать школьников учить аналитическую геометрию на плоскости и матрицы поворота всякие, заодно будет больше мотивации геометрию учить

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

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

вот в C/C++ без include это Вы сможете сделать только в гамаке и стоя :-)

int printf(const char *fmt, ...);
int main()
{
    printf("Hello, world\n");
    return 0;
}

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

Это если с libc линковаться. Но можно и без этого, только потребуется небольшой модуль на асме — как водится, в тех местах, где точки соприкосновения программы с внешним миром (_start и сисколлы).

Вы вообще хотя бы примерно представляете себе, что такое include?

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

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

Кстати да, в школе любил писать на blitz basic. С другой стороны по мнению Croco, мой мозг из-за этого безнадежно испорчен...

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

где-то слышал, что libc это реализация стандартной библиотеки (не может быть!, как под windows будете выкручиваться?), а без нее ?

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

найдет ли человек привыкший к gcc линковщик на винде?

в любом случае прилинковать стандартную библиотеку равносильно поставить include в основной файл на нее же

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

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

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

в любом случае прилинковать стандартную библиотеку равносильно поставить include в основной файл на нее же

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

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

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

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

(кидая очередную карточку в ящик с надписью macaca pythonidae vulgaris) понятно. В игнор.

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

гм, читаю этот забавный тред, но вот это меня совсем смутило :/

Питон.
слабая типизация

PS сорри за некропостинг

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

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

Vudod ★★★★★
()

cawa

вы думаете разрабы красношапки например за спасибо работают? мы тут вроде обсуждали «Программирование: введение в профессию»

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

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

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

ну да, ну да, у меня так и стоит перед глазами картина:

приходит к вам человек и говорит «нам требуются услуги программиста для разработки вот такой хреномутьки, воспользоваться сторонними решениями или GPL кодом нам не позволяют наши религиозные убеждения. Все права на изделия принадлежат нам, а вам, вот возьмите 100500$ USD»

а вы отвечаете: «пошли вон, грязные копирасты»

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

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

Примерно так:

static HANDLE stdout;
void print(const char *bla)
{
	unsigned long bw;
	int len=-1;
	while (bla[++len]);
        WriteFile(stdout,bla,len,&bw,0);
}

#ifdef NDEBUG
extern "C" void mainCRTStartup()
#else
void main()
#endif
{
	stdout=GetStdHandle(STD_OUTPUT_HANDLE);

	print("Hello\n");
	ExitProcess(0);
}

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

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

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

Этот пример взят из libv2 (библиотека синтезатора звука), которую использовали демко-писатели. В этой «области» важно иметь компактный исходник, и отказ от стандартной библиотеки сильно помогает сэкономить.

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

nikitos ★★★
()

Кстати, в рамках определений, изложенных в Вашей книге,

что собой представляет JIT-интерпретатор и в какое представление он компилирует код?! ;-)

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

Конечно такая мотивация есть.
Попрбуйте на флешку в 4 Мбайт уместить ядро и userspace с поддержкой IPv6, SSL Web, две разные Web-морды, RIP, WiFi драйвер от броадкома (небезызвестный wl.ko размером в 12 Мбайт), TR-069 клиент и еще кучу всякого хлама.

whoami
()

Почитал немного книгу. Мда... Вот вы много чего сказали на предмет того, что в C++ или Си студенту надо много чего объяснять в первой же программе.

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

Лучше бы сразу что-то показать, во что-то ввести, а потом подробно объяснять.

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

Это я к тому, что получается, что JIT-компиляция «в машинный код»,

например в Java это и не компиляция вовсе, в классическом смысле этого слова, а „кеширование“ определенных участков кода интерпретатором.

Так получается?

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

Не впечатлило

Поглядел внимательнее на этот nand2tetris, не впечатлило ((

Может немного не в тему, но как представленная в курсе ВМ, мне поможет понять,

к примеру, как устроен p-code Visual Basic 6?

Как уже писал ранее, может это и поможет новичку понять основные принципы

архитектуры ПК, но ощущение некоторой искусственности не покидает меня...

А на поиграться в эмуляторе лучше уж откопать такого вот динозавра:

http://www.codenet.ru/progr/os/

Или учебник Зубкова/Юрова по Асму и какой-нить древний линупс/вынь в Виртуалбокс и то

более «реален» сабжа.

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

В Java самая что ни на есть классическая компиляция (довольно примитивная, без оптимизаций) из кода на Java в байткод JVM.

В JVM байткод частично интерпретируется, а частично компилируется в машинный код (полноценная компиляция с оптимизациями и профилированием).

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

Там бред какой-то написан, JIT-компилятор именно так и работает — записывает скомпилированный машинный код в выделенную область памяти, и помечает ее, как запускаемую.

Именно поэтому при использовании того же ядра PaX в Hardened Gentoo, например, запускаемые файлы, использующие прямо или косвенно (через библиотеки) возможности JIT, необходимо помечать, как запускающиеся с отменой MPROTECT. Что включает в себя не только JVM, но и Firefox с его Spidermonkey, и Chromium с V8, и т.д.

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

Что включает в себя не только JVM, но и Firefox с его Spidermonkey, и Chromium с V8, и т.д.

На это я как бы и пытался намекнуть.

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

Хм, тогда я немного не понял к чему написан последний абзац на странице 190?

Встречный вопрос: при чём тут JIT? Там речь о машинном коде.

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

JIT предполагает перевод интерпретируемой программы в другое представление, более удобное для интерпретации; машинный код тут ни при чём от слова «совсем». Кроме того, JIT обычно делается отнюдь не «по одной команде по мере их выполнения», иначе это работало бы как черепаха и никакого бы смысла не имело.

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

машинный код тут ни при чём от слова «совсем».

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

и вся Сеть утверждает, что JIT таки иногда генерирует машкод)))

Вот потому и попросил уточнения.

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

JIT-компилятор именно так и работает — записывает скомпилированный машинный код в выделенную область памяти, и помечает ее, как запускаемую.

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

NB: в обсуждаемом абзаце речь идёт о вполне конкретном и очень популярном мифе, создаваемом школьными учебниками информатики. Этот миф касается «классического» (не смешанного с компиляцией) подхода к интерпретируемому исполнению, когда программа реально анализируется по мере её выполнения. Сейчас такое разве что в bash'е применяется, да и то не факт, но раньше во всяких бейсиках с нумерованными строками вполне себе применялось. А состоит миф в том, что при этом интерпретатор ПЕРЕВОДИТ что-то куда-то.

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

и вся Сеть утверждает, что JIT таки иногда генерирует машкод)))

Господи, ну не пошагово же, правда? Ну вы же не подозреваете создателей таких JITов в столь махровом идиотизме?

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

У вас там по тексту:

На современных машинах и при работе под управлением современных операционных систем так вообще невозможно сделать […]

Что является полнейшим 4.2, так как данная методика является основополагающим принципом работы JIT-компиляторов.

Алсо, странная кодировка, из-за которой невозможно скопировать текст из PDF — минус в карму.

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

Нет, конечно, иначе где ускорение и что такое «шаг».

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

И таких учебников я видел сильно больше одного. Какой там нафиг JIT.

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

Алсо, странная кодировка, из-за которой невозможно скопировать текст из PDF — минус в карму.

Как уже много раз говорилось, это сделано намеренно.

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

А состоит миф в том, что при этом интерпретатор ПЕРЕВОДИТ что-то куда-то.

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

Как-то так, поправьте, если что.

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

Что является полнейшим 4.2, так как данная методика является основополагающим принципом работы JIT-компиляторов.

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

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

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

Как-то так, поправьте, если что.

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

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

Большинство JIT-компиляторов осуществляют перевод в промежуточное представление, а не в машинный код

Тогда почему многие называют это машинными командами?

Если это не так, похоже, что чисто на пальцах это такой «быстрый кеш» промежуточного представления, а не действительный машкод.

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

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

Не думаю, что преувеличиваю. Я, во-первых, имел близкие отношения с вышеупомянутым MPROTECT в своем дистрибутиве именно из-за JIT-библиотек, создающих машинный код, а во-вторых, имел интимные отношения с байткодом JVM в своей научной работе. Причем в последнем случае я видел результат JIT-компиляции для, как минимум, четырех архитектур своими глазами, с помощью соответствующих плагинов.

Опять-таки, исполнение в сегменте данных невозможно, это тоже известный эффект.

Осталось определить, что такое сегмент данных. :)

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

Так, по поводу большинства JITов беру свои слова назад — как оказалось, я здесь неправ. Просто раньше я термин JIT видел в основном в применении к лиспам, там никакого машинного кода не возникает; про перевод JVM'ового байткода в машинный код я тупо не знал.

Но вот про то, что возможно и что невозможно, таки вотЪ: https://en.wikipedia.org/wiki/W^X особенно порадовало то, что там сказано про i386 :)

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

JIT предполагает перевод интерпретируемой программы в другое представление, более удобное для интерпретации; машинный код тут ни при чём от слова «совсем»

Что, простите?! Да нет, JIT уже много лет как. является именно компиляцией в маш.код. /me пошёл анализировать код GNU Lightning чтобы к следующей итерации нашего спора показать это на примере.

Кроме того, JIT обычно делается отнюдь не «по одной команде по мере их выполнения», иначе это работало бы как черепаха и никакого бы смысла не имело.

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

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

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

Хм. Racket, который раньше был PLT Scheme как раз GNU Ligtning и использует, ЕМНИП. В SBCL (и, в след за ним в Factor, хотя это не совсем лисп или даже совсем не лисп) тоже вроде идёт трансляция в машкода, просто рядом сохраняется более высокоуровневое представление чтобы обеспечить возможность самомодификации программы. Если я не прав, пусть меня поправят.

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

Хотя, кому надо, тот разберется ;-)

Осталось на собственной шкуре понять почему творение Степанова с китайцем это плохо)))

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