26 февраля 2015

О выборе языка программирования: AutoHotKey и другие

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

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

Печатных книг по AutoHotKey не сужествует, только электронных. Я полностью проработала три:
AutoHotkey Tricks You Ought To Do with Windows
A Beginner's Guide to AutoHotkey
Digging Deeper into AutoHotkey
Все за авторством Jack-а Dunning-а.
(Ещё у меня есть "AutoHotkey Pronto". Но это не книга, а полная фигня, читать невозможно. Не понимаю, как Amazon может такое продавать - они там что, неужели совсем не следят за качеством того, что выкладывают?!)
Т.е. я изучила почти всю англоязычную литературу по теме за исключением "AutoHotkey Applications"

Однако вынуждена констатировать, что и эта моя попытка закончилась ПШИКом. Причин две.

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

Во-вторых, сам язык AutoHotKey слишком заковырист. С одной стороны, в командах слишко много закодированных цифрами и буквами параметров, смысл которых понятен только из документации, все их запомнить невозможно. Таким образом, вместо свободного творчества нужно полуторами глазами постоянно сидеть в документации. С другой стороны, в приведённой выше литературе постоянно встречаются авторские ремарки наподобии того, что он потратил огромное количество времени на написание сложного кода делающего вроде бы как тривиальную вещь, а потом случайно наткнулся на более простую команду. И это пишет человек, который специализируется на данном языке! А какого же тогда новичку! И кроме того, в приводимых примерах огромное количество времени-сил тратится на обработку особых случаев. В своё время я немного программировала на Pascal-е. Задачи С4 из ЕГЭ легко решала. Так что я хорошо знаю, что в Pascal-е многих из подобных проблем не возникает! А ещё сложности с массивами, которые составляются заковыристо и не в явном виде.

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


Таким образом, снова я стою на прежнем перекрёстке. Разве только теперь хорошо знаю, куда ведёт одна из дорог и мне туда не нужно. Вернусь к самому первому абзацу статьи, почему я считаю, что выбор языка важен. Другими словами, какие требования предъявляю к языку.

1. Язык должен быть достаточно простым. (не С++)
2. По нему должны быть хорошие обучающие книги (не AutoHotKey)
3. Язык должен быть практическим (не стоит изучать язык программирования, который создан только для того, чтобы изучать язык программирования. Как то Pascal.)
4. Исхожу из того, что всё, что я изучаю, должно быть как-то связано между собой. Т.е. изучаемый язык должен быть либо переплетаться с другими языками, который мне в перспективе интересны, либо удобен для решения задач по другим изучаемым мною предметам (опять же, не Pascal, который стоит в стороне ото всего.)

Какие пути дальнейшего развития я вижу и как к ним отношусь.
①. Начну с уже упомянутого языка Pascal, чтобы поставить отметку, что пункт рассмотрен. Когда-то я на нём немного программировала. На моём старом сайтике bhlady.narod.ru есть пара программ, которыми я горжусь. И его я использовала на ЕГЭ по информатике. Однако этот язык изначально создан как учебный и не очень хорошо подходит для решения практических задач. Да, можно, но на других языках приложения получаются либо более быстрыми-гибкими, либо составляются значительно быстрее. И Pascal почти никак не контачит с другими интересными мне вещами, он сам по себе где-то в стороне. Поэтому не подходит.

②. Вариант с поднятием из глубин памяти моих навыков по JavaScript. Что автоматически требует предварительного восстановления знаний по HTML и CSS. Когда-то я ходила на курсы по данному языку в сам МГУ. Подход преподавателя был специфическим. Он почти ничего не объяснял, но заставлял работать над практическими вещами, учил нас самих разыскивать нужную информацию. И поскольку мне это было очень интересно и я посвящала JavaScript всё свободное время, то всего за пару месяцев оказалась здорово натасканной. Даже начала составлять внутрибраузерный hex-редактор. :-) Но у приведённого способа обучения есть огромный минус: ты помнишь только пока делаешь. Поскольку не остаётся никаких конспектов, по которым можно быстро восстановить знания, то стоит на несколько месяцев отлучиться - и ты уже не помнишь НИЧЕГО.

