Переход к веб-разработке от настольной разработки


Информационные технологии

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

Моя роль в мире информационных технологий

Как и многие из нас, я однажды задался вопросом: «Как это работает?». Именно с этой мыслью я начал проявлять интерес к программированию. И вот уже три с половиной года я разрабатываю коммерческие настольные приложения, используя C# и Windows Forms.

Перед тем как устроиться на свою первую работу, я изучал программирование с помощью C# и Unity3D. Я рассматривал и другие технологии, такие как ASP NET MVC и Windows Forms, но остановился на Unity3D. Это был первый игровой движок, с которым я познакомился. Мой первый код выглядел как спагетти, и казалось, что даже я не смогу разобраться в нем, если оставлю проект на выходные и вернусь. Именно из-за этой проблемы я заинтересовался паттернами проектирования и принципами написания чистого кода. Вскоре я составил резюме и начал откликаться на вакансии IT-компаний. После нескольких собеседований мне удалось пройти одно, во время которого я получил предложение о работе. Я получил должность младшего разработчика и занимался задачами, связанными с клиентской частью обширной информационной системы с архитектурой клиент-сервер. На тот момент компания существовала на рынке уже 25 лет. Я увидел столько кода, сколько и во сне не могло присниться на ранних этапах обучения, когда я мог проводить много времени за компьютером. Но, несмотря на трудности, я был рад и увлечен своей первой работой, и через два года я получил должность штатного программиста.

Почему я решил расширить свой технический стек

Как уже говорилось ранее, мир развивается. Как и каждый из нас, я являюсь частью этого мира и тоже должен заниматься своим развитием. Но в развитии ради развития нет никакого смысла. Вместо этого нам нужна конечная цель. Другими словами, мы должны ответить на ряд вопросов:

  • Что я хочу получить в итоге?
  • Как я узнаю, что я развиваюсь?
  • Как я узнаю, достаточно ли я созрел?

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

Стоит также отметить, что если есть конечная точка, то есть и начальная. Такой отправной точкой может быть ситуация, в которой выгодно заплатить за путь к конечной точке. В простом примере это выглядит так, будто вы хотите переместиться из точки А в точку Б. Но в реальном мире люди несут затраты при таком переходе. Такими затратами могут быть время, деньги, усилия, здоровье и т.д. Поэтому, прежде чем совершить переход из точки А в точку Б, человек оценивает, будет ли ему выгодно совершить этот переход.

В моем случае отправной точкой была ситуация, в которой я оказался. Она выглядела следующим образом. Я работаю в крупной компании, используя приобретенные ранее навыки программирования и знание языка C#. Я был поверхностно знаком с технологией Windows Forms, поэтому на работе я получал новые знания и навыки. Я также заметил, что, работая в компании, которая давно существует на рынке, не всегда есть возможность работать с новейшими технологиями и фреймворками, поскольку приходится работать с кодом, который писался много лет назад. Поддержание жизнеспособности такого продукта требует достаточно большой ответственности, большой концентрации и времени. Кроме того, настольные приложения движутся в сторону размещения в облаке и работы в браузере. Еще один случай, на который я обратил внимание: сегодня многие решения позволяют «разместить» разработку ПО в облаке. Это позволит вам снизить нагрузку на локальную машину разработчика, хранить настройки любимой IDE на удаленном сервере, синхронизировать настройки между устройствами и получать к ним доступ из любой точки, где есть подключение к Интернету. И это только часть преимуществ. Главное преимущество — наличие только браузера, установленного на локальной машине разработчика.

Глядя на то, в каком направлении развивается современная веб-разработка, я решил двигаться дальше, приобретая новые навыки и знания, которые пригодятся мне в сложившейся ситуации. Таким образом, я могу обновить стек технологий и инструментов, которые я использовал в последнее время.

Условия выбора

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

Ассемблер

Язык ассемблера позволяет разработчику получать доступ к регистрам процессора и манипулировать ими. Например, помещать данные в регистры и выполнять над ними арифметические операции. Но при использовании ассемблера, например, разработчик может использовать одну операцию за раз и не более двух операндов на одну операцию. Рассмотрим более подробный пример. В ассемблере строка кода переменная = 2 + 2 * 2 может быть расширена в инструкцию: поместить число 2 в регистр R0, умножить регистр R0 на 2 и прибавить 2 к регистру R0.

/* pseudo assembly */
mov 2, R0
mul 2, R0
add 2, R0
Вход в полноэкранный режим Выход из полноэкранного режима

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

Язык Си

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

/* long-expression */
int integerResult = 2 + 2 * 2;

/* reusable function */
int square(int operand) {
    return operand * operand;
}

/* inline-assembly */
__asm__("asm code here"
        "asm code here");
Вход в полноэкранный режим Выход из полноэкранного режима

Но при всем удобстве чтения и написания кода на языке C, найти проблемное место в исходном коде программы довольно сложно. Например, если вы создадите массив целых чисел из трех элементов int array[3];, а затем обратитесь к элементу с индексом 3, которого не существует, поскольку индексация начинается с 0. В результате вы увидите сообщение об ошибке без указания строки в исходном коде (как и в ассемблере). Сообщение будет иметь вид *** stack smashing detected ***: terminated или что-то в этом роде. Такое поведение создает некоторые проблемы, особенно когда в исходном коде программы много строк программного кода.

C Sharp

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

Многоуровневая система

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

Критерии выбора

У разработчика, как и у каждого человека, есть области деятельности, которые интересны ему больше других. Кому-то может быть интересно, как работают системы безопасности, кому-то — разработка игровых движков, а кому-то — создание пользовательских интерфейсов. Каждый решает сам, что ему больше нравится. По большей части меня привлекает создание чего-то красивого, с чем хочется взаимодействовать, например, интерфейса или компьютерной игры. Как я уже говорил, многие технологии позволяют решать задачи, связанные с разными частями одной информационной системы. Если раньше, например, для написания браузерной игры нужно было использовать ActionScript и Flash, то сейчас нет необходимости использовать сторонние технологии. В браузер уже встроены такие инструменты, как Canvas. Сегодня веб-разработка имеет достаточно прочный фундамент, который позволяет разрабатывать новые технологии вокруг того, что уже заложено в этом фундаменте. Например, GTK, кроссплатформенный набор инструментов, использует CSS, а Unity использует UXML и USS, такие как XML и CSS, для создания пользовательского интерфейса. Используя JavaScript сегодня, можно создавать настольные и мобильные приложения для платформ Android и iOS, браузерные игры и приложения, и это далеко не все, где можно применить стек или часть стека веб-технологий. Такая вариативность применения сделала технологию популярной, привлекла множество разработчиков, и в результате появилось большое количество инструментов, решающих задачи для определенной ниши.
Учитывая вышесказанное, можно сделать вывод, что существует множество областей, где можно применить веб-технологии. Кроме того, в Интернете есть много учебных материалов по технологиям, много разработчиков и инструментов разработки, а большинство инструментов разработки имеют открытый исходный код. И самое главное — это низкий порог вхождения. То есть, если мы разделим знания разработчика на две части — знание технологии разработки и знание проекта. У нас может сложиться ситуация, когда при подключении нового разработчика ему в идеальном случае нужно будет изучить только ту часть, которая связана с проектом. Такая ситуация позволит ему использовать много времени в пользу проекта. На мой взгляд, использование веб-технологий растет, и будет расти, поэтому их изучение будет полезно для разработчиков, которые любят создавать информационные системы, с которыми должен взаимодействовать пользователь.

Как происходит миграция

Я решил, что должен уделять время и внимание деятельности, которая поможет мне достичь поставленной цели. Так, например, один из способов изучения HTML и CSS — это твиттер или написание статей в своем блоге о пройденном опыте. Этот метод поможет закрепить урок в памяти. Я часто вижу, как другие люди, изучающие веб-разработку, используют этот метод, и стоит отметить, что это отличный подход к обучению. Помимо того, что люди учатся, они еще и подают пример другим. Кроме того, все эти твиты и записи в блогах — это как общедоступные конспекты студента в университете. Вы всегда можете посмотреть на конспекты лекций другого студента и добавить к своим то, что вы пропустили. Отличным способом обучения может стать вызов «100 Days Of X». Я рассматривал этот метод, но решил, что такой вызов мне не подходит, так как по правилам нужно тратить на обучение хотя бы один час в день в течение ста дней. У меня сложилось впечатление, что если тратить небольшое количество времени, но каждый день на что-то одно, то такое занятие может вскоре вызвать усталость и какие-то негативные мысли. Я решил, что если я устал от занятий, то нужно отдыхать столько, сколько мне нужно, и поэтому остановился на конспектах и твитах. Но одних уроков и конспектов недостаточно. Необходимо взять в работу еще небольшой проект, написав который, вы сможете воспроизвести полученные знания. Написание проекта будет полезным занятием. Оно позволит вам приобрести опыт и увидеть, на чем следует больше сосредоточиться в учебе.

Заключение

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


Рад, что вы прочитали мою статью. Надеюсь, он помог вам в решении ваших проблем. Если у вас уже есть опыт в похожих ситуациях, напишите об этом в комментариях 💭 ниже. Я также с нетерпением жду вашей реакции и отзывов. Оставайтесь в безопасности и получайте удовольствие!

Оцените статью
devanswers.ru
Добавить комментарий