Недавно я взял отпуск на той же неделе, что и 4 июля, и у меня было много времени, чтобы подумать о своей карьере на сегодняшний день. Было немного шокировано осознавать, что я пишу код уже почти 30 лет! Я решил воспользоваться некоторым дополнительным временем, чтобы написать этот ностальгический пост и изучить все языки, с которыми я работал последние 30 лет. Так что это моя дань 30-летнему изучению новых языков, начиная с «Hello, World».

Первым языком программирования, который я изучил, был TI BASIC, особая разновидность BASIC, написанная Microsoft специально для микрокомпьютера TI 99 / 4A. BASIC, что означает универсальный символьный код инструкций для начинающих, был идеальным языком для 7-летнего ребенка, когда он застрял дома без игр. В языке организованы строки кодов с номерами строк, и для отображения чего-то на экране вы распечатали это следующим образом:

1981 - TI BASIC

Я потратил несколько месяцев на написание игр выбери свое собственное приключение, используя этот вариант BASIC, и еще больше времени, слушая свист, потрескивание и шипение кассетного магнитофона с черной лентой, используемого для сохранения и восстановления данных. Вероятно, самый волнующий и поворотный момент в моей юной жизни произошел несколько лет спустя, когда мои родители принесли домой Commodore 64. Эта машина поставляла Commodore BASIC или PET BASIC прямо из коробки. Это тоже было написано Microsoft на основе 6502 Microsoft BASIC, написанного специально для той линейки чипов, которая в то время также обслуживала машины Apple.

1984 - Commodore BASIC

Знак вопроса был сокращением для команды PRINT, а странные символы впоследствии были сокращенным способом ввода команды RUN (R SHIFT + U - на клавиатуре Commodore 64 символы SHIFT предоставляли классные маленькие графические фрагменты, которые вы могли использовать для создания элементарных изображений ).

Я быстро обнаружил, что BASIC делает не все, что я хотел. Демо-сцена в то время процветала, и съемочная группа создавала потрясающие программы, которые выходили за рамки возможностей машины. Они будут делать такие вещи, как обмануть видеочип, заставляя его рисовать графику, которая не должна быть возможной, или прокручивают контент, или даже перемещают данные в граничную часть запрещенного доступа на экране. Для достижения этих целей требовалось точное время, что было возможно только при использовании прямого кода на машинном языке. Итак, я запустил свой компьютерный монитор (название программного обеспечения, которое позволит вам вводить машинные коды прямо в память) и написал эту небольшую программу:

Машинный код 1985–6502

Это маленькое приложение загрузило «Y-аккумулятор» с индексом, затем прокручивало память, начиная с $ C100, отправляя символы по одному в подпрограмму ПЗУ, которая выводила их на дисплей. Это эквивалент цикла for (для y = 0; y ‹= 0x0d, y ++) в машинном коде. RTS возвращается из подпрограммы. Чтобы выполнить программу, вам нужно было использовать встроенную команду SYS, которая вызывала бы адрес памяти (к сожалению, вам пришлось преобразовать шестнадцатеричный код $ C000 в десятичный 49152, но в остальном это сработало как шарм). У меня были символы PETSCII для «HELLO, WORLD», хранящиеся по адресу памяти $ C100 (да, у Commodore 64 была собственная страница специальных символов). Вот результат:

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

Сборка 1986–6502 гг.

* = $C000       ;set the initial memory address
CHROUT = $FFD2  ;set the address for the character out subroutine         LDY #$00 LOOP     
LDA HELLO, Y
CMP #$00
BEQ END          
JSR CHROUT          
INY          
BNE LOOP 
END RTS
HELLO    ASC 'HELLO, WORLD.' ; PETSCII
HELLOEND DFB 0 ; zero byte to mark the end of the string

Примерно в то время я понял, что действительно люблю писать программы. Я прошел несколько курсов в старшей школе, но все, что они преподавали, было глупым маленьким языком Паскаль, разработанным для того, чтобы «легко» научиться программировать. Действительно? Легкий? После ручного написания сложных программ с использованием машинного монитора Паскаль почувствовал себя излишним. Я должен признать, что синтаксис «Hello, World» прост.

