Кодовая база – Telegram
Кодовая база
1.25K subscribers
16 photos
1 video
30 links
База во фронтенд разработке.

Написать в личку: https://news.1rj.ru/str/devmargooo
Download Telegram
🍇 Немного о сортах типизации

Раз уж я заговорила про typenoscript, считаю своим долгом погрузить вас в эту тему.

Как вы знаете, typenoscript - это компилируемый язык со статической типизацией. В статически типизируемых языках в переменную можно присвоить только значение сопоставимого типа:

const x: number = 42; // ок, в number можно присвоить number
const y: number = ‘abc’; // ошибка, в number нельзя присвоить строку


Однако не все знают, что языки программирования имеют разный взгляд на то, какой же тип является “сопоставимым”. Бывают языки с номинативной и структурной типизацией.

Номинативная типизация

Языки с номинативной типизацией используют имя типа для того, чтобы считать, что тип является сопоставимым. Так типизация работает в Java: если мы объявляем значение и указываем тип, то присвоить в это значение мы можем только этот же самый тип либо потомок (логически, потомок тоже является тем же самым типом, просто с некоторыми уточнениями).

class Order { public String id; }

// PriorityOrder технически тоже является Order-ом, просто с дополнительными свойствами
class PriorityOrder extends Order { }

public class Main {
public static void main(String[] args) {
// ок, присваиваем в Order значение типа Order
Order o1 = new Order();
// PriorityOrder тоже можно присвоить в переменную типа Order, так это наследник
Order o2 = new PriorityOrder();
}
}


Если у нас есть другой класс, который совпадает по структуре, но не является наследником, присвоить его нельзя:

class CustomerRequest { public String id; }

public class Main {
public static void main(String[] args) {
// Ошибка: нельзя присвоить в Order значение типа CustomerRequest, они никак не связаны через наследование
Order o3 = new CustomerRequest();
}
}


🚀 Структурная типизация

К удивлению всех бекендеров, которые заглядывали в мой код, typenoscript работает совсем не так. В typenoscript структурная типизация, поэтому он проверяет структуру, то есть содержание полей:

type Order = { id: string };
type CustomerRequest = { id: string };

Function handleOrder(order: Order) {…};

сonst customerRequest: CustomerRequest = { id: ‘abc’ };

// ок, потому что структура двух типов совпадает
handleOrder(customerRequest);

Typenoscript-у не важно, что тип по-другому называется - ему главное, что нужные поля имеются. Это может подкинуть вам такой неприятный сюрприз:

type Phone = string;
type Email = string;

function sendSms(phone: Phone) {...}
const email: Email = 'test@mail.ru';

sendSms(email); // oк, потому что структура одна и та же, оба типа - строки


В typenoscript можно эмулировать номинативную типизацию при помощи костыля хака, о котором я писала здесь. В остальных случаях придется к ней привыкнуть и полюбить ❤️

#typenoscript
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12💩8🤮6👍43👎2😁1🖕1
🐆Как научиться решать алгоритмические задачи, если вы совсем не умеете

Если вы придерживаетесь мнения, что алгоритмические задачи не нужно решать, это пост не для вас — на канале много других интересных постов😊 На этой неделе несколько человек написали мне с этим вопросом в личку, поэтому пишу пост для всех.

Тренировка этого навыка больше похожа на тренировку мышц в зале, чем на обучение фреймворку или языку программирования. Для того, чтобы изучить фреймворк или ЯП, в первую очередь нужно запоминать. Для того, чтобы учиться решать простые алгоритмические задачи, нужно размышлять. Это принципиально другой другой навык и к нему нужен другой подход: не поглощать информацию (учебники, статьи), а активно действовать, постепенно наращивая веса. Единственные необходимые знания для вас — основы вашего ЯП (циклы, условия, структуры данных и их методы).

Нужно начать с самых простых задач из тех, что вы можете решить самостоятельно и без подсказок. Большинство ребят способны решать простые задачи, такие как поиск максимума в массиве или обмен двух переменных значениями. В этом репозитории вы найдете еще простые задачи, с которыми можно поработать. Цель заключается в том, чтобы во время тренировки мысленно визуализировать алгоритм и представлять, как ведут себя разные структуры данных, что с ними можно делать и чего нельзя, какие операции выполняются похожим образом, а какие — совсем разным. Нужно решить много простых задач, после этого можно переходить к более сложным задачам (уровень easy на литкоде).

Главный принцип тренировок — задача не должна быть слишком сложной для вас. Задача для вас слишком сложная, если вы вообще не представляете, как ее решать, и пытаетесь вспомнить, видели ли вы когда-нибудь похожую. Для тренировки навыка важно не вспоминать, а размышлять. Наоборот, слишком простая задача — это задача, на решение которой в уме ушла секунда или меньше. “Заучивать” решения практически бесполезно — если позже вам попадется похожая задача, но с немного другими условиями, она будет для вас слишком сложной.

#алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
23🤮8👍7💯5👎3💩3❤‍🔥2🔥2🥰2🖕1
💥 Как React рендерит UI. Часть 1

Если вам когда-либо было сложно разобраться в порядке вызова эффектов в компоненте или вы просто хотите подготовиться к собеседованию, то это серия постов для вас.

📎 Рендеринг UI в React состоит из двух фаз: render и commit.

📌 Render фаза

Во время render фазы React вызывает функции компонентов. Ваши компоненты — это же обычные javanoscript функции, верно? Вот React эти функции и вызывает с переданными аргументами. В результате получается новый VDOM. После этого React React сравнивает старый VDOM с новым (этот процесс называется reconciliation) и определяет, какие изменения нужно внести (какие узлы добавить, какие узлы удалить и т.д.)

📌 Commit фаза

React вносит изменения в реальный DOM при помощи js методов вроде appendChild, removeChild и т.п. Но это не приводит к их немедленному отображению на экране — js однопоточный и этот поток занят выполнением js кода 🙂. После внесения изменения в DOM выполняются layout эффекты (useLayoutEffect). Они уже могут использовать реальный DOM (например, для вычисления размеров элементов) и вносить в него правки. Только после этого браузер отрисовывает новый UI на экране, после чего выполняются эффекты useEffect.

Рассмотрим пример и разберемся по шагам, что здесь происходит:

function App() {
useLayoutEffect(() => console.log('useLayoutEffect'));
useEffect(() => console.log('useEffect'));
console.log('render');
return <div>hello world</div>;
}


В этом примере:

*️⃣Render фаза

1️⃣Вызывается функция App. Вычисляется VDOM и изменения, которые нужно закоммитить в реальный DOM. Мы увидим лог “render”, потому что функция App была вызвана.

*️⃣Commit фаза

2️⃣ React обновляет реальный DOM
3️⃣ Выполняется useLayoutEffect. Мы увидим лог “useLayoutEffect”
4️⃣ Изменения отобразятся на экране, и пользователь увидит Hello world.
5️⃣ Выполнится useEffect, и мы увидим лог “useEffect”

В следующих постах посмотрим, как изменится этот флоу, если эффекты вносят изменения в DOM или состояние.

#react
Please open Telegram to view this post
VIEW IN TELEGRAM
128🔥10🤮6💩3👎2💘2
💥 Как React рендерит UI. Часть 2

В прошлой серии мы поговорили с вами о том, что рендеринг в React состоит из двух фаз — render и commit. В render фазе вычисляются новые VDOM и Fiber tree, в commit фазе сначала обновляется DOM, затем выполняются useLayoutEffect, после чего следует отрисовка и, наконец, выполняются useEffect.
Сегодня мы рассмотрим useLayoutEffect подробнее.

Многие из вас знают, что в useLayoutEffect можно подшаманить UI перед отрисовкой и тогда верстка не будет прыгать. Например, в следующем кейсе пользователь сразу увидит красивый нежно-розовый прямоугольник без скучного серого перед ним:

// index.css

.rect { width: 300px; height: 200px; background: grey; }

// App.tsx

export default function App() {
const rect = useRef<HTMLDivElement | null>(null);
useLayoutEffect(() => {
if (!rect.current) return;
rect.current.style.backgroundColor = "pink";
}, []);

return <div className="rect" ref={rect}></div>;
}


Это происходит за счет того, что useLayoutEffect выполняется перед отрисовкой. Браузер построил DOM с серым прямоугольником, затем выполнил js код с useLayoutEffect, в котором содержится смена цвета. После этого браузер внес изменения в DOM и затем наконец отрисовал интерфейс.

А что произойдет, если мы в useLayoutEffect будем менять состояние? Помним, что обновление состояния происходит асинхронно — новое значение появится только в следующем рендере. Как думаете: в примере ниже пользователь сначала увидит серый прямоугольник или сразу розовый?

function sleep() {
const start = Date.now();
while (Date.now() - start < 2000) {}
}

