Три основных направления разработки ПО в будущем

    (Перевод поста: Top 3 paradigm shifts that will shape the future of developers — Enes TAYLAN)


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

    1. Облачные вычисления

    Благодаря Интернету, компьютеры превратились из отдельных рабочих станций в полностью интегрированную среду из многих компьютеров и серверов. Степень интеграции повышается и уже сейчас много приложений работает по облачному принципу. Компании миллиардеры разрабатываю все больше продуктов для облачных вычислений. Стив Балмер заявил, что через два года 95% приложений Microsoft будут работать в облаке. MS Office тоже перестраивается под облачные технологии. Google Docs стал главным инструментом, который мы используем для совместной работы над документами. Мы можем развертывать свои приложения на серверах Amazon, Google Apps, Microsoft Azure или множестве других платформ.

    В этот период ключевыми задачами для разработчиков есть:
    — фокусирование на web-приложениях: разработка настольных приложений уже не так важна;
    — разработчики должны подключать приложения к интернету через web-сервисы и разрабатывать приложения, которые выполняются на web-сервере.

    Как адаптироваться:
    — изучать web-сервисы (основанные на soap, json, rest…), web-технологии (ASP.NET, JSP …), RIA-технологии (Flex, Silverlight…), программирование web-страниц (JavaScript, JQuery…)

    2. Многоядерное программирование, параллелизм

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

    Суть проблемы проявляется в высказывании Джона Шалфа «Параллельные алгоритмы это не просто распараллеленая версии обычных последовательных алгоритмов. Они требуют других подходов и языков программирования».
    Параллельное программирование требует новых подходов. Но некоторые элементы параллелизма появляются в популярных языках программирования.

    Как адаптироваться:
    — изучайте многопроцессорное программирование и функциональные языки. У функциональных языков программирования нет побочных эффектов. Они естественный выбор для разработчиков параллельных программ.

    3. Разработка мобильных приложений

    Все больше и больше смартфонов и планшетных ПК появляется на рынке. В 2012 году таких устройств будет продано больше чем обычных ПК.

    Ключевые пролемы:
    — хотя смартфоны, сейчас, имеют производительность выше, чем в прошлом они еще сильно проигрывают настольным ПК. Поэтому разработка ПО для смартфонов в жестких рамках их ограничений непростая задача;
    — программы выполняются на различных платформах или пишутся на новых языках программирования.

    Как адаптироваться:
    — изучайте новые технологии разработки для мобильных устройств (iPhone, Android, Windows Phone…).

    Средняя зарплата в IT

    120 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 9 172 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 61

    • НЛО прилетело и опубликовало эту надпись здесь
        0
        как вариант в облачных технологиях. NoSQL хранящиеся где-то — думаю, это направление будет развиваться, особенно для приложений и сервисов, для которых безопасность хранения данных не так и актуальна.
          +1
          Думаю БД входит в каждое из направлений.
          +4
          Это не направления, а всего-лишь инструменты. Облако ничем не отличается по сути от обычных методов хранения данных.
          Параллельные вычисления используются далеко не везде и не везде нужны, да, тот же photoshop нужно прокачивать этим, но Word зачем?
          Мобильные устройства, уже ближе, сюда же можно добавить планшеты
            0
            Там есть о планшетах.
              +1
              Word, как приложение, которое при каждом нажатии кнопки юзером, вынужденное рендерить огромные куски документа — просто таки нуждается в многопоточности! Вот Notepad, наверное, останется однопоточным и через 10 лет :)
                0
                Хотите сказать, что там сейчас однопоточный рендер? Понимаю еще обработка событий, но рендер.
                  +1
                  Чур Вас, Notepad2 и Notepad++
                  0
                  «Облако ничем не отличается по сути от обычных методов хранения данных.»

                  Вопрос не в методах хранения данных, а в методах потребления. И тут облако сильно отличается т.к. представляет собой сильно-централизованную модель.
                    0
                    Насчет Word — не согласен ) Открываешь файлик страниц этак на 200, и все подвисает… Конечно, рост производительности это рано или поздно лечит, но не отменяет возможности параллелизации. Если удастся распараллелить хотя бы половину задач — втанет работать в полтора раза быстрее, и это будет очень и очень неплохо ) не так ли?
                      0
                      Параллельные вычисления не обязательно должны использоваться для повышения производительности какой-то отдельной операции. Их же используют еще и для асинхронного выполнения разных операций. Например, проверка правописания в ворде выполняется в отдельном потоке.
                      +1
                      Представим облачный Microsoft Word
                      что из ниже перечисленного с ним ассоциируется
                      soap, json, rest, ASP.NET, JSP, Flex, Silverlight, Javascript, JQuery?

                      Облачный сервис это, прежде всего, мощный [распределенный, масштабируемый] back-end
                      А все перечисленные вами технологии — это просто UI/Front-end

                        +1
                        Windows Phone это не технология, это операционная система.
                        А писать под нее можно с использованием технологий Silverlight for WinPhone и XNA
                        –2
                        Попробую кинуть камень в огород параллельного программирования.

                        Параллельное программирование дает очень маленький выигрыш.
                        Это как переписывание кусков кода на ассемблере и оправдано только в редких критичных случаях.

                        На своем компьютере (4 ядра) я могу по пальцам пересчитать моменты, когда программа загружает свое ядро по максимуму: кодирование видео, архивирование, игры.
                        Много ли из Вас пишет свои кодеки, архиваторы, игровые движки?

                        Если вам предложат на выбор 2-е версии FireFox:
                        1 на 15% быстрее
                        2 с новым удобным, качественным интерфейсом
                        Но вы можете установить только одну, какую Вы поставите?
                          +1
                          Да, я бы тоже выбрал Fx 4 (:
                            +2
                            > На своем компьютере (4 ядра) я могу по пальцам пересчитать моменты, когда программа загружает свое ядро по максимуму: кодирование видео, архивирование, игры.

                            У Вас дома, я так понимаю, сервер решающий _сложные_ задачи и обрабатывающий многих клиентов?

                            > Много ли из Вас пишет свои кодеки, архиваторы, игровые движки?
                            Направлений к которых нужна многозадачность тьма, если честно, то в той или иной мере, это не нужно разве, что в однопроходных скриптах. Да и то, при активном их запуске о многозадачности надо думать (читай сайты).

                            <ирония>
                            > Если вам предложат на выбор 2-е версии FireFox:
                            естественно 1, т.к. второй пункт покрывается вимператором
                            </ирония>
                              +1
                              В том-то и дело, что параллельное программирование оправдывает себя, когда у сервера мало клиентов:
                              на одного клиента приходится несколько ядер.

                              А у большинства серверов количество клиентов превосходит количество ядер на порядки
                                0
                                я надеюсь, что автор всё же имел ввиду concurrency, а не parallelism. Если нет, то, действительно, круг задач существенно сужается.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                +1
                                Думается мне, что не будет по 64 ядра на настольных системах.

                                Десктопное приложение, успешно использующее десятки ядер, ассоциируется у меня с книгой «Мифический человеко-месяц». Когда увеличение команды в 10 раз, совсем не означает увеличение в 10 раз производительности. Как раз наоборот.

                                Скорее ресурсоемкие вычисления будут вынесены в облака.
                                С графическими процессорами уже пробуют это сделать
                                (см. проект ru.wikipedia.org/wiki/OnLive)
                                  0
                                  Не уверен, что такие сервисы, как onLive потянут хотя бы сотен миллионов юзеров, играющих одновременно в Кризис, даже если они все сервера Гугла выкупят.
                                    0
                                    Узкое место как раз не мощность серверов, а ширина канала и пинг.

                                    Вы свою графическую карту используйте на всю мощность часов 5 в день от силы. Т.е. 80% времени она простаивает.

                                    Зачем покупать графическую карту за $300, если ее можно взять в аренду?
                                      +1
                                      Да, давайте все обмотаемся оптоволокном.
                                        0
                                        Это уже не ко мне. Но железо обесценивается и устаревает довольно быстро.

                                        Вы же не покупаете самолет, когда вам нужно слетать в другую страну?
                                        Так почему бы не предоставлять вычислительные ресурсы по требованию.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Если 1 Гб будет стоить рубль, то я, пожулай, возьму с учитываемым траффиком =) потому что используя анлим я буду тратить больше =) Логично ведь?
                                            Кстати, это относится и к мобильникам. У Вас сейчас мобильным анлим, не так ли?
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          так уже начали обматываться. а вы все еще нет?
                                    +1
                                    Многие задачки практически не распараллелить, то есть всякие офисные печатные машинки думаю дальше в эволюции уже не пойдут, только в сторону минитюаризации. Вот рендер в играх да, отлично параллелится, тут еще есть куда двигаться.
                                  +3
                                  облачность и параллелизм — одно и то же, а чем «мобильное программирование» отличается от иного поимо платформы, я не представляю, более того, через те же самые пару лет мобильные устройства станут ближе к настольным пк по мощности, грани сотрутся

                                  так что статья не про 3 пункта, а про 1
                                    0
                                    Параллелизм — это когда одна программа выполняется на нескольких ядрах. Облачность же — это технология прозрачной масштабируемости для сервисов с высокой нагрузкой.

                                    Именно связка облачность + мобильные платформы, ИМХО, самая перспективная на сегодняшний день.
                                    Мобильным платформам не хватает мощи — вынесем все вычисления на сервер.
                                    Облачный сервер создан, чтобы обслуживать сотни тысяч клиентов — идеальный вариант для мобильных устройств.
                                      0
                                      С качеством и стоимостью мобильной связи что-то большое переносить на сервера? Ну ну…
                                        0
                                        А зачем туда переносить маленькое? Как раз большое и нужно. Другое дело, что для программы, генерирующей много трафика, ширина канала будет узким местом.

                                        Опять же есть абсолютная мобильность. А есть мобильность поменьше: как лептоп или планшет. Есть Wi-Fi, Wi-Max — уйма вариантов, когда оно себя оправдывает.
                                          0
                                          Ну вот google maps или skype они генерят много трафика или мало, а просмотр youtube?
                                          Существующей ширины каналов мобильной связи уже немало
                                    0
                                    >программы выполняются на различных платформах или пишутся на новых языках программирования.
                                    Вторая часть высказывания сильно смахивает на маркетоидный бред.
                                    С развитием разработки ПО идут поиски «золотой пули», которая перевернет мир программирования. Тот же Брукс еще в 80х годах предсказывал, что до нового тысячелетия не будет найдено технологии, которая хотя бы в 2 раза ускорит темпы разработки. И оказался прав.
                                    Что будут новые фреймворки, более удобные (и ресурсоемкие из-за универсальности) — бесспорно — но «новые языки программирования» — уже изъезженная песня с целью воздействия на неокрепшие умы.
                                    Хотя м.б. я уже стар и излишне консервативен…
                                      0
                                      ищут серебряную пулю, золотая бесполезная из-за свойст данного метала, разве что для глориков.
                                      Брукс был не прав, технологий ускоряющих разработку было придумана куча и в разных областях: delphi и компонентный подход, java с виртуальной машиной и кросплатформенностью, agile разработка… новых языков появилось так же достаточно, но становление занимает не один год.
                                        0
                                        блин, писАл-писАл — хром все съел. придется вновь.
                                        пуля — конечно же — серебряная, благодарю. очепятался.
                                        Брукс был прав и немного не свершились его прогнозы. В любом случае у него получилась отличная дискуссионная и доказанная статья — в отличие от автора оригинального пассажа.
                                        Имхо, если рассматривать идеализированный вариант — то Брукс прав. Ни компонентный подход, ни верхнеуровневые языки — не являются универсальным средством и могут как помочь, так и помешать проекту.
                                        Тоже самое — методологии разработки, их как и языков — стало больше, но как и 87 году, когда была написана статья — успех проекта зависит от исполнителя, ни одна методология не стала универсальной и никакая серьезно не увеличила шансы на успех.
                                        В любом случае — Брукса читать полезно, хоть и нудновато, а автора оригинала — нет.
                                          0
                                          любой, кто пытается делать прогнозы — уже ошибся.
                                          я пишу на php, мой первый сайт был написан. когда я был знаком с языком максимум 3 месяца, с ООП 3 недели. но он до сих пор успешно работает. до этого я использовал delphi, который позволял мне быстро и без особых знаний достигнуть результатов о которых бруксу и не снилось, просто у меня инструменты на несколько порядков лучше.
                                          поэтому не нужно сравнивать брукса и опусы автора из хабра, который уже давно не торт.
                                            0
                                            Как-то аргументация Брукса и его примеры результативности проектов на десятки человеко-лет и: «я пишу на php, мой первый сайт» — плохо сочетаются в соседних комментах.

                                            > до этого я использовал delphi, который позволял мне быстро и без особых знаний достигнуть результатов о которых бруксу и не снилось

                                            Я уж не знаю, о каких результатах вы говорите, но «результат», достигаемый без «особых знаний» только насмешил бы руководителя разработки операционной системы (os/360) в IBM и лауреата премии Тюринга.
                                              0
                                              как-то факты лихих 90-х доказывают, что даже в аргументации великих людей бывают ошибки. вы верите аргументам о будущем или фактам о прошлом?
                                              и, судя по самой известной его книге — брукс был бы ряд, что ошибался, и что домохозяйки смогли за пару часов делать то, на что раньше программистам нужны были месяцы. ведь это ПРОГРЕСС и если он опережает предположения — это восхитительно, а не смешно.
                                        0
                                        Сейчас корректнее говорить не о языке, а о платформе.
                                        Именно набор фреймверков + язык — та платформа, на которой базируются успехи программирования в наше время.

                                          0
                                          я бы все-таки про «успехи программирования» говорил бы с позиций команды разработки — грамотная команда получит результат и на «менее оптимальной» платформе (хотя какие критерии оптимальности будут в таком случае?).
                                          А менее опытный и ответственный коллектив может завалить проект с «более продвинутой» платформой (Брукс прав?).
                                            0
                                            >>А менее опытный и ответственный коллектив может завалить проект с «более продвинутой» платформой

                                            хе. Возмём сферическую команду в вакууме средней криворукости и поставим перед ней одну и туже задачу 20 лет назад и сейчас. Как думаеш одинакова лив этих двух случаях вероятность, что команда завалит проэкт?
                                            ИМХО очевидно, что в наше время вероятность гораздо меньше.
                                          +1
                                          >Тот же Брукс еще в 80х годах предсказывал, что до нового тысячелетия не будет найдено технологии, которая хотя бы в 2 раза ускорит темпы разработки. И оказался прав.

                                          Серьезно?
                                          Попробуйте написать серьезное web-приложение на C++/Win32 API и на .NET или Java — сильно удивитесь, два раза там и близко не стоят.
                                            0
                                            Все-таки он был прав… Брукс говорил про новое тысячелетие, и уложился в срок. .Net появился в 2002 году, Java чуть раньше, но не сильно. Как по предсказанию все началось именно с нового тысячилетия.
                                            Если говорить про скорость разработки, то IDE влияет по моему мнению, чуть ли не самую главную роль, после мозгов конечно. И уже сейчас можно говорить о том, что код пишется со скоростью мысли, и от умственного процесса не отвлекает набор на клавиатуре странных буков и цифр. :-)
                                              0
                                              Современные скриптовые языки вроде Ruby или Python позволяют очень быстро прототипировать приложения, правда сложно сказать к какому именно тысячелетию их отнести.
                                                0
                                                На C++ это вполне реально, просто фреймворков маловато, будет нужный фреймворк так и вообще можно будет даже на С++ строгать веб аппликухи, а вот если именно на C++/Win32 API, то проще убиться.
                                                  0
                                                  Ну это не совсем правильный пример. Web-приложение — это специализированная задача, для которой нужен специализированный инструментарий. С тем же успехом можно сравнить отображение на экране JPG-рисунка с помощью Паскаля и Delphi. В первом случае надо писать свой анализатор JPEG (наверно, месяц работы), а во втором — шлёпнуть на форму элемент TPicture.

                                                  Брукс говорил, скорее, о чисто алгоритмических вещах. Скажем, запрограммировать алгоритм Дейкстры или какое-нибудь решение системы линейных уравнений почти одинаково сложно/просто.
                                                +1
                                                > изучать web-сервисы (soap, json, rest…)

                                                У Вас перевод немного не корректный, надо добавить (основанных на soap, json...), т.к. перечисленное в скобках это стандарты, а не веб-сервисы.

                                                  0
                                                  Спасибо. Исправлюсь.
                                                  +2
                                                  будущее программирования в написании программы, способной ответить правильно на столь формальный вопрос:
                                                  «как мне без лишнего геморроя доехать до Перми?»
                                                  Вот это будущее, а мобильные приложения — это коддинг.

                                                    0
                                                    Истину глаголишь.
                                                    0
                                                    Угу. Вот только, как уже написали, веб-приложения — это не облачные вычисления. А сами веб-приложения — это нифига не paradigm shift, им уже с десяток лет; осталось просто перенести их с внутренних серверов на внешние, вот и все.
                                                      +1
                                                      А где игры?
                                                        0
                                                        Теоретически это различные виды mmo с толстыми и тонкими клиентами, игры для мобильных платформ с богатой графикой, по идее через год-другой должно быть новое поколение консолей и т.д.
                                                          0
                                                          Нового поколения консолей не будет ни через год, ни через два. PS3 ещё не до конца раскрыта, Wii обновление попросту не требуется, а Xbox360 хоть и упёрся в технический потолок, но вперёд других не полезет. В пользу того говорит и Kinect, и новый Xbox360 Slim. Что касается mmo и игр для мобильных платформ — это далеко не все игры. Лишь часть рынка, крупная, но не превалирующая. Однопользовательские игры и традиционный мультиплеер — вот что доминирует и будет доминировать. Продажи казуальных игр, римейков старых аркад, а также новые шутеры подтверждают это из года в год. Посмотрите на L4D2, Bad Company 2 и MW2. У той же BC2 игровая база почти 5 миллионов игроков (читай: 5 миллионов проданных коробок), достигнутая за 4 месяца + регулярные отчисления за аренду выделенных серверов. Сравните с World of Warcraft. Про успех MW2 и говорить нечего.
                                                            0
                                                            Полностью согласен, старые жанры и платформы с их продажами никуда не денутся, от спортивных игр и гонок до сюжетных шутеров и стратегий.

                                                            Но если говорить о свежих трендах, то это сервисы вроде onlive и адаптация игр под них, только зарождающаяся ниша realtime mmo браузерных игр.
                                                              +1
                                                              Onlive интересен только на первый взгляд. На деле же он будет работать только для однопользовательских игр: квестов, казуалок, пошаговых стратегий, может быть RTS, с трудом верится в FPS. Многопользовательские игры через Onlive изначально обречены, разве что сам Onlive будет предлагать серверную инфраструктуру внутри своей локальной сети. Иначе двойная задержка = смерть во всех MMO и FPS. Но для всяческих квестов, которые можно взять в аренду за доллар, это будет работать.

                                                              Realtime MMO в браузере выглядит привлекательно, с учётом WebSockets и WebGL, но до нормальной поддержки хотя бы в 2-3 браузерах надо ещё дожить :) И всё равно я не вижу особых преимуществ перед скачиваемым нативным клиентом, только мороки больше + медленный клиент: Javascript всё же гораздо медленнее C, даже с JIT. Вот если бы было что-то такое, чтобы пользователь сказал «охуенно» и сел играть именно в браузере, а не в LA2, невзирая на тормоза и прочие проблемы — тогда было бы круто. А пока такого нет. Опять же, нормальная графика потянет за собой весьма дохрена трафика.

                                                              В общем мутно всё в будущем игр :)
                                                        +1
                                                        Я бы дописал в эту статью особый подвид параллельных вычислений средствами как обычных графических адаптеров, так и специализированного железа.
                                                        Там своя особенная кухня с построением приложений и распределением ресурсов.
                                                        В случае с цифровой обработкой сигналов, кодированием/декодированием, симулированием и прочими ресурсоемкими вычислительными задачами это очень серьезное новое направление.
                                                          0
                                                          Напишыте. Я добавлю в конец статьи раздел «Мнение читателей».
                                                          0
                                                          Если пришлют много хороших коментариев к статье, то думаю можно их опубликовать в виде отдельного поста.

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое