Как стать автором
Обновить

Комментарии 92

А не логичней бы для этой цели было использовать Питон?
Haskell!
Питон для обучения Java? Странный выбор, не находите?
В том то и дело, зачем детям Java? Статья, собственно, с этого и начинается. Ученым и инженерам (попросту тем, кмоу программирование может быть очень полезно в работе, но конечной целью не является создание потребительского или промышленного софта), на сколько я знаю, куда больше подходит Питон. Тем более, он настоящий Open Source в отлчии от Java.
Скажем, я вот с Вами не согласен. При выборе языка лет 8 назад, мне казалось,
что зная простой язык (Python) будет проще перейти на чуть более сложные:
Java, C и пр. — оказалось с точностью до наоборот. Сейчас обучение Java
дается сложнее, чем если бы я её учил первым языком,
потом перейдя на питон.
А я вот с Вами не полностью соглашусь. Гораздо важнее понимать принципы программирования и уметь думать алгоритмически. Этого проще достичь при изучении более простого языка. После первого простого изучаем что-то серьезное (отлично подойдет «простенький» ассемблер или хотя бы С/С++). Доскональное изучение не требуется, но знать и уметь применять обычные концепции — это надо обязательно. Далее можно переходить по мере надобности к другим языкам.
В итоге, после четвертого-пятого языка все новые вы уже рассматриваете с позиции «а, ну это как там… а это как тут… а вот это прикольно сделали».
Лучше уточню. «Простенький» ассемблер — какого-нибудь контроллера, Z80 и т.п.
Ко всему прочему, это позволит человеку понять «как оно внутри устроено». И будет намного меньше «блондинок», которые даже представления не имеют, с какой стороны у их программы хвост.
Интересно видеть минусы без комментариев. Такое впечатление, что все здесь начинали сразу с чего-то непростого. Прямо-таки ни у кого не было бейсика. Сразу машинный код выучили, а потом уже спустились с Олимпа и осчастливили мир. :D
Когда я начинал программировать — меня уже тошнило от Pascal (куда-уж алгоритмичнее, почти псевдокод), хотя до этого я лишь мельком пробовал VisualBasic и ничего не знал о других ЯП.

ИМХО надо сразу набивать навыки на серьезном языке, вроде Java или C++. Пусть чуть больший порог вхождения, чем в Python, зато дают сильную базу для более легкого перехода на другой язык.
Ну… по поводу серьезности языков можно вести долгие беседы. Но главное то, что на простых языках вроде Basic и PHP человек может научиться азам программирования. И уже хоть с каким-то багажом разбираться с более сложным языком. Если же все будут начинать знакомство с программированием со сложных языков, то в мире скоро останутся единицы программистов. Человеку нужен стимул для развития. И большинству не хватит терпения и упорства в постижении сложных технологий без базы. Вас же в школе не учат на математике сразу дифференциалам, интегралам и прочей высшей математике, верно? Вам сначала дают арифметику, затем переходят к алгебре и далее.
Есть и еще один минус в предлагаемом вами подходе — через несколько лет не останется хороших руководств для изучения языков. Правда, и технологии новые тоже станут появляться все реже. Статей в интернете тоже станет меньше. Ведь далеко не все программисты пишут статьи и книги.

Кстати, вы и сами-то начинали не без базы. Думаю, хоть что-то вы уже знали. Нет, не язык, но основы программирования и алгоритмики. А ведь в каждой книжке для новичков с этого же и начинают.
Интересно, а чем, к примеру, Python несерьезен? Можете ли перечислить его недостатки в плане учебного языка?
Не утверждаю, что Python несерьезен, он просто другой. Прочитав все комментарии тут, я, пожалуй, вынужден согласиться, что Java может и не лучший язык для начального обучения (все таки там слишком много ООП шелухи, ненужной, может даже вредной, на начальных этапах), а вот упомянутый уже несколько раз Python как раз то, что нужно. К слову, к Python у меня самые нежные чувства :-)
Скорее Javascript
Давайте каждый человек в коментариях свой любимый язык напишет?
English?
Я голосую за Brainfuck!
Давайте! :) Не будьте таким занудой! :)
Ожидал комментарий про руби.
А может сразу несколько языков на выбор? Конечно не все подойдут и будет сложновато реализовать.