export default function App() {
const [color, setColor] = useState("gray");

useLayoutEffect(() => {
sleep(); // спим 2 секунды
setColor("pink");
console.log(color); // серый - обновление произойдет перед следующим рендером
}, []);

return (
<div
style={{
width: "300px",
height: "200px",
background: color,
}}
></div>
);
}


Ответ на этот вопрос я напишу позже, а пока вы можете делиться вашими догадками в комментариях :)

#react
🔥1511🤮6👍3👎2💩2
Какой прямоугольник пользователь увидит сначала в задаче выше?
Anonymous Poll
53%
серый
47%
❤️розовый
🔥6🤮65👍3👎3💩3
💥 Как React рендерит UI. Часть 3

Мнения разделились. Правы оказались те, кто выбрал романтичный розовый цвет 💗 (пруф). Но подождите… ведь переменная состояния обновляется только в следующем рендере, верно?

Так и есть. При вызове setState внутри useLayoutEffect React прерывает текущую commit фазу и сразу запускает новую render фазу. Таким образом, после первого рендера пользователь ничего не увидит — до стадии отрисовки React не дошел. А вот после второго увидит розовый прямоугольник 🌸

В следующей серии поговорим о том, что будет, если в дело вступит useEffect💫

#react
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍10🔥7👎4🤯4🤮2🤡1
💥 Как React рендерит UI. Часть 4

В прошлый раз мы с вами убедились в том, что useLayoutEffect действительно блокирует рендер. Если в useLayoutEffect есть “тяжелый” код (в нашем примере это была задержка в две секунды), то интерфейс зависнет, а затем покажет обновленный UI — с правками, внесенными в useLayoutEffect.

Ок, а что насчет useEffect? Мы знаем, что он выполняется после отрисовки. Как думаете, код ниже зависнет на 2 секунды прежде чем отобразить прямоугольник на экране или нет?

function sleep() {
const start = Date.now();
while (Date.now() - start < 2000) {}
}

export default function App() {
const [color, setColor] = useState("gray");

useLayoutEffect(() => { setColor("pink"); }, []);

useEffect(() => { sleep(); // спим 2 секунды }, []);

return (
<div
style={{
width: "300px",
height: "200px",
background: color,
}}
></div>
);
}

#react
🤡10🔥6🥰53👎3💩3👍1
Зависнет ли UI на 2 секунды в примере выше?☝️
Anonymous Poll
27%
Зависнет☹️
73%
Не зависнет 😊
💩9👍8🤡64👎2🤮1
💥 Как React рендерит UI. Часть 5

Вопреки ожиданиям голосующих, в примере выше React зависнет на две секунды, прежде чем что-то покажет на экране. Пруф здесь. Давайте разберемся, почему так.

Ранее мы выяснили, что при изменении состояния в useLayoutEffect React пропустит браузерную отрисовку и перейдет в рендер фазу. В нашем примере мы как раз меняем состояние в useLayoutEffect, именно поэтому мы должны пропустить отрисовку и перейти к рендер фазе.

Но тут появляется важная деталь: прежде чем начать новый рендер, React обязан выполнить эффекты предыдущего. Это официальная гарантия:

Even in cases where useEffect is deferred until after the browser has painted, it’s guaranteed to fire before any new renders. React will always flush a previous render’s effects before starting a new update.


Именно поэтому в нашем примере после useLayoutEffect React вызывает useEffect. В нашем случае useEffect содержит блокирующую операцию, поэтому интерфейс подвиснет. Затем React доходит до ререндера, и только после этого UI мы наконец увидим наш UI на экране🌸


#react
🔥11👍8🤮8😱5💩432👎2🫡2🤨1💘1
💥 Как React рендерит UI. Часть 6

Вдогонку к вчерашнему посту: а вот такой кейс сработает ожидаемо — мы сразу увидим розовый прямоугольник, и только потом интерфейс подвиснет. Все потому, что в этом случае рендер будет только один и useEffect сработает после отрисовки.

function sleep() {
const start = Date.now();
while (Date.now() - start < 2000) {}
}

function App() {
useEffect(() => {
sleep(); // спим 2 секунды
}, []);

return (
<div
style={{
width: '300px',
height: '200px',
background: 'pink',
}}
></div>
);
}


#react
🤮11👍107💩4👎3🔥3
Когда я в 2017 году стажировалась в ЦФТ, нам рассказывали про одного парня, которому нужно было сделать класс для вычисления скидок, и он назвал его Skidon. Его так и прозвали — Дима Скидон. Сейчас на рынке работодателя вы просто не найдёте работу с таким кодом.

Хороший английский нужен не только для того, чтобы подбирать подходящие названия для переменных и классов, но и чтобы общаться с командой на равных, когда будете выходить на международный рынок 🚀💵

Если хотите подтянуть язык, с этим помогут в онлайн-школе разговорного английского Authentic Pigeon

Ребята соберут кастомную программу, чтобы вы быстрее добрались до уровня английского, с которым можно смело искать работу в зарубежном проекте 😎

Абсолютно кайфую от подхода ребят. Занятия тут это не потогонка, а крутой дружеский разговор.

Студент школы — Иван

Узнать подробнее о занятиях и записаться на бесплатный демо-урок

Реклама. Моисеева Анастасия Андреевна, ИНН 270393875959. Erid: 2VtzqwUv25N
Please open Telegram to view this post
VIEW IN TELEGRAM
💩139👎6🥰5🤡5👍3🥱2🗿1
Forwarded from ··• Серёжа печатает (Серёжа)
Долго грел мысль про карьерные советы. И я понял, что у меня есть очень много чего сказать или помочь, если вы хотите развиваться в рамках своих компетенций и расти как специалист, а также искать смежные области. Но вот если вы хотите поменять или найти работу, то мне нечего вам сказать или предложить, кроме нескольких пунктов и напутствий.

Первое. Никто не знает, как вам помочь найти работу на текущем рынке, потому что никто не знает, как он работает. Так что никакие карьерные консультанты по поиску работы, компании и менторы не помогут вам найти работу. Единственное, что можно сделать, — предложить ваше конкретное резюме по сети своих контактов, и на этом вся помощь. Я сам перестал больше полугода даже смотреть на запросы в стиле «я уже полгода ищу, мне надо помочь поправить резюме и составить стратегию». Если вы хотите прокачать навыки — да, найти работу — нет.

Второе. Если у вас нет огромного количества накоплений и вы не можете позволить себе уйти на год на ретрит — не уходите с текущего места работы, пока у вас нет гарантированного, насколько это возможно, оффера с другого места. Потому что стратегия «быстро найду новое место», скорее всего, не сработает. При этом не соглашайтесь на офферы с выходом через 1–2 месяца. Сейчас в компаниях настолько сильно все меняется, что за 2 месяца ваш оффер просто может протухнуть или его оптимизируют.

Третье. Не слушайте никого, кто говорит — эта площадка не работает, а вот эта работает. Не работает нормально ничего, поэтому для максимизации шансов надо использовать всё. Порталы с вакансиями, джобборды, реферальные программы, ТГ-каналы, линкедин и прочее. Всё, на что хватает времени и сил, потому что что именно сыграет в вашем случае — не известно.

Четвертое. Главный навык для поиска работы — усердие. Надо делать очень много откликов, которые будут игнорироваться, много писать, много смотреть и искать. Это требует большого внимания, фокуса. Это требует уметь не сдаваться и терпеть до конца. Но усердие также нужно и в подготовке. Помните, что получить приглашение на собеседование — это половина проблемы. У вас конкуренция на вакансию высокая, а значит, требования к вам на собеседовании выше, чтобы пройти, поэтому не брезгуйте подготовкой. В интернете кучу видео собесов, кучу материалов, есть GPT и прочее. Не брезгуйте подготовкой, даже если вы считаете, что вы суперэксперт. Усердие также важно потому, что цикл поиска сейчас может составлять 3–4 месяца, а это долго. Я искал работу месяц, и за месяц меня высушило.

Ну и пятое — если бы передо мной сейчас был выбор, продолжать развиваться на текущем месте работы или идти искать новое, я бы выбрал первое. Потому что на текущем рынке нет уверенности, что ты найдёшь лучше, и сейчас самое время инвестировать силы и время в себя и своё развитие, в том числе на текущем месте работы.

Напомню, что в это воскресенье я буду пробовать говорить с кем-то на тему развития и отговаривать кого-то от поиска работы. Чем ещё помочь с поиском, я просто не знаю.
11👍9💩7💯3👎2🤮2🤯1
💫 I need a hero

Лет десять назад от программистов ожидали прежде всего навыков в конкретных технологиях — языках программирования, фреймворках, инструментах. Добыть эти знания было не так-то просто: документация была скупой и не охватывала многих юзкейсов, кроме того, она в большинстве своем была на английском, курсов почти не было, про ИИ никто даже и не мечтал. Поэтому были очень популярны митапы — знания передавались из уст в уста. Для меня лично каждый митап был в своем роде откровением. До сих помню, как на митапе в 2ГИС мы всей толпой читали документацию по node.js :)) Кстати, именно тогда взлетели все эти “100 вопросов по [framework name]” и первые курсы типа навыкокоробки, дававшие такие ценные в то время знания и юзкейсы. К слову, сейчас похожая ситуация разворачивается вокруг ИИ: технология есть и развивается семимильными шагами, а коллективного опыта работы с ней пока еще нет (ну а те, кто успел получить, гордо рассказывают о нем на конференциях).