1989 - Паскаль

program HelloWorld;
begin
  writeln('Hello, World.');
end

Я думал, что крутые ребята в то время работали с C. Это был довольно гибкий язык и больше походил на набор функциональных макросов над ассемблером, чем на совершенно новый язык. Я учил себя Си на стороне, но использовал его ненадолго.

1990 — C

#include <stdio.h>
main()
{
  printf("Hello World");
}

Маленькая программа включает в себя библиотеку, которая обрабатывает стандартный ввод / вывод, а затем отправляет текст на своем пути. Библиотеки были тем, как C позволил нам разрабатывать кроссплатформенность - функция вызывалась одинаково, независимо от того, работали ли вы в Windows или Linux, но сама библиотека реализовывала все низкоуровневые процедуры, необходимые для ее работы на целевой машине. Приведенный выше код был чем-то, над чем я бы повозился на своей Linux-машине несколько лет спустя. Трудно описать, не интересовались ли вы компьютерами в то время, но мне казалось, что вы не были настоящим программистом, если не создали свою собственную установку Linux. Под «построенным самостоятельно» я имею в виду буквально прошел через исходный код и настроил его в соответствии с конкретным набором оборудования, которым вы владели. Самым интересным было иметь дело с видеокартами и узнать о «точечной частоте» и всех нюансах, позволяющих материнской плате хорошо взаимодействовать с графическим чипом. Во всяком случае, я расходлюсь.

Для меня изучение C не было проблемой, но я быстро понял, что крутые ребята занимаются чем-то другим и следуют парадигме, известной как «объектно-ориентированное программирование». Машинный код и сборка, вероятно, самое далекое от объектно-ориентированного подхода, поэтому переход от процедурного к объектно-ориентированному был вызовом, который я был готов решить. В то время нельзя было просто искать контент в Интернете (можно было, но использовались другие механизмы с гораздо меньшим количеством обращений), поэтому я пошел и купил себе стопку книг по C ++. Оказывается, C ++ поддерживает идею «объектов». Он даже использовал объекты для представления потоков и каналов для управления ими. Этот объектно-ориентированный материал также представил идею пространств имен для лучшего управления разделами кода. Все сказанное «Привет, мир» превращается в:

1992 — C++

#include <iostream>
using namespace std;
int main()
{
  cout << "Hello World";
  return 0;
}

Я направился в колледж и был разочарован тем, что там, где я был, нет курсов, охватывающих «современные» языки, которые меня интересовали, такие как C и C ++. Вместо этого мне пришлось проделать курс, где домашнее задание выполнялось на мэйнфрейме, который мы назвали «Cypher», с использованием интересного языка под названием Fortran, который действительно заботится о том, в какой столбец вы помещаете свой код! Верно, вкус языка в то время обозначал столбец 1 для комментариев, столбцы 1–5 для меток операторов, столбец 6 для обозначения продолжения, и только в столбце 7 вы могли начать писать настоящий код. Я достаточно изучил Фортран, чтобы знать, что никогда не хотел его использовать.

1993 - Фортран

PROGRAM HELLOWORLD
       PRINT *, 'Hello, World!'
END

Поскольку я не особо увлекался основными курсами, я проводил большую часть вечеров в компьютерном классе, работая с огромными Unix-машинами, которые были в колледже. Там я открыл для себя Интернет и узнал о «старой школе» способа установки программного обеспечения: вы извлекаете исходный код, собираете его, проверяете ошибки, настраиваете его, исправляете и получаете рабочий клиент. Честно говоря, я не знаю, как можно использовать Unix, не научившись программировать, основываясь на том, как все работало тогда, поэтому я постоянно взламывал, исследовал и изучал свой путь в системе. Одним из довольно распространенных действий было бы выполнение команд, которые выгружали бы огромные объемы информации, которую вам затем приходилось анализировать с помощью «удобных» инструментов командной строки. Одним из самых крутых языков, которые я выучил за то время, был PERL. Приводить такой простой пример несправедливо по отношению к языку, но вот что:

1993 - PERL

$welcome = "Hello World";
print "$welcome\n";

В то же время я быстро открыл для себя огромную всемирную паутину (да, мы так ее тогда называли ... Интернет был тем, что запускали все эти забавные программы, такие как Gopher и Archie, а всемирная паутина была просто комплект документов который сел на него). HTML стал для меня еще одним скачком, потому что я впервые столкнулся с созданием декларативного пользовательского интерфейса. Вместо того, чтобы загружать переменные или литералы и вызывать какое-то ключевое слово или подпрограмму, я мог буквально просто организовать контент на странице. Вы будете удивлены, что 20 лет спустя основной синтаксис HTML-страницы практически не изменился.

1993 - HTML

<html>
<head><title>Hello, World</title></head>
<body><h1>Hello, World</h1></body>
</html>

Для меня это было интересное время. Я перешел со своих персональных компьютеров (TI-99 / 4A и Commodore 64 с коротким периодом, проведенным на Amiga) к мэйнфреймам, и внезапно мой компьютер стал для меня просто терминалом для подключения к мэйнфреймам Unix. Я также запускал ОС Linux на своем ПК, потому что это был самый быстрый способ подключения к Интернету и сети в то время - стек TCP / IP был встроен в ОС, вместо того, чтобы сидеть сверху, как это было в старые версии Windows (кто-нибудь помнит NETCOM?). Большая часть моей работы была на мэйнфреймах.

Я действительно понимал, что теряю связь с миром ПК. В то время было совершенно очевидно, что безумные дни персональных компьютеров прошли, и пыль осела вокруг двух машин: ПК с Windows для большинства из нас и Mac для дизайнеров. Я действительно в это верил. В то время у меня был сосед по комнате, который занимался Mac, и в то время он придумывал купоны. У него были все эти изящные программы для графического дизайна, и он часто вытаскивал Quark и спрашивал меня: «Что у вас есть на ПК, чтобы это сделать?» Я пожимал плечами и напоминал ему, что я даже не могу нарисовать круг или квадрат, так что, черт возьми, я буду делать с этим графическим программным обеспечением? Мне нравился мой компьютер, потому что я разбирался в программах и математике, поэтому, даже если я не мог рисовать, я определенно мог использовать математику для создания фрактальной графики или штормов частиц. Конечно, для этого требовалась видеокарта, а переход от сеанса TELNET к системе Unix был непрактичным, поэтому я начал учиться программировать на ПК. В то время это были Win32 и C ++. Вы все еще можете создать шаблон для стека в Visual Studio 2012 сегодня. Я не буду утомлять вас деталями оригинального «HELLO.C» для Win32, который включает 150 строк кода.

1994 - Win32 / C ++ (пример немного позже)

Переход к командной строке и выполнение этого дает нам:

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

Я был молод и конкурентоспособен, и нас оценивали на основе того, сколько заявок мы успешно закрыли за день. Я не собирался отставать только потому, что программное обеспечение, которое я использовал, время от времени давало сбой. Для меня это была совершенно новая система - AS / 400 (теперь она называется iSeries), но я все равно разобрался в ней и научился хотя бы перезапускать программу обработки заявок после сбоя. ИТ-отдел быстро поймал меня и отвел в сторону. Я боялся, что у меня проблемы, но вместо этого мне предложили перейти в IT. Я начал выполнять операции в третью смену, что означало в основном обслуживание систем AS / 400 и замену картриджей на больших принтерах, которые распечатывали бланки полисов и заявления.

Когда я пришел на работу, большую часть смены занял процесс замены картриджей. Это потому, что некоторые формы были только черными чернилами, но другие формы имели зеленые или красные блики. Принтеры могли обрабатывать только один профиль чернил, поэтому всякий раз, когда обнаруживался другой тип формы, мы получали предупреждение и заменяли все. Я решил, что это смешно, поэтому потратил время на то, чтобы научиться ролевой игре. Я написал программу, которая сопоставляла задания на печать по цвету чернил, а затем сорвала очередь печати так, чтобы весь черный, весь зеленый, и т. Д. Превратился из 8-часового задания в двухчасовое, и у меня было много времени для изучения. РПГ. Первоначальные версии - RPG II и RPG III - были грубыми языками, изначально разработанными для простой имитации систем перфокарт и генерации отчетов (название расшифровывается как Report Generator). Как и Фортран, RPG была позиционным языком.

1995 - РПГ

I              'HELLO, WORLD'        C         HELO
C           HELO      DSPLY
C                     SETON                     LR

Обратите внимание на разные типы строк, обозначенные первым символом (на самом деле это было бы на несколько столбцов, но я намеренно пропустил часть кода маржи). Это определяет константу, отображает ее, а затем устанавливает индикатор для завершения программы.

После работы на производстве я получил второй концерт. Бухгалтерский учет на конец месяца потребовал довольно много времени и усилий. Первоначальной системой был мэйнфрейм Honeywell, который считывал перфокарты. Была написана программа на языке COBOL, которая считывала файл, имитирующий перфокарту, и выводила другой файл, который затем закачивался в AS / 400 и обрабатывался. После этого различные бухгалтерские показатели должны были совпадать. Из-за ошибок округления, неподдерживаемых транзакций и любого другого количества проблем цифры почти никогда не совпадали, поэтому задача заключалась в том, чтобы исследовать процесс и выяснить, где он сломался, а затем обновить код, чтобы исправить это. У нас также был «аварийный переключатель» на 11-й час, который считывал выходные данные и генерировал корректировки бухгалтерского учета, чтобы сбалансировать бухгалтерские книги, если мы не могли найти проблемы. Хотя я не очень много писал на COBOL, мне нужно было понимать его достаточно хорошо, чтобы прочитать исходный код Honeywell для устранения проблем на стороне AS / 400.

1995 - КОБОЛ

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WELCOME-MESSAGE           PIC X(12).
PROCEDURE DIVISION.
PROGRAM-BEGIN.
    MOVE "Hello World" TO WELCOME-MESSAGE.
    DISPLAY WELCOME-MESSAGE.PROGRAM-DONE.
STOP RUN.

Спустя короткое время в нашу компанию приехал лучший гуру ролевых игр, чтобы провести трехдневный урок, потому что в мире AS / 400 происходило самое крутое. Мало того, что машины AS / 400 перешли на 64-битную версию (и все знают, что двойные биты вдвое приятнее, верно?), Но и язык RPG подвергся фейслифтингу, и с версией IV он будет охватывать больше процедурных и почти объектно-ориентированных принципов. чем когда-либо прежде. Как это было круто? Мы перешли на тренировку, и я засмеялся, потому что все старые разработчики ролевых игр ломали голову, пытаясь проделать этот «новый стиль программирования», в то время как я был рад, что наконец смог вернуться к более знакомому процедурному стилю, к которому я привык с C и C ++, а не жесткая, ограниченная RPG на языке индикаторов и столбцов.

Некоторые разработчики могут получить удовольствие от одной из «функций», которая действительно поразила всех. Язык требует, чтобы инструкции начинались с определенного столбца, а вводимые в инструкции данные должны предшествовать им. Это было очень ограниченное пространство, поэтому вы действительно могли загружать константы из нескольких символов, в противном случае вам приходилось указывать их как константы или структуры данных и считывать их. В новом языке столбец ключевых слов был перемещен вправо, поэтому было больше места для позиция «фактор один». Это означало, что теперь мы могли написать «Hello, world» всего в нескольких строках. Язык также был более «процедурным», так что вы могли завершить программу, вернувшись вместо установки индикатора (хотя, если я правильно помню, возврат к основной программе на самом деле просто скрыл этот индикатор).

1996 - РПГ / ИЛЭ

C     'HELLO, WORLD' DSPLY 
C                    RETURN

