LINUX.ORG.RU

Написание свободной(Free as in Freedom) книги-самоучителя по программированию: планы, цели, задачи

 , , ,


17

9

Итак, я решил написать(или как вариант, собрать из кусочков) книгу-самоучилель по программированию, в которой бы не было глупых и нелепых ограничений на распространение. Однако копилефт я все же считаю приемлемым в данном случае. Общественным достоянием это не будет т.к. вполне могут найтись желающие использовать результат в своих проприетарных книгах, а проприетарные книги — плохо. Лицензия самого текста книги-учебника будет или Creative Commons Attribution-ShareAlike (что позволит без каких-либо проблем переиспользовать текст из википедии) или что-то вроде GNU Free Documentation License (без неизменяемых разделов естественно).

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

Теперь к теме того, на кого книга ориентирована, какие начальные знания предполагаются, чему книга будет учить, какой первый ЯП взять и каков будет авторский самысел: С этим моментом я пока что не определился окончательно, и тут есть что обсудить. В частности, я не вижу особого смысла объяснять какие-то базовые понятия комбинаторики, об этом можно доступным языком прочитать из школьных учебников. Системы счисления(СС), перевод из одной СС в другую - вот это еще можно. One's и two's complement представления знаковых чисел — про это тоже можно написать. Если же человек не понимает комбинаторику, он ее быстро поймет на примере кода, который будет достаточно наглядно это показывать, и который всенепременно будет.
Пока что в качестве первого языка я склоняюсь к Си, и тому есть причины. Все прочие распространенные языки (кроме ассемблера, хотя его трудно назвать распространенным) не настолько близки к аппаратному уровню. Про нужность понимания на низком уровне написано тут http://russian.joelonsoftware.com/Articles/BacktoBasics.html https://habrahabr.ru/company/piter/blog/271347/ , не вижу смысла повторяться. Приведу лишь цитату:

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

Притом еще один важный момент: Си будет изучаться параллельно с ассемблером. Если речь идет об изучении ассемблера, необходимо четко зафиксировать то, на какой архитектуре это все происходит и в какой ОС. Так вот, ОС будет GNU/Linux а архитектура x86-64. Будут постоянно проводиться параллели между тем, что из себя представляет код на Си в текстовом виде, и тем, в какой текст на ассемблере его превращает компилятор. В связи с этим, первым делом будет рассказано о goto и конструкции if(условие) goto метка;. Про конструкции вида

if(условие)
{
  что-то_делаем;
}
else
{
  что-то_другое_делаем;
}
Будет рассказано немного позже, притом это будет рассказано и словами, и через написание эквивалентного кода через if(условие) goto метка;. Циклы, for(){} while{}, do{}while(), конструкция switch-case и break continue внутри них будут так же объясняться через все тот же if(условие) goto метка; притом будет делаться явный акцент на том, что намного лучше использовать нормальные циклы, чем лепить всюду этот условный goto. Кроме того, будет так же рассказано про Labels as Values. Почему так важна эта странная штука, if(условие) goto метка;? Потому что она имеет наипрямейшее отношение к тому, как работают ЭВМ, а всякие циклы СКРЫВАЮТ это. Рекурсия в Си будет объясняться только после того, как будет объяснено, что такое стекфрейм и соглашения вызова, будет сказано про оптимизацию хвостовой рекурсии, и о проблеме забивания стека, если такая оптимизация не происходит, притом это будет наглядно показано в ассемблере. Учиться отлаживать код надо будет тоже «с пеленок», притом отлаживать и ассемблер, и всякие там Си. Будет и про асм-вставки в Си, clobber list. В качестве ассемблера будет рассматриваться GAS, а никакой не NASM т.к. GCC умеет выплевывать ассемблер именно в GAS синтаксисе. Насчет выбора Intel или AT&T синтаксиса - тут я склонюсь пожалуй к тому, что надо ЗНАТЬ И УМЕТЬ ПОНИМАТЬ ОБА. Кроме того, GAS давно уже умеет в оба синтаксиса, так что проблем с этим не будет. Единственная проблема с GAS в том, что это однопроходной ассемблер, так что можно освоить и какой-нибудь NASM, YASM.

Первые хеллоуворды будут написаны вообще в особом стиле, без использования printf() и вообще без библиотеки Си; Будут использованы куски на ассемблере, которые делают системный вызов write и read, и с ними можно(нужно) будет линковаться, чтоб что-то вывести на экран. Будет рассказано и про printf естественно, но только когда будет совершенно четко ясно, что такое вообще va_list. Будет куча отсылок к драфту стандарта Си (недрафт почему-то платный). Будет так же рассказано про устройство ОС. В конце скорее всего будет дано задание сделать свою игрушечную ОС так что предполагается что человек к тому моменту должен уже отлично понимать всякие там связные списки, графы, очереди, спинлоки-аллокаторы свои уметь делать на асме при желании. Алгоритмы сортировки, обхода графов, хеш-таблицы, все это будет объяснено на языке Си, и плюсов вообще касаться я не буду.

Насчет графики: работу с протоколом иксов тоже можно будет рассказать, обработку нажатий клавиши. Правда там надо дофига писать про кучу всего, например что есть сокеты, есть AF_LOCAL... Тогда это можно еще и сетевому программированию учить на каких-нибудь беркли-сокетах.

Кроме того, после моей книги предполагается, что человек должен уметь заниматься такими ненужными (в GNU/Linux) на первый взгляд вещами, как крякинг, реверсинг, исправление ошибок в бинарниках, не обладая исходным текстом. Восстановление логики работы программы по дизасму. Ну и программирование в машинных кодах (без ассемблера, одним HEX редактором).

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

cast ASM be_nt_all mister_VA

UPD: Программирование и отладка на C/ASM - Первые программы. Знакомство с C и ассемблером. Компиляция, линковка, код возврата. Вывод текста.

★★★★★

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

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

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

а то у него много крикливых слов, а по делу, какой-то конкретики, маловато.

Да не, у меня как раз-таки всё по делу. Просто ты врёшь, вернее как - по делу как раз-таки нет у тебя, а не у меня - поэтому у тебя есть убогие придирки не по делу.

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

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

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

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

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

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

Ну формально, write это всего лишь обёртка для syscall вызова.
Можно сделать так:

Как и syscall - это обёртка для syscall вызова. Толку с этого? Это не имеет смысла.

typedef int ssize_t;
typedef int size_t;

Смешно.

static inline

Не имеет смысла в твоём случае.

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

А чем вызов libc-шной функции write лучше вызова libc-шной функции printf?

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

95% адептов не отличают «вывод» и «форматированный вывод».

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

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

Имелось в виду, ``чем лучше в контексте объяснения сисколов".

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

А с чего я их должен показывать?

Чтобы был образец книги где твои умозрения подтверждаются. Без образца твои высказывания по большей части оторваны. Просто поверхностные слова. Почти как популизм.
Очевидно что хорошие знания учат пониманию. То есть учат не срисовывать, а рисовать самому. Не дают только готовые ответы, не говорят лишь что 2+2=4 и т. п., а учат пониманию что такое «2» что «+» и этим отвечают на вопрос почему совокупность приводит именно к «4», а не к «22».
Проблема в том что каждый видит путь к этому по-разному. Мне стало интересно какая с твоей точки зрения книга отвечает твоим же рассуждениям. Потому что кукарекать вне контекста о правильной книге очень легко, а вот написать её в определённом контексте бывает весьма трудно. Это как школота что частенько заявляет о том как надо делать игры, делать игры это же так просто легко и понятно, но как начинают довольно быстро сдуваются, ибо даже банальная качественная камера для того же платформера или леталки требует определённых усилий и то простое внезапно оказывается не таким простым, а это ведь только камера.
Я увидел что SZT как раз желает сделать книгу для понимания, но ты просто начал его критиковать в большинстве своём общими словами от которых проку мало ибо альтернативы не предоставляешь да и ещё на личность переходишь, а это самая бестолковая критика.

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

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

Я изобличил конкретную единицу макулатуры

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

Да не, у меня как раз-таки всё по делу. Просто ты врёшь, вернее как - по делу как раз-таки нет у тебя, а не у меня - поэтому у тебя есть убогие придирки не по делу.

А где я вру? То что у тебя много балабольства это я вру? По делу у тебя есть мысли, но они тонут в потоке чванливого балабольства.
Много бессмысленных переходов на личность с попытками всячески унизить собеседника. Не мало кококонинужно без конкретики. Это всё контрпродуктивно.
1. У тебя плохо с самооценкой что тебе требуется принижать окружающих и себя пытаться выставить выше всех?
2. Тебя никто не учил как общаться в нормальном зрелом обществе, а не в подворотне с опустившимися (то что лор можно считать подвортней оставим без обсуждения), и сам к сожалению не научился?
Так-то такие срачи весело конечно бывает почитать и даже поучаствовать, но когда люди созидают такие перепалки мало уместны. Вместо того чтобы решить проблемы ты добавляешь новых или усугбляешь старые.
Со стороны смотрится как ты питушок павлин перья распустил, но это всё искры в глаза, убрать перья и останется мизер, который за перьями-то может быть и не увиден (тебя просто проигнорируют, как похоже и случилось).
Много воды и выставления желаемого за действительное. Какие-то вещи просто притянуты за уши. Ты теряешь пласт людей которые начали с высокоуровневых языков и захотели спуститься пониже, но низкоуровневый мир их отталкивает сложностью, нет опоры.
Ты делишь людей на чёрное и белое, хотя в жизни мир это градиент, да и ещё с цветами.

Короче говоря твоя критика в большинстве своём говно.

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

Ты можешь хотя бы набросать общий список разделов-глав с кратким описанием что в них бы описывал если бы сам писал книгу на эту тему? Это было бы на порядок полезнее. Было бы менее оторвано и может быть какая-то реальная альтернатива бы нашлась в твоих словах.

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

Секретов у тебя никаких нет.

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

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

Лол, обратись к врачу, параноя лечится.

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

Попробую объяснить. Я хочу (и буду) описывать то, как можно написать свой интерпретатор. Первый интерпретатор будет какой-нибудь брейнфакоподобный, потом может быть будет сделано нечто более практичное. Мне надо рассказать, что на этом самом интерпретаторе можно впринципе сделать все то же(в плане алгоритмов) что и на Си, ассемблере, чем угодно. Как это рассказать, не рассказывая про Тьюринг-полноту и МТ?

Нафик вообще сдался это интерпретатор. Для чего он нужен, чтобы поиграться в алгоритмы. Спасибо, я школу уже закончил. Вместо того чтобы учить gnu assem. или Си куда-то в абстрактные дебри лезем. Алгоритмы надо изучать в контексте самого языка.

Вы меня разочеровали.

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

Что такое page tables?

Пользовательский процесс работает в защищенном режиме(с MMU) и он обычно имеет дело не с реальными физическими адресами, а с виртуальными, куски памяти отображаются в виртуальной адресное пространство процесса. Page table связывает адреса виртуальные(доступные процессу) с адресами физическими...
Короче, это долго объяснять. Вот релевантные ссылки, где на мой взгляд достаточно поднятно это описано

https://habrahabr.ru/company/embox/blog/256191/
https://habrahabr.ru/post/211150/
https://en.wikipedia.org/wiki/Page_table
https://en.wikipedia.org/wiki/Virtual_address
http://www.intuit.ru/studies/courses/2192/31/lecture/984
Есть еще механизм подкачки страниц https://en.wikipedia.org/wiki/Paging

Ещё хорошо бы было описать, как отрабатывает команда процессора syscall, что делает ядро, что делает процессор и т.д.

Это надо закапываться в интел мануалы. Не думаю что стоит особо заострять внимание на кривой и костыльной интел архитектуре. Ну понятно что там переход с RING 0 в RING 3 при SYSENTER. Вот например статья про это http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/
И еще http://prodebug.sourceforge.net/pmtut.html
Правда там 32-битное описывают, а не 64-битное.

Один момент хотел бы предложить. Чтобы понять соответствие между кодом C и Ассемблером, полезно рассмотреть команду mov и оператор присваивания.

Конечно все рассмотрим

Как получить список функций в .so или др. файле?

readelf покажет. Например readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | grep puts
https://stackoverflow.com/questions/34732/how-do-i-list-the-symbols-in-a-so-file
https://www.cs.swarthmore.edu/~newhall/unixhelp/compilecycle.html вот еще полезная ссылка

Каков формат .o-файла?

ELF файл это. Если конкретней - ELF 64-bit LSB relocatable. .so файлы это тоже ELF.

Да, кстати. Вот тут происходит загрузка ELF файла. http://lxr.free-electrons.com/source/fs/binfmt_elf.c#L667
Можно попробовать отследить весь путь, начиная от вызова execve() только тут уже надо в ядро отладчиком тыкать.

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

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

Чтоб понимать, как этот интерпретатор устроен и как его можно написать. Можно даже написать компилятор в байткод интерпретатора.

Спасибо, я школу уже закончил.

В школе этому не учит

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

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

Я уже объяснил - постановка задачи не имеет смысла. Это невозможно - подобная книга не может существовать.

Это было бы на порядок полезнее.