Сейчас мы живем в другой реальности: курсы, видеоролики, ИИ-помощники доступны каждому. Коллективно мы научились пользоваться технологиями — но вот с задачей извлечения из них прибыли справились далеко не все. Именно поэтому найм сместил акценты: вместо поиска людей, имеющий просто писать код, компании ищут людей, умеющих делать конкурентноспособные и монетизируемые продукты. Вас нанимают не для того, чтобы говорить вам, что делать. Вас нанимают для того, чтобы вы говорили, что делать. Нужны герои, которые придут, увидят основные боли и проблемы и предложат решения.

На этом месте вы наверняка захотите сказать мне, что думать о прибыли — задача менеджера и вообще у вас лапки, но у меня есть несколько возражений на этот счет.

〰️ Увеличивать прибыль можно двумя путями: 1. Увеличение доходов 2. Уменьшение расходов. 〰️

1️⃣Про доходы

Разработчики не обязаны придумывать фичи, но именно они могут сделать возможной реализацию фич, которые раньше были недоступны. Продукт хотел темную тему, но ее мешало сделать легаси? Хотели крутые промобаннеры, но отказались из-за багов? В вашей власти предложить решение, которые сделает сны явью реализуемыми фичи, которые еще вчера были невозможны. Добавим сюда же увеличение производительности и UX сайта, что напрямую влияет на прибыль.

2️⃣Про расходы

Здесь у инженеров возможностей ещё больше: снижение defect rate и time to market, оптимизации процессов (для обсуждения которой есть отдельная встреча — ретроспектива), автоматизация рутины — поле непаханое возможностей.

Для того, чтобы увидеть все эти возможности, необходимо думать о бизнесе, бизнес-процессах и целях вашей команды. Как-то давно у меня на карьерной консультации был парень, с которым мы обсуждали его последние задачи. Я спросила его — вот эту часть системы ты зачем сделал? Он — как зачем? Ну шоб задачу в жире закрыть! В 2025 такое не прокатит: никому больше не нужен код ради кода. Всем нужен код ради денег. Будьте героями, которые знают, как эти деньги заработать 🦄
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🤮105👎5🔥4💩2🌚1
Так понравился коммент, что решила репостнуть в коммент.

В принципе, если его прочесть, то можно не читать лонгрид выше.
Forwarded from Юрий
Взгляд на реализуемый код как на бизнес-инвестицию с четким осознанием реализуемой бизнес-ценности - это подход который отличает высококлассного программиста от зашоренного доской таск-треккера.
🔥11👎5🥴3👍2
Сегодня получила в работу таску, в которой написано:

1. Выяснить детали
2. Прикинуть
3. Реализовать

Эта задача наглядно иллюстрирует идею из поста выше: сейчас не нужны люди, которым требуется говорить, что сделать. Сейчас ищут людей, которые сами видят проблемы и решают их.
Как понять, что вы готовы к современному рынку поиска работы? Вас не смущает постановка задачи выше.
👍13💯7❤‍🔥5🤮3💩3👎21😁1
Вчера развлекала себя решением литкода и любопытства ради посмотрела, сколько же у меня решенных задач в аккаунте.

Девять. Всего девять задач за всё время существования аккаунта.

Я не помню точно, когда я завела аккаунт — кажется, лет шесть назад. Получается, я в среднем решаю полторы задачи в год. Мне кажется, я на собесах решила больше задач, чем в процессе подготовки к ним. Это резко контрастирует с популярным мнением, что для решения алгозадач необходимо проводить часы на литкоде.

Честно говоря, я не знаю паттерны решения популярных алгоритмических задач. Я сохранила себе несколько методичек, но до сих пор их не прочла. Я не знаю алгоритмы — я их придумываю. Каждый раз, на каждом собеседовании. Получается не всегда — около 10% задач у меня не получается решить за ограниченное время собеседования (пока не получается 😈).