В AS / 400 была встроена база данных под названием DB2, встроенная в операционную систему. Долгое время база данных поддерживала только прямое взаимодействие через RPG или другое программное обеспечение и не поддерживала синтаксис SQL. Он был выпущен как специальный пакет под названием SQL / 400, но лежала в основе его поддержка. Я написал одну из своих первых опубликованных (печатных) статей об использовании SQL для AS / 400 в 1998 году (Create an Interactive SQL Utility). Вероятно, существует миллион способов выполнить Hello, World в SQL, но, пожалуй, самый простой из них:

1998 - SQL

SELECT 'HELLO, WORLD' AS HELLO

Я извиняюсь за то, что нарушил хронологический порядок, но SQL, похоже, имел смысл как часть моей основной или оплачиваемой работы. В то же время я много занимался тяжелыми играми, начиная с DOOM (первая игра, которая меня так впечатлила, я фактически отправил деньги на покупку полной версии), продолжая с DOOM II и HEXEN и заканчивая в Quake. Если вы не знакомы с историей шутеров от первого лица, Quake была игрой, которая изменила историю игр. Он предлагал один из первых настоящих трехмерных миров (предшественники моделировали трехмерность с помощью двухмерных карт, которые позволяли варьировать высоту пола и потолка) и произвел революцию в смертельной схватке, поддержав TCP / IP и используя расширенный код, который позволил большему количеству игроков в та же карта, чем когда-либо прежде.

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

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

1996 - QuakeC

bprint("Hello World\n");

К этому времени я понял, что Интернет действительно набирает обороты. Я был разочарован в 1993 году, когда обнаружил это в колледже, и никто толком не знал, о чем я говорю, но всего несколько лет спустя все изо всех сил пытались получить доступ (несколько компаний, таких как AOL и Microsoft с MSN, действительно думали, что могут создать их собственная версия ... оба в конечном итоге сдались и подключились к Интернету). Я понял, что моя работа над мэйнфреймами устареет или, в лучшем случае, я буду тем разработчиком, который прячется в заднем углу, взламывая «старую систему». Я хотел заняться новым делом.

Я перешел в отдел, который работал над новым материалом - приложением, которое было разработано для обеспечения прозрачности для поставщиков путем соединения нескольких различных систем в приложении, написанном на VB6 (COM +) и ASP.

1998 - VB6 (COM) с ASP

Public Class HelloWorld
    Shared Public Function GetText() As String
         return "Hello World"
    End Function
End Class
<%@ Page Language="VB" %>
<OBJECT RUNAT=SERVER SCOPE=Session ID=MyGreeting PROGID="MyLibrary.HelloWorld"></OBJECT>
<HTML><HEAD><TITLE><%= MyGreeting.GetText() %></TITLE></HEAD>
<BODY><H1><%= MyGreeting.GetText() %></H1></BODY>
</HTML>

В то время у меня была возможность поработать с одаренным архитектором, который спроектировал систему, которая в то время была довольно удивительной. Все наши компоненты COM + принимали в интерфейсе один строковый параметр, поскольку входящая информация передавалась как XML. Это позволило нам иметь компоненты, которые могли бы так же легко работать с сообщениями с веб-сайта, как и с входящими данными из сторонней системы. Это был настоящий «веб-сервис» до того, как я действительно понял, что означает этот термин. На клиенте формы анализировались JavaScript, упаковывались в XML и публиковались, поэтому «сообщение» с веб-страницы не отличалось от сообщения непосредственно из службы. Сервисы также будут возвращать данные в формате XML. Это будет объединено с шаблоном для пользовательского интерфейса (называемым PXML для представления XML), а затем шаблон XSLT преобразует его для отображения. Это позволило нам настроить пользовательский интерфейс без изменения базового кода и было почти похоже на неэффективный механизм XAML. Это было до появления .NET.

Конечно, JavaScript был нашим врагом, потому что в то время нам приходилось решать, как работать с различными браузерами. Да, 15 лет назад были те же проблемы, что и сегодня, когда дело касается JavaScript и кросс-браузерной совместимости. К счастью, все браузеры согласовывают способ отправки диалогового окна конечному пользователю.

1998 - JavaScript

alert('Hello, World.');

Много времени мы потратили на работу с Microsoft XML DLL (да, если вы программировали в прошлом, то вы помните, как регистрировали парсеры MSXML). MSXML3.DLL быстро стал моим лучшим другом. Вот пример преобразования XML в HTML с помощью XSLT.

1998 - XML ​​/ XSLT в HTML

<?xml version="1.0"?>
<hello>Hello, World!</hello>
<?xml version='1.0'?><xsl:stylesheet version="1.0"      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="hello">
        <html>
            <head><title><xsl:value-of select="."/></title></head>
            <body><h1><xsl:value-of select="."/></h1></body>
        </html>
    </xsl:template>
</xsl:stylesheet>
<%
Const MSXMLClass = "MSXML2.DOMDocument"
Set XSLT = Server.CreateObject(MSXMLClass)
Set XDoc = Server.CreateObject(MSXMLClass) XDoc.load(Server.MapPath("hello.xml"))
XSLT.load(Server.MapPath("hello.xsl")) Response.ClearResponse.Charset = "utf-8"
Response.Write XDoc.transformNode(XSLT)
%>

Я провел несколько лет, работая с этой парадигмой. Примерно в то время я претерпел личную трансформацию и сбросил почти 70 фунтов, опустившись с 44 дюймов до 32 дюймов, и очень увлекся фитнесом. Я основал свою собственную компанию «на стороне» и в конце концов покинул компанию, в которой работал, чтобы стать директором по информационным технологиям в небольшой компании, которая предоставляла услуги перевода в больницах и имела онлайн-программу диеты на испанском языке. В очередной раз я смог задействовать свои испаноязычные способности, потому что переводы были с английского на испанский и наоборот. Я довольно много узнал о различиях между различными диалектами и важности целевых переводов. Я также переписал все приложение, которое использовало ASP со встроенными вызовами SQL и было жестко запрограммировано на испанский язык, чтобы оно было полностью управляемым базой данных, локализованным (для брендинга) локализованным приложением (компания стремилась перейти на другие языки, такие как французский ). Это было захватывающее время, и хотя я использовал стек Microsoft в своей работе, стоимость инструментов и серверов привела меня к сообществу открытого исходного кода моей собственной компании. Именно тогда я узнал все о стеке LAMP… ОС Linux, HTTP-сервере Apache, базе данных MySQL и PHP для разработки. По иронии судьбы этот опыт позже привел меня к одной из моих первых консалтинговых компаний, работающих в Microsoft, когда они пытались обратиться к сообществу разработчиков открытого исходного кода, чтобы они приняли Silverlight… но это уже другая история.

2002 - PHP

<?php
 $hello = 'Hello, World.';
 echo "$hello";
?>

Прошло несколько лет работы над этими конкретными платформами, когда у меня появилась возможность перейти на другую должность, чтобы построить отдел программного обеспечения для новой компании. Я был третьим сотрудником небольшого стартапа, который предоставлял точки беспроводного доступа до того, как этот термин стал популярным. Если вы когда-нибудь ели в Panera или Chick-fil-A или брали чашку кофе в Caribou Coffee, то вы использовали либо программное обеспечение, которое я помог написать, либо его более позднюю версию, чтобы управлять точкой доступа. . Когда я пришел в компанию, первоначальная платформа была написана на Java. Это был язык, с которым я немного «повозился», так что объединить мои навыки работы с C ++ и стеком Microsoft, чтобы быстро освоить его, не было чем-то гигантским.

2004 - Java

public class Hello {
 public static void main(String[] args) {
    System.out.println("Hello, World");
 }
}

