Ликбез#
Здесь можно найти умные слова на которые я буду ссылаться если понимаю что это слово не очень-то и очевидно на подобии "миграция s3 хранилища по ssh через cli heroku"
Языки программирования#
Среды разработки#
Перед тем как резберём конкретные примеры, посмотрим на какие группы делятся и для чего нужны.
IDE - интегрированная среда разработки - программы которые обладают встроенным ОГРОМНЫМ функционалом, обычно они предназначены для разработки на конкретном языке программирования. В них есть всё - от подсветки синтаксиса и автодополнениея кода, до полноценного ведения гит репозитория и недоадминистрирование баз данных на пару с отладкой кода и его профилироваинем. Функионал самых современных сейчас IDE просто огромен ещё до установки разных расширенией, а ведь из-за их большого комьюнити, расширения могут помочь заменить заменить вообще все другие программы, сможете всё делать кнопкой на какой-либо из панелей.
Текстовые редакторы - это программы, которые предназначены для редактирования текстовых файлов. Они обычно обладают меньшим функционалом, чем IDE, но при этом более легкие и быстрые. Текстовые редакторы обычно используются для написания кода на разных языках программирования, но не предоставляют такого широкого набора инструментов, как IDE. Но вот вам пример - я пишу этот текст и в VSCode, а не в Visual Studio Community или в подобном инструменте от JetBrains, потому что здесь расширений так много, что превратить VSCode в IDE обычно дело двух гайдов в инете. Кстати именно эта область достаточно сложная, т.к. VSCode являются тут монополистом.
Терминальные редакторы - выделю отдельную категорию терминальных текстовых редакторов, над которыми, если посидеть, можно получить инструммент превосходящие IDE и обычные текстовые редакторы вместе взятые в миллион раз, это вам и легендарный vim, и дарк соулс в мире редакторов текста - emacs и ещё куча ноунеймов для владельцев арч линуксе(последнее это пост ирония).
JetBrains#
Самый популярный вендер полноценных IDE под каждый язык программирования, или что-то ещё пzо круче. Скорее всего читателю известны такие IDE как PyCharm, Clion или Inellij IDEA. Так вот это список далеко не максимальный, у них можно найти и решения для администрирования баз данных - data grip, и ручное/автоматическое тестирование кода и интерфейса - aqua, и даже доп ide для питона но уже именно для датасайнтистов с их айпатон ноутбуками(ipynb) - datalore, разработка приложений под андроид - гига плагин Android Studio для Inellij IDEA(этот плагин так же огромен, как dlc к elden ring). Их ide захапали хоть и не максимальный, но ОГРОМНЫЙ рынок сред разработки. Часто их выбирают за малый размер и хорошую отзывчивость. Но есть и минусы - они платные, но есть бесплатные версии для студентов(за простейшим гайдом пишите в лс).
Visual Studio#
Данную IDE не стоти путать с текстовым редактором Visual Studio Code. Ещё раз - приписка Code = текстовый редактор. Большая "ВИЖЛА" является монструозно огромной IDE. Куча темплейтов проектов, все эти проекты можно в одном гига проекте запускать, отладка, профилирование, тестирование, администрирование баз данных, ведение гит репозитория. В ней можно писать C, C++, C#, F#, Python(хотя это скорее является рофло дополнением у них, до сих пор не понимаю кто его использует там). Эта IDE настолько крута что там можно разрабатывать код для анрил энжина, для юнити, для андроид приложений, для интернета вещей, да там даже рисовать приложение под винду можно. Но есть и минусы - она очень тяжёлая, для сравнения CLion потратил у меня 2 гигабайта включая компилятор плюсов и его библиотеки все, а Visual Studio Community забрала 10 гигабайт чисто установщиком, то есть без установки компонентов для разработки. Обычно это выбор в реально больших компаниях, либо если у вас пишут исключительно на C#, лучше IDE для него чем большая вижла нету.
XCode#
Если вы владелец мака, то вам повезло, у вас есть XCode. Это IDE для разработки под макос и айос. Она позволяет писать на Objective-C и Swift. Так же в ней можно писать на C, C++, Python, Ruby, Java, JavaScript, Go, Rust, R, SQL, HTML, CSS, XML, JSON, YAML, Markdown, Shell Script, Perl, PHP, Lua. В целом прикольно, устанавливается на мак одной командой, но больше похвастатья ничем не может. Кстати писать приложения под мак вы можете исключительно здесь.
Notepad++#
Теперь затронем текстовые редакторы. Начнём с этакого старого мудреца в этой сфере. Существовал ещё до атома от гитхаба но и тот закрылся несколько лет назад. Мой преподаватель по математике в олимпиданом лагере писал латех код в нотпаде а я сидел и думал что за технологии дивные. Куча функционала по сранвению с просто блокнотом, даже нормальный редактор байт кода(без шуток то как ломанные кодировки открываются тут - намного удобнее чем в vscode). Макросы так же есть, а вот подсветка синтаксиса - это уже проблема. В общем просто знать - такой редактор был и есть.
Sublime Text#
Этот случай уже по интереснее. В своё время я фронт для конкурсов писал в нём. Обладает уже подсветкой синтаксиса, удобно в нём очень быстро открывать файл без "обязанностей". То есть хоть vscode и не требует, но там приятно работать именно в пределах воркспейса(несколько подключенных папок). Но вот в саблайме открыл и ничего не должен ещё делать. Есть библиотека плагинов но не такая большая как в vscode, если смотреть на теги плагинов и количество их в теге то на глаз их всего 3к, а в vscode дохрена К+. Я использую его и по сей день для быстрого открытия не понятных файлов потому что он написан на расте из-за чего делает это молниеносно. Кстати поиск в нём работает быстро даже в файле на 10 гигабайт. Поэтому когда что-то не понятное скачал и пытаешься понять не вирус ли это, я выберу саблайм.
Visual Studio Code#
Данный случай по интереснее. Данная приблуда является топ 1 мира со своими 40 процентами популярности(среди питон разработчиков хахахаха)
Но даже не только среди питонистов, данная программа является фаворитом, практически все фронтэндеры тоже пишут тут. Думаю объяснять для чего эта штука не надо, до этого я и так это кучу раз упомянул, но коротко всё равно объясню: огромная скорость(автономный установщик весит всего 300 мегабайт, тут нечему лагать), гигансткое компьюнити от чего миллиарды плагинов, подсветка синтаксиса и... Ну всё. Это же редактор кода, что тут ещё хотели? Секрет популярности в плагинах которые редактор кода превращают в IDE перекрывающие все потребности мира. Да люди уже даже другие программы встроили в vscode, тут даже фигма есть. В общем если нужны дебаггеры на все языки - найдётся даже на ассемблер. Профайлер для C#? - девкит от майкрософт перекроет эту потребность. Удалённая разработка в дев контейнере при этом с дебагом? - найдётся. В общем что бы читатье не придумал, это есть в vscode при помощи плагинов. Но есть и обратная сторона монеты - ... а хотя нет, нету. Да я даже латех в несколько раз эффективнее редактирую чем в winedt или оверлифе. Реально минусов здесь нет, за исключением того, что добавиться этой крутости придётся поиском плагинов, но на любую задачу они всегда найдутся. В крайнем случае можно изучить js и самому написать плагин(я пробовал, это не слоюно, внутренний api очень простой). В общем рекомендую, кстати на другой странице есть мой выбор плагинов.
Zed#
Vim#
Emacs#
Nano#
Командные оболочки bash, batch#
Все кто не первый день сидит за компом хоть раз видели файлы с расширением .bat - так вот это представитель скритовых из мира командных оболочек. Полное название - batch, командная оболочка windows ещё со времён когда она была досом. В линуксе тоже есть командная оболочка, называется bash, сокращённо и в скриптах - sh.
Самый простой способ как можно к ним обратиться - открыть терминал. В винде его можно вызвать вписав в поиск cmd, но я крайне рекомендую установить microsoft terminal
CLI#
CLI - command-line interface, интерфейс командной строки. Обычно так называются приложения, взаимодействие с которыми происходит через терминал в какой-либо командной оболочке. Из самых известных примеров cli: mkdir, ls, wsl, grep, choco, tmux, vim, nano, bvi, curl, wget, docker, git, ssh и т.д.
Сеть#
HTTP#
Первое с чем стоит ознакомиться - чё за фигня в начале ссылок всегда?
Http(Hyper Text Transfer Protocol) - это протокол передачи данных в интернете. Он используется для передачи данных между клиентом и сервером. Все сайты, которые вы видите в браузере, работают по этому протоколу.
У него есть надстройка httpS - это просто защищенная версия http. Она использует шифрование для передачи данных между клиентом и сервером. Все сайты, которые работают по протоколу https, считаются более безопасными(по факту - не особо). S в коцне это просто security. Чтобы получить https для своего сайта нужно сделать пару нехитрых действий на подобии certbot для nginx севрера или wildcard сертефикат, но подробнее как это сделать будет упомянуто в разделе про nginx.
Http - не единственный протокол, их существует много других - ftp, dns, dhcp, tcp/udp, ip и т.д., можете почитать модель OSI для более углублённого понимания каждого и вообще всей иерархии, но по чесноку скажу что для простого веба оно не нужно, кроме dns.
Подробнее тут
SSH#
TBC...
API, REST, RESTful API#
API - интерфейс программирования приложений. Это набор правил и механизмов, которые позволяют разным программам взаимодействовать друг с другом. Веб-серверы используют API для обработки запросов от клиентов и отправки им ответов.
REST - это архитектурный стиль для построения веб-сервисов. Он определяет правила, которые позволяют клиентам и серверам обмениваться данными. Его философия в отсутствии состояния, то есть на сервере не хранится никаких данных о прошлых взаимодействиях с клиентом — каждый запрос должен содержать всю информацию для его обработки. Это снижает нагрузку на сервер, что особенно полезно, если к нему подключено одновременно много клиентов. Не нужно хранить дополнительную информацию о прошлых обращениях каждого из них. Достаточно обработать каждый запрос в отдельности.
RESTful API - это API реализующее REST архитектуру, то есть следующее всем правилам REST. Например, GET для получения данных, POST для создания новых данных, PUT для обновления существующих данных и DELETE для удаления данных.
Пример запроса к RESTful API:
Но привычнее вам будет видеть это вот так:
Если очень просто говоря, вы когда ссылку вводите в адресную строку это и есть запрос к REST API, только там принудительно GET запрос. POST и остальные запросы доступные лишь через скрипты на сайте или в консоле или в POSTMAN или Insomnia или CURL и т.д.
В процессе написания этого параграфа я выяснил то REST API и RESTful API это оказывается разные вещи, подробнее можно почитать тут. Сам я так и не понял, но очень интересно.
Ну и способ определить что вы написали REST API:
https://habr.com/ru/articles/319984/
DNS#
DNS(Domain Name System) - это система, которая преобразует доменные имена в IP-адреса. Когда вы вводите доменное имя в адресной строке браузера, ваш компьютер отправляет запрос на сервер DNS, который возвращает IP-адрес сайта. Без DNS вы бы не могли посещать сайты по их доменным именам. Если вы вобьёте ping и ссылка на сайт в терминал, то увидите что вам отобразился ip адрес этого домена.
Если очень просто говорить, то dns сервера это такой огромный телефонный справочник, только вместо ФИО - доменное имя, а вместо телефона ip адрес.
IP#
IP(Internet Protocol) - это протокол, который используется для передачи данных в интернете. Он определяет структуру пакетов данных, которые передаются между устройствами в сети. Каждое устройство в сети имеет свой уникальный IP-адрес, который используется для идентификации и маршрутизации пакетов данных. Но последние почти уже 10 лет, если вы абонент крупного интернет оператора, то у вас так называемый "серый" ip адрес. Но правильное название будет ip адрес за nat. Проще говоря проавайдер имеет пул белых айпи адресов к которым есть доступ извне, и внутри сети он выдает вам свой айпи адрес, который не доступен извне. Это сделано в основном для экономии адресов но офк они будут говорить что это для вашей же безопасности.
Именно из-за механизма серого айпи адреса вы не можете открыть локальный сервер в майнкрафте и играть с друганом по сети скинув ему в скайпе те самые 0.0.0.0:25565.
TCP/UDP#
Ну тут много разглагольствовать не буду, просто нужно знать что это протоколы транспортного уровня. Очень просто говоря именно на них построены известнве вам http, dns, ftp и т.д. Но некоторые строят свои сервисы прямо на этих протоколах. Важно отличать эти 2 протокола, первый гарантирует доставку пакетов, второй нет. То есть TCP это это, можно сказать, "снайпер". Прицелился, выстрелил, зафиксировал попадание, ищет следующую цель. UDP это это, скорее, "пулеметчик" - выставил ствол в направлении врага и начал долбить очередями, не слишком заботясь о точности. Как в войсках важны обе эти воинские специальности, так и в интернете важны оба этих протокола. TCP применяется там, где требуется точная и подтверждаемая передача данных - например, отправка фотографий, или переписка между пользователями. UDP, в свою очередь, нужен для общения в голосовом формате, или при передаче потокового видео, или игрового процесса.
JSON#
JSON(JavaScript Object Notation) - это формат обмена данными, который используется в веб-разработке. Он основан на синтаксисе JavaScript и позволяет представлять данные в виде пар "ключ-значение". JSON используется для передачи данных между клиентом и сервером в формате, который легко читать и понимать как человеку, так и компьютеру. Вот пример JSON:
HTML#
HTML(HyperText Markup Language) - это язык разметки, который используется для создания веб-страниц. Он определяет структуру и содержимое страницы, включая заголовки, параграфы, изображения, ссылки и другие элементы. HTML используется вместе с CSS и JavaScript конкретной красоты. Пример:
<!DOCTYPE html>
<html>
<head>
<title>Пример HTML</title>
</head>
<body>
<h1>Хеллоу ворлд!</h1>
<p>Кто прочита тот сдохнет.</p>
</body>
</html>
URL/URI#
URL(Uniform Resource Locator) - это адрес ресурса в интернете. Он определяет местоположение ресурса и способ доступа к нему. URL состоит из протокола, доменного имени, пути к ресурсу и других параметров. Пример URL:
URi(Uniform Resource Identifier) - это строка, которая идентифицирует ресурс в интернете. Она может быть URL, URN или URC. URL - это частный случай URI, который определяет местоположение ресурса в интернете. URN - это идентификатор ресурса, который не зависит от его местоположения. URC - это идентификатор ресурса, который содержит информацию о его содержимом. Примеры URI: