Возобновление работы над четвёртым томомSun Feb 25 11:08:57 2018 UTC Похоже на то, что моё намерение сначала разгрести все прочие дела, и лишь после этого дописывать книгу оказалось чересчур утопическим: дела разгребаться упорно не желают, даже наоборот, их становится больше. Кроме того, меня тут убедили, что всё-таки стоит переиздать "Введение в язык Си++" ещё раз для тех студентов, которым этот адский язык приходится изучать прямо сейчас — они-то четвёртого тома точно не дождутся. Чтобы это исполнить, мне придётся (уже пришлось), как говорят программисты, восстановить контекст работы над книгой, и, пожалуй, я этим воспользуюсь. В предполагаемой структуре IV тома вырисовываются изменения: похоже, сначала там будет отдельной частью рассуждение о парадигмах на примерах тех языков, которые читателю книги уже известны, потом Си++ с ООП и АТД, потом GUI, потом скриптинг (Tcl как таковой и Tcl/Tk), и, наконец, отдельная часть, посвящённая «неразрушающим» парадигмам — Lisp/Scheme, Prolog, возможно, кратко про Рефал, и обязательно про Hope. Отдельное происшествие — на каком примере показывать GUI. Раньше я планировал, что это будет Qt, но попытка познакомиться с этим монстром поближе показала, что... э... ну, монстр — он монстр и есть. То, что там не используют STL, несомненно, следует считать очевидным достоинством, вот только больше я там достоинств не нашёл. Зато, ковыряя эту область, я неожиданно нарвался на FLTK. Не скажу, что я от неё в полном восторге (одно то, как там в идентификаторах расставляют заглавные, гм...), но The following C++ features may be not used in FLTK 1.1.x code: Exceptions Namespaces Standard C++ headers and library Templates static_cast, dynamic_cast, const_cast вот это вот дорогого стоит. Не так часто в наше безумное время встречаются люди, разборчивые в выборе инструментов. В общем, похоже, что часть про GUI будет основана на FLTK. Если кто может предложить что-то лучшее — предлагайте. На всякий случай: wxWidgets и Qt уже рассмотрены и отклонены. И пожелайте мне удачи. Кажется, она мне потребуется. |
пояснениеВы находитесь на официальном сайте Андрея Викторовича Столярова, автора учебных пособий по программированию и информационным технологиям. Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда. Андрей Михайлович Столяров в библиотеке Мошкова |
☞ From Anonymous (unverified) Fri Jun 15 14:22:00 2018 UTC
Насчёт GUI:
Насчёт GUI: сейчас, возможно, уже поздно, но не случалось ли Вам наткнуться на IUP?
Лично мне очень понравился их простой интерфейс и портируемость между несколькими UNIX-like OS и Windows. Вам может не понравится, что она использует GTK+ в качестве back end на GNU/Linux (либо Motif, если речь идёт о Solaris), а также странная система сборки.
ответить
From admin Sat Jun 16 20:30:54 2018 UTC
Интерфейс на чистом Си
Интерфейс на чистом Си не отвечает поставленной учебной задаче. Я хочу показать, как ООП удобно использовать для GUI, а не как делать GUI (ибо дурное дело нехитрое).
ответить
☞ From John (unverified) Mon Mar 12 11:40:00 2018 UTC
Алгоритмы и структуры данных
Андрей В., посоветуйте хорошую книгу по алгоритмам и СД, покрывающую всю базу, но не перегруженную математическими спец. символами и "умными" словами.
ответить
From admin Mon Mar 12 20:47:45 2018 UTC
Вирт?
Собственно говоря, Вирт чем не устраивает?
ответить
From John (unverified) Fri Mar 16 13:02:00 2018 UTC
Алгоритмы и структуры данных
И действительно; спасибо!
ответить
☞ From micky (unverified) Fri Mar 2 20:14:00 2018 UTC
Python vs AVR
Ты считаешь, что начинать обучение программированию с высокоуровневого языка вредно, т.к. нет понимания происходящего. Но, возможно, чтобы заинтересовать школьника, нужно ему показать, как "рисовать окошки и кнопочки". Или лучшим решением будет познакомить его с микроконтроллером. Там ассемблер, электроника и вещи более реальные, чем "окошки".
ответить
From admin Sat Mar 3 13:01:00 2018 UTC
В мои планы не
В мои планы не входило обучение цифровой схемотехнике — хотя бы потому, что я её не умею сам. А без знания схемотехники и умения, пардон, махать паяльником обучение работе с AVR попросту невозможно: на чём осваивать-то?
Впрочем, есть и другой очень важный момент. Архитектура AVR — собственность Atmel'я, клонов вроде бы не видно. Как можно вообще писать учебник, ориентируясь на чью-то собственность? Atmel не сделал ничего НАСТОЛЬКО хорошего для цивилизации, чтобы его продукцию продвигать в учебниках.
NB: ассемблер есть во втором томе, если кто не заметил. А при работе с AVR'ами мне пока что ассемблер ни разу не потребовался, вполне себе Си хватает.
ответить
☞ From micky (unverified) Fri Mar 2 19:27:00 2018 UTC
Стоит ли вообще
Стоит ли вообще связываться с С++? Я смотрю Python довольно популярен и имеет широкое применение. Замечал только, что некоторые программы (написанные на Python) глючат и грузят процессор. Но возможно они написаны так, ведь другие работают нормально.
ответить
From admin Sat Mar 3 12:56:09 2018 UTC
Python не имеет
Python не имеет права на существование, а за обучение этому языку следует расстреливать, примерно как раньше говорили, что следует убивать за обучение бейсику.
ответить
From Anonymous (unverified) Sat Mar 3 15:13:00 2018 UTC
Python не имеет права на существование
Простите, но меня смутило ваше "Python не имеет права на существование. Как по мне, это вполне действующий и актульный(если не самый актуальный) скриптовый язык, а в связке C/C++ + Python можно творить чудеса. Так почему же не имеет права на существование?
ответить
From admin Sat Mar 3 15:28:02 2018 UTC
Вот именно
Вот именно потому, что он уже не "скриптовой". Скриптовые нынче — это Tcl или Lua. Ну, или bash, в зависимости от задачи. Python же, будучи изначально именно что скриптовым, претендует на роль языка общего назначения.
По мне так интерпретируемое исполнение как таковое вообще допустимо только во всяких встраиваемых случаях — для настройки некоего приложения, когда обычные конфиг-файлы уже не справляются. То есть для того самого скриптинга. Если на интерпретируемом языке написана программа больше чем на двести строк — это повод задуматься, где, что и в какой момент пошло не так. Тогда как нынешние питономакаки, ничего кроме своего питона не зная, похоже, реально считают, что на ЭТОМ можно писать что угодно вплоть до операционных систем.
ответить
From Mimus (unverified) Sat Mar 3 19:02:00 2018 UTC
Какой язык новичку изучать?
Какой язык новичку изучать, на котором можно будет в последствии писать полезные программы с возможным дальнейшим трудоустройством(то бишь язык был актуальным и востребованным)? Да, Pascal хорошо, но хорош только для обучения и только. Я не хочу сказать своей девушку(да, вопрос был задан ею :))мол "Ты изучала и потратила много времени на Pascal, поздравляю тебя, но настало время изучить еще один большой язык, чтобы ты смогла наконец писать код, который будет востребован". Чтобы понять, почему вызван такой мотив - изучать что то актуальное на сей день, обязан предупредить, что девушка очень не дружит с компьютерами и общается с ними на "вы", ее пугают любые ошибки и краши системы, а "починить принтер" или даже "переустановить винду(ни о каких unix-подобных системах речи не идет" для нее это сущий кошмар. Знаю и осознаю, что "программистом" она не станет, ведь не понимает таких вещей как, алгоритмы, структуры данных, операционные системы, сети, компиляторы и так далее. Тут скорее задача состоит в том, чтобы научить основами программирования , чтобы не спугнуть, а наоборот дать понять., что программирование - это скорее весело и от этого можно получать удовольствие. Второй же задачей сделать так, чтобы язык был актуальным и в случае чего, пригодился бы и даже может с рассмотрением карьеры в роли программиста или кодера(кому как удобно), потому что разные ситуации бывают и лишние знания не помешают. В общем, я в замешательстве. Из того, что я знаю(а у меня есть опыт где то с 7 языками) ничего не удовлетворяет условиям :(
а писать на ассемблере или на си на обычном компьютере, да еше новичку. Скорее испугаю...
забросил и перешел к "модным" языкам, зато переход был безболезненный и очень простой, да и вообще плоды, которое принесло мне обучение на C++, дают о себе знать и по сей день.
Начав с не самого простого языка и усвоив довольно сложные вещи для новичка, сейчас многие вещи кажутся очень простыми и на усвоение другого языка на базовом уровне занимает порядка 2-3 дней. Однако, несмотря на все преимущество изучения C++ в качестве первого языка, сейчас я понимаю, что этот выбор не самый лучший хотя бы той простой причине, что это трудно и сложно для новичка. Я же держался на своем энтузиазме и большому интересу к компьютерам, меня радовали как указатеди,
так и ссылки, поскольку понимал и ощущал эту грань между близостью к архитектуре ПК и абстракцией, которая была заложена в язык(Нигде я не встречал такую грань ни в одном язык,
в остальных же эта абстракция настолько безумна, что некоторые "программисты" вовсе забывают, на чем они пишут. Порою мне кажется, что компьютер для них какая то магия и волшебство". В общем, среди моих знакомых почти никто не осилил не книги, по которым я учился :( Их основной комментарий - сложно. Многие уходят в Python, PHP, Java
Вообще видится, что лучше чем Go ничего нет для новичка(он простой, строго-типизированный и даже присутствуют указатели), но про этот язык я ничего не знаю и поэтому ничего не могу на этот счет сказать
Что вы думаете по этому поводу? Как провести непосвященного человека в прекрасный мир программирования без излишних трудностей и с минимальным количеством затраченных ресурсов как временных, так и умственных?
ответить
From admin Sun Mar 4 16:16:00 2018 UTC
Оставьте девушку в покое
Вы рехнулись, уважаемый? Мало того, что собираетесь учить программировать человека, который боится компьютеров, так ещё и намерены в неё впихнуть прямо сразу индустриальный язык, притом под виндой, и при этом надеетесь, что ей будет весело?! Что она от этого получит удовольствие?
Ну так вот, поверьте моему не только программистскому, но и изрядному преподавательскому опыту: в лучшем случае вы от неё разочарованно отстанете с этим всем через неделю, а в худшем (и, увы, более вероятном) вы останетесь без девушки. В процессе попыток этого обучения вы попросту разругаетесь.
Цитирую первый том, "предисловие третье, напутственное", стр.31, второй абзац сверху:
Ключевое слово тут — редкие. То, от чего лично вы можете получать удовольствие (и, признаюсь, я тоже), для нормальных людей — собственно говоря, всех, кто не программирует — это просто пытка, жёсткий и болезненный вынос мозга. Вы когда-нибудь видели людей, которым невозможно объяснить, что такое вложенные циклы? Так вот, я таких вижу постоянно. Более того, если вы попробуете рассказать про вложенные циклы случайно выбранному человеку, вы скорее всего так и не сможете добиться понимания. Это трудно себе представить тому, кто умеет программировать, потому что ни одному из будущих программистов вложенные циклы никто никогда не объяснял. Ни вам, ни мне. Я, когда впервые столкнулся с непониманием вложенных циклов, долго не мог поверить, что так вообще может быть. А оно вот так. Будущий программист в таких объяснениях не нуждается, а любой другой человек никакие объяснения на эту тему не поймёт.
Что до всей остальной вашей простыни — не изощряйтесь. Паскалю сейчас нет альтернативы в роли первого языка. Просто нет и всё. А если человек не готов к отказу от "форточек", то ему и Паскаль не поможет. Причины подробно разобраны там же в предисловиях к первому тому, и я должен сказать, что дальнейшая дискуссия на эту тему мне не интересна. Ваш коммент я раскрыл лишь потому, что мне стало несколько стрёмно за вашу девушку.
ответить
From Михаил (unverified) Mon Mar 5 10:28:00 2018 UTC
Про безальтернативность Паскаля.
Здравтсвтуйте, Андрей Викторович!
Насколько мне известно, в США довольно долгое время существовала традиция, дошкольников и учеников младших классов мучать языком Logo. А первокурсников в MIT и Berkeley ещё совсем недавно мучали Scheme, а учебным пособием был там был SICP. Сейчас, правда, и в MIT и в Berkeley перешли на Python. Да и школьников, насколько я понимаю, им пичкают тоже (уже две книги вышло про программирование на Python для детей). А для дошколят придумали среду "визуального программирования" Scratch.
Мне просто интересно ваше мнение относительно этой, недавно закончившейся, американской традиции использования Logo и Scheme в качестве первых языков при обучении программированию и CS.
Спасибо!
ответить
From admin Wed Mar 7 20:05:00 2018 UTC
Logo
Logo — это не о том, с этим не ко мне, а к педагогам и всяким прочим специалистам по детской психологии. К программированию и к обучению программированию Logo никакого отношения не имеет и никогда не имел — примерно так же, как счётные палочки для первоклассников не имеют никакого отношения к математике. Scratch, если я только правильно понял, что он собой представляет — явление из той же области.
Что касается Scheme и SICP, то да, есть такой вариант начала обучения, и вариант, как я неоднократно говорил, в сущности неплохой. По крайней мере, один из высоких барьеров на входе в программирование — рекурсию — этот вариант позволяет преодолеть эффективнее. Второй барьер, имеющий примерно ту же высоту — указатели — остаётся в стороне, но никуда при этом не девается. На чём их осваивать? На Си и тем более Си++ — я продолжаю на этом настаивать — указатели осваивать нельзя, к этим языкам вообще нельзя прикасаться, пока в мозгу не сформировалось понятие указателя и навыки работы с ними.
В общем, мой ответ на этот вопрос остаётся неизменным уже несколько лет: первые три языка — Паскаль, язык ассемблера и Си. К этой последовательности можно что-то добавить с любого конца или вставить в середину, и, замечу, Scheme можно тут вставить куда угодно, хоть первым, хоть вторым, хоть последним, оно не повредит совершенно. А вот убирать ничего из этих трёх нельзя, как и менять их местами.
ответить
From micky (unverified) Tue Mar 13 19:06:00 2018 UTC
Если человеку
Если человеку интересно, то:
-основы физики
-основы электронники
-основы цифровой электронники
-устройство компьютера
-linux
-assembler
И настигнет девушку просветление. Правда компьютер - довольно сложный прибор и ОС тоже.
ответить
From admin Mon Mar 19 18:03:00 2018 UTC
Что ж вы кровожадные-то такие
Ассемблер в роли первого языка, ух... По-моему, лучше уж сразу кирпичом по голове, гуманнее как-то.
Вы бы, прежде чем комментировать, всё-таки прочитали тот коммент, на который отвечаете, особенно вот это место:
Ну куда там к чёрту "интересно", какой к дьяволу ассемблер, какое вообще программирование для такого человека?! Что вы к ней пристали, ну вот представьте себе, что вас кто-то учит... э... скажем, вышивать гладью, или супы варить, или, не знаю, модельки машин вытачивать в масштабе 1:43 (это чтобы не было сексистских подозрений), или ещё чему — в общем, представьте себе самое непривлекательное для себя занятие, и что вот именно этому вас решили научить, при этом с уверенностью, что вы получите удовольствие,
ответить
☞ From legioneroff (unverified) Fri Mar 2 11:58:00 2018 UTC
Qt
Как бы он ни был монструозен, но это мейнстрим на долгие года для C++ и GUI. И чтобы книга была актуальна хотя бы лет пять, лучше его взять. ИМХО.
ответить
From admin Sat Mar 3 12:59:15 2018 UTC
Во-первых,
Во-первых, мейнстрим меня не интересует. Если на то пошло, мейнстрим для IT — это форточки.
Во-вторых, вне зависимости от того, что понимается под словом "актуально", учить плохому не следует. Никого и никогда. Если научить правильному, при этом сделать это правильно, то неправильное обучаемый при необходимости освоит самостоятельно, только при этом он ещё будет точно знать, что оно неправильное. Критическое восприятие происходящего существенно важнее, нежели владение отдельно взятым инструментом, вдобавок принадлежащим коммерческой компании.
ответить
☞ From Алексей (unverified) Wed Feb 28 07:54:00 2018 UTC
Удачи!!!
Удачи!!!
ответить
From admin Wed Feb 28 11:45:29 2018 UTC
Спасибо :-)
Спасибо :-)
ответить
☞ From Anonymous (unverified) Wed Feb 28 07:44:00 2018 UTC
А чем плохи
А чем плохи namespace?
ответить
From admin Wed Feb 28 11:44:50 2018 UTC
Сами по себе
Сами по себе — ничем. Просто они не настолько нужны, чтобы ради них стоило изменять язык. Следовательно, их не нужно было включать в Си++, как, в общем, и всё, что туда включили после примерно этак 1995 года.
ответить
☞ From jamesjames7 (unverified) Mon Feb 26 14:54:00 2018 UTC
Предложение по GUI
Относительно GUI гляньте http://www.fox-toolkit.org стабильную 1.6.x.
Оно даже на Win9x идёт.
Спасибо.
ответить
From admin Wed Feb 28 11:42:21 2018 UTC
А оно вообще
А оно вообще живое? На сайте ощущение такое, что это всё уже лет десять никто не трогал.
ответить
From jamesjames7 (unverified) Wed Feb 28 11:56:00 2018 UTC
February 20 - FOX
February 20 - FOX DEVELOPMENT 1.7.64
January 16 - FOX STABLE 1.6.56
Вполне живое и кроссплатформенное. И продолжает развиваться, релизы за 20 февраля и за 16 января 2018-го разве не свежие?
В составе официальных репозиториев разных дистрибутивов.
Даже FLTK за 2016-й выглядит менее живым..
ответить
From admin Sat Mar 3 13:10:11 2018 UTC
Ну они сами виноваты :)
На сайте посты не снабжены датами, вот и появляются непонятки. Кликнул на документацию, там oxygen'овская дока от 2004 года, такое наводит на подозрения, согласитесь :)
В общем, надо будет посмотреть. В любом случае до части про gui ещё с полгода, время есть.
ответить
From jamesjames7 (unverified) Sat Mar 3 14:25:00 2018 UTC
Согласен, с
Согласен, с датами у автора косяк, видимо для отпугивания. :)
Так или иначе в комплекте с тулкитом идёт актуальная документация для устанавливаемой версии.
Про fox-toolkit на русском крайне мало актуальной информации, будет хорошо если войдёт в четвёртый том вашей книги.
После можно будет советовать другим, где понятным для большинства языком изложено про FOX.
ответить
☞ From Anonymous (unverified) Mon Feb 26 08:31:00 2018 UTC
А GTK+ вы не
А GTK+ вы не рассматриваете, т.к. он не на С++?
ответить
From admin Wed Feb 28 11:42:58 2018 UTC
Гм, ну и вопрос
Должен сказать, что ваш вопрос меня застал несколько врасплох. Ну то есть я даже не подозревал, что такой вопрос у кого-то может возникнуть :-)
Во-первых, да, оно на чистом Си, а я хотел показать не просто "как делать GUI", а как для этого применять ООП. Но дело даже не в этом. Я с GTK в прошлом сталкивался в роли "подложки" под wxWidgets, и вынесенное мной из этого впечатление довольно однозначно: монстров надо убивать. Собственно говоря, несколько лет назад я попал в ситуацию, когда мне удалось сделать нечто под ненавистной Windoze, но НЕ удалось сделать то же самое под Linux'ом: а именно, я написал некую программу с GUI (да, на wxWidgets), и в силу целого ряда причин мне была нужна статическая самодостаточная исполняемая бинарь. Не потому, что я исходники показывать не хотел — их я как раз сразу же "отпустил на волю" под GPL, а исключительно потому, что предлагать конечному пользователю собирать софтину из исходников может только полный идиот.
Так вот, под виндой с применением MinGW я этот статический exe-файл получил без малейших трудностей. А под Linux мне это не удалось. Это, замечу, притом, что я программу изначально писал под Linux, а под винду портировал. А почему не удалось? А потому что те недорезанные фашисты, которые создали GTK, принципиально не предусмотрели возможности её статической сборки. При этом доблестные авторы wxWidgets забили болт на wxWidgets/X11 и поддерживали (на тот момент) только wxWidgets/GTK.
Так что на GTK у меня зуб. Очень большой.
ответить
From aykar (unverified) Tue Mar 20 10:42:00 2018 UTC
Спасибо за
Спасибо за развёрнутый ответ! А то я как раз хотел спросить, чем же плохи wxwidgets.
ответить
From admin Fri Mar 23 08:00:39 2018 UTC
про wxWidgets
В основном wxWidgets плоха, как ни странно, не этим. Лет десять назад там ещё было всё хорошо, насколько я понимаю, её поддерживали изначальные авторы, которым кое-как удавалось следить за порядком. Потом, видимо, им надоело тратить на библиотеку своё время, и поддержку проекта "перехватили" самоуверенные идиоты, неспособные к самостоятельному мышлению. Там тут же появился STL, возникла "поддержка" Unicode, притом навязчивая, т.е. её приходится учитывать и вызывать какие-то там преобразователи чего-то во что-то даже в программах, принципиально не использующих никакие non-ascii chars, ну и всё в таком духе. Угробить библиотеку гораздо проще, чем создать, увы.
ответить