Я ничего не имею против Java как языка, но конкретная разновидность, которую мы использовали, включала Microsoft JVM, которую собирались отложить на полку, и специальный сервер, который просто не хотел масштабироваться. Я перенес платформу на .NET, и было удивительно видеть, что один сервер IIS обрабатывает больше запросов, чем несколько выделенных серверов Java. Я говорю «миграция», но это действительно создание новой платформы. Мы рассматривали возможность переноса кода J ++ на C #, но это было непрактично. К счастью, C # очень близок к Java, поэтому большая часть команды смогла легко осуществить переход, и мы просто использовали существующую систему как «спецификацию» для новой системы для работы на машинах Windows и перехода с MySQL на SQL Server 2005. Обратите внимание на то, насколько похожая. «Hello, World» в C # по сравнению с Java.

2005 — C#

public class Hello
{
 public static void Main()
 {
    System.Console.WriteLine("Hello, World!");
 }
}

Частью того, что сделало нашу компанию настолько успешной в то время, была «панель управления», которая позволяла нам управлять всеми нашими горячими точками и точками доступа из центра. Мы могли перезагружать их удаленно, применять обновления прошивки и отслеживать их сердцебиение и сохранять историю для диагностики проблем. Это программное обеспечение быстро превратилось в платформу управления мобильными устройствами (MDM), которая сегодня является флагманским продуктом компании. Они переименовали свое имя и выпустили продукт, но наша задача заключалась в том, чтобы обеспечить чрезвычайно интерактивный интерфейс в HTML, который был бы кроссбраузерным (в предыдущем решении использовались пользовательские Java-апплеты Microsoft). Нам удалось создать довольно впечатляющую систему с использованием AJAX и HTML, но наша команда боролась со сложными, богатыми пользовательскими интерфейсами, когда им приходилось тестировать во многих браузерах и платформах. Хотя нам нужно было сохранить это для входа в точку доступа, сторона управления была более гибкой, поэтому я исследовал несколько альтернативных решений.

Когда я обнаружил Silverlight, я был заинтригован, но решил сначала испытать его. Я смог выставить POC на нашей панели мониторинга за несколько недель, и всем это понравилось, поэтому мы решили пойти ва-банк. На мой взгляд, наша команда смогла перейти от концепции к реализации кода примерно в 4 раза быстрее с помощью Silverlight по сравнению со стеком JavaScript и HTML. Это было тогда, когда HTML5 был несбыточной мечтой. Перед тем, как я ушел, мы создали немало функциональных возможностей Silverlight. К тому времени мы уже работали с Apple над MDM, и они, конечно, не хотели, чтобы Silverlight находился рядом с их программным обеспечением, а HTML5 замедлил набирать обороты, поэтому я знаю, что компания вернулась назад, но я мог наслаждаться созданием еще несколько лет. богатая линейка бизнес-приложений на языке, который привнес мощь декларативного пользовательского интерфейса через XAML в такое количество браузеров и платформ, которые были готовы разрешить плагины (я слышал, что они больше не популярны).