Безусловно, на уровне подсознания что-то там осталось и поднять знания проще, чем изучить с нуля. Тем более, что эти знания помогут мне овладеть Drupal-ом, если всё же решу за него взяться. И ещё этот язык используется для обработки информации в Google Docs и FreePlane.  Однако у JavaScript-а есть два огромных минуса. Во-первых, это браузерный язык. Заставить программу на JavaScript-е что-то там делать непосредственно на компьютере возможно, но это связано с большими изворотами. И не всегда такой изворот можно найти. А кроме того, многие команды JavaScript по-разному работают в различных браузерах. Таким образом, JavaScript мне интересен, однако представляется не самым лучшим выбором.

③. Visual Basic. Сам по себе этот язык неповоротлив. Однако очень интересны связанные вещи. Во-первых, его упрощённой разновидностью является VBA, с помощью которого я смогу значительно эффективнее обрабатывать информацию в Excel (я сейчас стараюсь приспособить Excel для решения физико-математических проблемок и хранения информации). Во-вторых, существует язык программирования AutoIt, аналогичный рассмотренному в начале статьи AutoHotKey. Но если AutoHotKey имеет нестандартный и усложнённый синтаксис, то синтаксис AutoIt бейсикоподобен. С обучающей литературой по AutoIt ещё большие проблемы, чем по AutoHotKey, однако если я буду знать Basic, то с AutoIt будет разобраться в разы проще. И ещё замечу, что Visual Basic имеет интегрированную среду разработки (IDE) от M$ аналогичную используемой для C++. С++ в мои планы не входит, поскольку чересчур сложен, но как знать - быть может выпадет счастливая необходимоть заняться и им.

④. Python. Язык, отличающийся скоростью набора кода и созданный на основе принципа "наименьшего удивления", т.е. создатели постарались сделать его максимально интуитивно понятным и простым. Python и C++ хорошо между собой контачат: можно написать программу на Python-е, а потом в случае необходимости выделить наиболее загруженные участки кода в отдельный модуль и переписать его на С++. По Python-у много хорошей обучающей литературы. Значительно больше, чем по Basic-у (что для меня стало удивлением). Python удобен для создания вычислительных программ - главы, посвящённые ему, есть в некоторых математических учебниках. И кроме того, Python очень популярен среди биологов (в частности, занимающихся генной инженерией). А поскольку моя самая главная цель - геронтология, то это огромный плюс языка.


Таким образом, я сейчас рассматриваю три варианта: либо Visual Basic + VBA (последний - применительно к Excel), либо только VBA (игнорируя Visual Basic), либо Python. В июне мне нужно сдавать 4 экзамена ЕГЭ, так что сейчас мне не до программирования. Однако учитывая, сколько времени требуется на получение посылки из Америки, если пересылать её самым дешёвым способом, то мне лучше определиться в ближайшие пару недель и уже сейчас закать книги. Очень бы хотелось поступить в институт, но поступлю-не поступлю, я всё равно буду искать пути связывания знаний и компьютерного решения физико-математических задач, так что удобный язык программирования мне нужен!

