Pull to refresh
54.8
Arcadia
Заказная разработка, IT-консалтинг

Ликбез — как стать программистом

Reading time 10 min
Views 20K
Как часто в начале пути мы смотрим на окружающих, которые уже давно шагают по только что выбранной нами тропе, и восхищаемся ими или завидуем тому, чего они достигли. В этот момент мы мечтаем о высотах, которых добьемся в будущем и строим планы о том, как будем достигать желаемого.

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

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

Предметная область


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

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

Что такое предметная область в рамках данной статьи? Я бы разделил ее на две основные части: натуральная и производная. «Натуральной» предметной областью будем считать некую систему, которая существует в природе или является научным знанием. К примеру, коммерческая организация или физика, как наука. «Производной» предметной областью будем считать некую систему, которая существует в рамках программного обеспечения, основывается на натуральной и создает ее уникальную производную.

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

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

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

Существует один часто задаваемый вопрос: «А нужно ли программисту знать высшую математику?». Лично я считаю, что программист обязан знать высшую математику, если она является частью предметной области, с которой программист планирует работать. Для всех остальных это не обязательно, но является плюсом, ведь, во-первых, считается, что мозги «вправляются», а во-вторых, если вы ее знаете и она вам не нужна, это намного лучше, чем наоборот.

Технологии


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

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

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

Технология «Операционная система»

Windows, Linux, MacOS, Android и т.д. Почему важно знать окружение в котором выполняется ваше ПО? Потому что во многих случаях это определяет то, как вы можете решить ту или иную задачу. Почему ОС это технология? ОС является технологией, потому что различные реализации ОС, позволяют решать одни и те же задачи, причем схожим образом.

Изначально я, как и многие молодые специалисты познакомился именно с Windows. В дальнейшем, читая в интернете о том, что Linux это круто, Linux это совсем другой мир, я так и не осмелился с ним познакомиться, просто не надо было. Но время шло, и появились задачи, в рамках которых нужно было настроить VDS, на которой стоял Debian.

И знаете что? Сначала у меня был шок. Подключившись через putty к виртуальной машине, я понял, что не знаю, что мне делать с этим черным окошком. Но немного погуглив в моем мозгу образовалась запись: «консоль в Linux это что то — типа CMD в Windows». Наверно адепты Linux сейчас плюнули в экран, или просто закрыли статью, но на самом деле для человека, который имел опыт использования CMD, эта запись в голове является очень важной. Просто в один момент вам становится понятно, что и как делать и что вообще можно в рамках данной технологии (командная строка) сделать.

Ну, командная строка это самый минимум, на самом деле в операционных системах вообще мало чего уникального. Есть такие технологии как «Файловая система», «Разграничение прав доступа», «Работа с устройствами», «Взаимодействие с другими ПК» и многие другие. Реализация разная, но суть одна. Поэтому давайте становимся лишь на одном совете начинающим: изучите как минимум две операционные системы, скорее всего это будет Windows и один из многочисленных дистрибутивов Linux. Это значительно расширит и укрепит ваши знания.

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

Технология «Платформа»

Помимо понятия платформа как определенная ОС, часто слово платформа используют для определения вида приложений: Desktop, Web и Mobile. Это довольно важное разделение, так как для каждой из этих платформ характерны подходящие только для нее технологии. Язык программирования, а точнее технологии с которыми он позволяет работать, напрямую связаны с платформой.

Часто можно услышать словосочетание web-разработчик или mobile-разработчик, это определяет платформу и технологии, с которыми лучше всего знаком программист. К примеру, для web-разработчика основными технологиями будут: протокол HTTP, язык разметки HTML, язык стилей CSS, язык для динамического изменения разметки JavaScript и т.п.

Технология «Хранение данных»

Основные реализации: базы данных, файлы. Основные СУБД: MySql, Oracle, SQL Server, PostgreSQL, SQLite и д.р. Отдельно стоит сказать о языке запросов к БД, который называется SQL. Помимо стандарта этого языка, который, как мне кажется, полностью не реализован ни в одной СУБД, существует множество диалектов, которые часто зависят от самой СУБД.

Чаще всего БД имеют таблицы с колонками, типы колонок, индексы, внешние ключи и т.п. В зависимости от разработчика БД эти составляющие могут сильно отличаться от других. Отдельным пунктом нужно упомянуть про встроенные БД типа SQLite. Такие БД хранятся в файле и для них не нужно отдельное работающее приложение (сервер), через которое необходимо обращаться к БД.

Самым простым видом хранения информации являются файлы. Не будем сильно задерживаться на этом, ведь тема слишком обширная. Упомяну лишь самые основные форматы хранения данных в файлах, которые чаще всего используют программисты. Формат хранения данных подразумевает под собой определенную структуру хранения данных в файле. Основные форматы XML и JSON в них удобно хранить и передавать данные.

Технология «Передача данных»

Здесь конечно пойдет речь о протоколах. Самый распространенный протокол HTTP/S в основном использовался для передачи контента интернет страниц, на данный момент широко используется в web сервисах. Далее стоит упомянуть протоколы TCP/IP и UDP, которые широко используются для передачи информации между двумя ПК.

Здесь очень важно понимать, что протоколы имеют уровни. К примеру, IP, TCP и HTTP являются протоколами трех разных уровней. Задача одних уровней организовывать передачу данных на уровне ПК-ПК, задача других передавать определенные запросы и формировать на них ответы. Лучше это объяснено в модели OSI и на картинке, а от себя лишь добавлю, что чаще всего программисты используют протоколы прикладного уровня.



Технология «Язык программирования»

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



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

Следующим важным свойством языка является то, с какими «платформами» он может работать. Есть языки, которые работают на нескольких «платформах», есть которые только с одной. К примеру, на языке C# можно создавать Desktop приложения, а так же можно писать Web-сайты и создавать приложения для Mobile. А к примеру PHP подходит только для создания Web-сайтов.

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

Более высокого уровня понимания языков можно добиться изучением языков со схожими или различными парадигмами. А лучшего понимания «платформы» можно добиться изучением разных языков в рамках одной «платформы».

Технология «Основные фреймворки и библиотеки»

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

Фреймворки отличаются от библиотек, тем, что фреймворк выступает как основа приложения, а библиотека, как часть приложения.



Библиотеки чаще всего предоставляют решение определенной проблемы, к примеру, библиотека для формирования отчетов или библиотека для ведения логов. А фреймворки в свою очередь предоставляют основу для создания приложений, к примеру .NET Framework.

Для примера, если вы планируете разрабатывать приложения для Desktop на языке C#, то вам придется ознакомиться с технологией реализации пользовательского интерфейса. На данный момент существуют две основные ее реализации это WinForms и более современная WPF, обе эти реализации являются часть .NET Framework.

Если же вы планируете создавать сайты для Web на языке C#, то существует две основных альтернативы, первая это WebForms, а вторая это MVC.

При необходимости вести логи в языке C# часто используют библиотеку log4net. А при создании сайтов и использовании языка JavaScript довольно часто используют библиотеку jQuery. Для языка C++ часто упоминается библиотека Boost.

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

Инструменты


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

Инструмент «Система управления версиями»

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

Инструмент «Виртуальная машина»

VMware, VirtualBox и другие системы управления виртуальными машинами позволяют вам создать виртуальный ПК и установить на него ОС. Эта система является очень удобной, так как на одном физическом ПК у вас может быть установлено несколько виртуальных машин. Это позволяет вам иметь несколько ОС на одном ПК. Позволяет испортить ОС на виртуальной машине и вам не придется долго переустанавливать ее. Ведь часто системы управления виртуальными машинами имеют возможность «зафиксировать» состояние виртуальной машины и вернуться к нему в любое удобное для вас время.

Инструмент «Среда разработки»

Среда разработки является самым основным инструментов, с которым ежедневно работает программист. Для языков относящихся к .NET Framework и для С++ под Windows это скорее всего будет Visual Studio. Для Java это будет IDEA, NetBeans или Eclipse. Так же большинство сред разработки поддерживают расширения и некоторые из них очень широко распространены. К примеру, для Visual Studio очень популярен Resharper.

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

Выводы о технологиях и инструментах

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

В противном случае, без понимания этой сути, вы не сможете создавать качественные продукты. Так как ключевым условием для создания качественного продукта является правильно выбранные и верно примененные технологии.
Tags:
Hubs:
-4
Comments 14
Comments Comments 14

Articles

Information

Website
arcadia.spb.ru
Registered
Founded
Employees
201–500 employees
Location
Россия
Representative
Дмитрий Адов