ћерион Ќетворкс

15 минут

≈сли вы относительно новичок в программировании, то у вас наверн€ка могут возникнуть вопросы – с чего лучше начать, что следует изучить в первую очередь, что на самом деле означает «front-end разработка» и так далее?

DevOps

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


 акой €зык программировани€ € должен изучить в первую очередь?

 ак мне кажетс€, это не имеет такого большого значени€!  онечно, есть €зыки, которые новичкам будет освоить легче, например, Python, Ruby или JavaScript. Ќо большинство €зыков программировани€ очень схожи, и их основные концепции очень похожи.

¬ большинстве случаев синтаксис (ключевые слова, структура и семантика) €зыков различаютс€ гораздо больше, чем основные пон€ти€.

 ак только вы познакомитесь с основами любого €зыка программировани€, вам будет намного проще освоить другой €зык. “акже очень веро€тно, что €зык, который вы изучите первым, не станет тем, который вы будете использовать в конечном итоге в работе.

Ќапример, € когда-то начинал с Python, баловалс€ JavaScript и PHP, но сейчас дл€ работы € использую Java.

 онечно, вр€д ли вы захотите начать с изучени€ какого-то непон€тного и сложного €зыка, который мало где используетс€. ќднако вы не ошибетесь, если начнете с попул€рного современного €зыка, такого как Python, Java, Ruby и JavaScript.

—амое главное не в том, какой €зык вы будете изучать первым, а в том, что вы собственно начинаете и постепенно улучшаете свои навыки со временем. ≈сли вкратце, то сосредоточьтесь на освоении основных концепций программировани€, а не на синтаксисе конкретного €зыка.


 ак классифицируютс€ €зыки программировани€?

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

Ёти категории используютс€ дл€ группировки €зыков с определенной функцией или характерной чертой, несмотр€ на то, что два таких €зыка могут очень сильно отличатьс€ друг от друга.

¬от 5 самых полезных категорий €зыков программировани€, о которых следует знать новичкам:

  • компилируемые €зыки программировани€;
  • интерпретируемые €зыки программировани€;
  • €зыки программировани€ со статической типизацией;
  • €зыки программировани€ с динамической типизацией;
  • объектно-ориентированные €зыки программировани€.

Ќиже приведено краткое описание каждой категории, а также краткий список €зыков дл€ них.

 омпилируемые €зыки программировани€

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

 ак правило, вывод компил€тора сохран€етс€ в одном или нескольких файлах, которые называют исполн€емыми файлами. »сполн€емые файлы могут быть упакованы дл€ продажи или распространени€ в стандартных форматах, которые упрощают пользовател€м загрузку, установку или запуск программы.

¬ажной характеристикой процесса компил€ции €вл€етс€ тот факт, что исходный код компилируетс€ до того, как программа будет выполнена конечным пользователем. »ными словами, компил€ци€ кода обычно происходит отдельно от выполнени€ программы.

ѕопул€рные компилируемые €зыки:

  • C
  • C++
  • Java
  • Rust
  • Go

»нтерпретируемые €зыки программировани€

»нтерпретируемый €зык – это тот €зык, который использует интерпретатор дл€ преобразовани€ исходного кода (кода, который пишете вы сами) в форму, которую может пон€ть компьютер.

»нтерпретатор – это программа, котора€ берет какую-то часть исходного кода, написанного на определенном €зыке программировани€, преобразует его в форму, пон€тную компьютеру, и сразу же выполн€ет его в режиме реального времени.

ќсновное различие между компил€цией и интерпретацией состоит в том, что при интерпретации нет промежутка между преобразованием и выполнением кода – оба эти процесса происход€т непосредственно во врем€ выполнени€ программы, то есть «на лету». ј при компил€ции преобразование кода происходит до (иногда задолго до) выполнени€ программы.

ѕопул€рные интерпретируемые €зыки:

  • Python
  • JavaScript
  • Ruby

ѕодробнее про компил€цию и интерпретацию можно прочесть в этой статье.

языки программировани€ со статической типизацией

—татическа€ типизаци€ означает, что типы данных переменных в €зыке программировани€ известны и устанавливаютс€ во врем€ компил€ции программы.  роме того, тип данных переменной во врем€ компил€ции или выполнени€ программы мен€тьс€ не может.

Ќапример, каждый раз при создании переменной на €зыке со статической типизацией вам нужно €вно указать тип данных этой переменной. Ёто может быть целое число, строка, логическа€ переменна€ и т.д. Ётот процесс называетс€ объ€влением переменной.  ак только вы объ€вл€ете тип данных переменной, она может хранить только этот тип данных на прот€жении всего выполнени€ программы.

