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

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

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

Прошлое:

Первый язык, на котором я буду говорить, - C, он был создан в 1972 году и до сих пор остается одним из самых актуальных языков в настоящее время, вероятно, наиболее актуальным языком программирования в истории (это может измениться в будущем). До C разработка программного обеспечения выполнялась с использованием ассемблера, который был очень языком программирования низкого уровня (язык, который обеспечивает очень небольшую абстракцию от архитектуры набора команд компьютера). Операционная система Unix разрабатывалась на ассемблере с очень низкой абстракцией между ISA и самим языком, что является огромным продуктивным убийцей, когда вы разрабатываете универсальную операционную систему (должны поддерживать много ISA). Чтобы упростить разработку, Деннис Ричи и Кен Томпсон создали B и, кроме того, C. Компилятор C изначально был написан на ассемблере, но сегодня большинство компиляторов GCC и LVVM (компиляторы C и C ++) написаны с использованием C, C ++ или другой язык вместо самой сборки.

Поэтому легко представить, насколько важен C в истории разработки программного обеспечения, сегодня большинство компиляторов написано с использованием C / C ++. Если C недостаточно продуктивен для большинства программного обеспечения, написанного в настоящее время, многие другие языки широко используют C / C ++ в своих компиляторах и цепочках инструментов, некоторые примеры: Javascript (v8), Python, Ruby, Java, Swift и многое другое. .

В 80-х годах C ++ приобрел большую популярность из-за объектно-ориентированного программирования и совместимости с C без ущерба для скорости или низкоуровневой функциональности. C ++ был не первым, но наверняка был ответственным за распространение концепции POC. Хотя POC был очень доминирующим в 80-х годах, в это десятилетие родились некоторые важные функциональные языки, такие как Erlang.

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

Некоторые известные интерпретируемые языки: Python, Java, PHP, Ruby, Javascript и т. Д. Если вы сравните только языковой аспект этих языков с C / C ++, легко возразить против них. Это языки высокого уровня, которые значительно повышают продуктивность разработчика, не нужно беспокоиться об управлении памятью само по себе - это уже огромный выигрыш. По мере роста производительности оборудования эти языки приобрели большую популярность. Тем не менее, у нас всегда есть точка на кривой, когда жертвовать производительностью ради продуктивности нецелесообразно, и именно поэтому C так важен до сегодняшнего дня.

Если вы заметили, Java не обладает большой гибкостью по сравнению с Python, PHP, Ruby и Javascript. Его можно рассматривать как пересечение C ++ и этих интерпретируемых языков, но до сегодняшнего дня это один из наиболее часто используемых языков. Почему кто-то выбрал менее продуктивный язык? Что ж, продуктивный язык - это не только гибкость, гибкость может быть вашим врагом, но и у Java есть больше ограничений (строгий интерфейсный контракт, статическая типизация и т. Д.), Что делает его отличным выбором для огромного сложного программного обеспечения, которое труднее поддерживать.

Настоящее:

Я сказал, что язык, который вы выбираете, больше не так актуален, поскольку в прошлом один из аспектов касался не самого языка. Таким образом, развитие программного обеспечения: чистый код, POC, шаблоны проектирования, TDD, BDD, DRY, SCRUM и т. Д. Не зависят от языка. Эти методы приводят к последовательной разработке программного обеспечения и улучшенным продуктам, поэтому Java в последнее время подвергается такой критике. Если вы будете следовать лучшим практикам, вы не получите особой выгоды от ограничений, связанных с этими языками, но эта гибкость начнет вас ограничивать.

Если 90-е годы были очень важны для интерпретируемых языков, то 2010-е годы - это десятилетие, когда компилируемый язык будет сиять. Если раньше гибкость была огромным недостатком, она больше не расширяется, с прогрессом в компиляторах родились такие языки, как Kotlin и Swift, которые могут проверять ограничения без потери гибкости. Эти языки 2010-х годов почти так же мощны, как интерпретируемые языки, с почти любыми недостатками.

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

Будущее:

Один из важнейших проектов последнего десятилетия, набирающий все большую популярность, - LLVM. Виртуальная машина низкого уровня (которая не является виртуальной машиной) - это независимый от модульного языка компилятор и набор инструментов, который используется для нескольких языков для компиляции собственного кода. Некоторые из этих языков: ActionScript, Ada, C #, Common Lisp, Crystal, CUDA, D, Delphi, Fortran, Graphical G Programming Language, Halide , Haskell , Байт-код Java , Julia , Kotlin , Lua , Objective-C , OpenGL Shading Language , Pony, Python , R , Ruby Rust , Scala , Swift и Xojo .

Вы заметили их много? И вы также заметили, что многие из них являются интерпретируемыми языками? В отличие от компилируемых языков, которые становятся все более сложными, интерпретируемые языки становятся быстрее и безопаснее (проверки во время компиляции). Javascript и PHP - отличные примеры того, как скомпилированный и интерпретируемый язык движется в одном направлении.

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

Если этого было недостаточно, GraalVM выводит программное обеспечение для полиглотов на совершенно новый уровень. Он поддерживает разработку с использованием JS, R, Ruby, Python, Java (и любого другого языка JVM) в той же программе.

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

Понравился этот пост? Следуйте за мной в твиттере: https://twitter.com/guitcastro