Всем привет, тимлид-архитектор из команды Яндекс в треде. 20 лет опыта (40 лвл). Владею 20-ю языками программирования. Сейчас ведём разработку своего языка программирования. Тут буду давать советы нубам. Погнали. 1) В 2019 году английский язык для программистов почти не нужен. Большинство док переведены (особенно по С++) на русский. С заказчиками общаются бухгалтеры и PMы.
2) Часто нубы лезут в кодинг не зная чем поток отличается от процесса, а этот вопрос часто любят на собесах нубам задавать. Ответ: Поток — это определенная сущность программы. Каждый оператор (хотя это во многом зависит от реализации языка) выполняется отдельным потоком. Если говорить максимально просто, зачастую, сколько в программе if’ов, for‘ов и т. п., столько она и имеет потоков, но бывают и исключения (как в языке Haskell, детали гуглите). Всё потому имеют свою память. Процесс — вид потока, который исполняется напрямую в процессоре, а не в системном интерпретаторе потоков, как это делают классические потоки. Процессы имеют общую память (кэш процессора).
3) Когда собеседовал студентов, постоянно видел людей, которые не понимают, зачем вообще нужен фронтенд и что это вообще такое. Front-end (передний конец) — это начальная стадия изготовления программного продукта. Всё, на этом определение можно закончить. Никакие интерфейсы (как, например, первый принцип SOLID’а — Segregate Interfacion) тут непричём, но тем не менее, фронтенд очень помогает кодерам пилить продукт вдальнейшем.
4) Многие считают динамическую типизацию злом, и совершенно напрасно. Динамическая типизация позволяет выделять как можно меньше памяти на выполнение программы ю, поскольку выделением памяти занимается сам компилятор, на не процессорные «ассемблеры». В свою очередь, процессорные ассемблеры являются более надёжным и «типобезопасным» способом выделения памяти. Они так же являются подвидом компиляторов, только разработаны по другому принципу.
5) Реляционные БД в последнее время набирают обороты, возможно, скоро вообще все переключатся на них, вытеснив этим самым так-называемые Key-value и Value-key базы данных. Так что можете забывать всякие виды join‘ов и прочую муть, связанную с нерелятивными БД, на собесах спрашивать это уже почти не актуально (хотя всё-таки знания всегда поощряются).
>>239157590 Только в универе сессию закрыл и нам по предмету Операционные Системы, давали эти понятия. Поток - наименьшая единица процесса. Процесс - исполняемая программа. Чё скажешь по поводу моих определений?
Слушай, а сейчас на питоне норм начинать? Можно будет создавать сайты на нём с нормальным дизайном, или уже нечего душить питона? Или проще будет ебаться с 3 языками( html 5, css и, хоспаде помилуй ,java script ) >>239157493 (OP) (OP)
6) Возможно, как только вас возьмут, вы сразу же победите за анальной пробкой в сексшоп. Мой совет - не спешите. Скорее всего вас взяли джуном, так что лид не потерпит, если ваше очко разработано больше, чем у него. Всегда берите на пару размеров меньше, чем у вашего лида. Станете лидом - сможете позволить себе пробку побольше.
>>239158987 >сейчас на питоне норм начинать В питон никогда не поздно вкатываться в пределах ближайших лет 30. В вебе больше всего бекендов написано на питоне и сишарпе (asp.net), пыха хуец в стороне уже сосёт.
>>239157493 (OP) Слышь, архитектор, ёпта. В чём разница между MVC / MVVM / VIPER? Если ОП не ответит на это сообщение с галкой и вменяемым ответом - сагайте этот бототред.
6) Все современные языки похожи друг на друга. К примеру, Python, PHP и Java исполняются на одной и той же виртуальной машине (JVM), названной в честь Jav’ы. Языки этой группы используют процессы вместо потоков, за что получили быстрый перформанс и ненадёжность значений переменных.
7) Сразу учитесь использовать дебаггер. Кратко: «баг» (англ. «жук») — ошибка программы, связанная с утечкой памяти процессора (кэша) на жесткий диск/ssd. Но в современном обществе школьников этим словом называют любую нежданную хуйню, вплоть до неправильных текстур в играх.
8) В языках высокого уровня (Java, Python, Ruby, Rust — т. е. группа «процессорных» языков, о которых я говорил выше) отсутствуют «исключения». Потому что это, собственно, группа высокоуровневых языков, выполняющихся близко к процессору, поэтому в них нет такой абстракции, как «исключения». Языки высокого уровня и так подвержены ненадежности (к примеру, тяжелая высокоуровневая прога втупую может сменить вам значение переменных или значения внутри массива), если бы в них добавили исключения, это был бы очередной C# (то есть очередной полный провал не принимайте близко к сердцу, шарповики). Этот вопрос часто на собесах спрашивают, кстати.
>>239157697 >Front-end (передний конец) — это начальная стадия изготовления программного продукта.
Всегда думал что фронт энд, это часть сервиса, с которой взаимодействует человек, а то что там под капотом работает, это бэкэнд. Например игра в мобилке фронт енд, а сервер, который этот Игорь обрабатывает является бэк эндом.
9) Конечно же, я не могу не упомянуть ООП (Объектно Ориентированное Программированиe). Все студентишки знакомятся с этой парадигмой, изучают классы, рекурсивность и т. п.. Объектно Ориентированное Программирование позволяет эффективно расходовать оперативную память, кэш процессора, и даже энергомощность блока питания за счёт того, что позволяет манипулировать остатками ячеек памяти уже пройденных компилятором, путём представления ячеек (или их совокупностей) через т. н. объекты. Классы описывают эти самые объекты. Всё очень просто.
>>239165687 Попался, пиздабол. Definition: Front end development manages everything that users visually see first in their browser or application. Front end developers are responsible for the look and feel of a site. ... As a front end developer you are responsible for the look, feel and ultimately design of the site.
10) Все языки программирования делятся на Тьюринг-полные и Тьюринг-частичные. Тьюринг полные языки так называются, потому что там присутствуют операторы, придуманные самим Тьюрингом (конструкция if, циклы while и for, а также тернарный оператор x ? y : z) Забавный факт: именно благодаря тернарному оператору Тьюринг смог разгадать усложненную версию шифровальной машины "Энигма" с четырьмя роторами. Хаскелль - пример Тьюринг-частичного языка, т.к. там отсутствуют конструкции for и while, но присутствует if.years
>>239166369 Соглашусь. Нtml - это верный выбор. Доказательство тому что интернет сервисы гигантов индустрии написанные на нём: www.google.com, www.amazon.com, www.uber.com и др.
11) Никогда не используйте локальные переменные. В группе Pascal-подобных языков они обозначаются ключевым словом lovar (Local Variable, "ловары"). Они значительно уменьшают нагрузку на процессор, но совершенно не годятся для моделирования, а так же приведёт к «засорению» памяти. Зачастую их используют бородатые дяди, когда пишут эксплойты (эксплоит — сленговое название ядра ОС). Они, конечно же, знают, где их нужно применять.
12) Сейчас существует огромное множество фреймворков для создания практически чего угодно. Большинство из них языко-независимые (language-free), и представляют собой прокачанные компиляторы. Для каждого второго есть графический интерфейс (для совсем нубов — можно работать через граф. редакторы типа пейнта/фотошопа). Для работы через Photoshop рекомендую ReactJS, написанный на языке Java.
13) Популярность так называемых «декларативных» языков программирования (т. е. таких, в которых декларации процессору хранятся в так называемом «стэке» деклараций) — лишь тренд. Скоро все эти ваши Ады и Perlы уйдут в тень, и вакансий будет мало. У себя в компании мы отказываемся от этих языков, в основном потому что проёбы на кастомных декларациях ведут к необратимым потенциальным ошибкам.
14) Шаблоны проектирования — типичный вопрос на собеседовании. Самый популярный шаблон — «Dependencies injection» — позволяет хранить данные («внедрять», «инжектировать») в оперативную память. Реализуется как две функции, при этом одна передаётся в другую. Вот пример простой на C++. ``` function void injector(func *funcPtr) { stdlib::ram::memorize(&funcPtr); }
function injectee() { stdout::cout(&"Hello world"); }
15) Модель OSI включает три уровня операционной системы (ОСи): уровень пользовательского приложения, уровень операционной системы и уровень драйверов. Стек TCP/IP относится ко второму и первому уровням. Создано это всё чтобы разграничить программы от драйверов.
>>239179508 Нахуй пошло, уёбище >>239178273 Не особо опережает обычные конторы, не гугол жэ. Ну у чувака Гофера 200к ровно (он миддл+), но это голанг же, хз сколько там остальные. Фронтовик ещё синьор, которого знаю, получает 235к.
16) IP-адрес это набор цифр (от -7 до 256), по которым твой комп может найти товарищ майор. Диапазоны адресов выдают провайдерам правоохранительные органы государств, в которых провайдеры работают, у нас это ФСБ, ну а дальше провайдер выдаст тебе какой-нибудь айпишник (4 цифры разделённые точкой, иногда добавляется слэш "/" и ещё три цифры, для ip-адресов v5 и v6) чтобы можно было понять кто это у нас смотрит ЦП. IP-адреса бывают белые и серые. Серый отличается от белого тем что провайдерам влом сделать всё как надо и под одним адресом в сети может оказаться много разных пользователей. То есть, если у тебя серый IP, твой адрес может совпасть с адресом какого-то Джона из Калифорнии на другом конце света.
17) TCP это один из стандартных протоколов (правил по которым программы общаются между собой через сеть). То есть он документирован - ты можешь найти в инете описания (RFC) и там всё расписано кто когда и какие байтики шлйт. UDP это undocumented protocol т.е. публичного стандарта нет и что там внутри знают только разработчики программы - например в онлайн играх.
18) Юнит-тесты: специальная сущность при разработке игр. Есть такой фрэйм (от англ. "Frame" - "кадр") для игр Unity. В этой же сфере гейм-дева есть и концепция Unit-тестов. То есть по факту, если вы не осилили IT в целом и программирование в частности, можете искать вакансии Unit-тестеров - они просто ищут баги в играх, написанных на Unity. Работа не шибко для умных, но требует усердий. Объясняю почему возник именно такой термин: Unity в виду своей простоты является самым популярным игродвижком. Соответсвенно, на нем больше всего игор, твои любимые киберпунки и гта5 написаны на нём, вот в геймдеве и появился такой отдельный термин для тестирования игр на Unity.
>>239157493 (OP) >1) В 2019 году английский язык для программистов почти не нужен. Большинство док переведены (особенно по С++) на русский. С заказчиками общаются бухгалтеры и PMы. Вы прочитали тухлую пасту и основную причину по которой НЕ надо работать в этой ебаной щараге
19) handshake это рукопожатие т.е. когда клиент соединяется с сервером по одному из UDP-протоколов то они обмениваются первоначальными пакетиками с помощью которых проверяют например версию друг друга, убеждаются что оба используют один и тот же протокол и всё в таком духе. Handshake нужен ИСКЛЮЧИТЕЛЬНО UDP-протоколам (Undocumented Protocol), потому как они плохо документированы, и им, чтобы общаться друг с другом, нужно обменяться некоторой информацией.
20) Про следующий прикол мне как-то рассказывал сам Кэн Томпсон, когда я работал в гугле в середине нулевых. Очень часто на собесах дают задание - написать прогу, которая переворачивает слово. Типа 'анон' -> 'нона'. Я тоже часто даю это. Если человек берет библиотечную функцию, то сразу шлю нахуй. Если пыжится, реализует через цикл - то еще даю шанс. Если реализует рекурсивно - то получает плюсик. Но есть один очень элегантный способ, который юзают только гуру. Короче, все программы сначала переводятся в язык ассемблера. Это наверно все знают. Но гораздо меньше людей знают, что у ассемблера 2 разных синтаксиса - от компании "Эндрю Таненбаум энд технолоджис" - сокращенно AT&T и от Интела. Суть в том, что эти 2 языка зеркальны друг по отношению к другу (один начинает работать с начала стека, а второй - с конца). Шарящий челик, зная, какая версия ассемблера в системе, может обмануть процессор, скомпилировав код под другой ассемблер - и, не сложно догадаться, - вся программа работает в обратном порядке, то бишь, в системе с Intel обычный код println("анон"), скомпилированный в AT&T выведет на экран "нона", т.к. байты поместятся в стек в обратном порядке
21) Часто нубы лезут в кодинг не зная чем поток отличается от процесса, а этот вопрос часто любят на собесах нубам задавать. Ответ: Поток — это определенная сущность программы. Каждый оператор (хотя это во многом зависит от реализации языка) выполняется отдельным потоком. Если говорить максимально просто, зачастую, сколько в программе if’ов, for‘ов и т. п., столько она и имеет потоков, но бывают и исключения (как в языке Haskell, детали гуглите). Всё потому имеют свою память. Процесс — вид потока, который исполняется напрямую в процессоре, а не в системном интерпретаторе потоков, как это делают классические потоки. Процессы имеют общую память (кэш процессора).
>>239188243 Нет. Потоки это отдельные сущности разных программ. При этом потоки хранятся в так называемом "пуле потоков". Поясню: есть две программы — first.exe и second.exe. И в первой и во второй имеются потоки выражения if. При одновременном запуске двух программ из пула поток if возьмёт та, которая первой к нему доберётся, затем отдаст второй, если та будет всё ещё его требовать. В современных компьютерах всё это занимает пикосекунды (т.е. очень мало временам — 10 в 36 степени).
22) Когда собеседовал студентов, постоянно видел людей, которые не понимают, зачем вообще нужен фронтенд и что это вообще такое. Front-end (передний конец) — это начальная стадия изготовления программного продукта. Всё, на этом определение можно закончить. Никакие интерфейсы тут непричём, но тем не менее, фронтенд очень помогает кодерам пилить продукт вдальнейшем.
>>239189626 Ох какая жалкая попытка перефорсить, чмоня. В следующий раз, когда придёшь на собес в говноконтлру какую-то, слёзно умоляя тебя взять на позицию джуна за 250$, будь добра, возьми с собой памперсы, поняла? Хотя можешь даже никуда и не ходить, потому что я сделал твит, после которого тебя вряд ли куда-нибудь выше помощницы дворника возьмут.
23) Многие считают динамическую злом, и совершенно напрасно. Динамическая типизация позволяет выделять как можно меньше памяти на выполнение программы ю, поскольку выделением памяти занимается сам компилятор, на не процессорные «ассемблеры». В свою очередь, процессорные ассемблеры являются более надёжным и «типобезопасным» способом выделения памяти. Они так же являются подвидом компиляторов, только разработаны по другому принципу.
>>239189857 Для этого надо не быть долбоёбом. Мне стыдно, что я с тобой в одной сфере работаю. ОП красава, потому что нормальным инженерам дал возможность похохотать искренне (как с теорем Сосницкого), но главное, порвал пердаки тупым обезьянам, которые всерьёз парятся и жрут его говно. Это показывает, сколько же реально ебланов среди кодерков. Программисты-анальники, блять.
>>239173372 В смысле?' Где-то ошибается, но в основном все правильно. Про Яндекс пиздит конечно, скорее в люксофте работает каком-нибудь, ну тоже ничего.
24) Реляционные БД в последнее время набирают обороты, возможно, скоро вообще все переключатся на них, вытеснив этим самым так-называемые Key-value и Value-key базы данных. Так что можете забывать всякие виды join‘ов и прочую муть, связанную с нерелятивными БД, на собесах спрашивать это уже почти не актуально (хотя всё-таки знания всегда поощряются).
>>239158750 в разных операционных системах под "потоком" и "процессом" зачастую понимаются разные вещи чтобы быть точным нужно сначала спросить спрашивающего, какую ос он подразумевает.. это лучший ответ будет..
OOP- обьектно ориентированное программирование, устаревшая парадигама, все языковые конструкции языка ориентированы согласно нотации Пахомского- сверху вниз, и жестко привязаны к потоку управления, т.н. entry point, или EP NOP, или nop- non oriented programming, используется в современных языках высокого уровня, прогамма может произвольно выполняться в любое время и в любой точке оперативной памяти, непривязанной к точке входа программы(Enter Point)
25) Все современные языки похожи друг на друга. К примеру, Python, PHP и Java исполняются на одной и той же виртуальной машине (JVM), названной в честь Jav’ы. Языки этой группы используют процессы вместо потоков, за что получили быстрый перформанс и ненадёжность значений переменных.
Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка. Кто ответит без сажи в тред, у того сдохнет материнка.
HTML- Homo Typed Monkey Language, современный язык программирования, гомологически типизированный Э.Монком, соединяющий строгую и нестрогую типизацию соответсвенно, напрямую в оперативной памяти минуя все среды выполнения, в том числе и кэш процессора. EMS, или FPS в секунду выполнения программы- количество потоков, которые пролетели все таки прямо в кеш процессора, и замедляют выполнение.
26) Сразу учитесь использовать дебаггер. Кратко: «баг» (англ. «жук») — ошибка программы, связанная с утечкой памяти процессора (кэша) на жесткий диск/ssd. Но в современном обществе школьников этим словом называют любую нежданную хуйню, вплоть до неправильных текстур в играх.
RAM- random aссept memory, программная настройка- фреймворк для ускорения работы программ в виндовс, работает за счет рандомизации прав доступа к содержимому ячеек оперативной памяти. NVRAM- non-virtual RAM, то же самое, но испольуется аппаратная рандомизация, которая непосредственно встроена в процессор.