Что самое крутое, что вы можете сделать в <10 строках простого кода? Помоги мне вдохновить начинающих!
Я ищу самую классную вещь, которую вы можете сделать в нескольких строках простого кода. Я уверен, что вы можете написать набор Мандельброта на Хаскеле в 15 строк, но за ним трудно следовать.
Моя цель - вдохновить студентов на то, что программирование - это круто.
Мы знаем, что программирование - это круто, потому что вы можете создавать все, что вы себе представляете - это идеальный выход для творчества. Я хочу вдохновить этих новичков и преодолеть как можно больше горбов раннего обучения.
Теперь мои причины эгоистичны. Я преподаю курс Intro to Computing группе из 60 полуинженеров, наполовину бизнес-специальностей; все первокурсники. Это ученики из неблагополучных вузов. Исходя из моего прошлого опыта, группа, как правило, делится следующим образом: несколько рок-звезд, некоторые, которые очень стараются и вроде как получают это, те, кто очень стараются и с трудом получают это, и те, кому все равно. Я хочу охватить как можно больше таких групп настолько эффективно, насколько смогу. Вот пример того, как я бы использовал компьютерную программу для обучения:
Вот пример того, что я ищу: 1-строчный VBS-скрипт, чтобы заставить ваш компьютер общаться с вами:
CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it")
Я мог бы использовать это, чтобы продемонстрировать порядок операций. Я показываю код, позволяю им поиграть с ним, а затем объясняю, что в этой строке много чего происходит, но компьютер может понять это, потому что он знает правила. Тогда я бы показал им что-то вроде этого:
4(5*5) / 10 + 9(.25 + .75)
И вы можете видеть, что сначала мне нужно сделать (5*5). Тогда я могу умножить на 4. И теперь я создал объект. Деление на 10 - это то же самое, что вызов "говорить" - я не могу говорить до того, как у меня есть объект, и я не могу разделить до того, как у меня есть 100. Затем на другой стороне я сначала создаю InputBox с некоторыми инструкциями о том, как его отобразить, Когда я нажимаю ввод в поле ввода, он оценивает или "возвращает" все, что я ввел. (Подсказка: "оооооо" издает забавный звук). Поэтому, когда я говорю "Говори", говорить нужно с правой стороны. И я получаю это из InputBox.
Поэтому, когда вы делаете несколько вещей в строке, например:
x = 14 + y;
Вы должны знать о порядке вещей. Сначала мы добавляем 14 и у. Затем мы помещаем результат (что он вычисляет или возвращает) в x.
Это моя цель, иметь кучу этих классных примеров, чтобы продемонстрировать и преподавать классу, пока они весело проводят время. Я попробовал этот пример на своей соседке по комнате, и, хотя я могу не использовать это в качестве первого урока, она ей понравилась и чему-то научилась.
Некоторые классные математические программы, которые создают красивые графики или формы, которые легко понять, были бы хорошими идеями, и я собираюсь рассмотреть их. Вот несколько сложных примеров ActionScript, но они слишком сложны, и я не могу преподавать flash. Какие еще идеи у вас есть?
87 ответов
Я получил отличный ответ от моих детей с быстрым сценарием VB для управления персонажем Microsoft Agent. Для тех, кто не знаком с MS Agent, это серия анимированных экранных символов, которыми можно управлять через интерфейс COM. Вы можете загрузить код и символы на странице загрузки агента Microsoft.
Следующие несколько строк заставят персонажа Мерлина появляться на экране, летать, стучать по экрану, чтобы привлечь ваше внимание, и поздороваться.
agentName = "Merlin"
agentPath = "c:\windows\msagent\chars\" & agentName & ".acs"
Set agent = CreateObject("Agent.Control.2")
agent.Connected = TRUE
agent.Characters.Load agentName, agentPath
Set character = agent.Characters.Character(agentName)
character.Show
character.MoveTo 500, 400
character.Play "GetAttention"
character.Speak "Hello, how are you?"
Wscript.Sleep 15000
character.Stop
character.Play "Hide"
Существует множество других команд, которые вы можете использовать. Посетите http://www.microsoft.com/technet/scriptcenter/funzone/agent.mspx для получения дополнительной информации.
РЕДАКТИРОВАТЬ 2011-09-02 Я недавно обнаружил, что Microsoft Agent изначально не установлен в Windows 7. Однако он предлагается для отдельной загрузки здесь. Я не проверял это, поэтому не могу проверить, работает ли он.
Введите этот код в адресную строку (в вашем браузере) и нажмите Enter. Тогда вы можете редактировать весь контент веб-страницы!
javascript:document.body.contentEditable='true'; document.designMode='on'; void 0
То есть самый крутой "однострочник" я знаю =)
Когда я впервые написал это.
10 PRINT "What is your name?"
20 INPUT A$
30 PRINT "Hello " A$
40 GOTO 30
Это взорвало людей! Компьютер запомнил их имя!
РЕДАКТИРОВАТЬ: Просто чтобы добавить к этому. Если вы сможете убедить нового программиста, это самое крутое, что они могут сделать, они станут хорошими программистами. В наши дни вы можете сделать практически все, что захотите, с помощью одной строки кода для запуска библиотеки, написанной кем-то другим. Я лично не получаю абсолютно никакого удовлетворения от этого и вижу небольшую пользу в обучении этому.
PHP - прокладка Серпинского ака Triforce
Хорошо, это 15 строк кода, но результат потрясающий! Это то, что заставляло меня волноваться, когда я был ребенком. Это из руководства по PHP:
$x = 200;
$y = 200;
$gd = imagecreatetruecolor($x, $y);
$corners[0] = array('x' => 100, 'y' => 10);
$corners[1] = array('x' => 0, 'y' => 190);
$corners[2] = array('x' => 200, 'y' => 190);
$red = imagecolorallocate($gd, 255, 0, 0);
for ($i = 0; $i < 100000; $i++) {
imagesetpixel($gd, round($x),round($y), $red);
$a = rand(0, 2);
$x = ($x + $corners[$a]['x']) / 2;
$y = ($y + $corners[$a]['y']) / 2;
}
header('Content-Type: image/png');
imagepng($gd);
У Microsoft есть Small Basic, IDE для "детей".
pic = Flickr.GetRandomPicture("beach")
Desktop.SetWallpaper(pic)
Он специально разработан, чтобы показать, насколько круто программирование.
Я склонен думать, что люди впечатлены вещами, к которым они могут относиться или имеют отношение к их жизни. Я бы попытался основать свои 10 строк кода на том, что они знают и понимают. Взять, к примеру, Twitter и его API. Почему бы не использовать этот API для создания чего-то классного. Следующие 10 строк кода вернут "общедоступную временную шкалу" из Twitter и отобразят ее в консольном приложении...
using (var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss"))
{
SyndicationFeed
.Load(xmlr)
.GetRss20Formatter()
.Feed
.Items
.ToList()
.ForEach( x => Console.WriteLine(x.Title.Text));
}
Мой пример кода не может быть лучшим для ваших студентов. Он написан на C# и использует.NET 3.5. Так что, если вы собираетесь учить их PHP, Java или C++, это будет бесполезно. Тем не менее, я хочу сказать, что, связывая ваши 10 строк кода с чем-то "крутым, интересным и актуальным для студентов", ваш пример также становится крутым, интересным и актуальным.
Удачи!
[Да, я знаю, что я пропустил несколько строк использования операторов и метода Main, но я предполагаю, что эти 10 строк не должны были быть буквально 10 строками]
Это сервер Telnet Python, который запросит имя пользователя и скажет им привет. Это выглядит здорово, потому что вы общаетесь со своей программой с другого компьютера по сети.
from socket import *
s=socket(AF_INET, SOCK_STREAM)
s.bind(("", 3333))
s.listen(5)
while 1:
(c, a) = s.accept()
c.send("What is your name? ")
name = c.recv(100)
c.send("Hello "+name)
c.close()
Я думаю, что сейчас трудно быть компьютерным педагогом. Я. Мы сталкиваемся со все более и более крутым тяжелым сражением. Наши студенты невероятно искушенные пользователи, и им требуется много времени, чтобы произвести на них впечатление. У них так много доступных инструментов, которые делают удивительные вещи.
Простой калькулятор из 10 строк кода? Зачем? У меня есть TI-86 для этого.
Сценарий, который применяет специальные эффекты к изображению? Вот для чего нужен Photoshop. А Photoshop сметает все, что вы можете сделать в 10 строк.
Как насчет копирования компакт-диска и преобразования файла в MP3? У меня уже есть 50000 песен, которые я получил от BitTorrent. Они уже в формате MP3. Я играю их на своем iPhone. Кто вообще покупает диски?
Чтобы познакомить опытных пользователей с программированием, вам нужно найти что-то, что:
а) применимо к чему-то, что они находят интересным и классным, и б) делает то, чего не может уже сделать.
Предположим, ваши ученики уже имеют доступ к самым дорогим программам. Многие из них имеют полную версию Adobe CS5.5 (розничная цена: 2600 долларов США; фактическая цена: бесплатно) и могут легко получить любое приложение, которое обычно нарушало бы бюджет вашего отдела.
Но подавляющее большинство из них не имеют ни малейшего представления, как на самом деле работает этот "компьютерный материал".
Они невероятно креативные люди: им нравится создавать вещи. Они просто хотят иметь возможность делать или делать то, чего не могут их друзья. Они хотят чем-то похвастаться.
Вот некоторые вещи, которые я нашел, чтобы найти отклик у моих учеников:
- HTML и CSS. Из них они узнают, как работают темы MySpace, и могут настроить их.
- Мэшапы. Они все видели их, но не знают, как их создать. Проверьте Yahoo! Трубы. Есть много обучающих моментов, таких как RSS, XML, фильтрация текста, отображение и визуализация. Готовые виджеты могут быть встроены в веб-страницы.
- Произведение. Посмотрите на Искусство без контекста. Рекурсия и рандомизация являются ключом к созданию красивых картинок.
- Повествование. С помощью простой в использовании среды трехмерного программирования, такой как Алиса, легко создавать высококачественные, увлекательные истории, используя не что иное, как перетаскивание.
Ни один из них не включает никакого программирования в традиционном смысле. Но они используют мощные библиотеки. Я думаю о них как о другом виде программирования.
Я нашел большой фаворит (в GWBASIC) это:
10 input "What is your name ";N$
20 i = int(rnd * 2)
30 if i = 0 print "Hello ";N$;". You are a <fill in insult number 1>"
40 if i = 1 print "Hello ";N$;". You are a <fill in insult number 2>"
Я обнаружил, что у начинающих студентов есть несколько концепций, которые необходимо исправить.
- Компьютеры не читают твои мысли.
- Компьютеры делают только одну вещь за раз, даже если они делают это так быстро, они, кажется, делают все сразу.
- Компьютеры - просто глупые машины и делают только то, что им говорят.
- Компьютеры распознают только определенные вещи, и они похожи на строительные блоки.
- Ключевой концепцией является то, что переменная - это нечто, содержащее значение, и ее имя отличается от этого значения.
- Различие между временем, в которое вы редактируете программу, и временем, в которое она запускается.
Удачи в вашем классе. Я уверен, что у тебя все получится.
PS Я уверен, что вы понимаете, что наряду с материалом и навыками, вы также учите отношению, и это не менее важно.
Этот C-код может быть запутан, но я нашел его очень мощным
#include <unistd.h>
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<L?--_
%6:6:7)+"World! \n",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
И вот результат... Всего за 3 строчки... Этакий фрактал Hello World
...
WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!! !dWW!ddddllllrrrrrrrooooooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo WloW!!!ddddllrrrrrrrrooooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl r!dlooWWWoW!dllrrrrrrroooo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo l! rdo!l!r!dlrrrrrrrrooo
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW lW!ddlrrrrrrrroo
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd ! rlW!ddllrrrrrrrro
Worrrrrrrllllllddd!oooWWWoloWWWWoodr drrWdlllrrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr ro!dlllrrrrrrrr
Wrrllllllllddddd!WWolWr oWoo r!dllllrrrrrrr
Wlllllllldddd!!odrrdW o lWddllllrrrrrrr
Wlddddd!!!!!WWordlWrd oW!ddllllrrrrrrr
olddddd!!!!!WWordlWrd oW!ddllllrrrrrrr
Wlllllllldddd!!odrrdW o lWddllllrrrrrrr
Wrrllllllllddddd!WWolWr oWoo r!dllllrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr ro!dlllrrrrrrrr
Worrrrrrrllllllddd!oooWWWoloWWWWoodr droWdlllrrrrrrrr
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd ! rlW!ddllrrrrrrrro
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW lW!ddlrrrrrrrroo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo l! rdo!l!r!dlrrrrrrrrooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl r!dlooWWWoW!dllrrrrrrroooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo WloW!!!ddddllrrrrrrrrooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!! WdWW!ddddllllrrrrrrrooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Как насчет того, чтобы показать, что вы можете взять любой веб-браузер и ввести JavaScript в адресную строку и получить код для выполнения?
РЕДАКТИРОВАТЬ: перейдите на страницу с большим количеством изображений и попробуйте это в адресной строке:
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++ }setInterval('A()',5); void(0)
Вы можете сделать приложение, которое выбирает случайное число. И ты должен угадать это. Если вы ошибаетесь, он говорит: выше или ниже. И если вы догадались, приятное сообщение.
Классно играть для студентов.
Простая версия Python без надлежащей проверки ошибок:
import random
while input('Want to play higher/lower? ').lower().startswith('y'):
n = random.randint(1, 100)
g = int(input('Guess: '))
while g != n:
print(' %ser!' % (g > n and 'low' or 'high'))
g = int(input('Guess: '))
print(' Correct! Congratulations!')
Erik Forbes предлагает, чтобы компьютер угадал число. Это также может быть сделано в пределах 10 строк кода (хотя в настоящее время отсутствие надлежащей проверки ошибок еще более серьезно: допустимые числа вне диапазона вызывают бесконечный цикл):
while input('Want to let the pc play higher/lower? ').lower().startswith('y'):
n = int(input('Give a number between 1 and 100: '))
lo, hi, guess, tries = 1, 100, 50, 1
while guess != n:
tries += 1
lo, hi = (guess + 1, hi) if guess < n else (lo, guess - 1)
guess = (lo + hi) // 2
print('Computer guessed number in %d tries' % tries)
Вернувшись в компьютерный класс в старшей школе, я и пара друзей научили класс программированию на Delphi. Класс был в основном сосредоточен на программировании на Pascal, поэтому Delphi был хорошим следующим шагом. Мы продемонстрировали управляемый событиями характер Delphi и его возможностей RAD. В конце урока мы показали классу пример приложения и попросили его воспроизвести его. Приложение спросило "Ты пьян?" С двумя кнопками Да и Нет.... Я думаю, вы знаете, что будет дальше... Кнопка "Нет" изменила местоположение при наведении курсора мыши, и было почти невозможно нажать
Студенты и учителя получили от этого удовольствие.
Программе потребовалось всего несколько строк написанного пользователем кода с простым уравнением, чтобы вычислить, куда перемещать кнопку. Я не думаю, что кто-то из других студентов понял это, но некоторые были близки.
Когда я впервые понял, что такое бомба-вилка, я подумал, что это действительно мило. Так просто, но аккуратно в том, что он может сделать:
:(){ :|:& };:
Это обман, и даже не очень простой, но я однажды написал стрельбу в 20 строк C++, используя графическую библиотеку Allegro. Нет реальных критериев того, что это за линия, но это было немного назад, и это было сделано просто для удовольствия. У него даже были грубые звуковые эффекты.
Вот как это выглядело:
http://img227.imageshack.us/img227/8770/20linesxx0.png
А вот код (должен скомпилироваться):
bool inside(int x, int y, int x2, int y2) { return (x>x2&&x<x2+20&&y>y2&&y<y2+10); }
int main() {
BITMAP* buffer;
float px,shotx,shoty,monstars[8],first,rnd,pressed,points = 0, maxp = 0;
unsigned char midi[5] = {0xC0,127,0x90,25,0x54}, plgfx[] = {0,0,0,10,3,10,3,5,6,5,6,10,8,12,10,10,10,5,13,5,13,10,16,10,16,0,13,0,13,2,3,2,3,0,0,0}, mongfx[] = {0,0, 10,5, 20,0, 17,8, 15,6, 10,16, 5,6, 3,8, 0,0};
allegro_init(), set_color_depth(32), set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,240,0,0), install_timer(), install_keyboard(), install_mouse(), buffer = create_bitmap(320,240),srand(time(NULL)),install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT,""),clear_to_color(buffer,makecol32(100,100,255));
while ((pressed=(!key[KEY_Z]&&pressed)?0:pressed)?1:1&&(((shoty=key[KEY_Z]&&shoty<0&&pressed==0?(pressed=1?200:200):first==0?-1:shoty)==200?shotx=px+9:0)==9999?1:1) && 1+(px += key[KEY_LEFT]?-0.1:0 + key[KEY_RIGHT]?0.1:0) && 1+int(px=(px<0?0:(px>228?228:px))) && !key[KEY_ESC]) {
rectfill(buffer,0,0,244,240,makecol32(0,0,0));
for(int i=0;i<8;i++) if (inside(shotx,shoty,i*32,monstars[i])) midi_out(midi,5);
for (int i=0; i<8; monstars[i] += first++>8?(monstars[i]==-100?0:0.02):-100, points = monstars[i]>240?points-1:points, monstars[i]=monstars[i]>240?-100:monstars[i], points = inside(shotx,shoty,i*32,monstars[i])?points+1:points, (monstars[i] = inside(shotx,shoty,i*32,monstars[i])?shoty=-1?-100:-100:monstars[i]), maxp = maxp>points?maxp:points, i++) for (int j=1; j<9; j++) line(buffer,i*32+mongfx[j*2 - 2],monstars[i]+mongfx[j*2-1],i*32+mongfx[j*2],monstars[i]+mongfx[j*2+1],makecol32(255,0,0));
if (int(first)%2000 == 0 && int(rnd=float(rand()%8))) monstars[int(rnd)] = monstars[int(rnd)]==-100?-20:monstars[int(rnd)]; // randomowe pojawianie potworkow
if (shoty>0) rectfill(buffer,shotx,shoty-=0.1,shotx+2,shoty+2,makecol32(0,255,255)); // rysowanie strzalu
for (int i=1; i<18; i++) line(buffer,px+plgfx[i*2 - 2],200-plgfx[i*2-1],px+plgfx[i*2],200-plgfx[i*2+1],makecol32(255,255,0));
textprintf_ex(buffer,font,250,10,makecol32(255,255,255),makecol32(100,100,255),"$: %i ",int(points)*10);
textprintf_ex(buffer,font,250,20,makecol32(255,255,255),makecol32(100,100,255),"$$ %i ",int(maxp)*10);
blit(buffer, screen, 0, 0, 0, 0, 320,240);
}
} END_OF_MAIN()
В наше время JavaScript является отличным способом показать, как вы можете программировать, используя некоторые действительно базовые инструменты, например блокнот.
Эффекты jQuery - отличная отправная точка для тех, кто хочет удивить своих друзей!
В этом просто нажмите на пустое пространство страницы.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(document.body).click(function () {
if ($("#pic").is(":hidden")) {
$("#pic").slideDown("slow");
} else {
$("#pic").slideUp();
}
});
</script>
</head>
<body><img id="pic" src="http://www.smidgy.com/smidgy/images/2007/07/26/lol_cat_icanhascheezburger.jpg"/>
</body>
</html>
Одна вещь, которую вы могли бы рассмотреть, это что-то вроде Robocode, в котором много абстрагирования отведено, и вы в основном просто говорите роботу, что делать. Простая функция из 10 строк может заставить робота делать много, и дает очень наглядный и понятный результат.
Возможно, сам Robocode не подходит для этой задачи, но такого рода вещи являются хорошим способом связать написанный код с визуальными действиями на компьютере, плюс интересно наблюдать за тем, когда вам нужно привести примеры.
public class MyFirstJuniorRobot extends JuniorRobot {
public void run() {
setColors(green, black, blue);
// Seesaw forever
while (true) {
ahead(100); // Move ahead 100
turnGunRight(360); // Spin gun around
back(100); // Move back 100
turnGunRight(360); // Spin gun around
}
}
public void onScannedRobot() {
turnGunTo(scannedAngle);
fire(1);
}
public void onHitByBullet() {
turnAheadLeft(100, 90 - hitByBulletBearing);
}
}
И вот однажды я решил, что с меня хватит. Я бы выучил фортепиано. То, что люди, подобные Элтону Джону, командовали таким мастерством игры на клавиатуре, убедило меня, что это именно то, что я хотел сделать.
На самом деле изучение фортепиано было огромным разочарованием. Даже после того, как я закончил восемь классов уроков игры на фортепиано, я все еще не был впечатлен тем, насколько мой мысленный образ игры на пианино настолько отличался от моего первоначального видения наслаждения этим занятием.
Однако, то, что я полностью наслаждался, было моими тремя классами основы музыки. Я узнал о строительстве музыки. Наконец-то я смог выйти из мира исполнительской музыки и написать свою собственную музыку. Впоследствии я смог начать играть то, что хотел играть.
Не пытайтесь ослепить новых программистов, особенно молодых программистов. Само понятие "менее десяти строк простого кода", кажется, вызывает настроение "Покажи мне что-нибудь умное ".
Вы можете показать новому программисту что-нибудь умное. Затем вы можете научить того же программиста, как воспроизводить эту "производительность". Но это не то, что приводит их в замешательство в программировании. Научите их основам и позвольте им синтезировать свои умные десять строк кода.
Я бы показал новому программисту следующий код Python:
input = open("input.txt", "r")
output = open("output.txt", "w")
for line in input:
edited_line = line
edited_line = edited_line.replace("EDTA", "ethylenediaminetetraacetic acid")
edited_line = edited_line.replace("ATP", "adenosine triphosphate")
output.write(edited_line)
Я понимаю, что мне не нужно назначать line
в edited_line
, Тем не менее, это просто для ясности и чтобы показать, что я не редактирую оригинальный документ.
Менее чем в десяти строках я подробно изложил документ. Конечно, также обязательно покажите новому программисту все доступные строковые методы. Что еще более важно, я показал три принципиально интересных вещи, которые я могу сделать: назначение переменных, цикл, файловый ввод-вывод и использование стандартной библиотеки.
Я думаю, вы согласитесь, что этот код не ослепляет. На самом деле, это немного скучно. Нет - на самом деле, это очень скучно. Но покажите этот код новому программисту и посмотрите, не сможет ли этот программист переназначить каждую часть этого скрипта на что-то гораздо более интересное в течение недели, если не дня. Конечно, это будет неприятно для вас (возможно, с помощью этого скрипта, чтобы сделать простой анализатор HTML), но все остальное просто требует времени и опыта.
Как и большинство других комментаторов, я начал писать код для решения математических задач (или для создания графики для действительно ужасных игр, которые я бы разработал - например, "Индиана Джонс против Зомби").
То, что действительно меня поразило (как в математике, так и в программировании), - это переход от текстовой игры, выбора собственных игр в стиле приключений... к более графическим играм. Я начал раскрашивать миллиметровку и строить пиксели, пока не попал в геометрию... и не открыл, как использовать уравнения для построения кривых и линий, прямоугольников и т. Д.
Суть в том, что я мог бы действительно заняться чем-то вроде обработки ( http://processing.org/), где типичная программа выглядит примерно так:
void setup()
{
size(200, 200);
noStroke();
rectMode(CENTER);
}
void draw()
{
background(51);
fill(255, 204);
rect(mouseX, height/2, mouseY/2+10, mouseY/2+10);
fill(255, 204);
int inverseX = width-mouseX;
int inverseY = height-mouseY;
rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10);
}
Для меня это "Логотип" будущего.
Существуют простые примеры "привет мира", которые могут быстро заставить человека рисовать и изменять код и видеть, как что-то ломается и какие странные "случайности" могут быть созданы... вплоть до более продвинутого взаимодействия и создания фракталов...
Вы можете использовать скрипт, написанный на AutoIt, который стирает грань между использованием традиционного приложения и программированием.
Например, скрипт, который открывает блокнот и заставляет свой компьютер оскорблять их в нем и через окно сообщения, а затем не оставляет никаких следов его действий:
Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("You smell of human.")
Sleep(10000)
MsgBox(0, "Humans smell bad", "Yuck!")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad", "Do you want to save")
Send("!n")
Я помню, когда я только начинал программировать, циклы всегда меня поражали. Вы пишете от 5 до 10 строк кода (или меньше), и распечатываются сотни (или сколько бы вы ни указали) строк. (Сначала я учился на PHP и Java).
for( int i = 0; i < 200; i++ )
{
System.out.println( i );
}
Я думаю, что хорошим местом для начала обучения может быть Greasemonkey. На userscripts.org есть тысячи примеров сценариев, очень хороший материал для чтения, некоторые из которых очень маленькие. Скрипты Greasemonkey влияют на веб-страницы, с которыми студенты уже знакомы, если не манипулируют ими. Greasemonkey сам по себе предлагает очень простой способ редактировать и включать / отключать скрипты во время тестирования.
В качестве примера приведем скрипт "Два столбца Google":
result2 = '<table width="100%" align="center" cellpadding="10" style="font-size:12px">';
gEntry = document.evaluate("//li[@class='g'] | //div[@class='g'] | //li[@class='g w0'] | //li[@class='g s w0']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (var i = 0; i < gEntry.snapshotLength; i++) {
if (i==0) { var sDiv = gEntry.snapshotItem(i).parentNode.parentNode; }
if(i%2 == 0) { result2 += '<tr><td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td>'; }
if(i%2 == 1) { result2 += '<td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td></tr>'; }
}
sDiv.innerHTML = result2+'</table>';
if (document.getElementById('mbEnd') !== null) { document.getElementById('mbEnd').style.display = 'none'; }
Это очень простая текстовая программа на языке C#, которая имитирует вращение игрового автомата. Он не включает в себя различные шансы на выигрыш или денежные выплаты, но это может быть хорошим упражнением для студентов.
Извините, что это более 10 строк.
string[] symbols = new[] { "#", "?", "~" }; // The symbols on the reel
Random rand = new Random();
do
{
string a="",b="",c="";
for( int i = 0; i < 20; i++ )
{
Thread.Sleep( 50 + 25 * i ); // slow down more the longer the loop runs
if( i < 10 )
a = symbols[rand.Next( 0, symbols.Length )];
if( i < 15 )
b = symbols[rand.Next( 0, symbols.Length )];
c = symbols[rand.Next( 0, symbols.Length )];
Console.Clear();
Console.WriteLine( "Spin: " + a + b + c );
}
if( a == b && b == c )
Console.WriteLine( "You win. Press enter to play again or type \"exit\" to exit" );
else
Console.WriteLine( "You lose. Press enter to play again or type \"exit\" to exit" );
}
while( Console.ReadLine() != "exit" );
С Tcl у вас есть простой текстовый редактор с кнопкой сохранения в 12 строках кода (но без открытия, это заняло бы еще 8 строк). Работает на всех стандартных платформах:
pack [frame .toolbar] -side top -fill x
pack [button .save -text save -command save] -in .toolbar -side left
pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side right -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true
proc save {} {
set filename [tk_getSaveFile]
if {$filename ne ""} {
set f [open $filename w]
puts $f [.text get 1.0 end-1c]
close $f
}
}
Я понимаю, что цель была 10 строк, поэтому, если вы хотите, чтобы придерживаться 10 строк или менее, простой текстовый редактор без загрузки или сохранения занимает всего две строки. Это не так уж плохо.
pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side left -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true
Выполните любой из вышеперечисленных блоков кода с " именем файла желаний" на выбранной вами платформе. Желание приходит с большинством *nix и Mac, но вам придется установить его вручную для Windows.
Чтобы продвинуться дальше, этот сценарий из двух строк также может быть написан на python, хотя он занимает восемь строк, все еще при достижении цели из 10 строк:
from Tkinter import *
root=Tk()
text = Text(wrap="word")
sb = Scrollbar(orient="vertical", command=text.yview)
text.configure(yscrollcommand=sb.set)
sb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
root.mainloop()
Как насчет букмарклета? Это показало бы им, как манипулировать чем-то, что они используют каждый день (Интернет), без каких-либо инструментов разработки.
Я написал об этом недавно в статье "Самая короткая, самая полезная программа, которую я когда-либо писал".
Резюме: в 1996 году я написал 3-строчное приложение VB6, которое я использую каждый день. После того, как EXE-файл будет добавлен в папку "Отправить". Это позволяет вам щелкнуть правой кнопкой мыши по файлу в проводнике и отправить полный путь к этому файлу в буфер обмена.
Public Sub Main()
Clipboard.SetText Command$
End Sub
Если вы можете позволить себе аппаратное обеспечение, использование платы Arduino + создаст довольно интересные вещи, хотя это может быть немного сложнее для людей, которые могут вообще не интересоваться программированием.
wxPython Первые шаги
import wx
app = wx.App()
wx.Frame(None, -1, 'simple.py').Show()
app.MainLoop()
Интересно, что вы упомянули множество Мандельброта, поскольку создание фракталов с помощью GW-BASIC - это то, что пробудило мою любовь к программированию в старшей школе (около 1993 года). Прежде чем мы начали изучать фракталы, мы написали скучные приложения со стандартными отклонениями, и я все еще планировал заняться журналистикой.
Но как только я увидел, что длинная, трудная для написания BASIC-программа генерирует "фрактальную местность", я зацепился и никогда не оглядывался назад. Это изменило мой взгляд на математику, науку, компьютеры и способ обучения.
Я надеюсь, что вы найдете программу, которая оказывает такое же влияние на ваших студентов.
Я уверен, что это превратится в более чем 10 строк кода, но рассматривали ли вы приложение на основе форм, в котором нажатие кнопок приводит к изменению цвета фона или изменению размера текста? Это покажет им, как работают интерактивные программы. Это также показало бы им, что они, как программист, полностью контролируют то, что делает компьютер (программа).
Надеюсь, это заставит их делать предложения о других вещах, которые они могут изменить, а затем о других вещах, которые они могут захотеть сделать.