Практические уроки по программированию
96,21
рейтинг
21 января 2015 в 09:47

Разработка → Пора заменить Python как язык для обучения перевод

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

И вот в один прекрасный день студент задаст невинный вопрос: «А как сделать так, чтобы симулятор покера был не в командной строке, а в окне, с кнопкой для выдачи следующих карт?»

Сложно описать сложность этого вопроса. Он заставляет рассматривать различные GUI-инструменты для Python. Оказывается, Гвидо делает то же самое каждые пару лет: задумывается, является ли TkInter правильным выбором для IDLE, стандартного IDE для Python. Но пока это TkInter.

Спустя неделю — новый вопрос: «Как написать простую игру, с графикой?»

Пора снова изучить варианты. Pyglet выглядит многообещающе, но он не обновлялся с июля 2012 года. Есть библиотеки, которые фокусируются на чем-то конкретном и не пытаются делать все подряд, например, SplatGL, но она довольно новая и сложно найти достаточное количество примеров. PyGame вроде как популярен, есть даже книга, так что окей, давайте учиться как использовать PyGame.

Спустя месяц новые вопросы: «Как я могу поделиться своей игрой с другом? Хотя… можно ли закачать эту игру на телефон, чтобы показать всем, и чтобы им не нужно было ничего устанавливать?»

Эмм…

Все эти вопросы заставили меня отказаться от Python как языка для обучения. Конечно, всегда будут те, кто считают правильным только олдскульный путь — файлы со скриптами алгоритмов, которые генерируют монохромный текстовый вывод в терминале — но нужно понимать уровень изоляции, который сопровождает такой выбор. Это зачастую совсем не то, что хотят делать люди. Да, можно найти аддоны практически для всего, но какие из них прошли через пот и ругань серьезных проектов? Какие хорошо поддерживаются сегодня, но будут забыты завтра?

Рост популярности не-десктопов все усложняет, да. Я изучал Erlang чтобы уйти от С и С++ и изменить свой уровень мышления. Я доказал, что могу использовать Erlang и чисто функциональный подход в той сфере, которую все больше всего боятся: игры. А потом вышел Айфон и все. Erlang’у больше нет места.

Именно из-за этих мыслей и опыта теперь я рекомендую JavaScript в качестве языка для обучения. Я знаю, знаю, он причудливый и иногда просто странный, но в целом это нормальный и достаточно современный язык. Самое главное, он работает на беспрецедентно повсеместной кросс-платформенной системе для разметки, типографики и рендера. Хочешь показывать элементы интерфейса, изображения или текст? Используй HTML напрямую. Хочешь графику и анимацию? Используй canvas.

Я ожидаю реакции многих на такое изменение мышления: ужас и страх. Эти реакции не должны быть связаны с недостатками JavaScript. Они должны быть связаны с тем, что я проигнорировал кучу других языков, не взирая на их возможности, системы типизации или синтаксис, просто потому что у них нет нативной поддержки в веб-браузерах.
С какого языка нужно начинать обучение программированию?

Проголосовало 5244 человека. Воздержалось 1566 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Автор: @freetonik James Hague
Hexlet
рейтинг 96,21
Практические уроки по программированию
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Комментарии (280)

  • +19
    Это все верно, только вот canvas/html — это не тоже самое, что десктопный GUI, так что мягко говоря сравнение некорректное.
    • +1
      Ну, это временно.
      • +26
        Ну это спорный вопрос, на самом деле. Я не уверен, что вот-вот браузер заменит нативные приложения (судя по обещаниям разных экспертов, — это уже должно было случиться, но нет).
        • –2
          Технически браузер готов заменить нативные приложения, достаточно сравнить браузерную и нативную версию приложения КонсультантПлюс (это специализированная программа и GUI там достаточно насыщенный), так вот эти версии практически идентичны. Дело за пользователями.
        • 0
          а как же гуглохромомовые приложения?
          • +4
            Пытался пользоваться хэнгаутом (приложением для гуглохрома), честно продержался 2 недели, но окончательно выбесило рандомное закрытие этого приложения. Т.е. вот оно есть, и через какое-то время его нет, а может и есть — как повезет. Никаких ошибок не выкидывало, ничего не сообщало. Вернулся на миранду.
      • 0
        Если пытаться прогнозировать будущее, то лучше всего смотреть на то, что и как делают дети и подростки. Так вот: если посмотреть, что и как они делают, то можно увидеть, что они в качестве основной используют мобильные платформы (подростки — в основном телефоны, а детки помладше — в основном планшеты), а на них — нативные, а не браузерные, приложения. Это наблюдение подтверждается в том числе теми моими знакомыми, которые развивают детские ресурсы — все они сейчас озабочены тем, как их устоявшуюся бизнес-модель перенести в мир нативных приложений на мобильных устройствах.
    • +7
      Для новичка, который просто хочет кнопочки и красивые картинки в своей программе — это тоже самое.
      • 0
        В этом смысле, наверное да
      • +2
        Мало того, для типичного конечного пользователя тоже нет никакой разницы. Нету браузеров, нету нативных приложений или виртуальных машин, есть интерфейс и все. Интерфейс это программа.
        • +4
          Это так только в теории, на практике разница очень даже есть, потому что эти интерфейсы работают по-разному.
          Так было бы, если бы от пользователя была бы полностью скрыта реализация, а на выходе он получал бы идентичные интерфейсы независимо от способа их реализации. Сейчас это мягко говоря не соответствует реальности.
          • +2
            Объясните это моим родителям.

            Это не соответствует объективной технической реальности, но соответствует субъективной реальности подавляющего большинства пользователей компьютера, которые вообще не понимают (и им не нужно понимать) разницы между нативной кнопкой в своей ОС и HTML-input-кнопкой.
            • +2
              Мои родители тоже не различают таких вещей, но я то как раз о другом: эти интерфейсы работают по-разному и это тоже их озадачивает, вы же говорите, что они вообще разницы не заметят.

              Вот моим родителям очень трудно объяснить, что чтобы запустить вот это приложение, нужно открыть браузер, в нем открыть какой-то адрес, а там уже будет приложение, а теперь сравните с запуском ярлыка скайпа с рабочего стола (это все лишь один пример, который сглаживается ярлыками на конкретный сайт и тд, но это не единственное несоответствие).
              • +1
                Не говоря уже о том, что нужно заходить в приложение обязательно через Яндекс :)
              • +7
                Ну да, знакомо. А потом они меня спрашивают «а можно как-то упростить, чтобы не надо было заходить куда-то и вводить что-то». Я думаю и говорю, «ну, да, можно», и добавляю ярлык сайта на рабочий стол. Все, теперь оно магическим образом стало приложением, как рядом лежащий скайп.
                • +3
                  И все равно это приложение в браузере с панелями браузера, вкладками, неродными контролами, плохой отзывчивостью и т.д.

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

                  Я вообще не думаю, что они когда-то сравняются, потому что это просто такая красивая абстракция и щепотка маркетинга про общие интерфейсы, на практике они всегда отличаются.
                  • +2
                    Есть такие штуки — Сhrome OS и FireFox OS… Ознакомьтесь на досуге ;)
                    • 0
                      Я б, к примеру, давно пересадил родителей на ChromeOS, если бы не скайп. Не рассказывайте про hangouts, потому что проблема не в том, чтоб посадить своих родителей на hangouts, а проблема посадить весь список контактов родителей 50х годов рождения.
                  • 0
                    ChromeOS, PhoneGap, Node-Webkit, Pokki,…
                    Грань между приложением и приложением в браузере уже давно стёрта. Так что JS вполне себе универсальный язык.
                    • +2
                      Они есть, но во-первых, они далеко не массовые (как Chrome/Firefox OS) пока, а во-вторых специализированные (например мобильные, а там и приложения и их UX попроще, чем на десктопе). И я не верю, что они вытеснят все остальное в обозримом будущем (ну может кроме мобильных устройств и смарт-тв).
                      На десктопе я как-то не наблюдаю победы ChromeOS и Node-Webkit
                    • +1
                      универсальный? нет. Он язык для UI в лучшем случае. Конечно, всякие гении вроде Белларда пишут на нём эмуляторы компа, но вам, мне и вон тому парню это не под силу.
                      • +1
                        Конечно, драйверы, микроконтроллеры, ресурсоёмкие приложения — это не для него.

                        Но конкретно у нас JS используется не только для UI, но и в системах генерации отчётов, билда, тестирования и в качестве скриптового языка для написания расширений. В то время как основное приложение написано на C++.

                        Ну а для обычных пользовательских приложений под десктоп и мобильные платформы JS вполне хватит.
                  • +1
                    Аналогичная история с родителями. Даже если браузер скрыть и оставить от него только рамку окна — всё равно родителей вводят в ступор абсолютно разные интерфейсы ВКонтакта, Одноклассников и Фейсбука. Разные меню, разные цвета, разные расположения элементов и совершенно не похожий UX. Они продолжают рассматривать сайты как программы и наверное это даже рациональней, чем организовывать «матрёшку» десктоп-браузер-вебприложение. Но даже такое «схлопывание» слоёв абстракций меж сайтом и десктопом не помогает им не разбить лоб об очередной кудрявый интерфейс очередной вебстраницы.
                    • 0
                      В точку. Для пожилых людей интерфейсы не интуитивны, им нужно запоминать «куда там я нажимал чтобы сделать то и это». Когда интерфейс стандартизирован и однообразен – иконки, расположение, внешний вид, то запоминается это все гораздо лучше.
                  • 0
                    на OS X: берем Fluid.app и завертываем любой сайт и будет все вплоть до иконки, своего отдельного окна (без элементов управления браузера) и так далее. Под Windows должно что-то аналогичное быть
                  • 0
                    Про Chrome Apps слышали?
                    Открывается как новое десктопное приложение.
                    Да, под капотом хром, но кто же это видит?

                    В таком варианте даже принципиально мало чем отличается от работы .NET
                    Даже доступ к COM портам есть.
                • +1
                  Я повесил ярлык на tv.yandex.ru. Пользователь открывает там какую-то вкладку типа «Сегодня», а на следующий день жалуется что «там» почему-то программа за вчера. На запоминание необходимости перезагрузки страницы ушло время, а объяснять сам принцип что за перезагрузка и зачем это нужно не получилось.

                  Я понимаю что можно сделать так, чтобы вкладка «сегодня» обновлялась сама. Но просто как пример в тему. История реальная.
                  • 0
                    это действительно недаработка приложения. почему то уверен, что такую же ошибку часто совершали в аналогичных приложениях для десктопа.
  • +15
    Если после прохождения курса обучения, человек задает такие вопросы, вместо того, чтобы погуглить (а это гуглится за 5 секунд), то либо этому человеку не подходит программирование, либо с курсами что-то не так. А как javascript решает эти вопросы, что вы приводите в пример?
    • +15
      Когда есть выбор между «спросить наставника» и «погуглить», имхо, совершенно нормально выбирать первое.

      >А как javascript решает эти вопросы, что вы приводите в пример?
      «а это гуглится за 5 секунд»

      :)

      извините, не выдержал

      И да, это перевод, а не моя статья.
      • +1
        да, перевод то я и не заметил :)
        • +15
          Это одна из самых неочевидных штук в интерфейсе Хабра.
    • +1
      В корне не верный момент — а как сделать то или другое.
      Язык «для обучения» — не должен быть супер кросбраузерым, уметь все и запускаться/переносится всюду.
      Ну то есть — это все нужно, но в разумных пределах.

      Мне JavaScript нравится как для старта, но уж больно он ограниченный и имеет сильно много ньюансов. С другой стороны, на JS мало что можно сделать начинающему полезного и запускать через браузер.

      Python как по мне лучше — более универсальный. Базово нужно обучать основам программирования + простенький ГУИ для вывода окошек.
      Если человеку этого мало, тогда это уже не базовый курс, а узконаправленный! Хочет геймдев — супер, дополнительные занятия или гугл.

      Мне еще не понятно — использовать только 1 язык. Я бы рекомендовал учить 2-3 языка, каждый базово, но если у человека есть мозг он начинает эти языки сравнивать и понимать что не хватает одному, а в чем прелесть другого.
  • –11
    PHP
    • +20
      Полностью согласен
      image
    • +11
      Говорю как пхпшник со стажем: НЕЕЕЕЕЕЕЕЕЕТ!
      Для обучения — хуже языка чем php найти сложно (среди широко используемых) т.к. php не учит многим полезным вещам, например типизации, правильной работы с классами, понимание как работать с памятью и что это за память вообще такая (хотя бы в общем виде) и т.д. Он слишком упрощен для этого. Тем, кто обучался на основе php будет невероятно сложно освоить типизированные языки, про работу с памятью я вообще молчу. Его нельзя использовать как основной язык обучения. Хотя я вообще считаю плохой практикой использовать в обучении только 1 язык. Основам программирования нужно обучать на строго типизированном языке — это будет наиболее полезно (С, С++, С#, Java и т.п.). Это даст понимание происходящего. Далее лучше всего познакомить с нетипизированным/слаботипизированным языком (php, js и т.п.). На таких языках проще реализовывать некоторые алгоритмы, где важнее понимание алгоритма, чем заморочки с его реализацией, хотя это спорный момент.

      Немного статистики из личных наблюдений:
      Многие из тех, кто начинал с php становился говнокодером и ничего сложного им не доверяли.
      Большинство из тех кого я знаю, и кто начинал с C/C++, но по каким-то причинам работает с php, говнокодерами почему-то не стали и преуспели в программировании в целом.
      • +5
        Полностью с Вами согласен. Только хотелось бы добавить что все эти аргументы актуальны и против JS. Так что ему тоже, как первому языку можно сказать «НЕЕЕЕЕЕЕЕЕЕТ!»
        • +11
          Я бы сказал что js еще больше «НЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕТ!» т.к. там ад не только для новичков. Без понимания что такое «ссылка», «событие», «closure», асинхронность в него лучше не лезть. А возможность в именованной функции переписать «саму себя» (хотя по факту — это что-то типа переопределения) может вызвать взрыв мозга =)
          Как сказал один знакомый — «JavaScript — гениальный язык. Имея минимальное количество команд и возможностей, из них можно сделать практически все, что угодно». А теперь он есть и для серверной части…

          PS: вспомнилась задача «выстрелить в ногу»:
          JavaScript: Вы прочитали 3 книги, изучили 10 наглядных примеров, разработали потрясающий интерфейс и теперь, кажется, готовы к тому, чтобы выстрелить себе в ногу. Потом в процессе стрельбы обнаруживаете, что пули имеют радиус действия, равный длине ствола, и испаряются прямо на выходе.
          node.JS: Вы начинаете асинхронно стрелять из асинхронных рук в асинхронные ноги, асинхронно не попадаете и запутываетесь в этой каше.
          • 0
            Почему взрыв мозга? Такая возможность есть в любом языке, где «всё объект» и «переменные глобальны по-умолчанию». Такое можно и в Python сделать, только вам придётся явно указать в функции foo, что foo — глобальная переменная. Превозмогая трудности (в основном связанные не с тем, как это сделать, а с тем, как спрятать реализацию), можно даже и в C устроить (только лучше не нужно — как минимум, получите отключение ряда оптимизаций).

            Главное здесь понимать, что определение функции есть лишь синтаксический сахар для присваивания. И никакого взрыва мозга не будет. Хотя я бы всё же не сказал, что язык с таким количеством разных тонкостей подходит для обучения. В Python 3 такого меньше (в Python 2 вас поприветствуют новые и старые классы и неявные преобразования строк).
      • 0
        Лично мое мнение, что нужно начинать с простого, чтобы понять логику программирования вообще. Я начинал учить многие языки программирования (Pascal, Delphi, ASSEMBLER, VIsualBasic, C++ и даже Python) и ни один язык программирования не смог меня «научить» программировать, но когда я взялся за PHP — все изменилось вкорне. Pascal — очень сложен в начинаниях куча всего, что нужно запомнить и учитывать и это вначале убивает желание учиться программировать и заканчивается тупым копированием кода. Не надо учить все и сразу — нужно научиться просто программировать, т.е. заставлять программу исполнять задуманное, а потом думать о сложном. Теперь я могу без особых усилий (зная синтаксис) немного писать и на других языках. Потом я долго (ну не то чтобы очень долго) мучался над изучением JavaScript, логика которого меня убивает до сих пор (и DOM). В суме я, приблизительно, понимаю как программировать на Delphi. Если вспомнить о MySQL, который научил понимать разные типы данных, то я просто против того, чтобы использовать Pascal как язык для обучения, который меня научил ровно ничему. (Чему и почему я научился в PHP — нужно писать не комментарий, а статью, поэтому кратко, возможно, непонятно).
    • +3
      Упоминание PHP прогрнозируемо вызывает ярость толпы разработчиков. Но если подумать, ничего плохого в предложении нет. Важно понять, что имеется ввиду под обучением программированию? Если речь идет о системном или низкоуровневом программировании, то да, не типизированные языки не подходят. А если вы хотите научиться построению алгоритмов, то PHP, Basic, Perl и т.д. — «то, что доктор прописал».

      Помню свою школу и вступительный экзамен в универ по информатике — там только про алгоритмы и шла речь. Вопросов про управление памятью не было и в помине. Я писал на Pascal, но все эти программы с равной степенью успешности мог бы писать и на Бейсике, разницы не было бы никакой.

      Когда же человек, получив начальные знания, продолжает интересоваться программированием, то если будет нужно, он уже сам и с низкоуровневым ассемблером, и с высокоуровневыми языками познакомится.
  • +12
    Go
  • +2
    По опыту могу сказать что Go очень хорош для обучения — приучает к хорошему стилю и не перегружен конструкциями.
    • –1
      «You want to deal with errors? Here's an if statement. Data structures? Here's a struct. Generics? Here's another if statement.»
      • 0
        Если очень хочется дженериков, кодогенерируйте, это официально одобренный путь…
      • 0
        Речь ведь о языке для обучения, дженерики это не первоочередная вещь. Обработка ошибок в таком стиле на практике оказывается довольно удобной. И с ООП в Go все в порядке (правда оно отличается от Java): habrahabr.ru/post/225907/
  • +5
    Pascal (или Ruby)
    • +19
      Забавно видеть рядом один из самых строгих и дубовых языков с одним из самых мягких и напичканных синтаксическим сахаром.
      • +2
        Pascal и Ruby это почти как C и Python.
        • +5
          Не согласен, разница больше. Я писал на всех четырёх в разное время и на мой взгляд Pascal строже и чуть проще, чем C. а Ruby мягче и более заковыристый, чем Python.
          Если Pascal как учебный я допускаю, то Ruby нет.
    • +10
      Можно первый, но не второй, а то слипнется.
    • +7
      Я бы уточнил, что с FreePascal и не забыть поставить Lazarus. На начальном этапе не надо забивать себе голову построением GUI. Delphi принято пинать за «несерьезность», якобы вытекающую из того факта, что программу «рисуют», но для новичка это будет огромным плюсом. Вот когда освоит базовые конструкции, вот тогда и будет решать — хочет ли он стать системщиком или ему больше по душе что-то другое.

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

      Ползание также является профилактикой проблем с чтением и письмом. Если недостаточно развита координация движений, работа каждого полушария в отдельности и межполушарное взаимодействие, у младшего школьника возможны проблемы при письме. У него будет грязь в тетрадях, плохой почерк. Многие дети, имеющие дислексию и дисграфию, пропустили стадию ползания. Если ребёнок не осваивает этот важный этап физического развития, будет пропущен и важный этап развития мозга. Если развитие ребёнка происходило с искажением, пространственные связи им были освоены не в полной мере, то и восприятие пространства будет искажено.
      источник
      • +1
        Плюсую за GUI. Сам еще будучи школьником был очень рад тому факту что можно мышкой натыкать компонентов, написать для них какой-то простейший код и скомпилировать нормальный рабочий exe.
  • +54
    Как неоднокрано справедливо замечали, 95% современных программистов не знают, кто такой Donald Knuth. Кто такой Niklaus Wirth они, вероятно, тоже не знают. А этот последний вполне намеренно и совершенно осознанно придумал язык специально для того, чтобы учить программированию.

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

    Это во первых, а во вторых — люди разбалованы гуями. Все сразу хотят написать графическое приложение. Так дело не пойдёт — это примерно как в музыке сыграть сразу presto agitato (третью часть) из сонаты Бетховена №14 «Mondscheinsonate», не научившись перед этим сносно играть собачий вальс, ну и «Für Elise» того же Бетховена. Так не бывает.

    Пока человек сам не изобрёл event-driven подход, он до подобных приложений не дорос, а без этого подхода графический интерфейс не создашь. Так что, собственно, пусть кто угодно хочет красивые картинки на экране, но пока не готов, никаких картинок. А когда будет готов, он, что характерно, мгновенно сам придумает, как их в принципе можно было бы рисовать, а тут можно и рассказать, как это сделано в реальности.
    В моём случае было так: в десятом классе я додумался сделать цикл repeat ch:=readkey; длинный-case; until doexit; где в длинном case в случае нажатия клавиши esc собственно устанавливалась переменная doexit; на другие клавиши оно реагировало по-разному, меняя состояние программы, а потом, если надо, рисовало что-то на экране (в текстовом режиме). Надо ли говорить, что сменить текстовый режим графическим в этом случае было делом одного дня даже для десятиклассника? Остов event-driven уже есть, а какой интерфейс к нему приделать — вопрос второй.

    В третьих, есть несколько «скриптовых» интерпретируемых языков, которые гораздо лучше подходят для обучения, чем javascript (а положа руку на сердце, и для программирования тоже). Например, Tcl лучше уже потому, все правила работы интерпретатора помещаются на половине страницы A4, и ещё двадцать страниц — встроенные функции. Кстати говоря, и event-driven в нём писать, работать с сетью, с графикой tk (который сейчас стал очень неплох, с появлением ttk) очень просто, реально, кто не верит — откройте туториал на activestate и попробуйте. Кстати, там же есть и туториал для Python/Tk. Пайтон тут хуже тикля, потому, что event-driven подход в нём реализован ощутимо хуже.

    А предлагаемый автором javascript погряз в куче легаси, неочевидных и сложных правил, даже базовая спецификация языка занимает добрый такой том, и то же самое касается html, связку с которым видимо предлагает автор. Нет, с этого этого точно обучение начинать нельзя.
    • –7
      Go еще более строгий (строже пожалуй некуда), сразу есть все что нужно для написания Hello word, первого веб сервера и т.п.
      Единый стандарт форматирования кода, встроенная утилита для автоматического приведения к этому стандарту. Поддержка большого кол-ва платформ, а также самодостаточность бинарника (не надо будет доставлять vcl и rtl например)
      Ну и начав с простого всегда можно перейти к написанию чего и посложнее
      • +6
        Веб-сервер сразу — это плохо. Это event-driven, до которого ещё дорасти надо.
        • –2
          Ну так первым в моем списке hello word идет…
          А event-driven для web сервера это libevent, в go это это выглядит по другому — golang.org/pkg/net/http/#example_ServeMux_Handle
          • 0
            Как ЭТО помогает анализировать задачу и выстраивать структуры данных и алгоритмы для работы с ними?
            • –1
              а я где-то написал что это помогает? я же не брейнфак предложил, логично же что структуры данных есть
              из всего сообщения вы почему то выделили только веб сервер, хотя это всего лишь перечисление

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

              зачем начинать изучение с языка который заведомо ограничен в своем применении? когда возможно начать с азов (сложить два числа), а те кто заинтересуются могут пойти дальше (пример про веб сервер)
              • 0
                Верно, паскаль — не самый высокоуровневый язык. Все скриптовые языки, похоже, выше уровнем. Но вот насчёт ограниченности вы погорячились — на паскале можно и веб-приложение написать, то, что это сейчас не популярно, вовсе не значит, что это невозможно. Другое дело, что это может быть не так удобно, как с другим языком — ну так универсального инструмента не бывает, для других задач, возможно, стоит освоить другие инструменты.

                Я по-прежнему утверждаю, что так же просто и удобно писать любые tcp-серверы, как это сделано на tcl, нет ни в одном другом языке (кроме тех случаев, когда это передрали с tcl). Но есть случаи, когда не простота написания tcp-сервера стоит во главе угла.
                • 0
                  «ограничен в применении» — тут не только чисто технические ограничения, так-то в паскале (delphi точно) можно и ассемблерные вставки делать, тут я имел ввиду комбинацию того насколько это легко делать технически, с тем насколько это вообще оправдано, то есть вот написали вы веб сервер на паскале, дальше что делать? на работе то скорее всего попросят писать на C/Python/Ruby/Php. Может лучше сразу писать на языке который имеет боевое применение?!
                  С tcl сравнить не могу — я на нем не писал.
                  • 0
                    ну, зачем учиться считать в столбик — на работе всё равно будет ексель, не лучше ли сразу учиться складывать в нём?
                    • –2
                      это некорректное сравнение и go и pascal это языки программирования.

                      какие есть плюсы у Pascal в сравнении например с Go кроме того что его придумал Niklaus Wirth для целей обучения?
                      Зачем тогда учить чему-то чтобы потом переучивать?
    • +8
      Поддержу идею. Не на станке же с ЧПУ столярному делу учится. Лично начинал с Pascal, потом Си, спустя время еще открыл для себя Lisp и считаю что именно с таких вещей надо начинать. А Python вот сегодня всем нравится, завтра вот всем станет симпатичен Go (мне вот нравится).
    • 0
      А нас помню сразу на асме на первом курсе заставляли графику рисовать. Но это да, не очень полезно было, поскольку я даже сортировок то еще не знал, а тут разноцветные квадратики, кружочки.
    • 0
      Согласен, tcl очень прост для понимания. После него все остальные языки выглядят как то логичнее: shell, lisp, c. Чего, кстати, нельзя понять из других языков(кроме js), так это не единственность возможной реализации ООП.

      Но, думаю, обучение лучше начинать с js. Причем, консоли браузера, редактируя готовую страницу и написания букмарклетов(своеобразная смесь императивного подхода и WYSIWYG). Для обучения строгим типам вполне подойдет es6.

      первая программа:
      console.log('hello world')

      наглядная демонстрация:
      var el = document.querySelector(".post_title")
      el.style.color='red'

      онлайн инструменты, в которых можно сразу видеть результат, и есть много готовых примеров на все случаи:
      jsfiddler, codepen, repl, jsbin или tutorialspoint.com

      Если DOM не нужен: можно и без него:
      var name=prompt('Введите свое имя', 'аноним')
      alert('Вас зовут '+name)

      А для совсем маленьких есть visual programming: например, Blockly
    • +1
      Все это очень верно, но одно не понимаю, какой смысл изучать язык на котором ты не будешь писать? Это же трата времени. Питон или джава, например, на них можно что-то реальное написать, а на паскале? Можно научиться писать учебные программы или (упаси господь) перейти с него на Дельфи (да простят меня адепты сего продукта). Как мне кажется, почти любые современные языки общего назначения отлично подходят для обучения, главное найти хорошую цель, чтобы мотивировать обучающегося реальным результатами. А с указателями можно и по ходу при необходимости разобраться, если она вообще возникнет.
    • 0
      Всё тот же Вирт придумал Оберон — очень компактный и красивый языкан (ну да, на вкус и цвет). Одно время его даже пытались продвинуть в массы авторы статей журнала «Мир ПК» и некая «Информатика-21» в качестве того самого «первого языка» для школ. Но, по всей видимости, не пошло, а жаль.
  • 0
    Начинать обучение программированию надо на простом, замкнутом и самодостаточном программно-аппаратном комплексе, например, «Электроника МК-52» или «Sinclair ZX-81». Когда ученик освоил программирование в машинных кодах с ассемблированием при помощи бумаги и ручки, можно переходить к Ассемблеру. Почему, кстати, этого языка нет в опросе? Начали бы с машинных кодов − не возникало бы дурацких вопросов типа «Как сделать окно с кнопкой». Ученики бы уже знали, что библиотеки и фреймворки не на деревьях растут.
    • +1
      Поддерживаю, начинать надо с понимания работы компьютера на низком уровне, и лучше чем ассемблер в этом ничто не поможет. Лично видел много примеров, когда люди банальные указатели в C не могли понять, пока до ассемблера не спускались и о C ABI не узнали.
      • +3
        Лично видел много примеров, когда люди банальные указатели в C не могли понять, пока до ассемблера не спускались и о C ABI не узнали.
        Переменная — бумажка, на которой написано значение, лежащая в пронумерованном ящике (память состоит из таких ящиков).
        Указатель — бумажка на которой написан номер другого ящика.
        Разыменовать указатель — прочитать номер нужного ящика, найти его и прочитать, что написано на бумажке в нем.
        Не видел ни одного человека, который такое объяснение не осилил. В крайнем случае картинку рисовали.
  • –1
    Довольно странная статья. Наверное посыл должен быть такой — кем вы хотите стать через N лет, тот язык и используйте, не забывая читать классику. Тот же Кнут в своем трехтомнике использует искусственный язык, который хорошо подходит для описания алгоритмов и структур данных.
  • +3
    ИМХО не так важен язык с которого начинать, как важны правильные основы которые будут даны новичку. И в любом случае равно или поздно придётся учить второй язык. И чем лучше даны основы тем проще перейти на другой язык. А уж каким был первый дело второстепенное.
    • 0
      Сначала происходит обучению программированию на языке, а потом с использованием языка.
  • 0
    Я один думаю, что начинать обучение программированию надо с ассемблера? Мегатонны данных-пустышек, виртуальные машины для кросс-платформенного кода, все это приводит к тому, что огромная мощность современных процессоров занимается тем, что напрасно греет воздух. Мы забыли как работает процессор, память, мы разучились экономить каждый бит данных.
    • +13
      Программированию — нет. Кодированию — возможно. Программированию надо обучать с рисования схем, а не писания кода.

      Кроме того, ассемблеров множество. И популярный x86 — это тот ещё ужас (оригинал ничего так, но он же оброс «расширениями» за свои почти сорок лет).

      В ассемблере печаль заключается в том, что он привязывает к архитектуре — если не сам «язык», то подход к программированию. В одних системах имеющиеся 32 регистра — это первые 32 слова в ОЗУ и доступны по адресам 0x0, 0x4 и т. д.; в других — два адресных пространства, одно — для портов ввода-вывода, другое — ОЗУ. Пробовали ли вы писать для современных ОС на ассемблере? Попробуйте, это увлекательно, чесслово.
      • +1
        Не важно какой вы используете ассемблер и на какой архитектуре, он позволяет четко мыслить, а также понимать, что происходит в процессоре, памяти, регистрах. Ассемблер даст хороший пинок под зад, для понимания любого из языков программирования. Кстати, рисование схем и ассемблер это практически симбиоз, там одно без другого почти невозможно.
        Честно, пробовал. Увлекательно, но я начинал с ассемблера для К580ИК80А (i8080). Был такой комп РК-86
        • +5
          понимать, что происходит в процессоре, памяти, регистрах

          в КОНКРЕТНОМ процессоре, с КОНКРЕТНОЙ памятью.

          Ибо программируете вы пентиум… думаете, что знаете, что происходит с памятью и в регистрах? Ни хрена. Он операции сам по своему желанию местами меняет, регистры переименовывает, память кэширует. Сюрприз!

          Ещё раз, ассемблер намертво привязывает к конкретной машине. Это катастрофа. Сначала надо алгоритмы научиться составлять.
          • +2
            А студенты-медики уже на первом курсе препарируют мышей. (А кое-где это делают и в школах.) И это, как ни странно, не «привязывает» их к мышам. Наоборот, помогает позже заняться более крупными существами, и даже человеком.
      • 0
        О! Нас на первом семестре заставляли рисовать блок-схемы алгоритмов. А уже только во втором семестре-начали давать Си.
    • +6
      Я думаю наоборот.

      Лучше с Classic Pascal. И только когда штудент ясно поймёт что есть программирование «снаружи», показать что оно есть «изнутри» через посредство ассемблера.
      Или, как говорит Катон младший, «Начинать непременно с Ceebot!»

      Привожу пример:

      В 6 классе меня учитель математики уговорил пойти на Станцию юных техников в кружок программирования. Язык был FOCAL на БК-0010Ш. Мы там занимались ерундой типа «как тебя зовут? о, привет %username%!», рисованием ёлочки символами звёздочки, поиском корней квадратного уравнения. Всё это было почти понятно в деталях. Но непонятно было на кой это всё надо вообще?! Не была донесена философия, доктрина, стратегия программирования. Через это зубрёжка оператора GOSUB была напрасна.

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

      Вот вы предлагаете вместо GOSUB изучать POP. Вы представляете как громко взорвался бы мозг «обычных» 12 участников добровольного (SIC!) кружка программирования?

      Во первую очередь в преподавании программирования необходимо давать вместность, роль, цели и перспективы, намётки инструментария программирования как такового.
      Во вторую очередь внятно пояснить шаги на пути изучения:
      * Сбор требований и формулировка спецификации.
      * Установка и использование среды разработки.
      * Операторы, алгоритмы, структуры, ввод-вывод (алфавитно-цифровой, файловый, графический).
      * Запуск и редистрибуция.

      А эти MOV/FDIV/POP — это уже когда человек Pascal знает наизусть. Не ранее.

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

      Кстати, у автора сквозит отсутствие глав «установка среды разработки» и «запуск и редистрибуция» в его преподавании.

      Может быть он в струе западного образования, когда каждый курс является отдельным изолированным ремеслом, и человек его выбирает осознанно, как люди выбирают себе коньки или клюшку. Да только пришли к нему ученики, которые не понимают что такое клюшка и зачем она. Потому и спрашивают как они могут знакомым показать свои хоккейные навыки с клюшкой, забыв про коньки. Которые, кстати, в его курсе не объяснялись.
      • +1
        Вот именно, сначала выстроить структуры данных, продумать, как с ними оперировать ВООБЩЕ, на человеческом языке, потом — на синтетическом, но близком к человеческому, а потом уже можно и ассемблер.
      • 0
        Поддерживаю.
        Может стоить действительно сначала на Visual Basicе показать кнопочки и анимацию, а потом для тех, кого заинтересует, уже и рассказать про структуры данных и алгоритмы?
        Мне понравилась фраза про громкий взрыв мозга :)
    • 0
      Я с вами полностью согласен. После баловства с Delphi принялся за ассемблер (по рассылке Калашникова). Баловался и загрузчиками и защищённым режимом. 90% вопросов, которые возникают у новичков, у меня отсеялись сами собой.
    • +1
      Язык неважен. Что важно — это то что учить программированию надо на машине не старше 486 dx66. (надо бы на 286, конечно, но не будем совсем уж зверьми.)
      Вот тогда и будут учиться экономить…

      зы да, я знаю что в реалиях рынка дешевле взять железку помощнее. ;(
      • 0
        Ну что же вы так. Специально для обучения, в том числе программированию, сделали Raspberry Pi. Идеальная машинка для этой цели!
      • 0
        dosbox в браузере через emscripten тормозит достаточно
    • 0
      Разве если запустил программу у себя на комьютере и без изменений запустил её на кластере — это плохо?
      И зачем экономить каждый бит данных, когда на компьютере стоит от 8Гб оперативки?
  • +16
    Я люблю Python за его эстетику. Javascript — это бесспорно самый массовый язык за всю историю и он будет оставаться таким ещё долго, но что отталкивает, так это то что он уродливый (уж извините любители Js, но это так). Хотя бы дети должны начинать с прекрасного — с Python. Жизнь всё равно заставит использовать Js. Хотя всё может измениться, если в браузеры добавят поддержку Python на клиенте.
    • +5
      Самый массовый язык за всю историю – C. Больше все кода написано, скорее всего, на Cobol. Javascript тут и рядом не стоял.
      • –4
        Массовый — в плане работы на различных устройствах. Во всех браузеры на всех устройствах встроена поддержка Js. Я это имел ввиду. Что касается С и Kobol — не могу с Вами согласиться или опровергнуть у меня нет таких данных.
        • +3
          На всех устройствах, где есть браузер, есть и компилятор C. Но не на всех устройствах есть браузер :)
          • +1
            поправка: на всех устройствах, ДЛЯ КОТОРЫХ есть компилятор С. На самом устройстве он не нужен.

            А balamut108 я предлагаю запустить js на Atiny. Можно в браузере.
            • 0
              простите, attiny, конечно
          • –1
            Ну можете написать кросс-платформенное приложение на С и что Вы будете с ним делать? Js — на сегодня это единственный инструмент для кросс-платформенной разработки без заморочек с виртуальными машинами всякими приблудами.
            • +5
              Почему единственный? Сейчас как раз многие, если не большинство языков кроссплатформенные, на мой взгляд — C, C++, Go, все языки, чей интерпретатор написан на C(Python, Ruby, PHP), java-based…
              И уж javascript, пожалуй, обладатель самой навороченной VM из всех.
              И в каком смысле что делать? Залью сборки на все устройства какие хочу.
    • 0
      Уродливость — это дело вкуса, так что не стоит ставить это в минус языку. Для кого-то и python попахивает со своими отступами и отсуствием скобок, а для кого-то вся суть в этом.
      • 0
        Согласен. Когда начинаешь основательно изменять структуру программы, без скобок теряешся где и что. Доходит до того, что ставишь скобки и комментируешь их. А для кого-то это самое то…
  • +4
    По-моему по прежнему нужно учиться на Python, но не рассматривать его в отрыве от других технологий. Что касается пользовательских интерфейсов и мобилок, то kivy framework рулит и бибикает там, при этом не теряя выразительности и лаконичности Python — именно его я бы показывал новичкам как для простых игр, так и GUI начального уровня
  • +16
    Зачем в качестве языка обучения предлагать такую специфическую с родовыми травмами штуку, как js? Только ради веб-фронтового стека?
    • –2
      javascript это же не только фронтэнд. Node — на сервере, Windows Universal Apps на десктопе и телефонах. Так что можно и веб-приложение написать, и мобильное, и настольный гуй
      • +47
        «Один пацан писал все на JavaScript, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно.»
        • –2
          да, слышал это дурацкое выражение
        • 0
          В этой шутке есть доля Meteor :)
      • +5
        Это не отменяет того, что js не особо подходит для обучения.
      • +9
        Вы, возможно, плохо понмаете, что так можно сделать с любым языком. Зачешется у кого-то там левая пятка, вспомнят Пролог, и он уже везде. И куча леммингов от программирования с фантастическим упорством тут же начнёт доказывать, что вот он, мессия, именно с него всё должно начинаться и им же должно заканчиваться, как это последние лет пять происходит с джаваскриптом.

        Джаваскрипт — очень нишевый язык. С родовыми травмами — он не был предназначен для сложных больших приложений. Человек, конечно, странное существо — ко всему привыкает и в итоге начинает получать от этого удовольствие, вот и здесь нашлись мазохисты и приспособились. Теперь у них и на сервере он, и на клиенте, и на телефоне, с удовольствием просирает ресурсы памяти и процессора, а также нервы программиста, у которого опять правила автоматического приведения типов что-то не туда привели.
      • +2
        Ну вот форкнули недавно Node, и куда теперь податься? Та же ситуация с MVC фреймворками. Они слишком часто стали меняться. Радость была, когда был единый jquery, который объединял почти всё в себе, но это породило другую проблему — меньше людей знали JS, больше — jquery. Теперь вон еще метор какой-то появился.
        Для начала питон тем и хорош, что в нем практически не возникает таких вопросов как «а что мне нужно взять за основу, чтобы написать вот это?». Потому как питон вполне самодостаточен без фреймворков. Конечно в питоне так же можно строить из себя сноба и рассуждать о том, что реализация интерпретатора, который все используют по-умолчанию — говно, но это не отменяет факта, что большая часть использует именно его. Это как плюс так и минус, конечно же. Но в данном случае плюсов я вижу больше.
        Читать чужой код на яваскрипт сложнее, чем читать чужой код на питоне. Я каждый раз с осторожностью лезу в код фронт-енда, т.к. каждый разраб на фронт-енде может писать в своем стиле даже в рамках одного проекта, и бывает такое, что даже они друг друга слабо понимают, чего уж говорить о случаях, когда туда лезет разраб с бэкенда?
  • +2
    Начинал с скриптов для Garry's mod на Lua, благодаря луне начал изучать давно не понятый C++.
  • +2
    Статья интересная. Но мне кажется, изложенные в ней проблемы, преувеличены и несправедливо поставлены во главу угла. Для gui, например, достаточно поставить PyQt, а работать с ним очень легко. Со смартфонами потяжелее, да, но тоже решаемо. Вместе с этим, у Питона огромное кол-во других преимуществ в самых разных сферах, что, как мне кажется, в совокупности более важно для обучения.
    • +1
      Да и Tkinter вполне себе не плох — идет из коробки в Windows, кстати. Для несложных GUI вполне себе ничего. Нет конечно всяких GUI builder'ов, но как раз таки для обучения это даже хорошо.
    • +1
      Для начинающих лучше wxPython, он ближе к Питону нежели Qt со своими примитивами и сигналами.
  • +10
    Интересно, что статья на самом деле ставит вопрос, какой язык стоит использовать для продолжения обучения, а именно работы с GUI. А опрос про язык для начала обучения. Почему не начать с Python, продолжить с Javascript? Почему ставить вопрос об обучении одному языку, в рамках обучения программированию в целом?
  • +1
    Пришел к тому же выводу. Наличие браузера под рукой дает очень низкий порог требования дополнительных околокомпьютерных знаний не нужно ни знаний о консоли, ни линукса. А возможностей — море. Для понимания что да как самое то. Что язык неидеален тоже неплохо — мир в принципе не идеален и идеальные модулы-2 не нужны никому. У товарещей с ассемблерами есть синдром «15 километров в гору зимой», другие увлекаются тем, что «раз я так обучался, все должны так же».
    • +1
      С одной стороны это хорошо, но с другой стороны, нельзя пренебрегать основами. Например, есть php «программисты», которые понятия не имеют, как работает веб сервер, и вообще для чего он нужен. Если для программиста все что «под капотом» будет магией, то ничего хорошего из этого не выйдет.
      Я не говорю про то, что нужно сразу копаться в исходниках того же самого python и смотреть, как там устроена операция сложения, но хотя бы иметь представления о том, что такое сокеты, как строятся GUI, как работает веб сервер, что такое файловая система и пр.
  • 0
  • +3
    Отвечать на вопрос: «С какого языка нужно начинать обучение программированию?», надо вопросом — «А кем ты хочешь быть?»

    Дело в том, что программирование в целом, как сфера IT настолько расширилась, что постичь всё одному человеку, практически непосильно. Поэтому, каждый должен выбрать для себя специализацию и исходя из этого выстраивать последовательность своего обучения языкам и технологиям.
    • +1
      А как человеку узнать кем он хочет быть, не окунувшись в это с головой? Со стороны многое выглядит привлекательным, но зачастую капнув глубже понимаешь что совсем не этого ты хотел.
    • +1
      Начинать обучение надо одинаково вне зависимости от того, кем быть. Основы везде одинаковые.
  • +7
    По мне, так в статье немного накрученные проблемы.

    Да, вопрос с GUI для приложения рано или поздно встает, и в каждом случае решается по-своему.
    Например, при изучении C++ я решил эту проблему в «лоб», использую WinAPI. Ни о какой кроссплатформенности я не думал, мне нужно было решение моей проблемы здесь и сейчас. Немного дальше, ориентируясь на телефоны и прочие ОС, уже подбирал соответствующий инструмент (в моем случае это был Qt). То есть, если студент ставит цель написания покера с визуальными картами, он его напишет на известном ему языке, подобрав соответствующий инструмент. И не важно, какой ЯП он изучал.

    А так, я «ЗА» изучение Python в качестве первого ЯП:

    • Для GUI и разработки под iOS/Android можно использовать PyQt
    • Для разработки игр подойдет Cocos2d (он, кстати, на Python написан)


    Рано или поздно студент задастся вопросом, как сделать мультиплеерную игру. Тут, снова же, не меняя ЯП, можно будет написать серверную часть на Django. Ну, а когда студент задастся вопросом, как сделать сайт к игре, снова тыкайте его носом в этот же Django
    • –2
      Возможно… Но для сайта ему всё равно придётся разбираться с JS и HTML, правильно? :) Не проще ли сразу с ними разобраться, а серверную часть написать на том же Node.js, например.

      JS хорош тем, что доступен практически на любой только что установленно операционке без необходимости что либо устанавливать дополнительно. Браузеры (большинство во всяком случае) содержат все инструменты необходимые для разработки. :) В крайнем случае браузер можно дополнить внешним текстовым редактором.
      • +1
        С HTML в любом случае придется разбираться, даже если будет учить JS.
        А вот JS для сайта не всегда обязателен. К тому же, если верстку студент еще возьмет со стороны (не всем дано верстать), то может вообще с этим не заморачиваться, разве нет?

        А так, если приспичит, то можно использовать и PyJS, CoffeeScript.

        Снова же, повторюсь: все зависит от целей
        • –3
          Ну, HTML — не язык программирования и изучить его основы не представляет серьезной сложности, даже вкупе с основами CSS.

          если приспичит, то можно использовать и PyJS, CoffeeScript

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

          JS для сайта не всегда обязателен

          GUI тоже вовсе не обязательна для работы OS, однако мало кто работает в чистой командной строке.
      • +4
        JS в качестве первого языка плох тем, что там очень много вещей неочевидных и не имеющих логического объяснения, причем в самых элементарных вещах вроде == и ===, или области видимости переменных. И учить придется с оглядкой вот на это все, чтобы никто случайно не наступил на грабли (или, что еще хуже, не научился наступать на них целенаправленно ради какого-то полезного побочного эффекта).
        • 0
          Хорошо что дочитал до этого коммента — мысли такие же возникали.

          Неочевидные вещи + многие отличия от мейнстрим языков (например объектная модель и ООП вообще).
        • –3
          В ЛЮБОЙ технологии есть свои грабли и неочевидности — это не те критерии, по которым следует определять, подходит ли данный язык для обучения. Большая часть граблей в JS заложена не в самом языке, а сопровождающем его ПО — библиотеках, браузерах, фреймворках. Проблема обучения JS в основном упирается в подбор экологической ниши оптимальной для обучения.

          Когда ты начинаешь обучать человека программированию с чистого листа, ты в праве чётко ограничить подачу материала так, чтобы все задачи, которые вы будете решать, обходили большинство граблей и неоднозначностей. Например, сначала рассказывать только про ===, но не рассказывать про ==. Т.е. для начала можно преподавать более строгое подмножество языка — ровно такое, которое позволит обучать программированию как таковому. Со временем, освоив понятие алгоритма и основных структур языка программирование, можно будет дополнять начальное подмножество более сложными структурами. Главное — объяснять, почему такие-то вещи работают таким-то образом. Понимая внутреннюю механику языка программирования человек затем легко сможет перейти на другие языки.
          • +1
            нет-нет, приведение типов — это сам язык. И проблема js именно в том, что значительное число его неочевидностей — именно в самом языке, а библиотеки только дополняют
          • +1
            Да, в любой технологии есть грабли. Но их количество сильно разнится, равно как и шанс их там найти в повседневных вещах. И это, на мой взгляд, как раз очень важный критерий.

            Насчет большей части тоже не соглашусь — я как раз имел в виду именно язык (откуда и взял примеры). Еще навскидку — область видимости «this», например. Или вариации на тему того, что будет результатом []+[], []+{} и {}+[] (если вы не видели соответствующую презентацию — попробуйте).

            И подход «преподавать подмножество» тут не очень хорошо работает. Ну ок, вы не покажете им ==, но плюс-то нужен будет для сложения, например. Или переменные — как только вы их вводите, появляется вопрос с областью видимости.

            И вот как раз на тему объяснения, почему такие вещи работают таким образом, в JS очень часто нет внятного ответа. Точнее, он есть, но звучит так: «потому что, когда Brendan Eich писал первую реализацию языка на коленке за две недели, у него получилось так, а дальше осталось для совместимости».

            Питон (особенно третий) в этом смысле намного более логичен, и там не нужно аккуратно танцевать вокруг грабель. Наиболее простой способ что-то сделать, как правило, является и наиболее очевидным, и правильным.
            • 0
              Мне кажется, тут многие (и Вы в т.ч.) путают обучение программированию как таковому и обучение языку программирования.

              Всё, что Вы перечислили, никак не мешает обучению программированию. Т.е. ВООБЩЕ никак.
              • 0
                Они мешают хотя бы тем, что вам придется давать корректные ответы на сопутствующие вопросы, если их зададут.

                Ну и пункт про вырабатывание вредных привычек остается в силе.
                • 0
                  Наличие «вредных привычек» в первую очередь зависит от строгости мышления, а не от языка программирования. В ассемблере вообще нет языковых структур, однако это не мешает программировать на нём структурно при правильном подходе.
                  • 0
                    но и не помогает. А в паскале структуры есть и навязаны, то есть, хошь-не хошь — ты будешь программировать структурно, там трудно программировать без этого.
                    • 0
                      Ничего подобного. Структуры в Паскале подсказывают, как программировать структуроно, но никак не навязывают. Ох, сколько бы времени я съэкономил на разборе чужого кода, если бы Вы были правы. :)

                      Кажется, Вы просто не совсем понимаете, что означает «структурное программирование»…
                • 0
                  вам придется давать корректные ответы на сопутствующие вопросы

                  Не вижу в этом никакой проблемы.

                  А на некоторые вопросы вполне допустимо ответить так:
                  пока что просто запомните, что в таких случаях надо делать так и только так — пусть это будет для вас волшебным заклинанием, а когда мы разберемся с более важными вещами, мы обязательно рассмотрим подробнее и этот вопрос.
        • 0
          Плюс передача переменных через вложенные анонимные функции. Иногда хочется плюнуть на это и взять brython.
        • 0
          Логически многие вещи не объяснимы лишь с точки зрения «серьезных» ЯП
      • +5
        Это если студенту с принципе захочется с сайтами связываться. Есть много других интересных областей, и факт наличия javascript под рукой в любом браузере не делает его хорошим языком для обучения. Ну другие требования к учебному языку, другие. На web и смартфонах программирование не заканчивается — это лишь вершина айсберга.

        Плюсы Python как учебного на мой взгляд:
        * форматирование
        * простота синтаксиса
        * довольно большая стандартная библиотека
        * кроссплатформенность — CPython собрать можно почти под любую платформу, для которой есть компилятор C(Windows, Linux, Mac — нет проблем)
        * небольшое количество вариантов для конкретного действия — меньше путаницы
        * наличие консоли интерпретатора
        * IPython
        * большое количество библиотек на любой вкус почти во всех областях программирования
        хотите — UI, хотите — web, хотите — машинное обучение, хотите — статистика, хотите — линейная алгебра, хотите — 3d графика и тд
        * возможности «на вырост» — cython, C-modules, метапрограммирование

        А дальше параллельно можно рассказывать, в зависимости от направления, main-stream языки из нужной области —
        C, C++, javascript… на выбор.
        • 0
          Плюс для решения проблем товарища есть множество рабочих методов.

          Дистрибуция и интерфейс:

          pyQt (pySide)
          wxPython
          Kivy
          Nuitka
          eGenix pyRun

          Это из тех, что я знаю
    • +2
      По вашему, надо начинать таки с C# внутри Unity3D.
      Может быть в вашей идее что-то есть ;-)
  • 0
    Только ночью прочитал статью на news.ycombinator.com и вот уже перевод)
    На самом деле расстроен статьёй, так как Си и JavaScript — мои самые нелюбимые языки программирования(
    Как всё-таки полюбить js?
    • 0
      После прочтения третьего десятка блогпостов, объясняющих прототипное наследование, начнется стокгольмский синдром.
  • 0
    2 года назад я бы предложил Pascal.
    Но сейчас, я предложу Scala. Не удивляйтесь, сейчас поясню.
    Да, у Scala есть «сложные» куски — dependent types один из них, однако на самом деле, Мартин Одерски, будучи учеником Вирта(создателя Pascal) идет темже путем — язык очень прост в изучении, если его давать правильными частями.

    Если подготовка группы говорит что они лучше поймут функциональное программирование(математики-теретики например), то на время не рассказывайте про мутабельность — покажите им моноиды, iteratee, и они будут впечатлены.

    Если подготовка группы говорит что они поймут императивную модель — используйте императивное проявление скалы. Делаете все тоже что делали в Pascal.

    Потом можно рассказать про actor-based модель, и передать привет Erlang-у, все в одном языке.

    Нужен браузер — scala.js. Нужен Android — тоже не такие уж и трудности. Есть нормальные среды разработки(eclipse, idea), есть отладка.

    Потом ИМХО я бы рассказал про DSL-и, которые легко встраивать в язык, это покажет всю силу Scala и пояснит что такое адаптация синтаксиса под область.

    Далее, по мере подобных вопросов «а как сделать ****» можно открывать более сложные части языка, поясняя зачем они вообще есть.
    • 0
      Во многом согласен, поддержу. На Scala можно писать просто, несмотря на общую «сложность» языка. Плюсом, если после обучения программированию появится тяга к самому языку — тут и Java поможет с приличным бэкграундом библиотек на все случаи жизни. Также есть обширное поле куда копать дальше при изучении возможностей языка.

      Есть одна непопулярная мысль, что когда кто-то начинает чему-то учиться с нуля, то нельзя такому советовать сразу наилучшее решение или инструмент. Иначе в процессе изучения у ученика не будет чувства «идеала» и желания улучшать. Я бы сказал, что Scala — не идеальный вариант для старта, но лишенный системных проблем и позволяющий развивать нужные мысли в нужном направлении.
    • 0
      От колоссальной сложности скалы воротит даже ее собственных разработчиков, а вы ее — новичкам. Это жестоко. Есть в скале такие фичи, что вы объективно даже не сможете сказать — это баг или фича, в этом отношении она от того же джаваскрипта недалеко ушла.
      Если уж рекомендовать скалаподобное новичкам, то это должен быть однозначно ML и его потомки — OCaml и Swift.
      • +1
        От колоссальной сложности скалы воротит даже ее собственных разработчиков

        Есть пруфы?

        Есть в скале такие фичи, что вы объективно даже не сможете сказать — это баг или фича, в этом отношении она от того же джаваскрипта недалеко ушла


        Что это за фичи такие?
  • +3
    Предлагаю посмотреть на проблему с другой стороны.
    Тут многие (?web-)программисты настаивают на том, что без JS невозожно написать web-страницу с кросплатформенным UI.
    для сайта ему всё равно придётся разбираться с JS и HTML
    При этом, Python, по их мнению, плох именно тем, что на нём нельзя программировать в web-UI.
    Так может проблема именно в том, что браузеры не поддерживают других скриптовых языков?
    Когда деревья были высоким, IE предлагал VBScript в качестве альтернативы ECMAScript. Больше нет.
    Сейчас теги
     <script type="text/javascript">
    
    и
     <script>
    
    эквивалентны.
    Конечно, не нам решать, а W3C и разработчикам браузеров, но выглядит логичным добавить поддержку еще нескольких стандартизированных скриптовых языков в качестве альтернативы ECMAScript.
    • 0
      Убедить все разношерастные браузеры на приличном уровне поддерживать несколько языков маловероятно.
      Другим подходом можно создавать компиляторы из других языков в JS, и воспринимать JS как assembler для Web, и делать компиляторы в него из других языков.
      • 0
        так есть даже asm.js — типа javascript с ограничениями, зато очень быстро и эффективно исполняющийся виртуальной машиной

        и есть, кстати, несколько языков, которые в итоге в него компилирются, типа coffeescript, а ещё речь шла про dart.
  • 0
    Проголосовал за C#, изначально хотел выбрать и C# и Java, но 2 варианта нельзя. У этих языков большое комьюнити, много хороших книг, IDE+GUI, и они похожи друг на друга, писать программы новичку на них будет просто. (хотя сам юзаю питон ))) )
    • 0
      Полностью поддерживаю!
      C# и Java ещё хороши тем, что позволяют довольно прозрачно описать принципы ООП на примерах. Меньше времени на изучение деталей — больше на ООП и практические навыки.
  • +5
    Для обучения программированию подойдёт C#, подойдёт Питон, подойдёт и Паскаль. А вопросы про GUI, айфоны, etc — это не про обучение программированию, это про выбор языка для конкретной цели. :)

    Да, можно научиться JS, написать игрушку, написать сервер, написать что угодно — но всё равно JSON удобней (и быстрее) отдавать Питоном или Перлом, на десктопе пока правит балом C# или что-нибудьQt, а на Айфоне — Swift.
    • +1
      но всё равно JSON удобней (и быстрее) отдавать Питоном или Перлом

      Если опустить слово быстрее, то чем JSON отдавать на Питоне и Перле удобней чем на JS?
      • 0
        Я думаю имеется ввиду чем c#
      • +1
        Кроме быстрее — не нужен node, вот пожалуй и всё. Это уже очень много
        Можете считать меня ретроградом, но писать что-то не в браузере на JS не поднимается рука, и вся тенденция с аппликухами на серверах на JS на node не то, чтобы вызывает рвотные позывы, но очень глубокое недопонимание имеется, да. :>
        • +2
          Каждому своё, а node под винду идёт одним файлом, в отличи от допустим того же Python.
          И чего такого страшного уже на написании чего то под JS я понять не могу. Я сложного ничего не писал на ней может быть там оно как то и проявится. А простые программки пишутся на ура. У меня сейчас крутятся 5 штук которые парсят бинарные файлы и кидают их на веб сервер в виде JSON. Никаких проблем не испытывал. А по поводу JS не в браузере, ну кто к чему привык, язык как язык. Есть свои плюсы и минусы, зачем на него так злится я не пойму. Да и не в браузере он тоже уже довольно давно есть. В винде есть свой интерпритатор JS файлов наверно со времен 2K хотя уверенно могу сказать только про XP. Неудобный да но и не в браузере. Хотя того что привычка страшная сила я отрицать не буду.
        • 0
          Смотря что именно на JS на сервере сочинять. Если простой скрипт (утилиту, консольное приложение), то тогда чистый Node сгодится; если же приложение вебсерверного типа, то тогда поверх чистого Node рекомендую сразу использовать Express это позволит не возёхаться с изобретением собственного велосипеда (а значит, и вся работа перестанет быть тягостною и начнёт вместо того становиться изрядно удобною, опирающеюся на готовые API Express).

          Прибавлю ещё, что если хотя бы половина предполагаемой на сервере работы состоит в подстановке значений в готовый шаблон, то тогда поверх серверного движка (такого, как Express) непременно следует поставить также ещё и шаблонизатор (например, Handlebars.js) — желательно, с какою-нибудь готовою прослойкою для установки шаблонизатора на сервер (для Handlebars такою прослойкою успешно служит express-handlebars). Это опять же изрядно экономит усилия.

          Разделение данных и шаблонов можно назвать в терминах MVC разделением модели (M) и вида (V).
  • +3
    Если готовят программистов геймдевов, то да Python не лучший вариант.
    А если готовят программистов математиков, бэкендщиков или программистов общего профиля, то Javascript совсем не вариант.
  • 0
    Странно, что за Lisp так мало голосовало. Мне всегда казалось, что на хабре больше его сторонников.
    В школе Я учил Pascal, и, так как других альтернатив даже известно не было, старался его освоить из всех моих скромных сил. Но Я всегда любил мир чистых функций и рекурсий, с Pascal'ем это сочеталось мягко говоря плохо. В результате Я решил, что программирование — это не мое.
    Недавно наткнулся на книгу Common Lisp: A Gentle Introduction to Symbolic Computation и понял: «Вот!!! Вот с чего нужно было начинать!» Простота и элегантность квадратиков в первых главах книги поражает.
    Опять же, функциональный подход подстегивает разработчика к изучению основ матана, что не может не сказаться на качестве кода :)
    А что касается вопросов, которые привели автора к написанию этой статьи, то существуют такие диалекты как Clojure & Clojurescript, которые и предназначаются для web-разработки.
    • –4
      вообще без знания матана программист не является программистом
      • 0
        к большому сожалению не все так считают :(
      • 0
        Вы когда-нибудь проводили собеседование на вакансию программиста? Знаете сколько людей, к большому сожалению, считает иначе?
      • 0
        Это очень холиварный вопрос Где то его можно подтянуть «на месте», где то без глубоких знаний вообще не обойтить, но в большинстве сфер достаточно школьного курса математики.
        • –1
          понимание сходимости рядов и все такое нужно не только для того что бы решать конкретные задачи, а вот для чего, как говорил наш русский ученый:

          Математику уже затем учить надо, что она ум в порядок приводит.


          Важно математическое мышление, а оно необходимо что бы быть программистом. Если программист не способен осилить матан, то он просто выбрал не ту профессию, и ему лучше продавать бургеры.
          • 0
            Хорошо хоть, что Михайло нашего Ломоносова помнят. Но всё-таки программисту важен не матан, а языкознание, причём не в той ублюдской форме, как его принято преподавать в россии в виде предметов «русский язык» и «иностранный язык», а вменяемой, когда проводятся качественные параллели между языками, выявляется структура языка и так далее.

            Ибо всё-таки воспринимать и выражать мысли (команды, действия) на языке — это работа с языком.
            • 0
              математика это не цифры, функции или значки дизъюнкции, это образ мысли
              в программировании используется такой же образ мысли, и если его нет, то не быть программистом
              ну и очевидно, что такой образ мысли развивает математика
              • 0
                Или программирование
  • +2
    Мне кажется, здесь многие путают обучение программированию как таковому и обучение языку программирования.

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

    И, наконец, программирование — это в первую очередь реализация алгоритмов. И в JS нет НИЧЕГО, что мешало бы обучающемуся понять, что же такое алгоритмы и как они реализуются в процедурном языке программирования.
  • 0
    JS со своими неоднозначностями и особенностями исполнения вообще не подходит для обучения программированию. Я с трудом представляю как вы будете объяснять новичкам приколы с замыканиями и асинхронным исполнением.

    Учить надо концепциям программирования. Тогда не будет иметь никакого значения на каком языке разрабатывать конкретные приложения.

    На мой взгляд для курса программирования должно быть несколько языков: LISP, Pascal (или любой другой язык со строгой типизацией), и Ассемблер (в контексте аппаратной архитектуры компьютеров). А дальше можно python/ruby и остальное в зависимости от выбранной специализации.
    • 0
      Никак не объяснять. Скрыть факт наличия замыканий. Ах да, и запретить смотреть программы других программистов, чтобы сами не дай бог не увидели. :D

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

      А для программирования умение читать чужие программы безусловно важно.
  • +2
    Scala
    • 0
      Для этого, конечно, есть очень симпатичная Kojo. Но все равно, для первого языка слишком сложно.
  • +1
    Последовательность выводов странная. Но дополню — «А потом новичок захочет разобраться в работе железа и захочет написать простенький драйвер или модуль ядра, но ни Python ни JS это не позволяют, и теперь я рекомендую всем начинать с прекрасного языка C, ведь на нем можно сделать все!».
    ИМХО для первого языка программирования Python идеален.
  • 0
    >>> Спустя месяц новые вопросы: «Как я могу поделиться своей игрой с другом? Хотя… можно ли закачать эту игру на телефон, чтобы показать всем, и чтобы им не нужно было ничего устанавливать?»

    Для этого есть Pygame Subset for Android: habrahabr.ru/post/119831/
  • +3
    Как мне кажется, однозначно Си (вместо ассемблера, который кто-то предлагал в этом треде :)). Потому что Си, в текущем его виде — это кроссплатформенный ассемблер. Он очень близок к «железу» и позволяет людям «почувствовать», что из себя представляет компьютер на самом деле и не «балует», к примеру, хорошей библиотекой для работы со строками, заставляя сразу проектировать структуры данных более адекватным образом, без использования строк. То есть, наверное, Си не является идеальным для абстрактного «обучения программированию», но, скорее, является наиболее практичным выбором, если человек планирует программировать в дальнейшем.

    Зная Си, как самый базовый и до сих пор самый распространенный язык программирования, можно с легкостью дальше изучать любой другой язык, как более низкоуровневый (ассемблер), так и более высокоуровневый (Python, JavaScript, C++, ...). Если чего-то не хватает в конкретном языке, которые почти все сами написаны с использованием Си, можно его дополнить, написать нативное расширение, или разобраться в причинах того или иного поведения.

    Если начинать с высокоуровневых языков (я, к примеру, начинал с PHP и не горжусь этим :)), то потом Си будет казаться очень «сложным», хотя он, наоборот, очень красив и одновременно очень эффективен.
  • –6
    В голосовалке не повредил бы C++, всё таки C (за который я в итоге проголосовал) мало актуален в современном мире.
    С++11 или уже C++14 на мой взгляд достойный выбор.
    • +4
      Нужно быть чрезвычайно замотивированным человеком, чтобы начать с С++
      • –7
        В любом случае, C++ для начинающего куда проще, чем C.
  • +1
    Платформа ActionScript3 как вариант, которого нет в голосовалке (знаю, что заминусуют). Тут и GUI из коробки, и язык не сложный, и игры можно сразу делать, и кроссплатформеннен по определению. Но вот не в тренде.
    • 0
      Закопайте труп. Flash давно не актуален.
      • +1
        То-то, смотрю, ArmorGames помер.
      • 0
        Perl, например, тоже считается не актуальным. Тем не менее. То что Flash не актуален (повторюсь, не в тренде) не отменяет всех его вышеперечисленных преимуществ. И, да, теперь вместо него использую js, хотя хорошие чувства к нему вполне себе остались.
        • +1
          Какие преимущества?
          1. Не свободный.
          2. Единственная полная реализация, и то забившая на поддержку linux, mac, android.
          3. Практически нулевая интеграция с браузером.
          • –3
            1. Не свободный.

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

            Пока работает везде, но уже не всё. Да, именно это его и хоронит.
            Практически нулевая интеграция с браузером.

            Что вы имеете в виду?

            Это вы перечислили не те преимущества, что перечислил я. Кроме спорной кроссплатформенности. Именно это и проблема, отчасти согласен.
            • 0
              Используйте на здоровье. А то, что исходники закрыты, так оно мало кому надо. Но отчасти согласен.

              Кроме дров на видеокарту и wifi, единственная нужная не свободная программа на моём десктопе — flash. Всё остальное можно безболезненно выпилить.

              Что вы имеете в виду?

              Ну очень много глюков я помню при использовании flash'а.
              Ещё слышал такую историю о том, как работает flash под linux'ом: flash приложение рендерится как отдельное окно в иксах; в чём причина необходимости так делать не вспомню, но очевидно это происходит не по вине браузера.
              • 0
                единственная нужная не свободная программа на моём десктопе

                А кодаки? Например mp3. Но вы правы, тоже стараюсь использовать опенсорс.
                очень много глюков

                Тут не всё так однозначно. За все платформы не берусь говорить, но на винде у Flash Player были как стабильные так и не очень релизы. 10.3 например у меня не помню чтобы глючил. А вот начиная с 11 версии качество всё хуже и хуже. Сугубо имхо, конечно. И использую я debug-версию. Возможно продакшн более стабильная.

                Зато AIR в глюках на винде и линухе замечен не был. На Андроиде же — бывало.
                • 0
                  А кодеки?

                  Видимо у меня всё свободное, vrms по крайней мере ничего не пишет из подобного.

                  Раньше использовал flash стандартный под iceweasel(=firefox), тормозил.
                  Сейчас все flash штуки смотрю отдельно в chromium'e/yandex browser'е с pepper flash. Лучше.
  • +1
    Все здесь неправы. И все правы. Дело в том, что тут обсуждаются разные уровни обучения языку. Для простого обучения что такое программирование вообще подойдёт и Javascript, и какой-нибудь Basic в MSOffice.
    Для более хардкорного обучения лучше подходит Си. Но это более сложно и, как следствие, затратно по времени. Пока освоишь у большинства интерес пропадёт. Кнут так вообще ассемблером учит, но я не думаю, что это оправдано для новичка, который, может, хардкором заниматься и не будет.
    Мне кажется лучше подходить последовательно. Детей можно вообще игрушками-роботами учить. Уровнем далее идёт Javascript, а ассемблер для самых упорных.
    • +4
      Си нужно давать хотя бы кратким обзорным курсом, чтобы ученик заглянул, что происходит под капотом. Как выделяется память, как освобождается, что такое указатели, массивы, строки, какие бывают типы данных и т.д.
      А то с современными языками это может быть вообще забыто. Пользоваться фишками и сахаром современных языков, конечно, нужно — но понимая, что при этом происходит на самом деле внутри.
      • 0
        Вот полностью с Вами согласен, но не могу плюсануть.
      • +1
        Кому нужно? Пятилетнему ребёнку, который хочет чтобы котёнок-робот пошёл направо? Вы опять путаете уровни обучения. На начальном этапе важно вообще понять что такое программирование, и что a = b — это операция присваивания, а не сравнения. (Реальный пример с предмета программирования в одном из ведущих на тот момент вузов.)
        • 0
          В статье идет речь про студентов и обучение.
          5-летний (да и даже 10-летний) ребенок программированию учиться не может — он может только знакомиться с некоторыми базовыми азами, чтобы понять, интересно ли ему это вообще и хочется ли ему начать собственно обучение?
          • 0
            Это вы в какой-то своей вселенной живёте. Если ребёнок заинтересован, то в 10 лет ему ничто не может помешать полноценно программировать. Вообще всегда есть два подхода научить плавать: один из них это кинуть в воду, но я против такого экстрима.
  • +1
    Главное научить «программисткой логике», для этого хорошо подходит Python ибо позволяет сосредоточиться на задаче, а не на нюансах языка. Я программировал на довольно многих языках и во всех на начальном этапе так или иначе приходилось постоянно сталкиваться с нелогичным (так поначалу, казалось) или нестандартным поведением. Python я выучил за несколько дней и обращался в справочник исключительно в первый месяц.
  • 0
    По моему Julia хорошо подходит.
    Но обучающих материалов под нее еще нет.
    Можно Haskell. Как первый язык он хорошо идет, но у преподавателей голова забита императивностью.
    Mozart/Oz слишком винтажен.
    По этому ответил Lisp.
  • 0
    Странно, что Scala предложили, а про Kotlin — забыли. Преимущества Kotlin: простой и лаконичный синтаксис, типизированный (в отличие от JS), можно компилировать и в байт-код, и в JavaScript, причем проверено, что на нем можно писать и серверные, и мобильные приложения. Читается просто. Фреймворков и open source примеров уже довольно много.
  • –2
    Objective-C

    и ничего не мешает учить несколько языков, постепенно реализую старые задумки на новых языках
  • +1
    Python, для графики — www.codeskulptor.org/ (часто используют в учебных заведениях Америки, как минимум в колледжах и университетах Сан-Франциско). Для новичков это идельный язык, очень низкий порог вхождения, намного ниже чем в JavaScript. И это не потому что JavaScript сложнее, а потому что у него очень ограниченная функциональность без сторонних библиотек. Как объяснять студентам разные виды контейнеров, когда в JS их только два, а для всего остального нужно использовать либо библиотеки, либо писать самому. Плюс всякие map/reduce операции и т.п. Конечно, можно ориентироваться на новейший EcmaScript, который намного богаче, но он и сложнее.

    В любом случае, решать вам, и если вы приняли решение, то опросы и дискуссии ничего не поменяют, просто хотел дать знать, что используется в Америке.
    • 0
      Codesculptor прекрасен, но у него есть огромный минус в том, что я не могу поставить себе на компьютер и пользоваться автономно.
    • 0
      Порог вхождения в Lisp, Javascript, Python, Ruby, Visual Basic и Smalltalk абсолютно одинаковый для человека не имеющего понятия о программировании.
  • 0
    Для Python есть IPython Notebook, а ещё есть PyCharm Educational Edition. Для iOS есть Pythonista. Python и его экосистема идеально подходят для обучения, я считаю.
  • 0
    Как по мне так лучше начинать с ассемблера. Помогает разобраться, как же это всё работает.
  • 0
    ИМХО, самый лучший язык именно для обучения — Lua. Типов данных — минимум, но на их основе — и списки, и массивы, и ассоциативные массивы. Нет отдельных list, dict, set и т.д. — все это один table.
  • +2
    Проблема в том, что после часа программирования на JS, у любого питонщка возникает желание убить его создателей с особой жестокостью. А вы этим детей хотите кормить.
    • 0
      >у любого питонщка
      разбалованные питоном :)
      раньше обучение начинали с BASICa
      • +3
        Учился на бейсике, сейчас пишу на питоне. Желание убить создателей JS не пропало :)
      • +1
        BASIC все-таки не так тяжело упорот.
        • 0
          Я программирую более 26 лет. Плотно работал с десятком, наверное языков. Сталкивался с разработчиками очень разного уровня, от братков с рынка до настоящих гениев. Но я не видел пока языка, на котором народ бы начинал писать программы проще и быстрее, чем на Basic :) И жалею, что сегодня нет современных, но по старому простых вариантов этого языка. Так что на вопрос «на чём программировать одноразовую прикладную задачу» людям, не знакомым с программированием, предлагаю, как и топикстартер, Python. Но он, всё же, имеет заметно более высокий порог вхождения.
  • +1
    Сложилось такое впечатление, что многие проголосовали за языки, которые им нравятся или которые они лучше всего знают.
  • +2
    Я знаю, знаю, он причудливый и иногда просто странный, но в целом это нормальный и достаточно современный язык


    Вы заблуждаетесь. Это не современный язык. Javascript это самый отстойный язык программирования за всю историю программирования. Он практически не развивается. Сколько лет вы будете ждать еще Ecmascript 6? Уже 5 лет прошло с Ecmascript 6, за это время были созданы куча языков, вышло куча новых версий языков тех же языков. Даже Java за три года умудрились выпустить новую версию хоть с каким-то набором новых фич, а это самые слоупоки.

    Javascript изначально задумывался как скриптовый язык для маленьких целей. Его синтаксис упорот, все концепции в нем упороты. Есть over 50 языков, которые компилируется в JS. Людям с мозгами поручили писать код на JS, и их глаза истекали кровью. Есть Cofeescript, который ничего не привносит в JS, кроме нормального синтаксиса. Есть Typescript, который ничего не привносит в JS, кроме типизации. Есть еще куча языков, которые делают возможным нормальное программирование на фронтенде.

    Если вы пишете на Javascript, то вы будете иметь дело с HTML/CSS, для которых все вышесказанное верно (создавались для одних целей, выросли в нечто другое, legacy не дает нормально писать приложения). Он не подходит для целей обучения.

    О, и еще плюс — вы не сможете написать нормального приложения на Javascript. Он не предназначен для написания больших полноценных приложений. Там нету мультипоточности (но есть малоподдерживаемые костыли типа Background workers), там как-бы есть асинхронность (но она упоротая), там нету типизации, там нету возможности управления памятью. Вы не сможете написать быстрое приложение на javascript, потому что это интерпретируемый язык. И никакой V8 вам не поможет сравниться со скоростью C/C++/Java/C#. Т.е. смысла его изучать нету — ну кроме как создавать «приложения» типа очередного бложика.

    И зачем этим пичкать людей? Для старта есть языки получше. Опять же, тот же python.
    • 0
      P.S:

      На erlange можно писать веб-сайты без единой строки Javascriptа (есть erlang -> javascript компилятор).
      На F# можно писать веб-сайты без Javascriptа.
      На C# можно писать веб-сайты без Javascriptа.

      Только почему-то всем нравится черпать говно ложкой.
      • 0
        На C++ можно писать веб-сайты без Javascriptа.
    • –1
      >скриптовый язык для маленьких целей
      подходит для обучения
      >Есть over 50 языков, которые компилируется в JS
      значит, это язык-платформа:).
      • 0
        подходит для обучения

        Он не подходит для обучения. Для обучения лучше брать более адекватные языки и/или языки более похожие на то, с чем придется работать в будущем.

        значит, это язык-платформа:).

        Какой смысл изучать тогда javascript, почему бы не изучать один из них? Или лучше сначала лучше выучить Javascript, а потом тот, который построен поверх? Только тогда нивелируется аргумент о том, что на python плохо с UI (ведь можно тогда например взять C# с WPF).

        Btw, это не язык-платформа. Столько языков компилируется в javascript, только потому что ниже javascriptа в вебе ничего нету. С этим же и связана низкая производительность веб-приложений и практически полное отсутствие полнофункциональных приложений в вебе.
        • 0
          >Какой смысл изучать тогда javascript, почему бы не изучать один из них?
          Потому что читай статью. Основное преимущество в том, что настроенная и мощная среда выполнения всегда под рукой и работает везде. Без протекающих абстракций «компиляции в Javascript» и фанбоев MS типа тебя с WPF.
          • 0
            Ой, мне кажется вы тут переходите на личности.

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

            Где-то я уже слышал. «Write once, run anywhere», «write once, debug everywhere», и естественно, всем знакомую шутку.
            А потом начинается. А почему это у меня на IE8 не работает сайт? Ой, а почему это на мобильном мой сайт выглядит как говно и что-то вообще не работает? Хм, а как запустить это приложение без интернета? Кто жрет мой мобильный трафик? Кто отожрал всю оперативу? Ой, а почему у пользователя, который не обновлял год компьютер нету того, что можно с легкостью сделать на любом адекватном десктопном языке?

            Возьми текущую living спеку с whatwg и посмотри, что можно делать с помощью современного html/css/javascript. Я её изучал, и с уверенностью говорю, что веб почти дорос до уровня десктопных приложений, но писать нормальное приложение на javascript — это бредовая идея.

            Без протекающих абстракций «компиляции в Javascript»

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

            фанбоев MS типа тебя с WPF

            Ты меня фанбоем назвал за то, что я упомянул в моем оригинальном комментарии C/C++/Java/C#? Или за то, что я назвал в качестве примера фреймворк, с которым я работал (и который я считаю адекватнее веба)?
            • 0
              Я зашел в профиль, там «Тролль. Нехороший человек. И вообще мудак», увидел нормального человека в общем, а тут опять начинается представление джентельменов со светского раута. Конечно я перехожу на личности, мы тут все не педагоги со стажем, пробовавшие разное, и выбор первого языка и есть личностное до нельзя. Не просто так тут многие ссылаются на свой опыт. Вот у меня опыт — VB6 (и некоторые другие даже VB под DOS) и полное отсутствие не только наставников, но и интернета, поэтому я топлю за то, что первый язык должен быть максимально доступным — не требовать изучение шеллов, линуксов, заковыристых фреймворков и прочей фигни. Потому что это можно делать потом, когда мотивация уже есть. Ты же предлагаешь противоположное, вместо изучения программирования изучать, как там запустить этот монструозный конвертор из языка в js, как потом этого монстра отлаживать, как изучить монстра WPF и т. п. Где там обучение собственно сути программирования, а не технологиям, которые меняются по 10 раз в год?
              Javascript в этом плане язык получше (даже замыкания есть) и феноменальной доступности. Что еще нужно новичку? А ты уже начинаешь другой холивар, является ли js нормальным языком для [вставьте нужное], это неинтересный холивар.

              >А, т.е. то, что javascript это фигня, которая компилируется в хрен-знает-что, а потом это все доходит до уровня ассемблерного кода — это не протекающие абстракции.
              Там течь нечему. Возможные проблемы — ну браузер древний, ну памяти много. Это интуитивно понятно. Зато отладка родная для браузера и писать можно хоть в блокноте.
              • 0
                увидел нормального человека в общем, а тут опять начинается представление джентельменов со светского раута
                Принял к сведению.

                Не просто так тут многие ссылаются на свой опыт
                Ок, давай я расскажу про свой опыт. Первый язык Basic, на котором я освоил Hello World и сложение двух чисел. Потом Pascal — алгоритмика. Потом VB6 — GUI и VB for Applications — просто написал полезное расширение для моего отца. Потом C/C++ — опять же алгоритмика и чисто для себя. Потом C#, нынче это мой основной язык программирования, и это тот язык, который я знаю лучше всего (т.е. остальные я действительно плохо знаю). Между делом изучал Lisp и его вариации, его и выбрал в опросе. Знаком с синтаксисом и умеею написать бложек на PHP, Java, Ruby. Это я письками меряюсь, да. Ой, забыл, еще SQL знаю (причем хорошо).

                Ну короче, я считаю что привязанность к синтаксису языка это плохо.

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

                запустить этот монструозный конвертор из языка в js
                Я согласен, это невероятно сложная задача.

                как изучить монстра WPF
                Ну да, а как изучить jQuery, angularJs, ember-js, react.js и прочую муть — этот вопрос не поднимается. Ведь там все интуитивно понятно.

                Где там обучение собственно сути программирования, а не технологиям, которые меняются по 10 раз в год?
                Хм. WPF — 9 лет. Но это ладно. Ты хочешь сказать, что в вебе стабильность и ничего не меняется? Не выходит новых фич в браузерах, эти фичи не появляются в спеках; не выходит новых библиотек; и даже текущие библиотеки не апдейтятся?

                Нет, я не так формулирую мысли. Давай начнем с концептов программирования. Императивное, функциональное, процедурное, ооп, асинхронное, event-driven, reactive, и прочая муть. Для демонстрации этих концептов есть языки гораздо лучше Javascript.
                Большая часть работы программиста сводится к тому, что он использует чей-то код; просто заставляет кирпичики складываться в функционал. Ты от этого никак не избавишься. Ты можешь радоваться, что на html+javascript можно создать «hello world», который будет летать по кругу, но потом…

                Потом начнется ад. Ты захочешь чтобы все выглядело красиво. HTML/CSS не дадут тебе счастья, они принесут тебе боль и кровавый понос. Ты посмотришь на свой код и возможно поймешь, что он говно. Или может быть просто поймешь, что кто-то написал какую-то функциональность до тебя и захочешь заюзать его код, а не писать свой. И ты будешь просыпаться в холодном поту, разбираясь в недрах кривых библиотек, написанных макаками, которые изучали только JavaScript. А перед этим ты будешь долго и муторно выбирать какое художественное произведение javascript-макаки тебе нравится.

                Но ладно, допустим ты суров, и хочешь написать все без библиотек. Скажи, что будет, когда ты не имеешь представления о том, как нужно организовать работу с DOM-деревом (правильная организация — не трогая DOM-дерево, если это возможно)?

                В одной компании практикуют обучающие курсы; их учили бекендскому языку; но на финальный коммандый проект им пришлось писать и бек, и фронт. Ну в общем, как оказалось, javascript имеет свой порог входа, если ты хочешь написать на нем, что-то сложнее Hello World.

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

                Легкая сложность поначалу приводит к высокой сложности потом. Что в питоне для построения GUI ты будешь ебать чужую библиотеку, что на javascript ты будешь ебать ангуляр/ембер/реакт.

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

                ты уже начинаешь другой холивар, является ли js нормальным языком для [вставьте нужное], это неинтересный холивар.
                Нет. Я говорю, что javascript плох для всего, кроме console.log(«hello world»). Это действительно не интересный холивар, все и так понятно, разве нет?

                Там течь нечему
                Отлично текут: производительность, память, поддержка фич браузерами, типизация, ооп, многие концепты программирования, мозги.

                Зато отладка родная для браузера
                Sourcemaps

                писать можно хоть в блокноте
                Я тебе могу свой сапер на батниках показать — я его в блокноте писал. Охуенный аргумент чо, давайте все ебашить серьезный софт на батниках, в блокноте же писать можно. У меня еще тыща аргументов за батники найдутся. И устанавливать нихрена не нужно, даже браузерв — на свежекупленном ноутбуке у тебя будут все средства для написания батников.

                А в это время Jetbrains пилит свою софтину MPS — IDE/язык с возможностью написания своих dsl; потому что написание кода без DSL слишком сложно. Знаешь сколько я наипался с тем, чтобы написать калькулятор, который умножает и складывает три числа? И фиг ты прочитаешь в блокноте исходный код, потому что они отошли от концепции «код=текст». И правильно сделали.

                P.S: я задолбался это писать, и надеюсь что ты не устанешь это читать
                • 0
                  Ух ты сколько текста.
                  >Первый язык Basic, на котором я освоил Hello World и сложение двух чисел. Потом Pascal
                  >Я лично боюсь, что первый язык в виде Javascript может отбить желание программировать. Ну или сделает из человека недопрограммиста-скриптовика.
                  Ну тебе скриптовый Basic не помешал, а кому-то js должен помешать. Основная проблема в том, что ты уже смотришь с колокольни собственного опыта и разрабатываешь эдакую программу для техникума/ВУЗа (с ООП, асинхронным етц етц программированием), а первый язык программирования воспринимаешь уже как, не знаю, сексуальный опыт, который определит предпочтения на всю жизнь, и если он окажется плохим, — все, человек испорчен. Так не бывает. Если php-программист — дряной программист и не желает ничего учить, это не потому что его испортил php, а потому что ему его уровня достаточно для зарабатывания бабла, а свободное время он потратит на пиво и телок, если же кто-то начал с php и будет желать расти, ничего страшного с ним не случится. Начинающему нужны не тысячестраничные талмуды, ему нужен basic, в котором он нарисует свой отталкивающийся от стенок прямоугольник, перемножит матрицы или программно синтезирует и проиграет звук. И все это доступно в js из коробки.
                  А когда наберется опыта, человек уже сам поймет что ему нужно. Питон тут тоже неплох (хотя неструктурный basic уже не годится), но питон — это уже нужно пердолиться в консоль, устанавливая pyqt (я даже не представляю как это под windows делается), pyaudio и прочее, лиспы годятся только для тех, кто уже с детства программирует и ему дают MIT 6.001, а не для нормальных людей со среднестатистическим програмистским IQ.
                  И далее весь твой текст базируется на том, что раз на js тебе не нравится писать большие проекты («давайте все ебашить серьезный софт на батниках»), значит это плохой язык для начинающих, ведь начинающие только и делают, что пишут большие проекты. Начинающему не нужен ни PyQt, ни WPF, ни Angular, однако только js дает разумную «бейсиковую» альтернативу в виде canvas. А остальное будет только отвлекать от сути, а суть — дать человеку современный basic. И это не батники и не даже не vbs-скрипты на WSH. Зашел на jsfiddle и вперед.

                  >Ты хочешь сказать, что в вебе стабильность и ничего не меняется?
                  На том уровне, о котором я говорю — да. Когда появился canvas и audio. До того я рекомендовал питон. Хотя надо было рекомендовать руби. C# неплох, даже хорош, как первый статический язык, но лично мне VB6 нравился тем, что дефолтным типом там был Variant, и я не считаю, что люди должны начинать со статики — опять же, чисто по своему опыту.
                  • +1
                    1. Меня задолбала over-all сложность программирования и криворукость макак-программистов. Здесь тупо не в IDE дело. JS только приносит хаос, он не дает ничего хорошего.

                    2. Ты по прежнему настаиваешь на том, что устанавливать софт для программирования — это большая сложность. Я с тобой не согласен. Блин, есть же куча языков заточенные под создание просто игр. Типа love2d. Почему canvas лучше?

                    3. Ты сам смотришь со своей колокольни и думаешь, что lisp сложен. Нет, он не сложен, он другой. Он не для умных, он для тупых и ленивых. Просто ты привык к C-подобным языкам, вот тебе его синтаксис и выносит мозг.

                    4. Ты подменяешь понятия. Я не концентрируюсь на том, что js плох для серьезных проектов. Цитата: «Я говорю, что javascript плох для всего, кроме console.log(«hello world»)»

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

                    У нас тут спор немного заходит в тупик, мы начинаем повторяться. Возможно стоит остановиться.
        • 0
  • 0
    Надо всесторонне развивать в обучении, мне кажется. Показали на питоне основы программирования, на js — основы веб-программирования, на чем-нибудь еще (C#) — десктопные приложения с GUI. Еще javascript не очень подходит для знакомства с ООП, о котором вообще-то в современном программировании нужно иметь хотя бы представление.

    Хотя тут многое зависит от того, кому вы преподаете программирование. Если это общий курс информатики для старших классов или начальных курсов — ну пожалуй можно дать немножко основ на питоне, потом немножко фана на js.
  • 0
    >Или лучше сначала лучше выучить Javascript, а потом тот, который построен поверх?
    почему бы и нет :)
    логично же, многие предлагают начинать с ассемблера, то есть языка платформы
    но, по-моему, тут тогда становятся актуальными аргументы за С
    кроме того, эти языки похожи

    оффтопик
    >ниже javascriptа в вебе ничего нету
    есть flash, в котором в свою очередь нет ничего ниже ABC
    в java — ниже байт-кода
    в silverlight — CIL
    еще ниже — плагины

    >отсутствие полнофункциональных приложений в вебе
    есть, например, Google Sheets, Google Mail, есть даже IDE и audio tools
    • 0
      почему бы и нет :)

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

      есть flash, в котором в свою очередь нет ничего ниже ABC

      Который требует поддержки браузером/плагином и не работает на iOS
      в java — ниже байт-кода
      в silverlight — CIL
      еще ниже — плагины

      И показывать пользователю плашку, мол вы ололо, у которого не установленная Java/Silverlight/Плагин? Или еще лучше: вы полное ололо, потому что купили кирпич, на который нельзя поставить спец. плагин, через который работает наш сайт? Или может сказать, что мы тут модные и используем NaCl, поэтому вы должны быть счастливым обладателем Chrome?

      есть, например, Google Sheets, Google Mail, есть даже IDE и audio tools

      Эмм… Вы это называете полнофункциональными приложениями? Даже моя бабушка имеет больше функций. Кроме того, на каждое приведенное вами приложение я могу назвать как минимум 2, или возможно десяток, или возможно сотню десктопных/планштеных/смартфонных приложений, которые это умеют.
      • 0
        Даже моя бабушка имеет больше функций
        А светодиодом она моргать умеет? :-)
        • +1
          Мне больше понравилось это:
          >чтобы отбить желание связываться с вебом
          да что же они все в веб лезут, не кому челноки в космос запускать
          • 0
            Ничё, скоро появятся челноки с Node.JS…
            • +1
              О, теперь и ракеты падать будут асинхронно.
              • 0
                Будто что плохое… Не хотелось бы, чтобы на меня синхронно ракеты падали.
                • 0
                  Вы не понимаете сути синхроности/асинхронности.
                  Синхронный код приведет к тому, что запустят первую ракету, она упадет, запустят вторую ракету, она упадет, запустят третью ракету (т.е. по очереди запускаем и блочим исполнение пока не завершится полет ракеты)
                  Асинхронный код приведет к тому, что запустят все ракеты и они упадут фиг знает когда, но при равном времени полета примерно в одинаковое время
  • 0
    Это смотря где. Кумир или Интал для школьников, а также визуальные конструкторы. Большая часть их не будут программистами, зато есть необходимые среды.
    У микроэлектронщиков студентов наверное сразу Си. У веб-программистов наверное сразу Python.
  • +4
    Мне кажется, весь этот холисрач разражается в любой подобной теме исключительно по одной причине: программирование уже по факту разделилось на множество узкоспециализированных ниш со своим инструментарием и своими подходами, но программисты по-прежнему воспринимаются как «специалисты по всему» и к их подготовке тоже пытаются подходить с позиции обучения универсала. По факту же железячники, осестроители, десктопщики, серверщики, вебари и мобильщики по подходам, инструментам и вообще складу мышления уже давно слабо пересекаются. Лучший мастер фронтэндов не напишет нормальный драйвер, авторы лучших веб-серверов не напишут сносный CAD, и обратное тоже верно.
    Мы пережили уже то время, когда «компьютерщик» был универсалом. Слишком много областей применения, слишком много инструментов, в одну голову абсолютно всё уже не влезает.
    Много вы знаете лётчиков, способных в одиночку сконструировать и собрать самолёт? А когда-то это была одна профессия.
    Опять же отдельная тема — «казуальные» программисты. Математики или физики, пишущие сами себе программы для своей магии. Лингвисты и прочая околотекстуальная публика (по собственному опыту: на работе меня считают «программистом», хотя там всего программирования — пара модулей с CPAN да пачка регулярок). Биологи, химики, %anyScienceOrTechnologyName% etc.
    Нет уже серебряной пули и бесполезно её искать хоть в голосованиях, хоть в умопостроениях, хоть в любом сколь угодно богатом опыте. Есть задачи и есть инструменты.
    Максимум, чему можно научить «вообще» — основные алгоритмы, структуры данных и умение выбирать инструмент под задачу. Всё.
  • 0
    Gambas — свободный развивающийся аналог Visual Basic. Ну и Tcl неплох ещё, но его упоминали уже. Преимущество в том, что на обоих можно будет в будущем клепать реальные приложения, причём с хорошей интеграцией на разных платформах.
  • 0
    Нельзя начинать изучение со слаботипизированного языка, это сразу отучивает писать правильно и следовать какому-то стилю или стандарту, я сам начинал с PHP и JS и точно могу это сказать.

    PHP, мне кажется, нельзя никому изучать, не то что первым языком, а вообще
    JS мало того что слаботипизирован, так еще и отсутствует нормальная поддержка ООП (прототипы и прочее), и каждый раз смотришь на код и хочешь все удалить и написать снова + отсутствие кроссбраузерности.

    Идеальными языками будет C++, который научит понимать выделение памяти и само устройство этой памяти, а также ссылки, указатели и прочее, или Java (C#), где есть поддержка ООП, которая учит по-другому думать и мыслить.

    Какая-нибудь Scala будет очень сложна новичку, как говорилось ранее, всякие implicit conversions и тд.
    • 0
      Что в php такого за гранью зла? Последние версии вполне удобоваримы, есть множество примеров (symfony, yii2) когда на нём пишут хороший код (ООП, читаемость).
      • –1
        Во-первых, он интерпретируемый, то есть медленный по сравнению с C++, Java и другими, во-вторых слабая типизация — причина многих ошибок и проблем в архитектуре кода, в третьих в PHP очень много неоднозначностей и противоречий, о чем хорошо написано тут.
        • 0
          Мда. А разве ещё остались скриптовые языки, которые не используют JIT-компиляцию и последующие выполнение байткода? (Ну, кроме шелл-скрипта.)
          • 0
            Да большая часть. Они обычно только компилируют исходник во внутренний ассемблер своей VM, обычно стековой.
            • 0
              Вот именно. Они все компилируются в свой байткод и потом VM выполняет этот байткод. Ну и чем это отличается смысле исполнения от той же джавы? В сущности, разница только в одном: компиляция происходит при каждом запуске (точнее, каждой загрузке скрипта), но вот видим цикл, сколько раз он компилируется? Один раз. Выполняется? Много.

              К тому же, вам пример с tcl: он используется как встраиваемый скриптовый язык. Процесс с загруженным и единожды скомпилированным байткодом может висеть месяцами, и выполняться будет только этот байткод, без перекомпиляции. Где вообще тут хоть какое-то отличие от джавы?

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

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

                а это не костыли, которые были придуманы, когда все поняли, что все жутко тормозит или это было сразу так?
              • 0
                Разница заключается в том, что в динамическом языке без частичного вывода типов и JIT (как в V8 или Julia — но не как в cpython) нужно постоянно проверять эти самые типы, постоянно искать методы по ключу словарях и т. п. То есть, условно — любой объект в языке есть HashMap[String, Object] из Java и любой obj.x это поиск в словаре, бросание исключения, если ключ не найдет, проверка типа найденного объекта, приведение типа, и, наконец, работа с объектом. Это все медленно, даже если весь байт-код преобразовать в машинные коды, причем настолько медленно, что особого смысла в этом нет. А написать JIT, который бы выводил типы и делал нормальный статический код, не так уж и просто и накладывает дополнительные ограничения на язык.
        • 0
          И что? Задач в которых требуется максимально возможная производительность на самом деле не так и много, время и затраты зачастую куда важнее
          Ну и в довесок: А ничего что Java тоже интерпретируемая (JVM, Dalvik)? И это кстати свойство реализации, а не языка, для PHP тоже есть компиляторы и интерпретаторы c JIT, а начиная с 7 версии это (JIT) обещают сделать и в Zend реализации

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

          Ну а по поводу неоднозначностей и противоречий там много написано по делу, но половина из этого решается соблюдением CS и использованием всегда ===, что-то устарело, например пункт про finally, так что работа идет

          в общем в вашей фразе:
          PHP, мне кажется, нельзя никому изучать, не то что первым языком, а вообще

          чувствуется снобизм и воспоминания о личном неудачном опыте

          • 0
            Java тоже интерпретируемая (JVM, Dalvik)


            Все таки интерпретация байт кода и исходного отличаются.

            PHP тоже есть компиляторы и интерпретаторы c JIT, а начиная с 7 версии это (JIT) обещают сделать и в Zend реализации

            Ну а по поводу неоднозначностей и противоречий там много написано по делу, но половина из этого решается соблюдением CS и использованием всегда ===, что-то устарело, например пункт про finally, так что работа идет


            Я бы тогда сказал, что PHP в том виде в котором он сейчас есть, хуже других, может в будущем что-то изменится.

            воспоминания о личном неудачном опыте


            Не то, что неудачном, я бы сказал не о самом лучшем
    • +2
      >я сам начинал с PHP и JS и точно могу это сказать.
      И что, хреновый программист получился?
      • 0
        Нет, я перешел на Java и очень рад этому. Конечно PHP меня многому научил, но теперь я всем могу дать совет не повторять свой путь.
      • 0
        PHP не привил какой-то стиль, пришлось заново разбирать паттерны с переходом на джаву и вообще всю архитектуру.
        • 0
          Всегда казалось, что php — это java для бедных:
          php:
          class C1 extends C2 implements I1, I2
          

          java:
          public class MyFragment extends Fragment implements SomeInterface{
          

          интересно, есть ли еще языки с такой формой записи наследования?
          • 0
            Очень похоже в Scala:
            class C1 extends C2 with T1
            
        • 0
          Так это и хорошо. Если начинать сразу с Java можно и не понять все эти магические пассы. С опытом можно будет открыть для себя какую-нибудь скалу и увеличить свой скептицизм в отношении унылого ява-ооп. По-моему 90% начинают с простых скриптовых языков (от бейсика для zxspectrum до php), но потом с апломбом говорят новичкам «ну уж вы то начинайте с ...» и далее любимый язык от явы и с++ до хаскеля и коммонлиспа.
          • 0
            Мне кажется лучше сразу приучить новичка к строгой Java, чтобы дать ему понимание типов, ооп и тд, чем давать ему возможности js или php.

            Тем более насколько я знаю, в большинстве случаев людям сложно перейти с PHP на ту же Java, так как она для них слишком сложна.
            • 0
              >Тем более насколько я знаю, в большинстве случаев людям сложно перейти с PHP на ту же Java, так как она для них слишком сложна.
              А сразу на Java с чистого листа будет проще что ли? Когда не знаешь синтаксис цикла while и зачем он вообще нужен, а нужно еще и ковыряться с тем, чем Integer отличается от int вместо обучения собственно основам алгоритмизации? Опять эта предпосылка, что язык может испортить человека.
              • 0
                Тут мне кажется зависит от метода обучения, если цель — научить писать алгоритмы, то подойдет почти любой язык, а если именно учить писать программы (качественный код), тут очень важно донести все принципы и паттерны.

                Насчет Integer и int, мне кажется, что один раз проще объяснить, что коллекция может хранить все что от Object наследуется, а int таковым не является, чем показывать, например, что в массиве вы можете хранить все что угодно, а потом проверять во время выполнения.
                • 0
                  Конечно стирание будет сложно сразу понять, но со временем почему бы и нет.
                • 0
                  И какой смысл, скажем, веб-программисту или инженеру знать тонкости боксинга в Java? Это уже не «программирование вообще», а некоторые заморочки конкретных языков, которые вовсе не являются обязательными и зачастую эти проблемы в принципе отсутствуют в других языках. И, главное, понимать такие вещи лучше когда уже знаешь, что там происходит под капотом, а не тупо заучивая правила «коллекция может хранить все что от Object наследуется, а int таковым не является». Отсюда и вывод, что человек должен уметь написать сортировку пузырьком и падение шарика на любом динамическом языке, а далее сам решать, что ему нужно, постепенно заполняя пробелы и в других областях.
                  • 0
                    тупо заучивая правила «коллекция может хранить все что от Object наследуется, а int таковым не является»


                    Чтобы написать алгоритм, новичку этого будет достаточно.

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


                    Можно тогда, как я и предлагал, C#, в нем нет такой проблем. Просто Java мой основной язык.
    • 0
      ООП будет на es6 :)
      • 0
        Да, я видел стандарт, только вот в JS к ООП пришло к 6 версии, а других оно было с самого начала.
        • +1
          >других оно было с самого начала
          у большинства языков не было
          так же можно сказать, что, например, у java не было ФП, и только к 8 версии оно появилось, «а других оно было с самого начала.»
          • 0
            Да, но java не выставляла себя языком, у которого есть ФП, а javascript, как раз наоборот, городит классы через функцию-конструктор.
            • 0
              ничто никому никаким себя не выставляло :)
              • 0
                Ну это понятно, но зачем надо было делать недоклассы, почему нельзя было сразу нормальные сделать?
                • 0
                  нормальные — это какие? с обменом сообщениями, на виртуальной машине, со сборщиком мусора и динамической типизацией, как в smalltalk :)

                  вопрос не по адресу, но где то видел такое объяснение, что раньше на странице большинство объектов создавались однократно, и писать класс, чтобы создать один его экземпляр как-то неправильно, так как нет повторного использования кода
                  • 0
                    Как мне кажется, нормальные — это наличие интерфейсов, классов, может быть абстрактных классов, нормального наследования, но это мое мнение.
                    • 0
                      Интерфейсы в языке с duck-typing не нужны по определению
                      • 0
                        Хотя бы нормальное наследование.
                      • 0
                        Хотя интерфейсы тоже бы не помешали, один из принципов ООП говорит о том, что нужно предпочитать композицию наследованию, а как это делать нормально без интерфейсов?
                • 0
                  Потому, что javascript с самого начала не рассматривался как универсальный язык. Классы там были просто ни к чему.
                  • 0
                    Наверное только это и объясняет их отсутствие. Сейчас, как мне кажется, классы нормальные просто необходимы, что написать полноценное приложение.
  • +1
    Прошу прощения, если повторю кого-то.

    Мне кажется, вопрос надо ставить не «Какой язык лучше?», а " А что нам, собственно, нужно?".

    Если Вы хотите дать в короткие сроки хорошую алгоритмическую базу своему подавану, то, несомненно, Python, поскольку там есть мало вещей, которые будут отнимать у вас время («А что значит static? А void?», «А что значит звездочка перед переменной?»).

    Если Вы хотите по-олдскульному не уходить далеко от машинной архитектуры (относительно), то это Си.

    Если Вы хотите попробовать начать обучение программированию сразу с ООП (кажется, Дрейер выпустил книгу по C# для детей), то Java.

    Ну а если Вы хотите просто заинтересовать его, и не важно, станет ли он программистом или нет, то тогда… JavaScript. Причины Вы сами описали в статье. (господи, пальцы аж не слушались:D)

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

      Хотя сами алгоритмы (серьезные) тоже можно давать на питоне, но к тому времени язык уже не будет таким уж принципиальным выбором
    • 0
      >Если Вы хотите дать в короткие сроки хорошую алгоритмическую базу своему подавану, то, несомненно, Python, поскольку там есть мало вещей, которые будут отнимать у вас время
      Javascript по этой причине
      • 0
        Не согласен.
        В JS слишком уж гибкая работа с типами.
        1 + '0' = '10'
        1 + '0' — 0 + 1 = 11

        + области видимости. Когда дело дойдет до функций, подаван будет часто совершать ошибки, связанные с ними. А такие ошибки ему будет сложно понять самостоятельно. Зачем лишний раз усложнять?

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

        upd. поиграться — то есть просто показать формочки, да кнопочки. Но я не считаю такой подход к программированию хорошим. Скорее, наоборот.
  • –3
    Давно не читал большего бреда. Занёс в закладки, обязательно порекомендую, если вдруг спросят совета, как сделать из человека ментального инвалида.
  • 0
    Поддержу Python. Во-первых ни у кого не возникает вопросов, по непонятным static, class, void, String[] args, и преподавателю не надо говорить, что «мантра» такая. А во-вторых, студентов дальше ждут курсы машинного обучения, криптографии, выпуклого анализа. В Python и библиотек достаточно, и боли в реализации не так много, как на Java или C++. Производительность программ страдает, да, но ведь цель — знакомство.
  • 0
    У меня такое чувство, что это одна из вечных тем. Лет через 10 создай на хабре опрос «С какого языка нужно начинать обучение программированию?» так накал страстей будет не хуже чем сейчас.
  • –2
    Если выбрать для обучения программированию один язык, то это должен быть язык который с легкостью поддерживает все возможные стили и парадигмы программирования. На сегодняшний день один из лучших вариантов для практического применения это Clojure. Или академический вариант — Oz ( поддерживает функциональный, процедурный, декларативный и объектно-ориентированный стиль, а также вычисления с ограничениями, параллельные вычисления и прочее).

    Если же брать обучение программированию на основе нескольких языков, то это должны быть Lisp, ML, C, Prolog и Erlang.
    • –1
      Я бы еще в последний список добавил ассемблер, только не x86, а что-нибудь классическое, типа PDP-11. Или MMIX.
  • 0
    Ссылка на перевод стать Фрэнка Эванса по выбору языка программирования для школьника по тремя составляющими: цель, способности и уровень знаний. www.edutainme.ru/post/kak-vybrat-yazyk-programmirovaniya/
  • 0
    Моё мнение:

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

    1 язык. Динамический со строгой типизацией. Под это подходит Python. Позволяет максимально абстрагироваться от технических тонкостей и изучать алгоритмы. Позволяет ЗАИНТЕРЕСОВАТЬ и не отбить интерес у максимального процента учеников. Наглядные программы, богатейшая библиотека; простенькие игры, сайты, графика — всё тут.

    2 язык. Статический со строгой типизацией. Например C#. И уже на нём начинать более глубоко изучать структуры данных, наглядно показывать как они (и алгоритмы) влияют на производительность, потихоньку знакомить со «взрослым» ООП/дженериками и прочими современными средствами промышленного программирования.

    Всё! Это минимальный обязательный набор. На этом можно остановиться! Полученных знаний вполне хватит чтобы показать новичку что из себя представляет программирование и вполне позволит тому оценить, хочет ли он вообще связываться с этим в своей жизни. Он уже вполне может начинать работать современным программистом, незабвенно шлёпая CRUD'ы в энтепрайзе.

    И дальше лишь по желанию ученика ему можно показать функциональное программирование.
    И системное (C/Rust/и т.д.). Причём c++ я бы не рекомендовал.
    Если речь идёт о школе — то и то и другое — на неклассных факультативах. Если об универе — на отдельных предметах.

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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.