Java на 20: Как променя програмирането завинаги

Спомнянето какъв е бил светът на програмирането през 1995 г. не е лесна задача. Обектно-ориентираното програмиране, от една страна, беше приета, но рядко практикувана парадигма, като голяма част от това, което се наричаше така наречените обектно-ориентирани програми, беше малко повече от ребрандиран C код, който се използва >>вместо printfи classвместо struct. Програмите, които написахме в онези дни, рутинно изхвърляха ядро ​​поради аритметични грешки на указателя или свършиха паметта поради течове. Изходният код едва може да бъде пренесен между различни версии на Unix. Пускането на един и същ двоичен файл на различни процесори и операционни системи беше луд разговор.

Java промени всичко това. Въпреки че зависим от платформата, ръчно разпределен, процедурен C код ще продължи да бъде с нас поне през следващите 20 години, Java доказа, че това е избор, а не изискване. За първи път започнахме да пишем реален производствен код на крос-платформен, събран боклук, обектно-ориентиран език; и ни хареса ... милиони от нас. Езиците, дошли след Java, най-вече C #, трябваше да изчистят новата по-висока лента за производителност на разработчиците, която Java установи.

Джеймс Гослинг, Майк Шеридан, Патрик Нотън и останалите програмисти на Sun's Green Project не са измислили повечето важни технологии, които Java използва широко. Повечето ключови характеристики, които те включват в онова, което тогава е било известно като Дъб, са намерили своя произход другаде:

  • Основен клас на обект, от който произлизат всички класове? Общи приказки.
  • Силна статична проверка на типа по време на компилация? Ада.
  • Множество интерфейси, едно наследяване на изпълнение? Цел-C.
  • Вградена документация? CWeb.
  • Междуплатформена виртуална машина и байт код с компилация точно навреме? Отново Smalltalk, особено диалекта на Слънчевия Аз.
  • Събиране на боклук? Лисп.
  • Примитивни типове и контролни структури? ° С.
  • Система от двоен тип с не-обектни примитивни типове за изпълнение? C ++.

Java обаче създаде нова територия. Нищо подобно на проверените изключения не присъства на нито един друг език преди или след това. Java беше и първият език, който използва Unicode в родния тип низ и самия изходен код.

Но основната сила на Java беше, че тя е създадена, за да бъде практически инструмент за приключване на работата. Той популяризира добри идеи от по-ранни езици, като ги преопакова във формат, който е познат на средния C кодер, въпреки че (за разлика от C ++ и Objective-C) Java не е строга надмножество на C. Всъщност именно това желание не само но също така премахнете функции, които направиха Java много по-опростена и по-лесна за учене от други обектно-ориентирани потомци на C

Java не е (и все още не) трябва structs, unions, typedefs, и headerфайлове. Обектно-ориентиран език, който не е скован от изискване за стартиране на наследения код, не се нуждаеше от тях. По същия начин Java разумно пропусна идеи, които бяха изпробвани и намерени, че искат на други езици: наследяване на множество реализации, аритметика на указателя и претоварване на оператора най-забележимо. Този добър вкус в началото означава, че дори 20 години по-късно Java все още е сравнително свободна от предупрежденията „тук бъди дракони“, които затрупват ръководствата за стил за своите предшественици.

Но останалата част от света на програмирането не е стояла на едно място. Хиляди езици за програмиране са се повишили, откакто за първи път сме започнали да програмираме Java, но повечето никога не са постигнали повече от малка част от колективното внимание, преди в крайна сметка да изчезнат. Това, което ни продаде на Java, бяха аплети, малки програми, работещи в уеб страници, които могат да взаимодействат с потребителя и да правят повече от това да показват статичен текст, снимки и формуляри. Днес това не звучи много, но не забравяйте - през 1995 г. JavaScript и DOM не са съществували, а HTML форма, която е разговаряла със CGI скрипт от сървъра, написан на Perl, е била модерна.

Иронията е, че аплетите никога не са работили много добре. Те бяха напълно изолирани от съдържанието на страницата, не можеха да четат или пишат HTML, както JavaScript в крайна сметка можеше. Ограниченията за сигурност попречиха на аплетите да взаимодействат с локалната файлова система и мрежовите сървъри на трети страни. Тези ограничения направиха аплетите подходящи за малко повече от обикновени игри и анимации. Дори тези тривиални доказателства за концепцията бяха възпрепятствани от лошата производителност на ранните виртуални машини на браузъра. И когато недостатъците на аплетите бяха коригирани, браузърите и разработчиците от предния край отдавна бяха преминали Java. Flash, JavaScript и наскоро HTML5 привлече вниманието ни, тъй като далеч по-ефективни платформи за доставяне на динамичното уеб съдържание Java ни обеща, но не успя да достави.

И все пак аплетите бяха това, което ни вдъхнови да работим с Java и това, което открихме, беше чист език, който изглади много от грубите ръбове и болезнени точки, с които се борихме в алтернативи като C ++. Самото автоматично събиране на боклука си струваше цената на допускането. Аплетите може да са били свръхсвързани и недостатъчно доставени, но това не означава, че Java не е адски добър език за други проблеми.

Първоначално замислена като клиентска библиотека за различни платформи, Java намери истински успех в сървърното пространство. Сервлети, Java Server Pages и набор от корпоративни фокусирани библиотеки, които периодично се обединяват и ребрандират в една объркваща абревиатура или друга, решават реални проблеми за нас и за бизнеса. Маркетинговите неуспехи настрана, Java постигна почти стандартен статус в ИТ отделите по целия свят. (Бързо: Каква е разликата между Java 2 Enterprise Edition и Java Platform Enterprise Edition? Ако предположихте, че J2EE е наследник на JEE, сте го получили точно назад.) Някои от тези, фокусирани върху предприятието продукти, бяха в тежка категория и вдъхновени алтернативи на източника и добавки като Spring, Hibernate и Tomcat, но всички те са изградени върху основата Sun set.

Може би единственият най-важен принос на отворения код за Java и по-широката програма за програмиране е JUnit. Тест-управляваната разработка (TDD) беше изпробвана по-рано с Smalltalk. Въпреки това, подобно на много други нововъведения на този език, TDD не постигна широко разпространение и приемане, докато не се появи в Java. Когато Кент Бек и Ерих Гама пуснаха JUnit през 2000 г., TDD бързо се издигна от експериментална практика на няколко програмисти към стандартния начин за разработване на софтуер през 21 век. Както каза Мартин Фаулър, „Никога в областта на разработката на софтуер не се дължеше толкова много на толкова малко редове код“, а тези няколко реда код бяха написани на Java.

Двадесет години от създаването си, Java вече не е изненадващо. Тя се превърна в утвърдилия се действащ на други езици бунтовник срещу. Езиците с по-леки тежести като Ruby и Python са проникнали значително в територията на Java, особено в стартиращата общност, където скоростта на развитие е повече от стабилност и мащаб - компромис, от който самата Java се е възползвала в ранните дни, когато производителността на виртуални машини силно изостанал компилиран код.

Java, разбира се, не стои на едно място. Oracle продължава да включва добре доказани технологии от други езици като генерични продукти, автобокс, изброяване и наскоро ламбда изрази. Много програмисти се сблъскаха за първи път с тези идеи в Java. Не всеки програмист знае Java, но независимо дали го знае или не, всеки програмист днес е повлиян от него.

Свързани статии

  • Преглед: Сравнени са големите 4 IDE на Java
  • Java завинаги! 12 ключа към трайното господство на Java
  • Java срещу Node.js: Епична битка за акции на разработчиците