Всем привет, тимлид-архитектор из команды Яндекс в треде. 20 лет опыта (40 лвл). Владею 20-ю языками программирования. Сейчас ведём разработку своего языка программирования. Тут буду давать советы нубам. Погнали. 1) В 2019 году английский язык для программистов почти не нужен. Большинство док переведены (особенно по С++) на русский. С заказчиками общаются бухгалтеры и PMы.
2) Часто нубы лезут в кодинг не зная чем поток отличается от процесса, а этот вопрос часто любят на собесах нубам задавать. Ответ: Поток — это определенная сущность программы. Каждый оператор (хотя это во многом зависит от реализации языка) выполняется отдельным потоком. Если говорить максимально просто, зачастую, сколько в программе if’ов, for‘ов и т. п., столько она и имеет потоков, но бывают и исключения (как в языке Haskell, детали гуглите). Всё потому имеют свою память. Процесс — вид потока, который исполняется напрямую в процессоре, а не в системном интерпретаторе потоков, как это делают классические потоки. Процессы имеют общую память (кэш процессора).
3) Когда собеседовал студентов, постоянно видел людей, которые не понимают, зачем вообще нужен фронтенд и что это вообще такое. Front-end (передний конец) — это начальная стадия изготовления программного продукта. Всё, на этом определение можно закончить. Никакие интерфейсы тут непричём, но тем не менее, фронтенд очень помогает кодерам пилить продукт вдальнейшем.
4) Многие считают динамическую типизацию злом, и совершенно напрасно. Динамическая типизация позволяет выделять как можно меньше памяти на выполнение программы ю, поскольку выделением памяти занимается сам компилятор, на не процессорные «ассемблеры». В свою очередь, процессорные ассемблеры являются более надёжным и «типобезопасным» способом выделения памяти. Они так же являются подвидом компиляторов, только разработаны по другому принципу.
5) Реляционные БД в последнее время набирают обороты, возможно, скоро вообще все переключатся на них, вытеснив этим самым так-называемые Key-value и Value-key базы данных. Так что можете забывать всякие виды join‘ов и прочую муть, связанную с нерелятивными БД, на собесах спрашивать это уже почти не актуально (хотя всё-таки знания всегда поощряются).
5) Реляционные БД в последнее время набирают обороты, возможно, скоро вообще все переключатся на них, вытеснив этим самым так-называемые Key-value и Value-key базы данных. Так что можете забывать всякие виды join‘ов и прочую муть, связанную с нерелятивными БД, на собесах спрашивать это уже почти не актуально (хотя всё-таки знания всегда поощряются).
6) Все современные языки похожи друг на друга. К примеру, Python, PHP и Java исполняются на одной и той же виртуальной машине (JVM), названной в честь Jav’ы. Языки этой группы используют процессы вместо потоков, за что получили быстрый перформанс и ненадёжность значений переменных.
7) Сразу учитесь использовать дебаггер. Кратко: «баг» (англ. «жук») — ошибка программы, связанная с утечкой памяти процессора (кэша) на жесткий диск/ssd. Но в современном обществе школьников этим словом называют любую нежданную хуйню, вплоть до неправильных текстур в играх.
9) В языках высокого уровня (Java, Python, Ruby, Rust — т. е. группа «процессорных» языков, о которых я говорил выше) отсутствуют «исключения». Потому что это, собственно, группа высокоуровневых языков, выполняющихся близко к процессору, поэтому в них нет такой абстракции, как «исключения». Языки высокого уровня и так подвержены ненадежности (к примеру, тяжелая высокоуровневая прога втупую может сменить вам значение переменных или значения внутри массива), если бы в них добавили исключения, это был бы очередной C# (то есть очередной полный провал не принимайте близко к сердцу, шарповики).
>>236076243 Да эту хуйню даже и я отвечу не зная матчасти. Тут же просто за определение самих слов в русском языке пояснить надо, подвязав к пояснению тематику соответствующую
мимо гуманитарий в кодинге не шарю от слова совсем
10) Конечно же, я не могу не упомянуть ООП (Объектно Ориентированное Программированиe). Все студентишки знакомятся с этой парадигмой, изучают классы, рекурсивность и т. п.. Объектно Ориентированное Программирование позволяет эффективно расходовать оперативную память, кэш процессора, и даже энергомощность блока питания за счёт того, что позволяет манипулировать остатками ячеек памяти уже пройденных компилятором, путём представления ячеек (или их совокупностей) через т. н. объекты. Классы описывают эти самые объекты. Всё очень просто.
>>236076694 Ну у тебя способности, видимо... Не знаю, я часто на собесах кандидатов встречал, которые отвечали хуйню про поток. Начинали нести бред какой-то про "поток исполнения" и что это, мол, "системная сущность" какая-то, которая позволяет че-то там параллельно исполнять... Хз, в каких говновидосах с ютуба это говорят. Поток в самом банальном смысле это количество операторов и директив. Всё.
>>236076856 Помимо изучения самого ЯП что ещё нужно читать чтобы в целом разбираться в It сфере? И для чего читать книги по программированию, если есть курсы?
>>236076518 6) Алгоритмы и математика - основа программирования, без них невозможно устроится на работу. Базовые структуры типа двоичного дерева - это уровень школы, B+ деревья, красно-черные, балансировки - стажёра. Джун должен понимать Диница, теорему Воронова, теорему Пика и Укконена. Мидл уже должен знать основы математики, типа китайской теоремы об остатках и ряды с остатком в форме Тейлора и Маклорена, чуток теории групп. Минимум сеньёра - теория Галуа и когомологии де Рама.
Все нормальные ресурсы о программировании на английском. Зачастую рузские их просто пиздят и переводят. Перевод на рузский у разрабов не в приоритете, так что будешь ждать когда выйдет новая фича, а ты только по-русски понимаешь. Да и на той же должности что и в России, у рядового разработчика из США, Канады или Европы зп будет в несколько раз выше
>>236076959 Проясняю для тебя, как для человека, который не плавает в теме компьютерных наук: Весь этот тред — сборник абсурдных изречений, которые я высрал первый раз года полтора назад. Теперь перепосчиваю переодически. Оригинальный тред взлетел до 200 постов за получаса. Про "Теорему Сосницкого" слышал? Ну вот. Это чтоб ты понимал, почему тебе анон выше сказал не морозить хуйню как ИТТ на собесах. А ребята после курсов рили могут так отвечать.
11) Все языки программирования делятся на Тьюринг-полные и Тьюринг-частичные. Тьюринг полные языки так называются, потому что там присутствуют операторы, придуманные самим Тьюрингом (конструкция if, циклы while и for, а также тернарный оператор x ? y : z) Забавный факт: именно благодаря тернарному оператору Тьюринг смог разгадать усложненную версию шифровальной машины "Энигма" с четырьмя роторами. Хаскелль - пример Тьюринг-частичного языка, т.к. там отсутствуют конструкции for и while, но присутствует if.
>>236077113 О том, о чем тебе не рассказывают на курсах рандомные васи. Твой "препод" на курсах - неудачник, который не смог в программирование, иначе нахуй бы он пошел на преподавать дебилам всяким не про тебя лично, а про основное контингент. Автор книги - настолько крутой прогер, что его мнение важно для тысяч людей в индустрии и его даже согласны издать на бумаге. Чуешь разницу?
12) Никогда не используйте локальные переменные. В группе Pascal-подобных языков они обозначаются ключевым словом lovar (Local Variable, "ловары"). Они значительно уменьшают нагрузку на процессор, но совершенно не годятся для моделирования, а так же приведёт к «засорению» памяти. Зачастую их используют бородатые дяди, когда пишут эксплойты (эксплоит — сленговое название ядра ОС). Они, конечно же, знают, где их нужно применять.
>>236077262 Ты опять отвечаешь мимо ебаный насрал. Я не спросил сюято лучше, что ценнее, кто блять самый ебейши прогер на свете. Я спросил чем контент книг по программированию отличается от курсов, там та же самая информация которую преподносят по другому, или же там совсем иного порядка темы?
13) Сейчас существует огромное множество фреймворков для создания практически чего угодно. Большинство из них языко-независимые (language-free), и представляют собой прокачанные компиляторы. Для каждого второго есть графический интерфейс (для совсем нубов — можно работать через граф. редакторы типа пейнта/фотошопа). Для работы через Photoshop рекомендую ReactJS, написанный на языке Java.
Давайте переименуем тред. В тред тупых вопросов. Я начну. >>236077409 > Для работы через Photoshop рекомендую ReactJS, написанный на языке Java. Нахуя в фотошопе ЯП?
>>236077395 Не, теперь ты просто идёшь нахуй, тупорылый баран. Я тебе объяснил по хорошему, не оскорблял, ты же вместо шевеления мозгами требуешь от меня ответа на вопрос "бля ну нахуй мне напрягаться с этими книжками, ёпта, мне удобнее на Ютубе". Нахуй иди, ебанат, иди курс на гигбренс купи, там тебя научат и на работу блядь устроят после этого, как раз то, что дебилам типа тебя нужно.
>>236077395 Нет, там не совсем та информация. Это огромный лак, если тебе попадётся препод, который на 90% приближённую к реальной документации или книге инфу тыкать. Остальные же либо суют свои подходы, которые во многих случаях не оправданы, ну либо люди, которые, ладно уж, пересказывают тебе первые страницы доки за бабки. Типа учат синтаксису и азам. И нахуй за это нужно платить? Не проще ли по полчасика в день читать доку/пытаться самому что-нибудь писать? Это только у тупого будет полная стагнация а-ля "нет идей бляяя на чем попрактиковаться, вот на курсе бы домашку давали!...". Хуйня это. Пошевели извилинами, погугли бибилиотеки, напиши свой аналог. Пусть получиться на 80% похоже на кривую версию того, с чего ты передираешь, твой скилл апнется так, что ты почувствуешь. Заодно и гуглить научишься.
>>236077545 > бля ну нахуй мне напрягаться с этими книжками, ёпта, мне удобнее на Ютубе Еблан, тебя по человечески спросили о чем пишут в книге, без доеба блять. Я не применьшаю книги, просто, сука, спросил. Ты блять со своей больной головой какие то проблемы начал придумывать. И ответил ты довольно абстрактно на вопрос. Я ебу чтоли что там умные дядьки пишут. Это я и хочу узнать в общих чертах. у тебя в башке насрано
14) Популярность так называемых «декларативных» языков программирования (т. е. таких, в которых декларации процессору хранятся в так называемом «стэке» деклараций) — лишь тренд. Скоро все эти ваши Ады и Perlы уйдут в тень, и вакансий будет мало. У себя в компании мы отказываемся от этих языков, в основном потому что проёбы на кастомных декларациях ведут к необратимым потенциальным ошибкам.
15) Шаблоны проектирования — типичный вопрос на собеседовании. Самый популярный шаблон — «Dependencies injection» — позволяет хранить данные («внедрять», «инжектировать») в оперативную память. Реализуется как две функции, при этом одна передаётся в другую. Вот пример простой на C++. ``` function void injector(func *funcPtr) { stdlib::ram::memorize(&funcPtr); }
function injectee() { stdout::cout(&"Hello world"); }
>>236077723 Сети интересны? Таненбаума "Компьютерные сети", 5-е издание. GoF не рекомендовал бы для начала. Рекомендовал бы избегать даже. Меня ща обоссут. Какого-нибудь Кернигана по Юниксам прочитай первые главы. Самые базовые именно. Если покажется много воды — дропай. Если ты совсем ебанутый и не боишься сдохнуть нахуй — Кнутт "Искусство программирования". Можешь Таненбаума найти ещё "Алгоритмы и структуры данных". Кста, это уж лучше наперёд куда-то вынести.
16) Модель OSI включает три уровня операционной системы (ОСи): уровень пользовательского приложения, уровень операционной системы и уровень драйверов. Стек TCP/IP относится ко второму и первому уровням. Создано это всё чтобы разграничить программы от драйверов.