Всем привет, тимлид-архитектор из команды Яндекс в треде. 20 лет опыта (40 лвл). Владею 20-ю языками программирования. Сейчас ведём разработку своего языка программирования. Тут буду давать советы нубам. Погнали. 1) В 2025 году английский язык для программистов почти не нужен. Большинство док переведены (особенно по С++) на русский. С заказчиками общаются бухгалтеры и PMы.
2) Часто нубы лезут в кодинг не зная чем поток отличается от процесса, а этот вопрос часто любят на собесах нубам задавать. Ответ: Поток — это определенная сущность программы. Каждый оператор (хотя это во многом зависит от реализации языка) выполняется отдельным потоком. Если говорить максимально просто, зачастую, сколько в программе if’ов, for‘ов и т. п., столько она и имеет потоков, но бывают и исключения (как в языке Haskell, детали гуглите). Все потоки имеют свою память. Процесс — вид потока, который исполняется напрямую в процессоре, а не в системном интерпретаторе потоков, как это делают классические потоки. Процессы имеют общую память (кэш процессора).
3) Когда собеседовал студентов, постоянно видел людей, которые не понимают, зачем вообще нужен фронтенд и что это вообще такое. Front-end (передний конец) — это начальная стадия изготовления программного продукта. Всё, на этом определение можно закончить. Никакие интерфейсы тут непричём, но тем не менее, фронтенд очень помогает кодерам пилить продукт вдальнейшем.
4) Многие считают динамическую типизацию злом, и совершенно напрасно. Динамическая типизация позволяет выделять как можно меньше памяти на выполнение программы, поскольку выделением памяти занимается сам компилятор, на не процессорные «ассемблеры». В свою очередь, процессорные ассемблеры являются более надёжным и «типобезопасным» способом выделения памяти. Они так же являются подвидом компиляторов, только разработаны по другому принципу.
>>319141902 Хаскель уже устарел, а вот ЛИСП и smalltalk сейчас в тренде. В пятёрку самых актуальных и высокооплачиваемых точно входят. Популярнее них, наверное, только B Programming Language.
>>319141793 (OP) >Владею 20-ю языками программирования. Сейчас ведём разработку своего языка и нахуя, тебе 20 мало? вы как говно делали с последними обновлениями, так и продолжаете. Бототред какой-то блять. сажи на всякий.
5) Реляционные БД в последнее время набирают обороты, возможно, скоро вообще все переключатся на них, вытеснив этим самым так-называемые Key-value и Value-key базы данных. Так что можете забывать всякие виды join‘ов и прочую муть, связанную с нерелятивными БД, на собесах спрашивать это уже почти не актуально (хотя всё-таки знания EcmaScript — языка запросов к редофильским БД — всегда поощряются).
6) Все современные языки похожи друг на друга. К примеру, Python, PHP и Java исполняются на одной и той же виртуальной машине (JVM), названной в честь Jav’ы. Языки этой группы используют процессы вместо потоков, за что получили быстрый перформанс и ненадёжность значений переменных.
>>319141793 (OP) >В 2025 году английский язык для программистов почти не нужен действительно, зачем, если можно в яндексе за копейки батрачить, а не в валютную удаленку вкатываться.
7) Сразу учитесь использовать дебаггер. Кратко: «баг» (англ. «жук») — ошибка программы, связанная с утечкой памяти процессора (кэша) на жесткий диск/ssd. Но в современном обществе школьников этим словом называют любую нежданную хуйню, вплоть до неправильных текстур в играх.
>>319141793 (OP) Да нахуй мне твои советы всрались, ты лучше требования к играм на яндекс игры и частоту отправки ребилда пофикси пидрила, хули я должен по недели ждать из за хуйни которая фиксится за пару секунд.
8) Логгируйте свои программы, чем бы она не являлась. Если сидите не OS Linux от компании Microsoft, у них системная процедура glog, в которую нужно передать сообщение и уровень опасности логов. Например, вот так: SysProc->:::->glog<<<`Hello world! This is my first log message!`/DangerLvl=RED
9) Я настолько тупой долбоёб, что не проверил метаданные EXIF, добавляемые хромом в сохраняемые изображения, благодаря чему скоро в треде будет очень много интересной информации обо мне.
>>319142803 Конечно нужны, и будут нужны. Кодеры просто отладкой и развитием кода занимаются, а вот аналитиков задача более объёмная — передать заказчику конечный софт. То есть, это предполагает: ежедневные созвоны с HR, кучу таблиц с оценкой работы программ в Microsoft LibreOffice, работа по API с облачными сервисами (самые "маст хэв" — Toyota, Lockheed Martin, ну и Rust, но у раста конченный глючный дашборд, очень трудно работать со статистикой, и таски иногда лагают и по полгода висят в статусе For Celery). Зарплаты у аналитиков чуть-чуть выше. Темп работы — как пойдёт, иногда сидят на бенче между проектами.
9) В языках высокого уровня (Java, Python, Ruby, Rust — т. е. группа «процессорных» языков, о которых я говорил выше) отсутствуют «исключения». Потому что это, собственно, группа высокоуровневых языков, выполняющихся близко к процессору, поэтому в них нет такой абстракции, как «исключения». Языки высокого уровня и так подвержены ненадежности (к примеру, тяжелая высокоуровневая прога втупую может сменить вам значение переменных или значения внутри массива), если бы в них добавили исключения, это был бы очередной C# (то есть очередной полный провал не принимайте близко к сердцу, шарповики). Этот вопрос часто на собесах спрашивают, кстати.
10) Конечно же, я не могу не упомянуть ООП (Объектно Ориентированное Программированиe). Все студентишки знакомятся с этой парадигмой, изучают классы, рекурсивность и т. п.. Объектно Ориентированное Программирование позволяет эффективно расходовать оперативную память, кэш процессора, и даже энергомощность блока питания за счёт того, что позволяет манипулировать остатками ячеек памяти уже пройденных компилятором, путём представления ячеек (или их совокупностей) через т. н. объекты. Классы описывают эти самые объекты. Всё очень просто.
11) Все языки программирования делятся на Тьюринг-полные и Тьюринг-частичные. Тьюринг полные языки так называются, потому что там присутствуют операторы, придуманные самим Тьюрингом (конструкция if, циклы while и for, а также тернарный оператор x ? y : z) Забавный факт: именно благодаря тернарному оператору Тьюринг смог разгадать усложненную версию шифровальной машины "Энигма" с четырьмя роторами. Хаскелль - пример Тьюринг-частичного языка, т.к. там отсутствуют конструкции for и while, но присутствует if.
>>319144409 Иди учи матчасть. Разная у потоков память. Пространство имён и очереди тоже разные (хотя бывают Shared Queue и Shared Name Space, в русской литературе т. н. "общий именной космос"). Иногда потоки могут даже на разных девайсах (дисках) создавать области, неймспэйсы и мап-файлы.
Ты это сам можешь проверить, если сидишь на Линуксе/Маке/Винде. Открой через браузер директорию /dev/ и запусти любую программу, сложнее однопоточного калькулятора. Увидишь, как будут появляться временные файлы .mem и .dbm. Сделай оттуда в консоли (коси на винее, в линуксовском PowerShell хз как, надо гуглить): echo $(du -f -u .) > ~/mem-stat.rep. Дальше посмотри всё, что высрало в репорте: less ~/mem-stat.rep. Увидишь идентификаторы разных именных космосов и их брокеры. Наслаждайся.
12) Ловары — зло. Никогда не используйте локальные переменные. В группе Pascal-подобных языков они обозначаются ключевым словом lovar (Local Variable, "ловары"). Оттуда это пошло, так же их называют и в других языках программирования. Они значительно уменьшают нагрузку на процессор, но совершенно не годятся для моделирования, а так же приведёт к «засорению» памяти при отсутствии правильной декомпозиции программы на процессы (например, как это сделано в Брокере RabbitMQ, там мастер-инстанс спаунит процессы и обходит их на основании алгоритма Красного Дерева, собственно, кодеров, которые подобные паттерны применяют называют "краснодеревщиками", это ещё с 90-х с форумов пошло; но это сложно, вы это не реализуете. Забудьте. ЗАБУДЬТЕ.). Зачастую их используют бородатые дяди, когда пишут эксплойты (эксплоит — сленговое название ядра ОС). Они, конечно же, знают, где их нужно применять.
13) Сейчас существует огромное множество фреймворков для создания практически чего угодно. Большинство из них языко-независимые (language-free), и представляют собой прокачанные компиляторы. Для каждого второго есть графический интерфейс (для совсем нубов — можно работать через граф. редакторы типа пейнта/фотошопа). Для работы через Photoshop рекомендую ReactJS, написанный на языке Java (это форк JavaScript с бесплатной лицензией, как бы сокращённая демо-версия).
14) Популярность так называемых «декларативных» языков программирования (т. е. таких, в которых декларации процессору хранятся в так называемом «стэке» деклараций) — лишь тренд. Скоро все эти ваши Ады и Perlы уйдут в тень, и вакансий будет мало. У себя в компании мы отказываемся от этих языков, в основном потому что проёбы на кастомных декларациях ведут к необратимым потенциальным ошибкам.
просто предупреждаю парни что каждый кто поверит во всю эту хуйню и хоть единый из этих поносных тейков озвучит на собесе быстро получит в фидбеке "пошел нахуй долбоеб"
>>319145596 Назову те, которые мне можно упомянуть без нарушений NDA (non-degenerate allowed, т. е. для продвинутых пользователей). Конечно, я далеко не в соло их пилил, но модули, которые я написал полностью или принимал участие в рефакторинге/фиксах там есть. BreakingBad2 — сканер уязвимостей в ПО от Red Hat CS:Source — облачный сервис для поиска источников изображений, ещё допиливают поиск по видео, но там всё сложно, сейчас я ушёл из проекта Panasonic — анализатор автотрафика для европейских стран Hydra — крупный маркет-плейс для детских товаров Morgenshtern — потоковый сервис стриминга песен, клипов попартистов и подобной херни Ansible — инструмент для выполнения задач на системах семейства Windows (Canonical™) Hentai — потоковый сервис для семейного просмотра фильмов и сериалов (с контентом там прям всё збс, но цены взлетели)
Ну, бери чё-нибудь из этого, может пригодится :))) Если найдёшь баг — пиши баг-репорт, можешь через тех. саппорт Яндекса, они отредиректят.
>>319145787 Чтоб новичков подтянуть. Если тебе извилин не хватает вкатиться в разработку ПО, то не засирай тред, пожалуйста, дай людям спокойно подтянуть свои знания, пока у меня есть настроение помогать советами. Rm rf-нись от корня с ноу-пресёрв-рут, плиз 🫡
15) Шаблоны проектирования — типичный вопрос на собеседовании. Самый популярный шаблон — «Dependencies injection» — позволяет хранить данные («внедрять», «инжектировать») в оперативную память. Реализуется как две функции, при этом одна передаётся в другую. Вот пример простой на C++. ``` function void injector(func *funcPtr) { stdlib::ram::memorize(&funcPtr); }
function injectee() { stdout::cout(&"Hello world"); }
16) Модель OSI включает три уровня операционной системы (ОСи): уровень пользовательского приложения, уровень операционной системы и уровень драйверов. Стек TCP/IP относится ко второму и первому уровням. Создано это всё чтобы разграничить программы от драйверов.
>>319146378 Кстати, забыл дюупомянуть: сейчас обычная OSI в чистом виде почти не используется, но используют доработанные модели по типу sOSI ("segregated OSI") или PISI ("portable integrated SI"). В них немного расширяют оригинальные стеки, добавляют заголовки управления (No-Cache, Content-Type, etc), повсеместно добавляют мультиплексирование (когда по один поток несколько настаканных битов хранит, т. п.).
>>319146523 Да вот я тоже думаю. Иногда создаёшь тред, чтоб помочь ребятам (не только ведь в IRC-каналах и телеграм-чатах отладкой за нубов заниматься), а дежурные боты тут как тут, сразу на тред налетают и вайпают. Хуйню какую-то несут, сами не отличая стэйтмент от экспрешена.
17) IP-адрес это набор цифр (от -7 до 256), по которым твой комп может найти товарищ майор. Диапазоны адресов выдают провайдерам правоохранительные органы государств, в которых провайдеры работают, у нас это ФСБ, ну а дальше провайдер выдаст тебе какой-нибудь айпишник (4 цифры разделённые точкой, иногда добавляется слэш "/" и ещё три цифры, для ip-адресов v5 и v6) чтобы можно было понять кто это у нас смотрит ЦП. IP-адреса бывают белые и серые. Серый отличается от белого тем что провайдерам влом сделать всё как надо и под одним адресом в сети может оказаться много разных пользователей. То есть, если у тебя серый IP, твой адрес может совпасть с адресом какого-то Джона из Калифорнии на другом конце света.
18) TCP это один из стандартных протоколов (правил по которым программы общаются между собой через сеть). То есть он документирован - ты можешь найти в инете описания (RFC) и там всё расписано кто когда и какие байтики шлёт. UDP это undocumented protocol т.е. публичного стандарта нет и что там внутри знают только разработчики программы - он используется там, где критически важна безопасность данных, чтоб их не дешифровали, например в мессенджерах.
19) Юнит-тесты: Есть такой фрэйм (от англ. "Frame" - "кадр") для игр Unity. В этой же сфере гейм-дева есть и концепция Unit-тестов. То есть по факту, если вы не осилили IT в целом и программирование в частности, можете искать вакансии Unit-тестеров - они просто ищут баги в играх, написанных на Unity. Работа не шибко для умных, но требует усердий. Объясняю почему возник именно такой термин: Unity в виду своей простоты является самым популярным игродвижком. Соответсвенно, на нем больше всего игор, твои любимые киберпунки и гта5 написаны на нём, вот в геймдеве и появился такой отдельный термин для тестирования игр на Unity.
20) handshake это рукопожатие т.е. когда клиент соединяется с сервером по одному из UDP-протоколов то они обмениваются первоначальными пакетиками с помощью которых проверяют например версию друг друга, убеждаются что оба используют один и тот же протокол и всё в таком духе. Handshake нужен ИСКЛЮЧИТЕЛЬНО UDP-протоколам (Undocumented Protocol), потому как они плохо документированы, и им, чтобы общаться друг с другом, нужно обменяться некоторой информацией.
21) Про следующий прикол мне как-то рассказывал сам Кэн Томпсон, когда я работал в гугле в середине нулевых. Очень часто на собесах дают задание - написать прогу, которая переворачивает слово. Типа 'анон' -> 'нона'. Я тоже часто даю это. Если человек берет библиотечную функцию, то сразу шлю нахуй. Если пыжится, реализует через цикл - то еще даю шанс. Если реализует рекурсивно - то получает плюсик. Но есть один очень элегантный способ, который юзают только гуру. Короче, все программы сначала переводятся в язык ассемблера. Это наверно все знают. Но гораздо меньше людей знают, что у ассемблера 2 разных синтаксиса - от компании "Эндрю Таненбаум энд технолоджис" - сокращенно AT&T и от Интела. Суть в том, что эти 2 языка зеркальны друг по отношению к другу (один начинает работать с начала стека, а второй - с конца). Шарящий челик, зная, какая версия ассемблера в системе, может обмануть процессор, скомпилировав код под другой ассемблер - и, не сложно догадаться, - вся программа работает в обратном порядке, то бишь, в системе с Intel обычный код println("анон"), скомпилированный в AT&T выведет на экран "нона", т.к. байты поместятся в стек в обратном порядке
Компьютерщики ИТТ? Кто-нибудь может на пальцах пояснить как примерно устроена система приложений вроде Яндекс-еды? Планирую организовать свой сервис доставки. На уровне бизнес-схемы представляю как и что, понимаю в чем мои конкурентные преимущества (если вкратце - география, яндекс-еда и прочие агрегаторы функционируют не везде, но это не всё). Но в айти я не бум-бум, как это всё запрограммировать даже примерно не представляю. Есть идеи куда копать? где искать спецов?
> 1) В 2025 году английский язык для программистов почти не нужен.
Ты ебанутый? На 1с пробовал 'программировать'? И что за 20 языков - хтмл, ксс, гит и тд? Иди нахуй клоун ебучий.
Пиздец, какой же бред этот хуисос пишет, я троечник и то на английском лучше чем на русском пишу.. и что за прикол представляться рашн днище конторами, весь рунет руинят только хуесосы
>>319141793 (OP) Ку оп-чик, коллега в треде. Из интересного оп не назвал что все больше работы с инфраструктурой делается руками потому что так проще и быстрее. Все больше открывают позиций DevOps, ручной оператор крч
>>319153626 Берешь и спрашиваешь. 2gis sdk или yandex sdk для карт, берем java или go, если по деньгам дофига и хочешь продать побыстрее, докидываем субд какую-нибудь, тот же postgres и все. А как устроена? Заказ на адрес Ул.Колотушкина 2, а адрес харчевни Ул.Пушкина 10. Строим максимально оптимальный и короткий путь и отпраляем курьеру. Записываем каждый заказ в БД для обработки и хранения инфы клиента. Если прям полностью расписывать всю архитектуру, то это денег стоит.
>>319153626 >Но в айти я не бум-бум Разработка подобного приложения может стоить тебе около 200 тысяч долларов, так что лучше научиться кодить самому, чем потратить такие деньги на то, что скорее всего не взлетит.
>>319157429 >Если прям полностью расписывать всю архитектуру, то это денег стоит. Я бы и бесплатно расписал, но перед этим я бы посчитал экономику, чтобы не обрекать анона делать то, что изначально не имеет шансов отбиться.
>>319158083 >но перед этим я бы посчитал экономику Давай я подсчитаю - получится хуета В яндексе работают такие задроты которые высасывают каждую копейки из любой возможности на ней заработать. Если что то еще не реализовал яндекс - это просто не приносит денег Мимо аналитик
>>319158178 ох мне лень считать, скажу лишь, что нужно, чтобы с одного клиента из рекламы анон получал больше, чем тратит на него
>Если что то еще не реализовал яндекс - это просто не приносит денег не совсем. Яндекс пытался скопировать профи.ру, но отсосал - видимо, не хватило экспертизы. Так что корпорации иногда сосут.
>>319141793 (OP) >Сейчас ведём разработку своего языка программирования. Говно без задач.
>Большинство док переведены (особенно по С++) на русский. Особенно по C++. Че где там C++23? А C++26 через месяц уже будет на русском или как? А конференцию ISO сразу как в ООН на русском переводить будут в прямом эфире?
>>319141855 >Поток — это определенная сущность программы. В зависимости от реализации многопоточности, мы про какую говорим? Поток это хуета планировщика задач конкретной ОС, у тебя как ОС дохуя, так и планировщиков задач под них.
>Каждый оператор (хотя это во многом зависит от реализации языка) выполняется отдельным потоком. Если говорить максимально просто, зачастую, сколько в программе if’ов, for‘ов и т. п., столько она и имеет потоков А ты точно тимлид архитектор с 20 годам опыта? Как можно стэк области видимости с потоком перепутать.
>Процесс — вид потока, который исполняется напрямую в процессоре, а не в системном интерпретаторе потоков, как это делают классические потоки. Ничего он напрямую не выполняется, когда он дернется это желание левой пятки планировщика задач, как и поток. Общей памяти у них нету, кэш процессора это лишь придаток к планировщику переходов и возможность сразу весь стэк расположить в быструю память чтобы не дергать медленную оперативную.
>>319141879 >это начальная стадия изготовления программного продукта >Никакие интерфейсы тут непричём Это буквально реализация HCI, позволяющая производить ввод-вывод.
>>319141909 >Многие считают динамическую типизацию злом, и совершенно напрасно. Динамическая типизация позволяет выделять как можно меньше памяти на выполнение программы, поскольку выделением памяти занимается сам компилятор Обоссался, назови мне компилируемые языки с полной динамической типизацией не в статусе мертвый.
>поскольку выделением памяти занимается сам компилятор У тебя и строго типизированные приколы выделяет сам компилятор.
struct Foo { int bar; char buzz; }
sizeof(foo) //8 байт, ака DWORD
Foo arr[4]; sizeof(arr) //20 байт QWORD и WORD, а не 32 байта
Я ещё на процессах и потоках понял что что то не то Так как мои знания говорят об обратном Хотя ни разу не программист(хотя бывало в студенчестве) так линуксоид немного.
А вообще этот троллинг я уже видел тут на двачах. Так что все эти высеры это не ново.
>>319141909 > Динамическая типизация позволяет выделять как можно меньше памяти на выполнение программы Долбоёб, применяя динамическую типизацию ты сам определяешь объём памяти необходимы на хранение той или иной переменной, вместо фиксированной ячейки.
Тут буду давать советы нубам. Погнали.
1) В 2025 году английский язык для программистов почти не нужен. Большинство док переведены (особенно по С++) на русский. С заказчиками общаются бухгалтеры и PMы.