2008 - Silverlight (C # и XAML)

<UserControl x:Class="SilverlightApplication1.MainPage">
 <Grid x:Name="LayoutRoot" Background="White">
 <TextBlock x:Name="Greeting"></TextBlock>
</Grid>
</UserControl>
public partial class MainPage : UserControl 
{
     public MainPage()
     {
         InitializeComponent();
         Loaded += MainPage_Loaded;
     }
     void MainPage_Loaded(object sender, RoutedEventArgs e)
     {
         Greeting.Text = "Hello, World.";
     }
}

Silverlight, конечно, упал как плохая акция. Это все еще была действительно полезная и жизнеспособная технология, но как только люди поняли, что Microsoft не уделяет ей особого внимания (простите за каламбур), она была мертва по прибытии - на самом деле не имело никакого отношения к тому, был ли это правильный инструмент в то время, и все, что связано с восприятием его устаревания. HTML5 также отлично справился с маркетингом, так как «напиши один раз, запусти повсюду», и сотни компаний нырнули в голову сначала, прежде чем осознали свою ошибку (на самом деле это «напиши один раз, отстой везде, а потом напиши снова для каждого целевого устройства») .

Однако те части, которые нам понравились в Silverlight, остались в Windows 8.1 со стеком XAML и C #. Для шуток и хихиканья вот версия «Hello, World», которая делает то, что делают крутые ребята, и использует шаблон Model-View-ViewModel (MVVM).

2011 - WinRT / C #

public class ViewModel
{
    public string Greeting
    {        get
        {
            return "Hello, World";
        }
    }
}
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid.DataContext>
        <local:ViewModel/>
    </Grid.DataContext>
    <TextBlock Text="{Binding Greeting}"/>
</Grid>

Хотя Windows 8.1 занимала меня написанием и побочными проектами, для большинства компаний это все еще что-то новое, и им нужно решение на основе Интернета. Это означает HTML и JavaScript, поэтому я трачу на них большую часть своего времени. Правильно, как только я подумал, что выбрался, меня снова втянули. После серьезного изучения того, что я ненавижу в веб-разработке с использованием HTML и JavaScript, я решил, что должен быть способ получше. Наша команда собралась, посмотрела на возможные пути и нашла довольно крутое решение. Недавно был выпущен новый язык под названием TypeScript, который представляет собой надмножество JavaScript. Это не пытается изменить синтаксис, и любой допустимый JavaScript также является допустимым TypeScript. Однако язык предоставляет некоторые функции времени разработки, такие как интерфейсы, которые помогают формировать вызовы API и обеспечивают обширное обнаружение (никогда не появляясь в сгенерированном коде), а также предоставляет нам такие конструкции, как классы с наследованием, строго типизированные переменные и статические модификаторы, которые все компилируются в совершенно корректный кроссбраузерный JavaScript.

Использование TypeScript было простым решением. Несмотря на то, что он находится в стадии бета-тестирования, он производит на 100% готовый к производству JavaScript, поэтому, если мы обнаружим, что он не будет работать, мы знали, что можем отказаться от него и просто продолжить работу с JavaScript. Оказалось, что это было невероятно полезно - даже несколько скептиков в команде, которые были пуристами JavaScript и ненавидели любые попытки «изменить язык», соглашались, что TypeScript дает нам дополнительный уровень контроля, возможность рефакторинга и поддерживает параллельную разработку и имеет ускорили нашу способность предоставлять качественный веб-код.

2012 - TypeScript

class Greeter {
    public static greeting: string = "Hello, World";
    public setGreeting(element: HTMLElement): void {
        element.innerText = Greeter.greeting;
    }
}
var greeter: Greeter = new Greeter();
var div: HTMLElement = document.createElement("div");
greeter.setGreeting(div);
document.body.appendChild(div);

TypeScript был не единственным изменением, которое мы внесли. Мы также хотели убрать некоторые ритуалы и церемонии, которые у нас были при настройке объектов для привязки данных. Мы использовали Knockout, отличный фреймворк, но он потребовал больше работы, чем мы хотели. Кто-то из нашей команды изучил несколько альтернатив и остановился на AngularJS. Сначала я был настроен скептически, но быстро понял, что это действительно похоже на XAML для Интернета. Это дало нам возможность сохранить декларативность пользовательского интерфейса, в то же время изолировав нашу императивную логику, и решило еще одну проблему. Наша команда уже несколько месяцев успешно использует стек с TypeScript и AngularJS, и ему это очень нравится. Я работаю над модулем для WintellectNOW, потому что считаю, что это важная вещь. Однако если 30 лет чему-то меня и научили, так это так: сегодня здесь, завтра нет. Я не разработчик C #, разработчик JavaScript или мастер AngularJS. Неа. Я программист. Программист. Чисто, ясно и просто. Языки - это всего лишь инструмент, и я говорю на многих из них. Итак, «Hello, World», и я надеюсь, вам понравилось путешествие ... вот последние новости.

2013 - AngularJS

<div ng-app>
    <div ng-init="greeting = 'Hello, World'">
        {{greeting}}
    </div>
</div>

«До свидания, читатель».

Первоначально опубликовано на сайте csharperimage.jeremylikness.com 28 февраля 2016 г.