Я написал это в 2013 году для нескольких человек и хотел отредактировать и опубликовать для потомков!

Иногда люди говорят: расскажи о себе, как ты пришел в программирование? У меня есть несколько строк о колледже, о том, что гражданское строительство привело меня к картографированию, потому что вы можете кодировать с информацией из реального мира. По общему признанию, именно Bing Maps API помог мне начать работу с JavaScript.

В истории есть дыры. Если бы я мог посмотреть на API и начать кодировать, я должен был бы знать, как кодировать до этого.

Вернемся к первому «хаку».

У нас со старшим братом разница два года. Он откуда-то слышал, что мы можем модифицировать солдатские юниты в Цивилизации 2. Вы и компьютер по очереди перемещаете армии. Вы атакуете, а они защищаются, затем они атакуют, а вы защищаетесь. Если открыть текстовый файл в папке с игрой, там будут все номера атаки и защиты юнитов. Вы можете сделать так, чтобы какой-то юнит имел массу силы и массу шансов для атаки.

В рамках своего отчета о древней Вавилонии в 7-м классе я создал карту Цивилизации с нестандартными солдатами. Это составило примерно треть моего окончательного отчета, и в последнюю минуту я понял, что все сочтут это странным, поэтому я не упоминал об этом в своей презентации.
Во многих моих проектах я получал слишком сосредоточены на этом, а затем, в последнюю минуту, смущаются, потому что, зачем кому-то это делать? Но это все еще было в моем письменном отчете. Мой учитель написал несколько вежливых «крутых» «вау» замечаний, и на этом все.

Примерно в то же время мы с братом обнаружили в нашем компьютере встроенную игру под названием Re-Volt. Вы гоняете машины и стреляете друг в друга из оружия. Машины размером с радиоуправляемые, и они мчатся по большой карте окрестностей. Дома у нас не было MarioKart или системы видеоигр, так что это было большой проблемой.

Как только мне надоели игра и чит-коды, я начал рыться в папках. У каждой машины была 3D-модель и текстовый файл с указанием максимальной скорости, веса, положения колес и пружин и т. д. Сначала я сделал машину с неограниченной максимальной скоростью. Потом я узнал, как переключать 3D-модель с дорожки (например, баскетбольный мяч или рыбу) на машину. Тогда я дал другим автомобилям огромный вес. Перетяжеленные машины не могли двигаться и просто визжали на месте. Позже я достаточно узнал о координатах, чтобы переместить пружину с колеса в центр. Он стал пого-стиком!

Что касается реального кода, то он начался по-другому. Я попал в ракетостроение благодаря October Sky и 350-страничному Руководству по моделизму ракетостроения. Мои родители увлекались безопасностью, а не ракетостроением, поэтому я чаще читал, чем запускал ракеты.
В конце книги была программа для расчета скорости и высоты полета ваших ракет. Он сообщил в десятых долях секунды. Я добросовестно скопировал каждую строку и GOTO в QBASIC и получил отчеты. Меня поразили пошаговые расчеты.

Мои родители также подарили мне один из оригинальных наборов Lego Mindstorms, хотя я собирал и программировал только по инструкции. Однажды мы посетили сувенирный магазин Массачусетского технологического института и увидели книгу о программировании роботов на текстовом языке под названием Not Quite C.

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

Мой папа также установил Visual Basic 6 на нашем домашнем компьютере. Мы с братом хотели делать видеоигры, но папа просто считал простые числа или раскладывал книжку. То, что я действительно хотел сделать, это Охота на динозавров. Мы подобрали эту карточную игру на школьной книжной ярмарке. Это стратегическая игра, в которой вы пытаетесь поймать как можно больше динозавров в прошлом и отправить их в свой зоопарк будущего. Вы можете играть в карты против других игроков, так что это становится конкурентоспособным.

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

После летнего лагеря программистов я почувствовал, что готов взяться за свой первый настоящий проект. Я понял, как захватывать и анимировать изображения из игры Zoo Tycoon внутри Visual Basic. Главным героем сайд-скроллера был бегемот. Вы можете перемещать его влево или вправо с помощью клавиш со стрелками. Я рисовал сцены на бумаге, а затем в MS Paint. Я только что закончил подготовительную алгебру в седьмом классе, так что я мог сделать y=mx+b, чтобы бегемот карабкался по холмам и пандусам. Как только вы достигли правого края карты, вы прыгнули в следующую сцену. Я добавил крокодила в одну сцену и, наконец, льва, стреляющего красным огненным шаром. Когда вы нажимаете пробел, бегемот открывает рот и стреляет зеленым огненным шаром, который отталкивает красный огненный шар и уничтожает врага. Он назывался AttackOfTheHippo.exe.

