Приходилось ли вам объяснять IT-понятия людям из других сфер? Это хитрая задача: при объяснении одного IT-термина нельзя пользоваться другими, потому что они тоже будут непонятными. Представим, что ваш знакомый захотел «войти в айти», впервые открыл Хабр и офигел — как объяснить такому человеку хотя бы основные слова?
Мне захотелось описать популярные понятия неформальным языком — так, чтобы доходчиво объяснить главное, а не запутывать нюансами. Для этого местами пришлось пойти на упрощения. Но думаю, новичкам не требуется знать «правильнее писать Linux или GNU/Linux». Для начала понять бы, что в разговорах айтишников слово «перформанс» — это не про современное искусство.
Конечно, большинству хабравчан уже не требуется читать такой текст. Смысл публикации в том, чтобы ссылку можно было кидать неайтишным знакомым. А ещё хабрачитатели могут помочь дополнениями в комментариях: у меня описана лишь часть важных понятий, и мои описания наверняка несовершенны, так что совместными усилиями можно сделать всё полезнее.
Оглавление
Технологии
Люди и роли
Технологии
IDE
Все знают, что программисты пишут код. А где они его пишут? По сути своей, код — просто набор символов, так что в принципе можно хоть в программе «Блокнот». Но это как ретушировать фотографию в Paint, вручную меняя цвет отдельным пикселям: странно мучиться так, когда есть программы помощнее, куда встроены специальные инструменты. И для того, чтобы писать код, тоже делают «программы помощнее».
Есть «редакторы кода», куда встроены базовые инструменты: например, подсветка разных составляющих кода разными цветами, помогающая быстро видеть нужное. Самый популярный такой редактор в мире — Visual Studio Code от Microsoft.
А есть более мощный вариант — IDE (правильно произносится «Ай Ди И», но в России говорят «И Дэ Е»). Аббревиатура означает «integrated development environment» («интегрированная среда разработки»), и это подразумевает, что туда включен не только редактор кода, но и другие инструменты для самых разных задач разработчика (подробнее о них ниже) — компиляции, отладки, контроля версий, вёрстки интерфейса. То есть это такой «швейцарский нож».
Компиляция
Как известно, в компьютерах вся информация хранится единичками и ноликами. Но человеку воспринимать информацию такими битами неудобно. Поэтому, когда мы пишем текст, компьютер показывает нам понятные буквы, а дальше сам разбирается, как ему их внутри себя сохранить единичками и ноликами.
Нечто подобное с кодом. Компьютер принимает в качестве команд машинные инструкции, но ему они понятны, а вот человеку с ними иметь дело неудобно. И люди создали современные языки программирования, где код куда более человекочитабельный. А когда человек написал на таком языке понятную ему программу, дальше требуется перевести её в формат, подходящий для исполнения компьютером. Примерно это и происходит при компиляции. В больших проектах она может требовать много времени, что даёт поводы для шуток:
Отладка
Как люди представляют себе работу разработчика: человек с умным видом пишет код, который делает что надо. Как на практике эта работа выглядит заметную часть времени: человек с глупым видом пытается понять «почему уже написанный код не делает что надо».
Слово «debugging» в России то просто произносят как «дебаггинг», то переводят как «отладка». Как можно догадаться по самому слову, речь о процессе избавления от багов. Есть популярная шутка «отладка — это как быть детективом в фильме, в котором ты сам и есть убийца». Ты где-то накосячил, а теперь надо ещё суметь разобраться, где именно и как.
В этом могут помочь разные инструменты, в первую очередь — созданные как раз для этого отладчики (debuggers). Отладчик позволяет, запустив программу, следить за происходящим «внутри» неё, и помогает заметить, где именно что-то пошло не так, как задумывалось.
Контроль версий и git
Вам когда-нибудь приходилось совместно с другими людьми работать над файлами, когда все поочерёдно вносят в них изменения, и на всякий случай требуется сохранить промежуточные версии? Обычно такое заканчивается папками «finally_final_v5_2021» и письмами «Re: Re: Re: Fwd: Re», во всём этом чёрт ногу сломит.
А заглядывали ли вы в историю правок у страниц на Википедии? Там вместо груды файлов есть одна сущность (страница) с её историей, где автоматически отмечается, какой пользователь какие изменения в страницу внёс. Благодаря этому можно сравнить две разных версии, увидеть, что именно изменилось, и при необходимости откатить всё к старой версии.
Над кодом тоже работают совместно, обращаться к истории изменений приходится регулярно, и чтобы не сойти при этом с ума, всё делают примерно как в Википедии. Для этого созданы системы контроля версий (version control system, сокращённо VCS). Самая популярная из таких систем, ставшая стандартом — git.
Также есть целый набор понятий, связанных с этим, вот только некоторые:
-
Коммитить (commit) — вы что-то сделали и теперь вносите эти изменения в git.
-
Бранч (branch) — ветка: это как создать отдельную копию файла, с которой можно смело экспериментировать, не боясь испортить «основную», с которой в это время может работать кто-то другой.
-
Мёрджить (merge) — объединять код: если удачно поэкспериментировали, надо влить результат в основную ветку, которая тем временем могла ощутимо измениться.
Open source
Представим, что программист написал код, скомпилировал — получилось то, что можно запустить и пользоваться. И можно делиться с миром этим результатом работы, когда люди смогут им пользоваться, но не смогут узнать, как именно он сделан «внутри». Но можно, кроме готовой программы, поделиться и её исходным кодом тоже. Тогда другие программисты, разобравшись в нём, смогут предложить свои улучшения или сделать свою версию программы. Когда код открыт всему миру, это и называют open source.
Звучит здорово, но есть нюансы. Например, на программе с открытым кодом сложнее зарабатывать: больше не требуется покупать её у тебя, когда можно взять код и самостоятельно скомпилировать. И в Microsoft не спешат делиться кодом Windows. Зато с операционными системами Linux всё наоборот: ядро Linux — это открытый бесплатный проект, куда вносили вклад разные люди и компании со всего мира, а основать на нём свою ОС может кто угодно, поэтому у Linux есть много разновидностей.
Опенсорс хорошо подходит энтузиастам, но и коммерческие компании по разным причинам тоже открывают часть своих наработок. Чаще всего их выкладывают на сайте GitHub — там сосредоточено больше всего опенсорса в мире. Название GitHub связано с git, и иногда эти понятия путают, но это совсем не одно и то же: запомнить помогает мнемоническое правило «git и GitHub соотносятся примерно как порно и PornHub».
Производительность
Английское слово performance применяется не только к художественным представлениям, но и к компьютерам, где его используют в значении «производительность».
Разработчики заняты не только тем, чтобы код выполнял нужные действия, но и оптимизируют производительность, чтобы он делал это быстрее. Есть случаи, когда это означает «чтобы не тормозило»: например, если мобильное приложение очень долго запускается и это раздражает пользователей, можно попробовать исправить эту ситуацию. А есть случаи, где раздражения пользователей нет, но ускорять всё равно есть смысл: если код работает на сервере, и там выполняется сколько-то операций в секунду, а потом всё оптимизировали и стало выполняться больше операций, то понадобится меньше серверов и можно будет сэкономить на них.
Чтобы улучшать производительность, для начала её надо измерять: точно определять, сколько времени требуется на выполнение какого-либо кода, разбираться, где всё «застревает». Поэтому рядом с «перформансом» нередко можно встретить ещё слово «бенчмаркинг», и это отдельное искусство — измерять нужно уметь.
Фронтенд и бэкенд
Зачастую, пользуясь чем-то, мы видим только «надводную часть айсберга». Можно столько ездить на автомобиле, что руль и приборная панель начнут сниться, но ни разу не заглядывать ему под капот: «ну оно там как-то работает, в автосервисе разберутся».
В софте «руль и приборная панель», которые пользователь видит и с которыми взаимодействует — это фронтенд, а часть «под капотом», где хранятся данные и обрабатывается логика — бэкенд. Слева от любого хабрапоста есть кнопка «вверх» — её добавил фронтендер, и когда вы её нажмёте, на это отреагирует ваш браузер. Но если вместо этого вы напишете комментарий, то кнопка «отправить» (тоже добавленная фронтендером) приведёт уже к взаимодействию с бэкендом: ваш комментарий отправится на сервер и будет там сохранён.
Хайп: AI/ML, VR/AR, blockchain
Не-айтишники слышат в новостях про самые хайповые технологии, поэтому могут думать, что все программисты занимаются такими и ежеминутно двигают мир в будущее. На самом деле всё скучнее, обычных фронтендеров наберётся куда больше, чем VR-специалистов (просто потому что пользователей сайтов куда больше, чем пользователей VR-шлемов). Но свои ниши у этих технологий есть:
«ИИ» (искусственный интеллект) или «AI» (Artificial Intelligence) — это расплывчатое бессмысленное понятие, которое люди исторически применяли к самым разным вещам. Но в последние годы так обычно обозначают машинное обучение (ML, machine learning), и вот это куда более конкретная штука. Её суть в том, чтобы учить компьютер выполнять задачи не стандартными строгими алгоритмами («если на фото есть такие-то элементы, то изображена кошка»), а другим подходом: «вот тысячи фотографий, на них всех кошки, сам реши, что у них общего, и дальше ищи на новых снимках то же». Для многих задач, где чёткий алгоритм составить затруднительно (как с тем же распознаванием изображений), это оказывается куда эффективнее.
VR (virtual reality) — виртуальная реальность, когда видишь вокруг полностью другой мир, как со шлемами Oculus. AR (augmented reality) — дополненная реальность, когда к настоящим объектам вокруг пририсовывают какие-то ненастоящие: как в случае, когда Google на вашем телефоне готов показать тигра прямо в вашей комнате. Над VR и AR работают давно не первый год, и супервзрыва пока не произошло, но развитие продолжается.
Блокчейн — технология, лежащая в основе Bitcoin и других криптовалют, но подходящая и для других задач, связанных с хранением данных. Одна из её главных идей в децентрализованности: у блокчейн-систем нет единоличного «владельца» (в случае с Bitcoin люди даже не знают, как выглядит его создатель Сатоши Накамото, но это и не принципиально). Несколько лет назад с ростом стоимости биткоина возник бум, когда людям казалось «достаточно реализовать любой проект с использованием блокчейна, чтобы озолотиться». Этого не произошло, и волна хайпа схлынула, но сама технология осталась и ещё может пригодиться.
Люди и роли
Программист / разработчик / кодер
В детстве мы все привыкли к слову «программист». Сейчас в вакансиях пишут «разработчик» («developer») или «software engineer». А ещё можно встретить слово «кодер». В чём разница? В интернете (в том числе и на Хабре) есть дискуссии об этом, и некоторую разницу там находят: например, «кодер» порой считают уничижительным определением, когда человек механически пишет код, сам не вполне его понимая.
Но определения из разных текстов расходятся друг с другом, а сами представители профессии не заморачиваются и называют себя как придётся. Так что, в принципе, можно считать это всё синонимами. В индустрии самый распространённый вариант — «разработчик», но в целом можете говорить как вам удобнее. Куда важнее осознать, что все эти определения относятся именно к пишущим код, и не говорить «тыжпрограммист, почини мой принтер» — это задача совсем другого профиля.
Джуниор, миддл, сениор
Разработчиков делят по градациям опытности. Junior — начинающий, за которым нужен глаз да глаз, middle — «крепкий середнячок», а senior — опытный, который может хорошо присмотреть за джунами и наставить их на путь истинный.
Про «синьора Помидора» пошутили уже миллион раз, но это по-прежнему смешно, так что, если разработчики пишут «помидор», они про это. Ну или про тайм-менеджмент по технике Pomodoro, тут уж смотрите по контексту.
В вакансиях, как правило, сразу указывают, ищут в конкретном случае джуна или сениора, и в зависимости от этого зарплата может различаться радикально. Сениоров не хватает, компании за них конкурируют, так что они в выгодном положении — но до сениора надо ещё дорасти, пройдя этап джуниора, когда вы нужны работодателям куда меньше. Так что не слишком верьте платным курсам программирования, которые обещают золотые горы немедленно после прохождения.
А стадия «синьор» — это тупик, дальше неё развиваться некуда? Не совсем так. Есть роли «архитектор» и «тимлид», порой можно увидеть должности вроде «principal engineer» (отвечает не за конкретный проект, а за разработку во всей компании). Но всё это уже не линейное движение «писать код ещё лучше», в этих случаях развитие идёт не в сторону непосредственного написания кода.
Full stack developer и T-shaped-специалист
В любой деятельности можно развиваться по-разному: «вглубь» (очертить узкий круг задач и становиться асом конкретно в них) и «вширь» (уметь больше, но не настолько хорошо). У обоих вариантов свои преимущества и недостатки (как говорилось про «вглубь» ещё в XIX веке у Козьмы Пруткова, «специалист подобен флюсу: полнота его одностороння»).
«Фуллстек» — это про развитие разработчика вширь. О точном значении слова можно спорить (писал об этом отдельный пост), но общий смысл в том, что фуллстек-разработчик — это «человек-оркестр», совмещающий разные умения. Самое частое сочетание умений — «фронтенд + бэкенд», то есть такой человек способен в одиночку сделать веб-сервис, от кнопочек в браузере до базы данных.
А «специалист в форме буквы Т» — это совмещение развития вглубь и вширь. Идея в следующем: есть главное направление, куда забираешься глубже всего, и есть смежные, где проходишься по верхам. Вертикальная черта в букве «Т» отвечает за основное глубокое, горизонтальная — за смежные.
QA, QC, тестирование
В случае с IT чаще всего говорят о разработчиках, но вообще-то есть много других специалистов: например, тестировщиков. Сделать что-то — это полдела, надо ещё проверить «всё ли сделано как задумывалось», убедиться «не всё» и разобраться, что надо переделать. В сложных системах неизбежны баги, с которыми поведение продукта не будет соответствовать ожидаемому, и очень желательно выявлять их до того, как продукт выйдет на рынок.
О тестировщиках то вообще не задумываются («раз кто-то код пишет, он и проверяет, наверное»), то считают их какими-то врагами разработчиков, цель которых — «сломать всё к чертям». Но это не просто безумные крушители, а поиск багов — не просто небольшое дополнение к программированию: это отдельная трудоёмкая задача со своими особенностями. Разработчики тоже участвуют в тестировании, но ещё не факт, что хороший программист будет хорошим тестировщиком (и наоборот).
Существуют свои различия между понятиями «тестирование», «QA» (quality assurance) и QC (quality control), но на первых порах можно не вдаваться в них и воспринимать все три термина как примерно одно и то же. Зато вот различие, которое понятно сразу: одно дело — проверить «точно ли сайт при нажатии на кнопку отреагирует как должен», а другое дело — проверить «точно ли сайт выдержит нагрузку в миллион запросов». То есть внутри тестирования есть очень различающиеся задачи, поэтому возникают подвиды вроде «нагрузочное тестирование».
DevOps
Код пишут, затем тестируют, затем он выполняется на каких-то устройствах (серверах, смартфонах, чём угодно) — и всё это создаёт много вопросов, связанных не с самим кодом, а с инфраструктурой. Возникают задачи администрирования — вот и у Хабра, помимо раздела «разработка», есть отдельный раздел «администрирование». А в английском есть слово «operations», которое сокращают до «ops».
Такими задачами могут заниматься отдельные люди. Но в последние годы постоянно слышно слово «девопс», которое родилось как объединение «development» («разработка») и «operations». Как можно по нему догадаться, речь о том, чтобы эти две составляющие шли навстречу — и разработчик не просто писал абстрактный код в вакууме, а разбирался в инфраструктурных вопросах. Это помогает избегать ситуации «лебедь, рак и щука», когда люди, вроде бы занятые общим делом, не могут наладить диалог и винят в проблемах друг друга.
С тестированием ситуация похожая (между ним и разработкой тоже нужен общий язык и понимание), поэтому иногда в понятие DevOps включают и его:
Энтерпрайз, аутсорс, фриланс
Были слова о том, какие специалисты могут работать в IT — а теперь напоследок пара слов о разных вариантах компаний, где они могут работать.
Одно из различий: бывают маленькие юркие стартапы, а бывает крупный консервативный «энтерпрайз». В начинающих компаниях больше свободы, но зачастую и больше хаоса. Солидные корпорации обычно бюрократичнее, зато стабильнее.
Другое различие — продуктовая компания против аутсорса. В первом случае компания разрабатывает собственный продукт, во втором — занимается разработкой на заказ для других компаний. К своему продукту можно «прикипеть душой», а переключение между проектами разных заказчиков позволяет поработать с разными технологиями.
Ну и можно вообще не работать в компании, а быть фрилансером, находя заказы на бирже вроде Upwork. Но среди разработчиков это не так распространено, как среди других профессий вроде фотографов.
Заключение
Вполне допускаю, что можно написать такой текст гораздо лучше, чем это сделал я. Поэтому давайте считать его опенсорсным проектом: если хочется дополнить, исправить, послать к чёрту за слишком грубое упрощение — смело делайте это в комментариях, и в итоге страница станет полезнее для всех оказавшихся на ней не-айтишников.
А напоследок — минутка рекламы:
Мы в JUG Ru Group проводим конференции для опытных IT-специалистов. Так что, если при чтении поста вы поплёвывали в потолок «ну это всё понятно» — вам будет интересно на наших конференциях, там вы узнаете куда больше нового, чем из этого текста. Сейчас у нас анонсированы пять весенних конференций: Heisenbug (тестирование), Mobius (мобильная разработка), JPoint (Java), HolyJS (JavaScript), DotNext (.NET).
Автор: Евгений Трифонов