Хотя наверно главное пробудить интерес, а потом уже кому что и язык не так важен.
Scheme же. Я сколько первых языков перепробовал, только Scheme легко понимается даже (внезапно, да) гуманитариями. Потому что там нет ничего лишнего и крайне низкий порог вхождения даже в сравнении с паскалем/питоном.
По-моему там очень много лишних скобок. Их даже слишком много, в них крайне легко запутаться.
Поэтому я сильно сомневаюсь, что порог вхождения меньше, чем у Python.
Нет, «лишних» скобок там нет совсем. Их вообще совсем не много и запутаться в них невозможно.
Поэтому порог вхождения всё же ниже, чем у Python. А чтобы быть чуть менее бездоказательным, направлю вас к любому из сотен тысяч уже случившихся лиспосрачей. Миф о скобках уже десятки лет является первым упоминаемым и первым развенчиваемым.

Или у вас есть что-то более весомое чем ваше «по-моему» и «сомневаюсь»? Вы тоже попробовали несколько первых языков, в т.ч. Scheme и Python, и на вашей практике синтаксис Python понимался быстрее, чем Scheme? Буду рад послушать, может я не с той стороны про него рассказывал.
НЛО прилетело и опубликовало эту надпись здесь
Надо предложить идею, для будущего Torment сделать смешивание заклинаний на Python/Java.
Идея отличная, я считаю, можно вспомнить Lua и WoW
Дети в 10-12 не особо заинтересованы в языках программирования, как мне кажется.

А вот для дядей 18+ самое оно. В своё время помню баловались чем-то подобным в Террариуме)
Дяди после 18 становятся более вредными и более опытными в умении поломать игрушку.
НЛО прилетело и опубликовало эту надпись здесь
Можно назвать автора и название книжки?
НЛО прилетело и опубликовало эту надпись здесь
Яков Файн, aka Будам, ведущий americhka.us/ и блога на yakovfain.com/. Интересный человек.
еще в твитыре:
@yfain
Отличный дядька, ага.
Для дядей 18+ есть старый добрый Colobot. Сейчас он даже GPL.
Сейчас он даже GPL.

Да это же просто праздник какой-то!!!
Каааак я в него рубился…
Как все лагало и тормозило на 400 Mhz Celeron!!!
Не соглашусь. Я в 12 намного больше жаждал программировать чем в 18. И довольно успешно делал это на «Робике» (Аналог спектрума). А с 18 до 22х я занимался личной жизнью =) бегал по бабам в основном.
Я бы с удовольствием поиграл в такие «игры». Желательно, чтобы их было побольше и не только для изучения Java Script!
Не путайте Java и JavaScript.
заработался)
Поддерживаю, в этом есть определенные преимущества для применения человеком мозгов. Написал спел и смотришь как он монстриков раскидывает.
Я то думал, что это уже готовый продукт. А так, пока только собираются…
Scala, closure, groovy… Kotlin ещё вот-вот родится
Тогда получается, что JRuby, JPython… — внебрачные.
Интересно. История о Гарри Поттере, наверное, выглядела бы где-то так:

import org.magic.Magician;
import org.magic.HarryPotter;
import org.world.Person;
import org.world.World;

public class MagicWand extends Wand {
    public void avadaKedavra (Person enemy) {
        if (enemy) {
            enemy.kill();
            World.removeObject(enemy);
        }
    }
}

...

public class Voldemort extends Magician {
    public void live() {
        MagicWand magic_wand = new MagicWand();
        people = World.findAll(object_type="person");
        while (int i = 0; i < people.count(); i++) {
            try {
                magic_wand.avadaKedavra(people[i]);
            } catch (HarryPotter.ImmortalityException e) {
                magic_wand.avadaKedavra(this);
            }
        }
    }
}

...