27 комментариев:

  1. Из такого выбора только питон учить и остаётся :-/

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

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

    Кстати, о таблицах - посмотри ещё на базы данных и sql. В упрощённом виде это умеет даже офис (ms access/libreoffice base) и если макросы тебе нужны больше для хитрой выборки подходящей инфы, чем для вычислений по формулам - возможно базы данных окажутся удобней.

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

    ОтветитьУдалить
  2. Почему бы не взять современный язык, к примеру Go.

    ОтветитьУдалить
  3. Visual Basic я когда-то попыталась изучить, ещё на заре своего знакомства с компьютером. Но забраковала его, предпочтя Dephi 7. Наверное, всё же не стоит за него браться.

    Склоняюсь к тому, чтобы взять 2-3 хороших полноценных книг по Python-y и 1-2 небольших поверхностно-обзорных по VBA.


    ===
    > Автоит/автохоткей (судя по описанию) это средство автоматизации

    Да, верно, это их основная задача. AutoIt изнутри не смотрела, ничего по нему заявлять не могу. А по AutoHotKey - ИМХО, ошибкой разработчиков было добавлять туда навороченные команды для работы с GUI с кучей зашифрованных параметров. Полноценным языком из-за этого AutoHotKey не стал, но вот разобраться в нём стало намного сложнее.


    ===
    > Почему бы не взять современный язык, к примеру Go.

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

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

    ОтветитьУдалить
    Ответы
    1. За этим языком стоит могучая корпорация Гугл, доля Android превысила 86% на рынке смартфонов и 61% на рынке планшетов. Вот и думай перспективный он или нет. И еще обрати внимание на язык этой же корпорации Dart. Что же касается литературы, то ты же читаешь по английски, значит проблем не будет. Гугл в состоянии обеспечить поддержку и продвижение своих платформ.

      Удалить
    2. > доля Android превысила 86% на рынке смартфонов и 61% на рынке планшетов.

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

      --
      Dart посмотрела. Интернет-язык, аналогичный JavaScript, со всеми отсюда вытекающими ограничениями.

      --
      > Гугл в состоянии обеспечить поддержку и продвижение своих платформ.

      Разработчики создают только базовую документацию в электронном виде, а мне нужна обучающая литература. И на бумаге, поскольку с монитора читать неудобно.

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

      Удалить
  4. Почему ты на Драяконе-то не останавливаешься? Ты ведь писала про него, что типа он важный. Ведь и всё равно какой язык туда вписан. Если он блоксхемный, на нём, может, можно эффективно составлять алгоритмы. Зачем собственно на тексте их писать, когда программируемые абстракции и так далеко от текста и чисел как таковых.?

    ОтветитьУдалить
    Ответы
    1. Дракон выглядел для меня привлекательно только до тех пор, пока я на него тщательно не посмотрела. Всего два редактора, оба неудобные, с самым минимумом возможностей. Насколько помню, один исключительно с русским интерфейсом. Полностью отсутствует обучающая литература за исключением пары интернет-статей и роликов на YouTube на русском. А мне сейчас всё нужно на английском языке - принципиально читаю только на нём: либо выучу, либо разобьюсь.

      Примитивно, медленно, неудобно, нет возможности создания графического интерфейса приложения. Скорость разработки программы со всеми этими перетаскиваниями получается в несколько раз ниже, чем даже в Паскале при использовании быстрого ввода команд (когда печатаешь "wr" и это сразу же преобразуется в "WriteLn").

      Быть может, если Дракон как следует развить, из него и получится что-то достойное, сама идея хорошая. Но он не развивается. В своём нынешнем виде это напоминает любительский недоделанный проект какого-то студента. Возможно, что с его помощью действительно можно решать некоторые УЗКИЕ ИНЖЕНЕРНЫЕ задачи, но мне нужен язык программирования для бытовых и вычислительных нужд, а это другое.

      Удалить
    2. Кстати есть программа Eithermouse (как раз на Autohot-kee) для переключения мышей на правую и левую.

      Удалить
    3. Я долго думала над тем, как создать подобное приложение. И в результате всё же смогла написать. Полный текст программы (на AutoHotKey):

      Run main.cpl
      Send {Space}{Enter}

      :-D)))

      Удалить
    4. Да это я видел. ;] Но так небось окно вспрыгивает. И там всё-таки она сама меняется.

      Удалить
  5. Почему не C#? Он не сложный и вполне практичный. Для бытовых задач вполне подходит. Материалов на русском много в интернете. Среда разработки - Visual Studio, с ней идёт .NET с кучей встроенных библиотек (т.е. у тебя в распоряжении будет множество уже готовых функций, от математики Math до удобных списков List). И ещё - так как язык существует довольно давно, то по нему много более старых книг, из которых можно почерпнуть основы. Если вдруг ты поклонница именно книг, то можно купить б/у, а иногда компьютерные книги и даром отдают.

    ОтветитьУдалить
    Ответы
    1. Книги на русском не читаю принципиально. :-)))

      С# когда-то краешком глаза посмотрела - вникнуть не смогла. То, что он несложен, не соглашусь.

      Удалить
    2. Русскоязычные книги часто содержат неточности или спорные утверждения. Это факт.
      Но русскоязычные ресурсы в целом могут содержать смысловое "золото", которое не найти в других источниках.
      Бывает, что глянул на что-то, и оно непонятно. Так и бросил. А потом спустя несколько лет опять глянул - и оно оказалось вполне удобоваримым. Тем более, если краешком глаза...
      Моё обучение было такое: продумать свою задачу - создать проект - забить в гугл запрос насчёт первого действия программы: например, "вывод текста в консоли c#". Скопировать код. Непонятно, но работает. И так много раз, пока основные приёмы не запомнятся и язык не "почувствуется". После этого начать задавать себе вопросы: а как оно работает? Почему надо писать именно Console.WriteLine("text")? И оказывается, что Console - это "класс", который содержит "методы", то есть функции, работа которых где-то отдельно прописана. И после этого начинаешь изучать написание собственных классов, что в итоге не отличается от кодинга основной части программы.
      То есть, происходит так же, как с изучением человеческого языка. Сначала нарабатывается какой-то словарный запас, причём обязательно на примерах, какие-то простейшие грамматические конструкции, а только потом уже - реальные грамматика и синтаксис с глубинным пониманием законов языка. В данном случае грамматика аналогична "принципам ООП" (объектно-ориентированного программирования). Пока сам не попробовал руками покодить свой первый класс и не столкнулся с десятком мелких проблем по ходу - ни в жизнь не поймёшь это самое ООП.
      Теория очень хорошо усваивается, когда её не просто запихиваешь в себя, а именно в поисках ответа на конкретные вопросы.
      Тем более, среда разработки сама подсказывает возможный функционал и как в нём ковыряться.
      Есть, конечно, сложные вопросы, с которыми без предварительных теоретических познаний не разобраться. Но они появляются очень не сразу и в очень специфических задачах (взаимодействие с БД, там)

      Удалить
    3. хм... Интересный способ изучить язык программирования. Спасибо за столь подробные объяснения. Но я не очень-то умная и с самостоятельным осмыслением, как что работает, у меня всегда были огромные проблемы. Нужно как-нибудь подумать...


      > Русскоязычные книги часто содержат неточности или спорные утверждения.

      Как показывают мои наблюдения, русскоязычные источники часто являются более информативными и удобными, чем англоязычные. А как порой на английский переводят с японского - это кошмар! Я сейчас всегда принципиально предпочитаю читать на английском только для того, чтобы наконец-то добить этот язык. Учить его я устала, пора свободно владеть!


      > Бывает, что глянул на что-то, и оно непонятно. Так и бросил. А потом спустя несколько лет опять глянул - и оно оказалось вполне удобоваримым. Тем более, если краешком глаза...

      Согласна. C# я посмотрела много лет назад и лишь мимоходом. Попробовать можно, но я уже определилась с Python-ом и уже получила из Америки несколько прекрасных учебников. (...но увязла в трясине накопившихся дел...)

      Удалить
    4. Питон - это, наверное, тоже хорошо. Не зря его сейчас так интенсивно все учат. Удачи!

      Удалить
  6. Autohotkey ток для автоматизации ленивых действий. всё. смысла серьёзно учить нет. за пару дней писал любые скрипты... 1С самоє во xD хотя реал если програмировать то с++, c# больше графика физика и геометрия(для разработки игр то что нужно:) ) так же и java штука клёвая для написания приложений. для веб-скриптования js клёвая тема. выбираешь что хочешь и агонь... за 1-3 месяца можно хорошо выучить любой язык(до идеала только практика доводит)

    ОтветитьУдалить
  7. ну я бы все же порекомендовал таки остановиться на С(или С++), он не такой уж и сложный как кажеться на первый взгляд. Я же начинал из самых азо. Начиная с элктроники, закона Ома, Кирхгоффа, основ теории электронных цепей, аналоговой схемотехники, цыфровой схемотехники, микропроцессорной техники, ассемблера и тогда перешел на С. После пройденного С мне показался настолько простым что проще вроде как бы и не придумать. Конечно все что я прошел для программиста не нужно проходить и достаточно в общих чертах понять как работает микропроцессор, двоичную систему(и ее представление в шестнадцатиричной) и азы ассемблера скажем на простеньком процессоре КР580(intel8080). Тогда С просто дается очень просто.
    Ну можно впринцыпе сразу С учить, но порекомендую вот эти каналы:
    сначало "программирование с нуля" это по ассемблеру
    https://www.youtube.com/playlist?list=PLVBQ16nKzRwqD8qPOldSYBUWEjjFOCPXu

    дальше само С
    https://www.youtube.com/user/ANTGPRO/videos

    Ну и "От Pascal до C++"(незнаю будет ли продолжать автор делать уроки, но сейчас там всего 2 урока)
    https://www.youtube.com/playlist?list=PLVBQ16nKzRwqj3IjkqiLQIz-zQ0mgw6dd

    ОтветитьУдалить
    Ответы
    1. Pascal уже почти не помню и поднимать его нет никакого желания.

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

      Я пошла по интернет-пути. Посмею утверждать, что уже разобралась с WordPress, HTML и CSS. Создала небольшой сайтик на заказ (http://holger-thorsten-schubart.tk). Через пару дней начну поднимать в памяти JavaScript, очень охота написать на нём одну программу для работы с моими матрицами для английского языка. Дальше - либо Python (как лёгкий и удобный язык) или Java (поскольку на том написаны большинство программ для работы с MindMap и у меня в этом направлении свои амбиции).

      Удалить
  8. AutoHotkey вроде самое лучшее по автоматизации, я еще не знаю как программировать нормально по нем но примеров в интернете полно и справка нормальная на русском есть. Я много раз пытался по автоматизации что нибудь запустить, и VBS и Windows PowerShell даже думал по CMD, но ничего не получилось только на AutoHotkey по примерам смог скрипты запускать и норм все http://www.script-coding.com/AutoHotkeyTranslation.html эта справка там все описано и тут http://forum.script-coding.com/index.php там примеров вообще много разных все работает.

    ОтветитьУдалить
    Ответы
    1. На AutoHotKey я написала себе несколько наборов команд для облегчения работы с компьютером. И некоторыми из этих команд с тех пор периодически пользуюсь, хорошая штука. Вот только если возникает необходимость что-то подкорректировать - то, о ужас, я понимаю, что уже ничего не понимаю в своём собственном коде. :-D

      Я иногда подумываю взяться за изучение AutoIt в качестве альтернативы. Возможно, функционально он проигрывает AutoHotKey, зато имеет более простой синтаксис - легче выучить и надёжнее будет держаться в голове. Но при моей нынешней занятости это выглядит подобно полёту на Марс. :-D

      Удалить
  9. Выложили бы куда-нибудь книги по AutoHotkey. Совсем в свободном доступе их не получилось найти. Спасибо.

    ОтветитьУдалить
    Ответы
    1. 'AutoHotkey Tricks You Ought To Do with Windows' можно скачать с http://www.computoredge.com/AutoHotkey/Downloads/ , бесплатно выложена автором.
      'A Beginner's Guide to AutoHotkey' и 'Digging Deeper into AutoHotkey' являются коммерческими проектами. Создать информационный продукт стоит изрядных трудов, и если автор просит за это некоторую денежку, то это его законное право и честный заработок. Я не являюсь бело-пушистой (нет у меня, увы, таких доходов, чтобы покупать все нужные курсы и программы, а деревенской неучью быть очень неприятно). Однако если эти книги убегут на торренты, то не от меня. Простите, здесь помочь не могу, свои экземпляры я приобрела.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
  10. Этот комментарий был удален автором.

    ОтветитьУдалить
  11. Надо четко представлять, для чего изучать язык, и насколько он сложен в освоении. Например, под Python - огромное количество библиотек для обработки данных, больше, чем для любого другого языка. Плюс скорость разработки на нем в разы выше, и кода в разы меньше чем на всяких там Си и Си шарпах.

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

    ОтветитьУдалить