Возобновление работы над четвёртым томом

Похоже на то, что моё намерение сначала разгрести все прочие дела, и лишь после этого дописывать книгу оказалось чересчур утопическим: дела разгребаться упорно не желают, даже наоборот, их становится больше. Кроме того, меня тут убедили, что всё-таки стоит переиздать "Введение в язык Си++" ещё раз для тех студентов, которым этот адский язык приходится изучать прямо сейчас — они-то четвёртого тома точно не дождутся. Чтобы это исполнить, мне придётся (уже пришлось), как говорят программисты, восстановить контекст работы над книгой, и, пожалуй, я этим воспользуюсь.

В предполагаемой структуре 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 уже рассмотрены и отклонены.

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

Насчёт GUI:

Насчёт GUI: сейчас, возможно, уже поздно, но не случалось ли Вам наткнуться на IUP?

Лично мне очень понравился их простой интерфейс и портируемость между несколькими UNIX-like OS и Windows. Вам может не понравится, что она использует GTK+ в качестве back end на GNU/Linux (либо Motif, если речь идёт о Solaris), а также странная система сборки.

admin аватар

Интерфейс на чистом Си

Интерфейс на чистом Си не отвечает поставленной учебной задаче. Я хочу показать, как ООП удобно использовать для GUI, а не как делать GUI (ибо дурное дело нехитрое).

Алгоритмы и структуры данных

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

admin аватар

Вирт?

Собственно говоря, Вирт чем не устраивает?

Алгоритмы и структуры данных

И действительно; спасибо!

Python vs AVR

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

admin аватар

В мои планы не

В мои планы не входило обучение цифровой схемотехнике — хотя бы потому, что я её не умею сам. А без знания схемотехники и умения, пардон, махать паяльником обучение работе с AVR попросту невозможно: на чём осваивать-то?

Впрочем, есть и другой очень важный момент. Архитектура AVR — собственность Atmel'я, клонов вроде бы не видно. Как можно вообще писать учебник, ориентируясь на чью-то собственность? Atmel не сделал ничего НАСТОЛЬКО хорошего для цивилизации, чтобы его продукцию продвигать в учебниках.

NB: ассемблер есть во втором томе, если кто не заметил. А при работе с AVR'ами мне пока что ассемблер ни разу не потребовался, вполне себе Си хватает.

Стоит ли вообще

Стоит ли вообще связываться с С++? Я смотрю Python довольно популярен и имеет широкое применение. Замечал только, что некоторые программы (написанные на Python) глючат и грузят процессор. Но возможно они написаны так, ведь другие работают нормально.

admin аватар

Python не имеет

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

Какой язык новичку изучать?

Какой язык новичку изучать, на котором можно будет в последствии писать полезные программы с возможным дальнейшим трудоустройством(то бишь язык был актуальным и востребованным)? Да, Pascal хорошо, но хорош только для обучения и только. Я не хочу сказать своей девушку(да, вопрос был задан ею :))мол "Ты изучала и потратила много времени на Pascal, поздравляю тебя, но настало время изучить еще один большой язык, чтобы ты смогла наконец писать код, который будет востребован". Чтобы понять, почему вызван такой мотив - изучать что то актуальное на сей день, обязан предупредить, что девушка очень не дружит с компьютерами и общается с ними на "вы", ее пугают любые ошибки и краши системы, а "починить принтер" или даже "переустановить винду(ни о каких unix-подобных системах речи не идет" для нее это сущий кошмар. Знаю и осознаю, что "программистом" она не станет, ведь не понимает таких вещей как, алгоритмы, структуры данных, операционные системы, сети, компиляторы и так далее. Тут скорее задача состоит в том, чтобы научить основами программирования , чтобы не спугнуть, а наоборот дать понять., что программирование - это скорее весело и от этого можно получать удовольствие. Второй же задачей сделать так, чтобы язык был актуальным и в случае чего, пригодился бы и даже может с рассмотрением карьеры в роли программиста или кодера(кому как удобно), потому что разные ситуации бывают и лишние знания не помешают. В общем, я в замешательстве. Из того, что я знаю(а у меня есть опыт где то с 7 языками) ничего не удовлетворяет условиям :(

  • Java и C# - отпугнут своей громоздкостью и излишним ООП
  • Python - несмотря на то, что я его люблю и часто использую ,
    считаю его вовсе непригодным для обучение, поскольку хоть он и простой и некоторые конструкции вызывают у большинства программистов изумление, однако для новичков эти новшества вызовут, скорее всего, недоумение и непонимание(те же итерируемые циклы for .. in .. вместо классических си-шных for(;;)точно вывываут массу вопросов)
  • Javascript - этот язык вызывает недоумение даже у бывалых программистов...
  • Assembler/C - микроконтроллерами вряд ли смогу зацепить,
    а писать на ассемблере или на си на обычном компьютере, да еше новичку. Скорее испугаю...
  • C++ - прекрасный язык, с него начинал свой путь в программирование . Изучил STL, шаблоны и ООП, однако, дурак,
    забросил и перешел к "модным" языкам, зато переход был безболезненный и очень простой, да и вообще плоды, которое принесло мне обучение на C++, дают о себе знать и по сей день.
    Начав с не самого простого языка и усвоив довольно сложные вещи для новичка, сейчас многие вещи кажутся очень простыми и на усвоение другого языка на базовом уровне занимает порядка 2-3 дней. Однако, несмотря на все преимущество изучения C++ в качестве первого языка, сейчас я понимаю, что этот выбор не самый лучший хотя бы той простой причине, что это трудно и сложно для новичка. Я же держался на своем энтузиазме и большому интересу к компьютерам, меня радовали как указатеди,
    так и ссылки, поскольку понимал и ощущал эту грань между близостью к архитектуре ПК и абстракцией, которая была заложена в язык(Нигде я не встречал такую грань ни в одном язык,
    в остальных же эта абстракция настолько безумна, что некоторые "программисты" вовсе забывают, на чем они пишут. Порою мне кажется, что компьютер для них какая то магия и волшебство". В общем, среди моих знакомых почти никто не осилил не книги, по которым я учился :( Их основной комментарий - сложно. Многие уходят в Python, PHP, Java
  • Swift - хороший язык, правда, очень хороший, но не у всех есть macOS(
  • Objective-C - та же история, что с С++, только попроще
  • Вообще видится, что лучше чем Go ничего нет для новичка(он простой, строго-типизированный и даже присутствуют указатели), но про этот язык я ничего не знаю и поэтому ничего не могу на этот счет сказать
    Что вы думаете по этому поводу? Как провести непосвященного человека в прекрасный мир программирования без излишних трудностей и с минимальным количеством затраченных ресурсов как временных, так и умственных?

    Если человеку

    Если человеку интересно, то:
    -основы физики
    -основы электронники
    -основы цифровой электронники
    -устройство компьютера
    -linux
    -assembler
    И настигнет девушку просветление. Правда компьютер - довольно сложный прибор и ОС тоже.

    admin аватар

    Что ж вы кровожадные-то такие

    Ассемблер в роли первого языка, ух... По-моему, лучше уж сразу кирпичом по голове, гуманнее как-то.

    Вы бы, прежде чем комментировать, всё-таки прочитали тот коммент, на который отвечаете, особенно вот это место:

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

    Ну куда там к чёрту "интересно", какой к дьяволу ассемблер, какое вообще программирование для такого человека?! Что вы к ней пристали, ну вот представьте себе, что вас кто-то учит... э... скажем, вышивать гладью, или супы варить, или, не знаю, модельки машин вытачивать в масштабе 1:43 (это чтобы не было сексистских подозрений), или ещё чему — в общем, представьте себе самое непривлекательное для себя занятие, и что вот именно этому вас решили научить, при этом с уверенностью, что вы получите удовольствие,

    admin аватар

    Оставьте девушку в покое

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

    Ну так вот, поверьте моему не только программистскому, но и изрядному преподавательскому опыту: в лучшем случае вы от неё разочарованно отстанете с этим всем через неделю, а в худшем (и, увы, более вероятном) вы останетесь без девушки. В процессе попыток этого обучения вы попросту разругаетесь.

    Цитирую первый том, "предисловие третье, напутственное", стр.31, второй абзац сверху:

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

    Ключевое слово тут — редкие. То, от чего лично вы можете получать удовольствие (и, признаюсь, я тоже), для нормальных людей — собственно говоря, всех, кто не программирует — это просто пытка, жёсткий и болезненный вынос мозга. Вы когда-нибудь видели людей, которым невозможно объяснить, что такое вложенные циклы? Так вот, я таких вижу постоянно. Более того, если вы попробуете рассказать про вложенные циклы случайно выбранному человеку, вы скорее всего так и не сможете добиться понимания. Это трудно себе представить тому, кто умеет программировать, потому что ни одному из будущих программистов вложенные циклы никто никогда не объяснял. Ни вам, ни мне. Я, когда впервые столкнулся с непониманием вложенных циклов, долго не мог поверить, что так вообще может быть. А оно вот так. Будущий программист в таких объяснениях не нуждается, а любой другой человек никакие объяснения на эту тему не поймёт.

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

    Про безальтернативность Паскаля.

    Здравтсвтуйте, Андрей Викторович!

    Насколько мне известно, в США довольно долгое время существовала традиция, дошкольников и учеников младших классов мучать языком Logo. А первокурсников в MIT и Berkeley ещё совсем недавно мучали Scheme, а учебным пособием был там был SICP. Сейчас, правда, и в MIT и в Berkeley перешли на Python. Да и школьников, насколько я понимаю, им пичкают тоже (уже две книги вышло про программирование на Python для детей). А для дошколят придумали среду "визуального программирования" Scratch.

    Мне просто интересно ваше мнение относительно этой, недавно закончившейся, американской традиции использования Logo и Scheme в качестве первых языков при обучении программированию и CS.

    Спасибо!

    admin аватар

    Logo

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

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

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

    Python не имеет права на существование

    Простите, но меня смутило ваше "Python не имеет права на существование. Как по мне, это вполне действующий и актульный(если не самый актуальный) скриптовый язык, а в связке C/C++ + Python можно творить чудеса. Так почему же не имеет права на существование?

    admin аватар

    Вот именно

    Вот именно потому, что он уже не "скриптовой". Скриптовые нынче — это Tcl или Lua. Ну, или bash, в зависимости от задачи. Python же, будучи изначально именно что скриптовым, претендует на роль языка общего назначения.

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

    Qt

    Как бы он ни был монструозен, но это мейнстрим на долгие года для C++ и GUI. И чтобы книга была актуальна хотя бы лет пять, лучше его взять. ИМХО.

    admin аватар

    Во-первых,

    Во-первых, мейнстрим меня не интересует. Если на то пошло, мейнстрим для IT — это форточки.

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

    Удачи!!!

    Удачи!!!

    admin аватар

    Спасибо :-)

    Спасибо :-)

    А чем плохи

    А чем плохи namespace?

    admin аватар

    Сами по себе

    Сами по себе — ничем. Просто они не настолько нужны, чтобы ради них стоило изменять язык. Следовательно, их не нужно было включать в Си++, как, в общем, и всё, что туда включили после примерно этак 1995 года.

    Предложение по GUI

    Относительно GUI гляньте http://www.fox-toolkit.org стабильную 1.6.x.
    Оно даже на Win9x идёт.
    Спасибо.

    admin аватар

    А оно вообще

    А оно вообще живое? На сайте ощущение такое, что это всё уже лет десять никто не трогал.

    February 20 - FOX

    February 20 - FOX DEVELOPMENT 1.7.64

    January 16 - FOX STABLE 1.6.56

    Вполне живое и кроссплатформенное. И продолжает развиваться, релизы за 20 февраля и за 16 января 2018-го разве не свежие?
    В составе официальных репозиториев разных дистрибутивов.

    Даже FLTK за 2016-й выглядит менее живым..

    admin аватар

    Ну они сами виноваты :)

    На сайте посты не снабжены датами, вот и появляются непонятки. Кликнул на документацию, там oxygen'овская дока от 2004 года, такое наводит на подозрения, согласитесь :)

    В общем, надо будет посмотреть. В любом случае до части про gui ещё с полгода, время есть.

    Согласен, с

    Согласен, с датами у автора косяк, видимо для отпугивания. :)

    Так или иначе в комплекте с тулкитом идёт актуальная документация для устанавливаемой версии.

    Про fox-toolkit на русском крайне мало актуальной информации, будет хорошо если войдёт в четвёртый том вашей книги.
    После можно будет советовать другим, где понятным для большинства языком изложено про FOX.

    А GTK+ вы не

    А GTK+ вы не рассматриваете, т.к. он не на С++?

    admin аватар

    Гм, ну и вопрос

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

    Во-первых, да, оно на чистом Си, а я хотел показать не просто "как делать GUI", а как для этого применять ООП. Но дело даже не в этом. Я с GTK в прошлом сталкивался в роли "подложки" под wxWidgets, и вынесенное мной из этого впечатление довольно однозначно: монстров надо убивать. Собственно говоря, несколько лет назад я попал в ситуацию, когда мне удалось сделать нечто под ненавистной Windoze, но НЕ удалось сделать то же самое под Linux'ом: а именно, я написал некую программу с GUI (да, на wxWidgets), и в силу целого ряда причин мне была нужна статическая самодостаточная исполняемая бинарь. Не потому, что я исходники показывать не хотел — их я как раз сразу же "отпустил на волю" под GPL, а исключительно потому, что предлагать конечному пользователю собирать софтину из исходников может только полный идиот.

    Так вот, под виндой с применением MinGW я этот статический exe-файл получил без малейших трудностей. А под Linux мне это не удалось. Это, замечу, притом, что я программу изначально писал под Linux, а под винду портировал. А почему не удалось? А потому что те недорезанные фашисты, которые создали GTK, принципиально не предусмотрели возможности её статической сборки. При этом доблестные авторы wxWidgets забили болт на wxWidgets/X11 и поддерживали (на тот момент) только wxWidgets/GTK.

    Так что на GTK у меня зуб. Очень большой.

    Спасибо за

    Спасибо за развёрнутый ответ! А то я как раз хотел спросить, чем же плохи wxwidgets.

    admin аватар

    про wxWidgets

    В основном wxWidgets плоха, как ни странно, не этим. Лет десять назад там ещё было всё хорошо, насколько я понимаю, её поддерживали изначальные авторы, которым кое-как удавалось следить за порядком. Потом, видимо, им надоело тратить на библиотеку своё время, и поддержку проекта "перехватили" самоуверенные идиоты, неспособные к самостоятельному мышлению. Там тут же появился STL, возникла "поддержка" Unicode, притом навязчивая, т.е. её приходится учитывать и вызывать какие-то там преобразователи чего-то во что-то даже в программах, принципиально не использующих никакие non-ascii chars, ну и всё в таком духе. Угробить библиотеку гораздо проще, чем создать, увы.

    Настройки просмотра комментариев

    Выберите нужный метод показа комментариев и нажмите "Сохранить установки".