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

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

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

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

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

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

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

Эмм…

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

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

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

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

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

Hexlet 52,05
Практические уроки по программированию
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 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. Можно в браузере.
                                                                                          • –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 рекомендую сразу использовать