Нет - это бесполезно. Я сделал как раз полезное дело, но тот факт, что ты его не осознаёшь( пользу) - не делает его менее полезным, а то, что называешь ты - без понимания - не делает твоё представление полезным.

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

Хотя в целом, возможно на уровни их развития они могут делать то же самое, что и я. Но я не уверен.

Было бы менее оторвано и может быть какая-то реальная альтернатива бы нашлась в твоих словах.

Альтернативу я уже назвал - если человек способен - он способен. Если не способен - не способен.

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

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

Для этого человека нужна не книга, а описание «как работает» - это мануалы. Они итак есть и написаны. Написаны конечно как дерьмо, но адаптировать их никто не будет для 1% аудитории. Этого достаточно.

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

Этим способом человек впитает себя максимум из своих возможностей.

Конкретные методы обучения людей подобных мне - я думаю об этом. Естественно я не хочу, чтобы подобные мне шатались 99% своего времени по мойкам в поисках каких-то жалких кусков информации. Хотя это то же полезно. Я не считаю свой уровень приемлемым для создания чего-то конкретного сейчас.

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

Дурик, я говорю про ноу-хау.

Борьбой с ветряными мельницами? Либо победа над убогими?

Никто тебя в свои конкретные задачи посвящать не собирается.

А зря. Почему? Ты проверишь себя - я проверю себя. Почему у вас какая-то фобия показать/выкатить/посоревноваться в чём-то реальном? Это потратит немного времени, это поможет кому-то из нас. Это подтвердить правильность твоего направления, если оно окажется сильнее.

Лол, обратись к врачу, параноя лечится.

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

Почему бы вам не спасти дурочка от прелести, в которой он находится. Надо быть добрым и помогать убогим. Ты не хочешь?

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

Почему у вас какая-то фобия показать/выкатить/посоревноваться в чём-то реальном?

Потому что все и так соревнуются, на рынке.

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

Ищи свою нишу, выходи на рынок, соревнуйся.

anonymous
()

C и ASM не подходят в качестве первого языка. Они учат КАК делать, а программист, в первую очередь, должен думать ЧТО делать. Я встречал много людей, занимающихся преждевременной оптимизацией, и при этом не способных предложить другую абстракцию для задачи. И у всех них первым языком был C.

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

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

PS тред не читал.

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

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

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

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

C и ASM не подходят в качестве первого языка. Они учат КАК делать, а программист, в первую очередь, должен думать ЧТО делать.
Первый язык должен быть максимально абстрактен.

А программист по-вашему должен понимать, почему массивы лучше по строкам обходить, а не по столбцам? Чем отличается массив из указателей на одномерные массивы от двумерного массива? Где лучше использовать std:vector а где std:list? Как устроен(как можно самому написать) связный список и как устроен «массив» в Си? Что такое указатель и адресная арифметика? Как это можно показать на максимально абстрактном языке?

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

ИМХО, для того, что бы быть способным это все понимать, человек уже должен быть программистом хотя бы немного. Что бы всякие условия, циклы и переменные не воспринимались как магия.

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

А программист по-вашему должен понимать...

Да, должен. Но не программист этого просто не поймет. В обучении нужно спускаться от общего к частному, а не наоборот.

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

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

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

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

Кстати, если кто знает, подскажите.

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

https://scratch.mit.edu/

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

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

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

псевдоязык, с рюшечками и бубенчиками

Псевдоязык может привить интерес к ассемблеру?

Кстати, если кто знает, подскажите.

Глянь тут. Думаю надо так НАЧИНАТЬ.

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

Вообще смысл практики «учить x чтобы потом учить y чтобы потом учить z» идиотичен, когда x,y не используют после обучения, и больше подходит для людей с проблемами восприятия.

Попал в 10-ку. Надо выбирать какой либо один язык. А не шарахаться.

На лоре всегда было много поклонников всякого старого дерьма навроде того же паскаля и дельфи, которые так и не смогли освоить современные технологии.

Хамить не надо. Конкретно «Паскалю» учат потому, что этот язык является классикой структурного программирования. Язык Си тоже такой, но он опасен.

Дельфи — это современный ООП язык. Не надо врать.

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

Вообще смысл практики «учить x чтобы потом учить y чтобы потом учить z» идиотичен, когда x,y не используют после обучения, и больше подходит для людей с проблемами восприятия.

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

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

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

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

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

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

Scheme

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

Твой любимый Кнут недавно книгу проповедей опубликовал. Беги теперь молиться и поститься.

Про Кнута вообще ни слова не было. Обезьянкам постоянно авторитеты повсюду мерещатся.

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

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