ѕопул€рные €зыки со статической типизацией:

  • C
  • C++
  • Java

языки программировани€ с динамической типизацией

ƒинамическа€ типизаци€ означает, что типы данных переменных устанавливаютс€ непосредственно во врем€ выполнени€ программы, или времени выполнени€.

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

ѕопул€рные €зыки с динамической типизацией:

  • Python
  • JavaScript
  • Ruby

ќбъектно-ориентированные €зыки программировани€

ќбъектно-ориентированное программирование (ќќѕ) – это подход программировани€, который позвол€ет программистам создавать некоторые «объекты» и в дальнейшем работать с ними. ќбъект здесь – это представление или модель чего-либо, что программист должен описать при помощи кода.

Ёто, веро€тно, звучит немного абстрактно, а все потому, что это так и есть. ѕрактически все здесь можно смоделировать как «объект» в коде. ќбъекты часто представл€ют собой реальные вещи, такие как товары дл€ продажи в магазине или покупатели, покупающие эти товары.

ќбъекты также могут представл€ть и цифровые объекты, такие как веб-формы, и даже более абстрактные вещи, такие как конечные точки URL-адреса, сетевые сокеты и т.д.

ќбъектно-ориентированно программирование обычно реализуетс€ на €зыке с использованием классов. ¬ы можете представл€ть себе класс как шаблон (или модель) дл€ типа создаваемого объекта.

 ласс содержит набор атрибутов (свойств и характеристик), определ€ющих каждый объект класса.  лассы также содержат набор методов (функций), позвол€ющих выполн€ть какие-либо действи€ над конкретными объектами класса.

Ќапример, класс «“овар» может иметь следующие атрибуты:

  • јртикул товара (уникальный идентификатор каждого товара)
  • Ќаименование товара (описательное название дл€ каждого товара)
  • “ип товара
  • ÷ена товара
  • —кидка на товар

 ак уже было сказано, класс – это всего лишь шаблон дл€ создани€ объектов. ѕроцесс создани€ объекта с использованием класса в качестве шаблона называетс€ созданием экземпл€ра. ¬ы можете создать сколько угодно объектов из одного и того же класса, и каждый созданный объект будет известен как экземпл€р этого класса. Ёкземпл€р обычно хранитс€ в коде как обычна€ переменна€, которую вы можете использовать по мере необходимости, взаимодейству€ с его атрибутами и методами.

ѕродолжа€ наш пример, вы можете создать несколько объектов типа «“овар» при помощи класса «“овар».  аждый товар будет иметь свой собственный набор значений атрибутов, таких как артикул, наименование, тип, цена и скидка.

ѕредставление структурированных наборов данных таким объектно-ориентированным способом, как правило, €вл€етс€ интуитивно пон€тным способом дл€ программистов при написании и организации своего кода. —корее всего, это св€зано с тем, что люди обычно хорошо мысл€т с точки зрени€ идентифицируемых сущностей, существующих в реальном мире.


¬ чем разница между front-end, back-end и full-stack разработкой?

 ак разработчик-новичок, вы, наверн€ка, просматривали вакансии в сфере технологий и замечали, что очень часто употребл€ютс€ термины «front-end», «back-end» и «full-stack».

Ёти термины обычно относ€тс€ к той части приложени€, над который вы будете работать. Ѕолее того, они также подразумевают то, что вы будете работать над программным приложением, чаще всего мобильном или веб-приложением.

«Front-end», или клиентска€ часть приложени€, относитс€ к тем част€м приложении, с которыми пользователи (также известные как «клиенты») взаимодействуют напр€мую. ƒл€ веб-приложени€ front-end – это набор веб-страниц (и функций), которые отображаютс€ в браузере пользовател€. ƒл€ мобильного приложени€ front-end - это набор экранов, с которыми пользователь взаимодействует через свое мобильное устройство.

«адачи front-end разработки включают в себ€ проектирование взаимодействи€ с пользователем, создание пользовательского интерфейса, сетевое взаимодействие на стороне клиента, интеграцию и использование библиотек на стороне клиента, а также сбор/проверку/отправку пользовательского ввода.

 ак front-end разработчик, вы будете выполн€ть именно эти задачи, в основном, использу€ HTML дл€ описани€ структуры веб-страницы, CSS дл€ добавлени€ стилей и JavaScript дл€ добавлени€ интерактивности.

—ерверна€ часть относитс€ к тем част€м приложени€, которые работают, что называетс€ за кадром, и не доступны непосредственно пользователю/клиенту.

«Back-end», или серверна€ часть, обычно включает в себ€ веб-сервер, который обрабатывает HTTP-соединени€, полученные от внешнего клиента (как правило, веб-браузера). ¬еб-сервер обрабатывает эти подключени€ и направл€ет их к внутреннему коду, который отвечает за логику, котора€ нужна дл€ того, чтобы ответить клиенту. Ёта часть серверной части называетс€ маршрутизацией или API (интерфейс программировани€ приложений).

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

¬нутренний код провер€ет пользовательский ввод, примен€ет бизнес-логику, взаимодействует с хранилищем данных, таким как база данных, и формирует ответ, который отправл€етс€ обратно внешнему клиенту.

“еперь, когда мы вы€снили, что такое front-end и back-end, то пон€ть, что такое full-stack, или полностекова€, разработка будет намного легче! Full-stack просто-напросто включает в себ€ как front-end, так и back-end. ѕон€тие «full-stack» (полный стек) происходит от пон€ти€ «stack» (стек), который €вл€етс€ сокращенной формой «software stack» (программный стек). ѕрограммный стек – это набор инструментов, сред, €зыков программировани€ и операционных систем, которые используютс€ дл€ поддержки приложени€.


 акие программные стеки самые попул€рные?

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

LAMP-стек (Linux, Apache, MySQL, PHP)

LAMP-стек - это проверенный временем стек, который €вл€етс€ отраслевым стандартом back-end стека, в основе которого лежит операционна€ система Linux.  роме того, используетс€ веб-сервер Apache дл€ обработки веб-запросов и направлени€ их в кодовую базу PHP. ƒанные хран€тс€ в базе данных MySQL – бесплатной рел€ционной базе данных с открытым исходным кодом.

Ётот стек хорошо подходит дл€ относительно стандартизированных веб-сайтов, содержащих контент, таких как блоги.

¬ы могли заметить, что € не упом€нул интерфейсные инструменты в качестве части данного стека. Ёто означает лишь то, что LAMP-стек – это back-end стек.

MEAN-стек (MongoDB, Express.js, Angular.js, Node.js)

MEAN-стек – это более современный стек, который использует дл€ хранени€ данных неструктурированную базу данных MongoDB. »спользуетс€ Express.js в качестве back-end каркаса веб-приложени€ и Angular.js дл€ front-end. » наконец, Node.js используетс€ дл€ запуска JavaScript на серверной части.

ќсновное преимущество MEAN-стека – это то, что все компоненты изначально предназначены дл€ работы с €зыком программировани€ JavaScript через JSON (нотаци€ объектов JavaScript).

ќбратите внимание, что компоненты данного стека ориентированы как на front-end (Angular.js), так и на back-end (MongoDB, Express.js, Node.js), поэтому MEAN-стек можно считать полным стеком.

MERN-стек (MongoDB, Express.js, React.js, Node.js)

 ак вы можете заметить, MERN-стек очень похож на MEAN-стек. ќтличие только в том, что он использует библиотеку React.js в качестве front-end, вместо Angular.js.

Ётот стек хорошо подходит дл€ разработчиков, которым нравитс€ React за его гибкий и интуитивно пон€тный стиль создани€ пользовательских интерфейсов.

»звестные фреймворки

я хотел бы воспользоватьс€ моментом и рассказать вам о двух попул€рных back-end фреймворках (не стеках), которые вы могли бы включить или заменить дл€ определенных компонентов стеков, описанных выше.

SpringBoot – это java-феймворк (с технической точки зрени€ это частный случай более широкой среды Spring), который отлично подходит дл€ back-end разработки Java-кода дл€ мобильных и веб-приложений. ≈сли вы новичок в Java, то € насто€тельно рекомендую вам с ним ознакомитьс€.

Django – это Python-фреймворк, специально созданный дл€ использовани€ с €зыком программировани€ Pyhton. ≈сли вы любите создавать приложени€ именно на Pyhton, то вам определенно стоит обратить на него внимание.


 ак разработчики вместе работают над одним кодом, не наход€сь в разных местах?

 огда € только начал программировать, € открыл текстовый редактор Python на своем локальном компьютере и создал один файл, в которой вместил весь код своего проекта. ќднако, € быстро пон€л, что такой файл плохо управл€ем, поэтому € разделил его на несколько файлов Pyhton .py (или, как их называют, модулей).

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

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

 лючом к успешной совместной работе над программным кодом €вл€етс€ использование системы контрол€ версий (VCS – Version Control System). VCS – это инструмент, отслеживающий изменени€, которые несколько разработчиков постепенно внос€т в файл кода, и позвол€ющий разработчикам эффективно работать вместе над одним и тем же набором файлов.