Я окончательно укрепилась во мнении, что ценность алгоритмов не в том, чтобы их “знать” или “помнить”. Ценность в том, чтобы изобрести их с нуля.

Кстати, поздравьте меня с десятой решенной задачей 🙂

#алгоритмы
1👍26💩20👎10🔥9🤮87🤡7
🩹Просто взять готовую либу, и причем здесь DDD

Намедни общалась с другом, который недавно ходил на собес в бигтех. На собеседовании его попросили реализовать онлайн редактор кода с подсветкой — типа codesandbox. Друг решил, но пришлось изрядно напрячься. Зачем нужны такие собесы, — недоумевал он, — в реальной жизни я бы просто взял готовую либу.

Честно говоря, код, написанный своими силами (а не готовая либа) — это самый лучший код.
Во-первых, он не содержит 100500 корнер кейсов — в нем только нужное вам.
Во-вторых, вы в любой момент можете изменить его поведение без необходимости делать МР в опенсорс.
В-третьих, вы не рискуете в произвольный момент времени столкнуться с тем, что важная зависимость вдруг стала deprecated.

У собственного кода есть только один недостаток: он дорогой. Взять либу сильно дешевле, чем реализовывать собственными силами.

Однако не для любого проекта самое главное — это дешевизна.

📌 DDD (domain driven design) выделяет три поддомена:

1️⃣ Основные поддомены (core subdomains) — ядро бизнес-модели. За счет них бизнес получает конкурентное преимущество на рынке. Такие поддомены содержат уникальную функциональность, несущую ценность для пользователя. Например, это рекомендательная система YouTube.

2️⃣ Универсальные поддомены (generic subdomains) отвечают за типовые решения и не дают конкурентное преимущество на рынке. Например, авторизация или оплата.

3️⃣ Вспомогательные поддомены (supporting subdomains) — поддомены, которые поддерживают бизнес компании и не являются конкурентным преимуществом на рынке. Например, красивый лендинг.

Как вы можете заметить, конкурентное преимущество дает только основной поддомен, и именно он обычно оттягивает на себя основные силы и деньги компании. Важно реализовать такие бизнес фичи не просто “шоб работало”, а чтобы это было лучше, чем у других.

В каком случае нельзя использовать внешнюю либу для подсветки текста (или кода как текста)? В том случае, если это основной поддомен. Например, вы пишите свой супермегавау онлайн редактор кода, в котором можно на лету кастомизировать подсветку кода.

На собеседованиях обычно хотят увидеть, как бы вы справились с основным поддоменом, потому что если вы справитесь с ним, то с другими справитесь наверняка.

Советую на досуге поразмышлять на тему, работа в каких бизнес доменах даст вам конкурентное преимущество на рынке труда и отстрочит вашу замену иишницей. Всех с наступающим! 🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍9🔥6👎5🤡5🤮2💯1🤨1
⚡️Больше не Фронтенд кухня.

За прошедший год произошло многое. Экономическая ситуация ухудшилась, что привело к сокращениям и фризам найма, в то время как искусственный интеллект развивался семимильными шагами, позволяя разработчикам делать больше меньшими усилиями.

Я стала понимать, что гораздо важнее писать про фундаментальные основы программирования, чем разбирать частные нюансы конкретных технологий. Нюансы — это логическое продолжение базовых принципов.

Сегодня рынок требует от нас изучать новые технологии с молниеносной скоростью, а вакансии фуллстеков снова стали популярны. Там, где раньше нанимали двух разработчиков, сегодня вынуждены ограничиться одним, который будет делать все.

Я верю, что конкретные технологии — это всего лишь инструмент, которым может пользоваться любой, потратив немного времени на чтение документации. Чтобы быстро изучать новое, необходимо понять, что системы строятся по одним и тем же принципам, а разные технологии используют одни и те же идеи, комбинируя их по-разному.

Я верю, что знание базы позволит вам писать сегодня на React, завтра — на Vue или Angular, а послезавтра и вовсе стать фуллстек разработчиком. В этом году я планирую сделать в своих постах акцент на базу в веб-разработке, что поможет вам стать более гибкими на турбулентном рынке, быстро адаптироваться к изменениям и быть инженером, а не оператором фреймворка.

Да прибудет с вами база!
359❤‍🔥14👍11👏6🫡6👎2🤮2🤡1