public class World {
    public void main() {
        ...
        Voldemort voldemort = new Voldemort();
        voldemort.live();
    }
}
Кажется, надо заимпортить Wand
Не надо, она импортируется магическим образом :)
Полиморфизм класса Voldemort — неприемлем!
занудамод: кстати об изучении джавы — именованные параметры у методов джава не понимает :-)
Это не именованный параметр. Переменная object_type принимает значение person, и передается в метод findAll как обычно.
А зачем она там?
Понятия не имею :-)
Логично, автор-то не Вы.
denis_g, зачем там переменная (необ'явленная)?
Такое возможно, если object_type это поле какого-то родительского класса Voldemort.
Вот за это я и не люблю когда пропускают this.
Moar enterprise, patterns!!!
Main loop в live() не помешает, вдруг кто появится в мире! Обязателен multithreading, да и if (enemy) надо что-то сделать.
доступна на оф сайте, но под Mac OSX 10.5 and Above
И что с этим не так?
Java считается мало подходящим для того, чтобы стать первым языком программирования...
… и первый же листинг это подтверждает!

Сравните пример с сайта:

import june.*;

public class Flame extends Spell
{
  public void cast()
  {
    Enchanted target = getTarget();

    thing.onFire(true);
  }
}


С чем-то вроде

create_spell Flame do
   Fire.cast target, for: 10.seconds
end

Flame.cast target


В первом варианте целый сонм «мусорных» с точки зрения образования детей конструкций: директивы import, специфика ООП Джавы, класс, метод, модификаторы доступа, имплементация интерфейсов или абстрактных классов, выделение памяти, итераторы и т.д. Для обучения Джаве может и хорошо, но для обучения программированию, напомню, детей (!), совершенно бесполезно и, скорее всего, даже вредно.
Зато первый вариант намного читабельней для детей.
Намного читабельней чем DSL? Да вы шутите!

— Дяда, а что такое import? А что такое class? А что такое public? А void? А зачем это?
— Заткнись и пиши, это магия.
Вынужден согласиться. Об этой стороне вопроса не подумал.
Я немного занимался обучением и общался с ребятами, которые обучают детей, в частности из проекта ruby4kids. Очень много проблем составляют разные синтаксические конструкции, смысл которых не понятен детям. Они из «заучивают», как мы заучивали сочетания клавиш при игре в восьмибитку, без понимания смысла, просто потому что так сказали, а через какое-то время начинают думать, что так и надо. Я вижу в этом сильную ловушку.

К примеру, не будешь же обьяснять ребенку, что в Java фигурные скобки нужны для парсера, а круглые скобки для отличия вызова метода и обращения к полю. Для этого вводят более натуральные понятия, к примеру, в школе у нас были языки с конструкциями «начало цикла», «конец цикла», «если-то-иначе-все»; а так же упрощают сам язык, делают его или чисто декларативным или очень простым императивным (скорее склоняясь ко второму варианту). Опять же, пользуясь языками общего назначения, можно наступить на грабли с синтаксисом и семантикой, о которых детям знать не нужно, потому что это условности реализации конкретного языка, к примеру отличия двойных и одинарных кавычек. Ребенку нужно давать все в одном варианте.

Вспоминая, с какой сложностью некоторым инженерам (с реальным опытом программирования!) дается концепция ООП, мне кажется, детей грузить этим не стоит.

В итоге получается, что сложность языковых конструкций, необходимость знать больше, чем требуется для составления простых алгоритмов, делает java не самым пригодным для обучения детей языком (что не мешает моим теплым чувствам к ней). Гвоздем в крышку гроба может стать неожиданный для дитя вывод ошибок, в виде красивого стек-трейса на 200 строк (некоторые проекты этим грешат). Поэтому лично я на 100% склоняюсь к DSL для обучения, с минимумом команд и условностей. Черепашки, лабиринты из кумира в детстве определили мой выбор профессии. Не знаю, что было бы, если бы на меня сразу вывалили всю мощь jdk.
А я уверен, что программист от рождения, даже в дошкольном возрасте в легкую справится с ассемблером. Там же всё просто: перекинуть число из а в б, сложить что-то, вычесть, а если ребенку, понявшему что такое регистр, показать как сделать цикл, то он будет без ума от счастья:) И тут вообще не нужны скобки, инклюды, классы — чистейшее программирование. Ну а животное от рождения, конечно захочет жрать трехмерные морковки и собирать кристаллы. На выходе — непонятно что.
Замечатльная у вас классификация!

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

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