—истемы контрол€ версий создают репозиторий, в котором хран€тс€ данные, необходимые дл€ воссоздани€ любой версии файлов кода в том виде, в каком они находились в определенные моменты времени. Ёто и называетс€ контролем версий.

—истемы контрол€ версий – это универсальные инструменты, поскольку они выполн€ют несколько полезных функций, помогающих командам разработчиков:

  • отслеживание внесенных в файл кода изменений;
  • возможность легко делитьс€ изменени€ми с другими разработчиками и получать доступ к изменени€м, внесенным другими;
  • простые способы объединени€ изменений кода, внесенных несколькими разработчиками или командами;
  • полное резервное копирование кода проекта по мере его развити€ с течением времени, а также эффективное восстановление любой предыдущей версии кода;
  • легкое управление конфликтными обращени€ми к коду, возникающими в одних и тех же строках одних и тех же файлов;
  • различные другие инструменты дл€ улучшени€ совместной работы и эффективности команды.

≈сть множество вариантов систем контрол€ версий. ¬ы, наверн€ка слышали об одной из них – GitHub.

Ќа самом деле сам по себе GitHub – это не система контрол€ версий. GitHub – это компани€, котора€ предоставл€ет онлайн-хостинг дл€ проектов, использующих систему контрол€ версий. GitHub получил свое название от конкретной системы контрол€ версий, которую он использует – Git.

ѕерва€ верси€ Git по€вилась в 2005 году и со временем превратилась в самую известную и попул€рную систему контрол€ версий в мире. Ќа сегодн€шний день Git используетс€ подавл€ющим большинством команд разработчиков. Ёто важный инструмент, который стоит изучить, если вы планируете занимать программированием на профессиональном уровне.


»меет ли значение, какую операционную систему € использую?

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

Ќо при этом € ощущаю, что мой ответ будет интерпретирован как отговорка, если € на этом остановлюсь. ƒавайте предположим, что вы пытаетесь прин€ть решение о том, какую ќ— вам лучше выбрать дл€ программировани€.

ѕринима€ во внимание тот факт, что есть множество субъективных причин, по которым люди выбирают ту или иную ќ—, на мой взгл€д, очень полезной может оказатьс€ операционна€ система, котора€ может обеспечить доступ к качественному терминалу командной строки.

»менно по этой причине € предпочитаю по возможности дл€ разработки использовать Unix-подобные операционные системы, такие как Linux или MacOS. ѕолное раскрытие, например, € разрабатываю в основном на MacOS.

я обосную это тем, что важным навыком программировани€ €вл€етс€ рабата с командной строкой (во многом похожа на использование Git). ѕолнофункциональна€ и интуитивно пон€тна€ командна€ строка €вл€етс€ основной частью разработки программного обеспечени€. Ќа мой взгл€д, в Linux и MacOS встроены лучшие современные командные строки, нежели в Windows.


 акой текстовый редактор или IDE следует использовать?

“екстовые редакторы и IDE (интегрированные схемы разработки) сильно изменились за последние годы, и разработчики вы€вл€ют фаворитов по многим причинам.

ќдна из причин – определенный редактор или среда разработки были созданы специально под какой-то €зык программировани€ или какую-то инфраструктуру. ƒруга€ причина – ваша компани€ использует определенный редактор, и это будет именно тот, который вы выучили и используете. Ћично € пон€л, что € выбирал, отталкива€сь именно от последней причины.

≈сли вы в основном работаете с интерпретируемыми €зыками с динамической типизацией, такими как Python, JavaScript, Ruby или PHP, то € рекомендую вам начать с такого графического редактора, как Sublime Text или Visual Studio Code. Ёто два самых попул€рных текстовых редактора. ќни предоставл€ют множество функций и настроек, которые облегчат вашу жизнь как разработчика.

≈сли вы работаете с Java, то € рекомендую вам Eclipse или IntelliJ IDEA. ќни предлагают множество функций, которые были созданы специально дл€ работы с Java.

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

Ќо, по моему опыту, оно определенно того стоит. ƒаже если вы изучите только основные команды, они вам все равно очень помогут, если вдруг получитс€ так, что вы просматриваете терминал без графического интерфейса, а вам нужно проверить или изменить некоторые файлы.

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


«аключение

¬ этой статье мы рассмотрели семь вопросов, которые обычно задают начинающие программисты. ћы охватили довольно много тем, начина€ с вопросов о выборе €зыка программировани€, о стеках разработки программного обеспечени€ и заканчива€ вопросами об операционных системах и текстовых редакторах.


—кидки 50% в Merion Academy

¬ыбрать курс