О том, что такое "современное" программирование, порассуждали пользователи сайта Quora. Рассказываем о самых интересных и полезных ответах.
Тим Менш, разработчик программного обеспечения
Понятие «современный» можно интерпретировать с разных позиций и точек зрения. Я буду строить свой ответ, придерживаясь той идеи, что «считается наиболее эффективной практикой сегодняшнего дня».
Современные и наиболее эффективные методы:
- Эксперименты с новыми языками – это всегда интересно, однако в то же время и непредсказуемо. Поэтому предпочтение стоит отдать проверенным и признанным языкам:
- Язык Go начал широко использоваться около восьми лет назад, однако за его спиной стоит Google, поэтому этот язык достаточно быстро обретает все большую популярность и улучшает свою производительность.
- Языку Kotlin всего 7 лет, и он также пользуется полной поддержкой компании Google. Данный язык работает для развитой экосистемы JVM. При определении переменных, полей и т.д. Kotlin позволяет указать, может ли в них храниться ссылка null, что значительно повышает безопасность и позволяет избежать ошибок на миллиарды долларов. Благодаря этой особенности, а также некоторым другим удобным и полезным функциям, в проектах для JVM при выборе языка окончательное решение чаще всего принимается именно в пользу Kotlin. Стоит уточнить, что хоть Scala обладает похожим рядом достоинств, однако он несравнимо сложен по сравнению с Kotlin. В принципе, придерживаясь указанных в этом списке рекомендаций, вы также можете использовать Java.
- C++, фактически, до сих пор является основным стандартом для системного программирования. Он часто используется для написания кода ядра, а также для некоторых драйверов, и вряд ли этот язык собирается исчезнуть в ближайшее время.
- C# - это прекрасный язык в том случае, если вы нацелены на экосистему Microsoft, либо используете Unity или Xamarin. Если вы хотите большего разнообразия функционала, тогда обратите ваше внимание на F#.
- TypeScript достаточно молод, однако он может похвастаться поддержкой высочайшего уровня со стороны Microsoft. Он устраняет настолько огромное количество угроз при работе с JavaScript, что его использование становится неотъемлемым требованием для разработки любого сайта или Node.js.
- Python следует использовать только тогда, когда в нем есть необходимость. Например, проекты для машинного обучения и небольшие скрипты для обработки данных – вот те сферы, в которых Python проявит себя наилучшим образом. Исходя из отсутствия у него строгой типизации, я бы настойчиво не советовал его к использованию в крупных проектах.
- После того, как язык выбран, учите его:
- Каждый из языков, включенных в мой список, продолжает развиваться. Какой бы вы ни выбрали, постарайтесь быть на гребне волны и в курсе всех новых функций.
- Если вы встречаете такую функцию, как «лямбда», и не понимаете ее, тогда постарайтесь узнать по этой теме как можно больше, пока ваших знаний не станет достаточно. Поищите примеры, видео или статьи в интернете. Если же вы не разберетесь, то в нужный момент вы не будете обладать этим инструментом – вы даже не сможете понять, где и что искать.
- Вместо слепого следования чисто функциональному либо объектно-ориентированному подходу, лучше все же придерживаться смешения парадигм:
- Не все шаблоны проектирования в ООП одинаково хороши. Придерживайтесь определенной иерархии.
- Если это возможно, используйте функциональные паттерны при преобразовании данных.
- Неизменяемый интерфейс может быть удобен в случае с определенными образцами данных. Используйте его в том случае, если он будет полезен. Не следует его использовать, если он еще больше усложнит вашу проблему.
- Используйте современный редактор/IDE:
- Если вы используете хороший редактор, то он сможет подсказать вам, где закралась синтаксическая ошибка и каким образом можно ее исправить. Интегрированная среда разработки программ (IDE) покажет вам документы для используемой вами функции «member», поможет вам с параметрами и укажет на ваши опечатки. Это бесценная помощь. Так почему бы не воспользоваться ею.
- Подходящий инструментарий:
- Git приобрел невообразимую популярность. Просто используйте его.
- Docker – это тот инструмент, которым вы обязательно должны уметь пользоваться.
- docker-compose или kubernetes также должны входить в список инструментов, которыми вы владеете.
- CI/CD: вы должны знать, что означают эти акронимы, а ваши проекты должны быть построены таким образом, чтобы их было легко разрабатывать и тестировать.
Джереми Дэтс, 16 лет в разработке ПО
Любое понимание фразы «современное программирование» будет так или иначе субъективным. На мой взгляд, «современное программирование» включает в себя ряд языков программирования, фреймворков, наборов средств для разработки программ, а также парадигмы программирования, которые получат широкое распространение в ближайшие три года. 20 лет назад в качестве ближайшего будущего я бы рассмотрел срок в пять лет, однако в 2018 году, учитывая скорость происходящих изменений, логичнее будет говорить лишь о ближайших трех годах.
Подразумевает ли «современное программирование», что необходимо будет использовать новые трендовые языки, например, Rust? Нет, оно также может означать, что вы, работая со старыми языками программирования, будете совершенствовать свой стиль и применять новые функции языка.
К примеру, языку C# уже 17 лет, и он подвергался изменениям и дополнениям уже 7 раз (вот-вот должна выйти версия C# 8.0). За прошедшие годы компания Microsoft проделала отличную работу, внедряя в него популярные и полезные функции. Например, лямбда-выражение (C# 3.0), динамическое связывание (C# 4.0), асинхронные методы (C# 5.0) и т.д.
Кроме того, за последние несколько лет был полностью внедрен шаблон проектирования DI (внедрение зависимости). В последних примерах фрейворков можно увидеть DI повсюду. Если разумно сочетать новые функции языка и DI, то современный код на C# будет выглядеть совершенно по-другому, нежели код, который программисты писали на этом же языке в начале 2000-х. То же самое, хоть и в меньшей степени, можно сказать о Java и других популярных языках.
Улучшение и расширение функционала существующих языков, а также появление новых – это именно то, что позволяет нам, разработчикам ПО, принимать и применять наиболее оптимальные решения. Если новые опции способны отвечать тем задачам, для выполнения которых они были созданы, то в итоге мы получаем программное обеспечение более высокого качества. Под «более высоким качеством», как правило, подразумевается следующее: лучшая производительность, немногострочность (меньшее количество строк кода, необходимых для написания/обслуживания программы), меньшее ресурсопотребление, более гибкая адаптация программы к выполнению определенных сценариев, что позволяет сэкономить средства. Все это объясняет, почему необходимо стремиться именно к «современному программированию» и его дальнейшему развитию и развертыванию.
Однако есть также причины, в соответствии с которыми так называемое «современное программирование» может быть лишним, нерациональным или даже бессмысленным. В некоторых случаях под этим понятием подразумевается полнейшая реорганизация существующей системы, которая и так неплохо справляется со стоящими перед ней задачами, а значит, не нуждается в модернизации.
Кори Батлер, основатель Author.io
На мой взгляд, все же между понятиями «современное программирование» и «современная разработка/инжиниринг» существуют некоторые различия. Все мы знаем, что программирование, по сути, это лишь написание инструкций для компьютера, которые тому следует выполнять. Разработка же – это процесс поиска и внедрения определенных решений, которые являются сочетанием целого ряда компонентов, а именно: программирование + архитектура + инфрастуктура + логика.
Если исходить из подобного видения, то, по моему мнению, «современное» программирование – это не что иное, как использование новых функций платформ и прочих технологий, которые не были нам доступны до нынешнего момента.
Я много писал о браузерах, которые последние пару десятилетий работают на JavaScript. Однако в прошлом серверы не могли сами инициировать коммуникацию с браузером – они могли только отвечать на его запрос. И подобная модель диктовала определенные правила, в соответствии с которыми существовали и развивались интернет-соединения. До создания ES5, в JavaScript не существовало такого концепта, как геттеры/сеттеры. Но все изменилось с введением стандарта ECMA, после чего браузеры стали поддерживать WebSockets/WebRTC/SSE.
WebSockets/WebRTC/SSE – это функции платформы, а не часть языка программирования. Поэтому для меня «современное» программирование включает в себя чисто написание кода, который будет взаимодействовать с ресурсами, к коим мы совсем недавно получили доступ.
Я бы не сказал, что это такое уж точное правило, бесспорно действующее на практике. Но, на мой сугубо личный взгляд, невозможно назвать что-то «современным», если оно обладает обратной совместимостью с платформой, введенной в эксплуатацию 5 лет назад. Я считаю, что называть что-либо передовым можно только в том случае, если оно было создано за последние 24 месяца.
Комментарии
О вкусе устриц больше всех толкуют те, кто их не пробовал.
Привести пару кусков текста в современном и несовременном стилях -- слабо?
Кол.
Разбавляте, девушки, пятёрками, вы это умеете.