Месье дислексик? Я тоже самое в начале и сказал:

«Программирование в отрыве от предметной области - это тупая кодережка. Если руки чешутся что-то кодерить с претензией на искусство - бери кнутовский MMIX и задрачивай сортировки с факториалами сколько влезет».

anonymous
()

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

С сишечкой вопрос спорный. Такие потом по неопытности вместо решения реальных проблем начинают заниматься экономией байтов и т.п. Железки представлять конечно надо, но без фанатизма :)

Попробуй начать оглавление делать, в гуглодоке или гисте. Тезисно воспринимать намного проще.

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

хотя не. Проблема в том, что парсер ссылкок отрубает последнюю точку в URL

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

%>«Программирование в отрыве от предметной области - это тупая кодережка Предметная область программирования - это алгоритмика. Вся остальная математика это практически бесполезный мусор. Алгоритмы, алгоритмы и ещё раз алгоритмы, надо натаскавать себя на решение алгоритмических задач.

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

Программирование в отрыве от предметной области - это тупая кодережка.

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

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

А «язык для обучения» можно проиллюстрировать таким примером: «изучить датский для того чтобы уехать в Нигерию».

Вы остроумны, почти как Евгений Ваганович.

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

Буквами тут, пардонте, будут цикл if, цикл for, оператор присваивания, ссылки и т.п. А то, что в паскале и сях эти буквы пишутся по разному, так переключение между разными синтаксисами языков программирования: (порой на лету) тоже полезное знание, которое чтоит освоить на практике.

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

Буквами тут, пардонте, будут цикл if, цикл for, оператор присваивания, ссылки и т.п. А то, что в паскале и сях эти буквы пишутся по разному, так переключение между разными синтаксисами языков программирования: (порой на лету) тоже полезное знание, которое чтоит освоить на практике.

Если сишника посадить за Компонетный Паскаль никакого на лету не получится.

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

(порой на лету) тоже полезное знание, которое чтоит освоить на практике.

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

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

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

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

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

Вот говносишка как раз никакого такого «понимания» не дает и легко заменяется Паскалем.

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

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

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

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

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

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

Только тебе надо заглянуть на уровень этого корыта.

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

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

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

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

Так и происходит - ваять паскалятскую/фортранную лапшу на сишке - зня for/ int a/ a + b и a[j][k] - это не значит мочь. Точно так же, как сваять свой вебкиллпрожект из соседей по парте и приписать себя к жс"ерам/пхпистам/хмтлщикам и кто там ещё есть - это не делает тебя ими.

А так да - осиливать нечего, а никто не знает и писать не умеет. Не говоря уже о том, что сишник - это не писать ссанины на псевдосишке, а требуемый уровень знания и умения, который позволяет её использовать. И сишка и сложна тем, что уметь на ней делать что-то сложнее setbit() и a + b требует не только умения в саму сишку, но и в понимание, без которого умения-то и не будет. Поэтому эти понятия часто не разделяют, ибо одного без другого не бывает.

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

Есть и другое обучение. И твой «учебный» процесс там не работает.

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

Царь все понимает, но сказать не может. Может уже перечислишь, что входит в это дебильное «понимание» помимо мануала?

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

Если сишника посадить за Компонетный Паскаль никакого на лету не получится.

Непривычная среда, фрэймворк? С языком то какие проблемы?

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

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

Внутри самой сишки - это работа с памятью и пониманием самой памяти. Как и понимание кода - что и как работает в общих чертах. Этого достаточно для иллитных пацанов, но 95% сишников этого не умеют.

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

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

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

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

И тут уже проявляются все основные умения - умение в матчасть. Чёткое понимание всех процессов происходящих на этом уровне. Хотя это уже уровень архитекторов/инженеров. И тут та же самая путаница - инженер должен уметь/понимать всё то же, что понимает птушник-кладчик сараев, но ведь это не значит что он кладчик сараев?

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

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

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

Проблема всех высокоуровневых адептов в том, что они не понимают простой вещи - не они над низом, а они под низом. Низ определяет что-то, а не всё то, что основано на нём.

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

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

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

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

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

Да ничем принципиально Си от Паскаля по выразительной силе не отличаются. Ну да, Си чуть «спортивней». Позволяет немножко (или множко) лихачить, ну и код «льётся с пальцев» быстрей и легче. После Си на Паскале как то нудно писать. Но при чём тут развитие-то? Или вы развитие в стиле hacker's delight имеете в виду?

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