Я не про избранности, а про склонности. Если человек вменяемый и ему интересно программирование, то не надо ему голову морочить морковками. А если он будет драться и плакать, лишь бы не программировать, то приходится обходить его природу этими самыми способами. Т.е. ассемблер первично, гномы с эльфами — вторично. Середина из ява/питона/с/руби, где чтобы что-то ребенку объяснить надо 95% наврать и упростить — забивание светлых умов глупостью. Знания чистые должны быть. Вы бы, наверно, не очень хорошо отнеслись к языку, где фигурная скобка — морковка, а точка с запятой — яблоко и наша избранность тут не причем.
Вы считаете, что изучение DSL равносильно изучению программирования?
Учебный язык должен быть простым, с минимум наворотов.
Java, конечно, не очень подходит для этой роли, но Ruby не лучше.
Я считаю, что основы алгоритмизации с помощью DSL давать лучше, чем с помощью Руби или Джавы. DSL, который я привел, написан в естественной форме DSLей на Руби, но никто не мешает сделать его каким угодно, и обрабатывать каким угодно интерпритатором, хоть на Java, хоть на Кложуре, к примеру:

begin spell
name "Flame"

use 10 mana
10 times cast "Fire" to taget

end spell

Ну тогда это уже новый язык, а не не Ruby или некий DSL. Писать на Ruby-DSL'ях удобно если вы уже знаете Ruby. Аналогично и с другими языками. Вон, на Scala тоже удобно писать DSL'и, но учить программированию на этом языке…
Извините, я написал DSL на Руби в качестве примера, не вкладывая какой-либо смысл в то, что учебный пример должен интерпритироваться именно Руби.

DSL это и есть новый язык, не вижу противоречий.
Какая магия? У меня четырёхлетний сын уже это встречает в играх. Ходилки с апгрейтом игрока и найденными итемами хорошо объясняют и import, и классы, и наследование, и публичные методы.
Поясните, как 4х летний сын, играя в игрушки, постигает азы пакетной организации кода в java? Мой комментарий сводился к тому, что сама инструкция import foo.*; не говорит малышу ни-че-го. Никакого смысла для него она не имет, а значит, ее нужно убрать. Что там импорт, точка с запятой в конце выражений вам кажется нормальной, но для ребенка она не понятна, как и само деление текста в коде на операцию-оператор-операнд.

Вот так я вижу то, что действительно важно для ребенка (оставив в стороне вопрос, откуда тут взялась thing и что это значит).
import june.*;

public class Flame extends Spell
{
public void cast()
{
Enchanted target = getTarget();

thing.onFire(true);
}
}
Всё-таки, мне кажется второй приведённый вариант не сильно лучше с точки зрения понимая человеком, не имевшим дело с программированием (да и вообще с первого взгляда не видно, где параметры метода, где тело, где вызов). Чистый python как-то более интуитивен:

def cast(target):
    target.set_fire()


Ну а основы языка, типа фигурных скобок (в яве) или отступов (в питоне), основные ключевые слова (которых в питоне поменьше) в любом случае как-то нужно ввести и объяснить.
Почему все цепляются за синтаксис примера, не обращая внимания на посыл? Можно написать DSL без этих особенностей, без скобок вообще, без отступов, пользуясь грамматическими конструкциями языка: глагол-дейсвите, прилагательное-свойство, существительное-предмет. Вопрос со скобочками или точками с запятой это вопрос к скорости написания интерпритатора и не более.
Вспоминаются ещё «Сказки Дядюшки Компьютера» для спектрума, со сказками про Блоху, Прапора, Коробочку и т.п.
Слава Богу, что у меня дочка, а то бы уже усадил играть ))
Хм. Так в статье же написано что было проверено на школьницах?
Пусть будет проверено хоть на котах — я не хочу, чтоб моя дочь была программистом. Не хочу никого обидеть, но не хочу, чтоб она была похожа на любую из моих сотрудниц.
Опыт программирования в жизни очень хорошо помогает различать причину и следствие, а так же видеть алгоритмику управления. В современном мире — это полезные способности.
Не опасаетесь, что сотрудницы прочитают и обидятся?)
По моему как то это всё сложновато для игры, особенно для детей.
игру тестировали на 40 девочках-школьницах