Моя семья вежливо поддержала Attack Of The Hippo 2, и на этот раз я набросал более амбициозные сцены. Были здания, в которые можно было войти нажатием клавиши; появились всплывающие окна с диалогом. У меня было много анимаций Zoo Tycoon, чтобы поддерживать работу. Одна сцена мне особенно запомнилась: я нарисовал кривую стену внизу. Сначала я сделал y=mx+b, но потом было заблокировано много лишнего места, поэтому я разделил кривую на части. Я продолжал проверять правильные координаты, чтобы разбить кривую, и она становилась все более сложной. Много лет спустя я изучил ньютоновский метод интегрирования в исчислении и почувствовал себя таким особенным.

В течение следующих нескольких месяцев я время от времени писал Dino Hunt на Visual Basic 6. Главным экраном была приборная панель автомобиля, которую я нарисовал в MS Paint, вдохновленный играми «Волшебный школьный автобус». Я избегал ИИ и специальных карт, чтобы сосредоточиться на основном игровом процессе.

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

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

Средняя школа не сильно улучшила мой код. Я опробовал DarkBASIC и программу для 3D-моделирования. Пару лет я модифицировал демки, делал простые игры в прятки, находил 3D-модели кораблей из Звездного пути и ездил на них.

Как и многие из вас, я получил программируемый калькулятор TI-84 на втором курсе. К младшим классам я написал игру Crazy 8s и виртуального питомца гиппопотама / Tamogachi. Скорость отрисовки и память на калькуляторе ужасны, поэтому программа рисовала пять кадров и циклически перебирала их. Анимация настроения бегемота, уровни голода и сна были сохранены в постоянном массиве, поэтому, когда вы снова откроете игру, они будут иметь те же значения.

Это было подходящее время для меня, чтобы прочитать о других программистах и ​​сообществе открытого исходного кода. Я нашел Slashdot, а затем Digg и Reddit. Я слышал, что Y-Combinator стартует в Бостоне.

На первом курсе колледжа я действительно изучил JavaScript с помощью Bing Maps AJAX API, который тогда был известен как Microsoft Virtual Earth. Я видел конкурс GeoWeb Conference для студентов-картографов и представил попытку картографирования постов в блоге из GeoRSS. К тому времени, когда я сменил картографа, конференция GeoWeb распалась на другие конференции. Так я туда и не попал.

Даже после знакомства с JavaScript я ничего не знал о серверах, поэтому застрял в настольных приложениях на Java. Я написал интерактивные виджеты для JavaScript API YouTube и создал лабиринт окон Java… CMS для видеомэшапов… которые могли генерировать статическую HTML/JS-страницу. Я был особенно горд тем, что я также мог сохранять в формате XML и что я открыл исходный код в Google Code: http://code.google.com/p/accompaniment/

Я попал в правильное направление, когда начал работать с действиями Python One Laptop Per Child и электронными таблицами на основе HTML5, когда я изучал, что такое сервер и база данных с помощью Google AppEngine... Я думал над проектом, заставьте одну страницу работать, создайте вторую страницу, создав модель данных, и создайте каждый сайт на ее основе.

Я подал заявку на летнюю программу One Laptop Per Child, OLPCorps, но я не знал никого из моих соабитуриентов или школы в Кении, которую мы собирались поддержать. Никто не дает сотню ноутбуков спонтанной команде, но я был разочарован проигрышем.

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

Медленно я переписывал свои интерактивные видео/идеи YouTube для Интернета через Google AppEngine. (Интерактивное видео имело большое значение в этот короткий период времени между первыми вставками YouTube и появлением смартфонов). Я снова решил сделать свою работу с открытым исходным кодом, но вместо того, чтобы придумать план «прославить свое имя», или подать заявку на участие в Google Summer of Code, или начать бизнес, я копался в своей рабочей таблице по строительству и иногда публиковал ссылки как Комментарии на Реддите.

Позже я увидел Popcorn.js от Mozilla, более организованный видеомэшап-проект. К сожалению, проект не такой интерактивный и успешный, как я надеялся. Я остановился на Palpable Video и наблюдал, как более амбициозные люди изобретают, продвигают, рекламируют и отказываются от этой концепции. Это оказало на меня большое влияние. Всю свою жизнь я избегала публиковать свое имя, фотографию и контактную информацию в Интернете. Я скрывал свою личность на своих сайтах, в своем коде и мало что делал для продвижения своей работы. Чего я ожидал?

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

В те же выходные несколько инженеров из Google NYC показали нам предварительную версию Fusion Tables. Мой научный руководитель увидел мою работу и устроил меня на исследование окружающей среды в университете.
Одной бессонной снежной ночью в начале 2010 года я отправил электронное письмо (совершенно неожиданно) в школу в Африке с ноутбуками. Я хотел преподавать картографию.

Тем летом я был в Уганде.

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

Теперь, возможно, мой переход к штатному кодеру произошел слишком быстро. Я мог бы отказаться от него когда-нибудь. Однако на данный момент я обнаружил, что программирование для общественного блага представляет собой аккуратный баланс «инноваций» и «познания мира». Это полезно.