Довольно оригинальный выбор фокус-группы.
Давние традиции 魔法少女、то есть девочек-волшебниц. Что в аниме, что в манге, что в ранобэ, что в романах визуальных.
Сделали бы её mmorpg и надо было бы самому программировать себе заклинания вещи и т.д. конечно же многое будет ограниченно библиотеками для сохранения баланса уровней. Но думаю что опытный разработчик используя даже простые «магические» функции сможет завалить неопытного более высокого уровня. Еще будет неплохо, если можно будет как то найти дыру в заклинании противника и блокировать его ;)
А ещё лучше, если сделать выбор языка. Ну вот как в обычных MMO выбирают класс, так тут — язык.
Пусть Java будет вместо танка — такой же жирный, неповоротливый, но абсолютно безопасный — за ним вся пати как за каменной стеной.
На роль саппорт-класса (хила) подойдёт Bash — он ведь и воскрешать сможет (если процесс сдох — перезапустить), и спаивать пати воедино, и управлять работой пати, и баффать (выставляя определённые параметры запуска и приоритеты процессов).
На роль ДД отлично подойдёт Erlang — благодаря идеальному распараллеливанию он позволяет единовременно наносить чудовищный урон, в том числе и по площади.
C++ будет рогой. Благодаря уникальному скиллу «Звезда Пустоты» (void *) сишник сможет незамеченным проникнуть в любые объекты. Ну и скорость у него опять же максимальная, и требует повышенной пряморукости, чтобы хоть чего-то добиться.
Да! И чтобы приходилось выдумывать оптимальные алгоритмы для решения задач, типа «логарифмическое» заклинание сильнее «квадратичного».
Почему-то вспомнился «Паркетчик» для MS DOS… Простейшие алгоритмы неплохо на нем изучались детьми…
Дети разные бывают, и подходы разные нужны. Кому то нужно через игру поддерживать интерес, а кто то поглощает все как губка, и в третьем классе делает робота с гироскопом, которые ездит на двух колесиках. В качестве мотивов у большинства — это либо сделать свою игру, либо взломать что то, реже сделать программу для продажи.
Разного рода абстракции дети тоже воспринимают очень по разному, непонятные алгоритмы с блоками дают в школе, и почему то знания в школе как то не охотно воспринимаются. Другое дело добровольные занятия.
Получилось так, что мне удалось поэкспериментировать с группами детей разного возраста, от 5-6 класса до 7-10 класса. Раньше конечно учить можно и нужно, но могут быстро потерять интерес и относятся как к игре, и нужно больше усилий для поддержки внимания. Самое оптимальное это 7-8 класс, уже и в школе основы дают, и практика есть, и главное осмысленное желание.
Прежде чем начать учить детишек программировать, очень долго выбирал язык. Не абстрактный и не понятный, или перегруженный странными структурами, а такой, чтобы сел, написал код, увидел результат без всяких хлопот и танцев с бубном. Очень хотелось Си, чтобы стразу дисциплинировал и не прощал ошибок. Но подумав, что нельзя так с детьми, думал об ActionScript, но вспомнил нелюбовь его мобильными платформами, в конце концов остановился на JavaScript. Си-подобный язык прощающий ошибки, простая и понятная первая программа, не требует никаких оболочек, программы работают везде. Да не скоростной, но для детских проектов вполне хватает. Потом легко можно перейти на любой другой, изучив базовые конструкции и алгоритмы.
А идея обучать через игру просто замечательная, работает на все 100%, у меня это Minecraft, в котором создаем логические схемки и изучаем как работает компьютер изнутри. Как то же нужно учить новое поколение программистов, которые не будут оторваны от железа, и понимать что происходит внутри железки при работе программы.
Интересно, что они реализовали это на Unity3D и сами прикрутили Java. Назвали это «The June Project» (https://github.com/srfoster/June/).
Понравилась строчка из README:
Plus, it's not just Java. This project allows any external program to manipulate the game state of a running Unity program. I hope to soon see related projects cropping up: perhaps a Pune Project (Python + Unity), a Rune Project (Ruby + Unity), or a Hune project (Haskell + Unity).

Кто там хотел Haskell, Python или Ruby? Начало положено :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории