В преддверии праздника не хочется говорить о серьезном… Поэтому Вот Вам для настроения подборка анекдотов про программистов:
***
Жена посылает мужа—программиста в магазин:
— Купи батон колбасы. Да, и спроси, есть ли яйца. Если есть — возьми десяток.
Программист приходит в магазин:
— Батон колбасы, пожалуйста. Ага, спасибо. А яйца у вас в продаже есть?
— Есть.
— Тогда, пожалуйста, ещё девять батонов колбасы.
***
Программист решил занять у друга 1000 рублей, но для ровного счёта занял 1024.
***
Приходит программист к окулисту. Тот его усаживает напротив таблицы, берет указку:
- Читайте!
- "БНОПНЯ"... Доктор, у вас что-то не то с кодировкой!
***
1 монитор - обычный программист, 2 монитора - продвинутый программист, 3 монитора - системный программист, 4 монитора – охранник
***
Объявление: 55—летняя женщина, мать троих программистов, просит кого-нибудь не психованного научить ее интернету.
***
Жена посылает мужа—программиста в магазин:
— Купи батон колбасы. Да, и спроси, есть ли яйца. Если есть — возьми десяток.
Программист приходит в магазин:
— Батон колбасы, пожалуйста. Ага, спасибо. А яйца у вас в продаже есть?
— Есть.
— Тогда, пожалуйста, ещё девять батонов колбасы.
***
Программист решил занять у друга 1000 рублей, но для ровного счёта занял 1024.
***
Приходит программист к окулисту. Тот его усаживает напротив таблицы, берет указку:
- Читайте!
- "БНОПНЯ"... Доктор, у вас что-то не то с кодировкой!
***
1 монитор - обычный программист, 2 монитора - продвинутый программист, 3 монитора - системный программист, 4 монитора – охранник
***
Объявление: 55—летняя женщина, мать троих программистов, просит кого-нибудь не психованного научить ее интернету.
👍8
Хороший повод применить метод нисходящего проектирования…
1 шаг. Расписываем в общих чертах алгоритм, заменяя комментариями не детализированные фрагменты:
for (int i = 0; i < n; i++) { //i - индекс очередного анализируемого числа
bool find = false;
//проверить, есть ли в массиве ранее такое число
if (find) { //есть
//удалить из массива все такие числа далее после i
}//если нет - ничего не делаем, переходим к следующему
}
Здесь лучше было бы использовать не for, а while. Ведь ограничитель цикла n будет изменяться, а это плохо для цикла for. Обычно for используется тогда, когда число повторений цикла известно заранее. Но в условии было именно for, поэтому оставим так….
2 шаг. Детализируем первый комментарий:
//проверить, есть ли в массиве ранее такое число
for (int j = 0; j < i; j++) { //j - индекс очередного элемента перед i
if (arr[j] == arr[i]) {
find = true;
}
}
3 шаг. Детализируем второй комментарий:
//удалить из массива все такие числа далее после i
for (int k = i + 1; k < n; k++) { //k - индекс очередного элемента после i
if (arr[k] == arr[i]) {//число найдено
//удаляем k-й элемент из массива
k--; //чтобы остаться на месте, когда k будет увеличиваться
n--; //число элементов стало меньше
}
}
4 шаг. Детализируем удаление k-го элемента:
//удаляем k-й элемент из массива
for (int m = k + 1; m < n; m++) {//m - индекс элемента после удаляемого
arr[m - 1] = arr[m]; //следующий подвигаем на место предыдущего
}
5 шаг. Собираем все вместе и – вуаля:
for (int i = 0; i < n; i++) { //i - индекс очередного анализируемого числа
bool find = false;
//проверить, есть ли в массиве ранее такое число
for (int j = 0; j < i; j++) { //j - индекс очередного элемента перед i
if (arr[j] == arr[i]) {
find = true;
}
}
if (find) { //есть
//удалить из массива все такие числа далее после i
for (int k = i + 1; k < n; k++) { //k - индекс элемента после i
if (arr[k] == arr[i]) {//число найдено
//удаляем k-й элемент из массива
for (int m = k + 1; m < n; m++) {//m - после удаляемого
arr[m - 1] = arr[m]; //след. на место предыдущего
}
k--; //чтобы отаться на месте, когда k будет увеличиваться
n--; //число элементов стало меньше
}
}
}//если нет - ничего не делаем, переходим к следующему
}
1 шаг. Расписываем в общих чертах алгоритм, заменяя комментариями не детализированные фрагменты:
for (int i = 0; i < n; i++) { //i - индекс очередного анализируемого числа
bool find = false;
//проверить, есть ли в массиве ранее такое число
if (find) { //есть
//удалить из массива все такие числа далее после i
}//если нет - ничего не делаем, переходим к следующему
}
Здесь лучше было бы использовать не for, а while. Ведь ограничитель цикла n будет изменяться, а это плохо для цикла for. Обычно for используется тогда, когда число повторений цикла известно заранее. Но в условии было именно for, поэтому оставим так….
2 шаг. Детализируем первый комментарий:
//проверить, есть ли в массиве ранее такое число
for (int j = 0; j < i; j++) { //j - индекс очередного элемента перед i
if (arr[j] == arr[i]) {
find = true;
}
}
3 шаг. Детализируем второй комментарий:
//удалить из массива все такие числа далее после i
for (int k = i + 1; k < n; k++) { //k - индекс очередного элемента после i
if (arr[k] == arr[i]) {//число найдено
//удаляем k-й элемент из массива
k--; //чтобы остаться на месте, когда k будет увеличиваться
n--; //число элементов стало меньше
}
}
4 шаг. Детализируем удаление k-го элемента:
//удаляем k-й элемент из массива
for (int m = k + 1; m < n; m++) {//m - индекс элемента после удаляемого
arr[m - 1] = arr[m]; //следующий подвигаем на место предыдущего
}
5 шаг. Собираем все вместе и – вуаля:
for (int i = 0; i < n; i++) { //i - индекс очередного анализируемого числа
bool find = false;
//проверить, есть ли в массиве ранее такое число
for (int j = 0; j < i; j++) { //j - индекс очередного элемента перед i
if (arr[j] == arr[i]) {
find = true;
}
}
if (find) { //есть
//удалить из массива все такие числа далее после i
for (int k = i + 1; k < n; k++) { //k - индекс элемента после i
if (arr[k] == arr[i]) {//число найдено
//удаляем k-й элемент из массива
for (int m = k + 1; m < n; m++) {//m - после удаляемого
arr[m - 1] = arr[m]; //след. на место предыдущего
}
k--; //чтобы отаться на месте, когда k будет увеличиваться
n--; //число элементов стало меньше
}
}
}//если нет - ничего не делаем, переходим к следующему
}
Пока праздники, балуюсь нейросетями... Пытаюсь создать логотип будущего курса "Java для продолжающих". Ну, Вы знаете - моя фишка - совы. И вот пока что получается... Как Вам? Кстати, одна из них создана по моему фото. Угадаете, какая?
🔥7
Мы с Вами привыкли пользоваться десятичной системой счисления.
В ней десять цифр от 0 до 9. Но “вес” цифры зависит от ее позиции в числе:
235 – это 2 сотни, 3 десятка и 5 единиц.
Количество цифр, которое можно использовать в позиционной системе счисления, называется “основанием”.
Позиции цифр в числе можно мысленно пронумеровать справа налево, начиная с 0. Т.е. крайняя правая позиция имеет номер 0, левее ее – номер 1, еще левее – номер 2, и т.д.
Значение числа получается как сумма произведений цифры на основание системы счисления в степени «номер позиции».
В двоичной системе счисления две цифры: 0 и 1, а основание = 2.
В восьмеричной системе счисления восемь цифр от 0 до 7, а основание = 8.
В шестнадцатеричной системе счисления используются цифры от 0 до 9 и буквы от A до F (т.е. A ->10, B ->11, и т.д. F->15). Основание = 16.
Примеры перевода чисел в десятичную систему счисления показаны на рисунке.
Потренируйтесь сами, переведите в десятичную систему счисления из двоичной:
111 и 10111, из шестнадцатеричной: 27A и 777, из восьмеричной: 33 и 106. Ответы напишите в комментариях…
В ней десять цифр от 0 до 9. Но “вес” цифры зависит от ее позиции в числе:
235 – это 2 сотни, 3 десятка и 5 единиц.
Количество цифр, которое можно использовать в позиционной системе счисления, называется “основанием”.
Позиции цифр в числе можно мысленно пронумеровать справа налево, начиная с 0. Т.е. крайняя правая позиция имеет номер 0, левее ее – номер 1, еще левее – номер 2, и т.д.
Значение числа получается как сумма произведений цифры на основание системы счисления в степени «номер позиции».
В двоичной системе счисления две цифры: 0 и 1, а основание = 2.
В восьмеричной системе счисления восемь цифр от 0 до 7, а основание = 8.
В шестнадцатеричной системе счисления используются цифры от 0 до 9 и буквы от A до F (т.е. A ->10, B ->11, и т.д. F->15). Основание = 16.
Примеры перевода чисел в десятичную систему счисления показаны на рисунке.
Потренируйтесь сами, переведите в десятичную систему счисления из двоичной:
111 и 10111, из шестнадцатеричной: 27A и 777, из восьмеричной: 33 и 106. Ответы напишите в комментариях…
Такой перевод легко сделать, выполняя целочисленное деление на основание другой системы счисления. Если переводим в двоичную систему – делим на 2. В шестнадцатеричную - делим на 16!
Полученное частное опять делим на основание системы счисления, и так до тех пор, пока не получим 0.
После этого все остатки выпишем в обратном порядке:
393 : 16 = 24 (ост 9) 24 : 16 = 1 (ост 8) 1 : 16 = 0 (ост 1) Выписываем остатки в обратном порядке:
393(десятичное) = 189 (шестнадцатеричное)
А теперь потренируйтесь и переведите число 751 из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления!
Полученное частное опять делим на основание системы счисления, и так до тех пор, пока не получим 0.
После этого все остатки выпишем в обратном порядке:
393 : 16 = 24 (ост 9) 24 : 16 = 1 (ост 8) 1 : 16 = 0 (ост 1) Выписываем остатки в обратном порядке:
393(десятичное) = 189 (шестнадцатеричное)
А теперь потренируйтесь и переведите число 751 из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления!
👍2
Я всегда говорила о том, что хотеть быть программистом нужно не ради денег... Это занятие должно сильно нравиться, иначе не преуспеть. Но все же, все же... Эта профессия дает многие возможности, которые в других сферах достичь гораздо сложнее! Позаботиться о детях, родителях, любимых - это ли не достойная цель? Идите к ней! И когда совсем лень и напала прокрастинация - пусть эта мысль Вам поможет...
❤8
Осенью на Степике проводили опрос учеников о их целях. И оказалось, что 13,6% людей учатся потому, что им нравится сам процесс обучения… Я сначала подумала: “Ну не может быть! “ Все-таки это слишком большой процент учеников, а Степик не использует ни геймификацию, ни edutainment (вот Вам новое слово!)
Но потом поймала себя на мысли – а я ведь тоже получаю удовольствие от учебы! И главный фактор этого удовольствия – возможность почувствовать победу… Когда задача, наконец, решилась! Когда то, что было темно и запутанно, стало ясным и простым!
И дело тут не в забавных персонажах, как в JavaRush. И не в игровом контенте, как в обучалках для маленьких детей. Тут главное – “не спугнуть” естественный интерес. А спугнуть его ой как легко: слишком сложная задача, слишком занудный текст, слишком длинное видео… Но и легкие задачи тоже не вариант – скучно долбить одно и то же, как дятел!
Но потом поймала себя на мысли – а я ведь тоже получаю удовольствие от учебы! И главный фактор этого удовольствия – возможность почувствовать победу… Когда задача, наконец, решилась! Когда то, что было темно и запутанно, стало ясным и простым!
И дело тут не в забавных персонажах, как в JavaRush. И не в игровом контенте, как в обучалках для маленьких детей. Тут главное – “не спугнуть” естественный интерес. А спугнуть его ой как легко: слишком сложная задача, слишком занудный текст, слишком длинное видео… Но и легкие задачи тоже не вариант – скучно долбить одно и то же, как дятел!
👍4
Мои книги по Java
1. Берт Бейтс, Кэти Съерра. Изучаем Java (Head First Java) М.: Эксмо, 2022.
Эту книгу лучше читать в бумажном варианте. Плюсы: легкая и интересная, много картинок. Подходит для новичков, особенно для школьников. Минусы: иногда некорректный перевод, неудачные кроссворды. В целом для знакомства – хорошо, но для подробного изучения Java лучше Эккель или Шилдт.
2. Брюс Эккель. Философия Java (Thinking in Java) 4-е изд. – СПб.: Питер, 2019
Моя первая книга по Java. Плюсы: хорошо объясняется ООП, подходит для старта, вообще классика! Минусы: ориентирована на Java 6, есть неточности перевода (читайте оригинал 😊), лучше подходит для тех, кто уже знаком с С++.
3. Герберт Шилдт. Java. Полное руководство. 12-е издание Издательство “Диалектика”, 2022 (есть еще “Руководство для начинающих”).
Данное издание про Java 17. Плюсы: очень подробно. Минусы: слишком подробно! На мой взгляд: лучше прочесть “Руководство для начинающих”, а потом использовать справочник по Java от Oracle.
1. Берт Бейтс, Кэти Съерра. Изучаем Java (Head First Java) М.: Эксмо, 2022.
Эту книгу лучше читать в бумажном варианте. Плюсы: легкая и интересная, много картинок. Подходит для новичков, особенно для школьников. Минусы: иногда некорректный перевод, неудачные кроссворды. В целом для знакомства – хорошо, но для подробного изучения Java лучше Эккель или Шилдт.
2. Брюс Эккель. Философия Java (Thinking in Java) 4-е изд. – СПб.: Питер, 2019
Моя первая книга по Java. Плюсы: хорошо объясняется ООП, подходит для старта, вообще классика! Минусы: ориентирована на Java 6, есть неточности перевода (читайте оригинал 😊), лучше подходит для тех, кто уже знаком с С++.
3. Герберт Шилдт. Java. Полное руководство. 12-е издание Издательство “Диалектика”, 2022 (есть еще “Руководство для начинающих”).
Данное издание про Java 17. Плюсы: очень подробно. Минусы: слишком подробно! На мой взгляд: лучше прочесть “Руководство для начинающих”, а потом использовать справочник по Java от Oracle.
👍5
4. Кей Хорстманн. Библиотека профессионала. Том 1 “Основы” и том 2 “Расширенные средства программирования”. Издательство “Диалектика” , 2020
После изучения основ тем или иным способом – переходим к Хорстманну! Соответствует Java 11. Здесь побольше, чем просто основы: создание графических интерфейсов, работа в сети, формирование профессионального стиля программирования. Эту книгу использую по надобности. Тоже must have!
5. Блинов И.Н., Романчик В.С. Java. Методы программирования. Минск : издательство «Четыре четверти», 2013
Это учебник EPAM по Java. Начинать с него не стоит. Довольно труден для восприятия. Но “шлифануть” и проверить свои знания – самое то! Если Вы прочли Блинова и все поняли – считайте, что Вы готовый junior! А также рекомендую как программу обучения. Минус – ориентировано на Java 7, возможно немного устарело.
Книги по паттернам проектирования
6. Эрик Фримен, Элизабет Фримен, Кэти Сьерра, Берт Бейтс. Паттерны проектирования. Издательство “Питер”, 2021
Легкая и интересная. Обилие иллюстраций. Для начинающих подходит хорошо. Примеры на Java.
7. Э.Гамма, Р.Хелм, Р.Джонсон, Дж.Влиссидес. Паттерны объектно-ориентированного программирования. Издательство “Питер”, 2020
Знаменитая книга “Банды четырех”. Классика. Сложно воспринимается. Примеры на С++.
После изучения основ тем или иным способом – переходим к Хорстманну! Соответствует Java 11. Здесь побольше, чем просто основы: создание графических интерфейсов, работа в сети, формирование профессионального стиля программирования. Эту книгу использую по надобности. Тоже must have!
5. Блинов И.Н., Романчик В.С. Java. Методы программирования. Минск : издательство «Четыре четверти», 2013
Это учебник EPAM по Java. Начинать с него не стоит. Довольно труден для восприятия. Но “шлифануть” и проверить свои знания – самое то! Если Вы прочли Блинова и все поняли – считайте, что Вы готовый junior! А также рекомендую как программу обучения. Минус – ориентировано на Java 7, возможно немного устарело.
Книги по паттернам проектирования
6. Эрик Фримен, Элизабет Фримен, Кэти Сьерра, Берт Бейтс. Паттерны проектирования. Издательство “Питер”, 2021
Легкая и интересная. Обилие иллюстраций. Для начинающих подходит хорошо. Примеры на Java.
7. Э.Гамма, Р.Хелм, Р.Джонсон, Дж.Влиссидес. Паттерны объектно-ориентированного программирования. Издательство “Питер”, 2020
Знаменитая книга “Банды четырех”. Классика. Сложно воспринимается. Примеры на С++.
👍7
Студентам!
Я иногда занимаюсь репетиторством. И вот мне пришлось подтягивать студента одного из Минских вузов. У него были несколько лабораторных, причем в одной лабораторной ему предлагалось описать класс, содержащий информацию о городе. А затем в следующей лабораторной с темой “Наследование классов” предлагалось создать с помощью наследования класс “Отель города”.
Кто мне может сказать, что не так с этим заданием?
Я иногда занимаюсь репетиторством. И вот мне пришлось подтягивать студента одного из Минских вузов. У него были несколько лабораторных, причем в одной лабораторной ему предлагалось описать класс, содержащий информацию о городе. А затем в следующей лабораторной с темой “Наследование классов” предлагалось создать с помощью наследования класс “Отель города”.
Кто мне может сказать, что не так с этим заданием?
Да, все верно ответили Вадим и Никита! Здесь нет отношения наследования. Ведь отель не является частным случаем города! Вот если бы это был, например, мегаполис… Тогда да – можно наследовать от города.
К чему я это все? Как не запутаться студенту, когда приходится изучать наследование на задачах с такой постановкой?
Поэтому я решила для студентов ввести специальную скидку 25% на курс “Объектно-ориентированное программирование на Java”! Пишите в личку, присылайте фото студенческого билета (или другого документа, который подтверждает, что Вы студент).
Все студентам – хороших преподов и адекватных задач!
К чему я это все? Как не запутаться студенту, когда приходится изучать наследование на задачах с такой постановкой?
Поэтому я решила для студентов ввести специальную скидку 25% на курс “Объектно-ориентированное программирование на Java”! Пишите в личку, присылайте фото студенческого билета (или другого документа, который подтверждает, что Вы студент).
Все студентам – хороших преподов и адекватных задач!
👍8
Всяк кулик свое болото хвалит?
Да, это я про выбор первого языка программирования. Каждый преподаватель пытается объяснить, что именно с его любимого языка программирования нужно начинать “входить в IT”. Но если все-таки попытаться быть чуточку объективным?
Тут нужно отметить, что однозначного ответа на этот вопрос нет. И все зависит от того, зачем (и когда) Вы начинаете изучать программирование.
Да, это я про выбор первого языка программирования. Каждый преподаватель пытается объяснить, что именно с его любимого языка программирования нужно начинать “входить в IT”. Но если все-таки попытаться быть чуточку объективным?
Тут нужно отметить, что однозначного ответа на этот вопрос нет. И все зависит от того, зачем (и когда) Вы начинаете изучать программирование.
Ситуация 1. Вы – школьник. И цель обучения – пробудить интерес к программированию. Тогда это однозначно Python или JavaScipt. Здесь все достаточно просто и много готовых библиотек и туториалов, по которым можно сделать что-то прикольное: бота, скрипт для операционной системы, простое оконное приложение…
Человеческий мозг получает удовольствие, когда у него что-то получается, когда он видит результат своего труда (причем чем быстрее, тем лучше). В общем – то, что нужно, чтобы увлечься!
Ситуация 2. Вы – студент 1 курса. И типичная программа Вуза предполагает изучение процедурной части С++… И это не зря. На данном этапе цель обучения – создать хорошую базу, “вставить мозги” будущему программисту.
Ведь Вы когда учитесь вождению, стараетесь учиться на механике, а не на автомате? Так и тут: если разобраться в С++ на вменяемом уровне, то изучить любой другой язык в дальнейшем не составит труда. Вы научитесь понимать то, что находится “под капотом” более современных языков и делает их такими “простыми”. Попробуете отладку программ, какую-никакую оптимизацию кода, разовьете алгоритмическое мышление.
И если Вы студент – то у Вас есть время и стимул работать над базой, которая в дальнейшем даст Вам возможность достигнуть более высокого уровня квалификации чем “быдлокодер” (по некультурному выражению моих студентов).
Тут есть одно “но”. Часто преподаватели Вуза и объектно-ориентированное программирование дают на С++. Не советую. Лучше для ООП переходите на Java или С#. Или на тот язык, который у Вас целевой и подходит для выбранной Вами сферы.
Ситуация 3. Нужно быстро начать зарабатывать деньги. Вы уже потратили годы в Вузе на обучение профессии, которая Вас не удовлетворяет? А теперь хотите войти в IT, но у вас семья и мало времени на раскачку? Тогда есть смысл изучать сразу язык, с которым найти работу проще. Язык распространенный, для которого много вакансий. Но при этом достаточно простой. Тут в помощь различные рейтинги типа TIOBE. Ситуация все время меняется. Но в топах опять же Python, Java и C#.
Ну, или Вы четко знаете, чего хотите. Например, мечтаете программировать под Android. Тогда выбираете Kotlin (можно начать и с Java). Или хотите писать под IOS – выбираете Swift.
Сначала потратьте месяц на выбор языка. Попробуйте несколько языков и ориентируйтесь на свои ощущения. Благо, на Степике полно бесплатных курсов для начинающих. А выбрав – бейте в одну точку. Ведь чтобы программировать на коммерческой основе, нужно знать не только сам язык. А еще нужны различные библиотеки и фреймворки. Каждый язык – это своя инфраструктура. Например, для Java-девелопера часто требуется знание Spring, JUnit, JSF. А также Git, XML, SQL и какие-либо СУБД, и много еще чего. И так для каждого языка.
Изучили ядро языка? Посмотрите объявления о вакансиях и выберите самые популярные требования! Начните разбираться с ними, и так постепенно обретете все необходимые навыки…
Человеческий мозг получает удовольствие, когда у него что-то получается, когда он видит результат своего труда (причем чем быстрее, тем лучше). В общем – то, что нужно, чтобы увлечься!
Ситуация 2. Вы – студент 1 курса. И типичная программа Вуза предполагает изучение процедурной части С++… И это не зря. На данном этапе цель обучения – создать хорошую базу, “вставить мозги” будущему программисту.
Ведь Вы когда учитесь вождению, стараетесь учиться на механике, а не на автомате? Так и тут: если разобраться в С++ на вменяемом уровне, то изучить любой другой язык в дальнейшем не составит труда. Вы научитесь понимать то, что находится “под капотом” более современных языков и делает их такими “простыми”. Попробуете отладку программ, какую-никакую оптимизацию кода, разовьете алгоритмическое мышление.
И если Вы студент – то у Вас есть время и стимул работать над базой, которая в дальнейшем даст Вам возможность достигнуть более высокого уровня квалификации чем “быдлокодер” (по некультурному выражению моих студентов).
Тут есть одно “но”. Часто преподаватели Вуза и объектно-ориентированное программирование дают на С++. Не советую. Лучше для ООП переходите на Java или С#. Или на тот язык, который у Вас целевой и подходит для выбранной Вами сферы.
Ситуация 3. Нужно быстро начать зарабатывать деньги. Вы уже потратили годы в Вузе на обучение профессии, которая Вас не удовлетворяет? А теперь хотите войти в IT, но у вас семья и мало времени на раскачку? Тогда есть смысл изучать сразу язык, с которым найти работу проще. Язык распространенный, для которого много вакансий. Но при этом достаточно простой. Тут в помощь различные рейтинги типа TIOBE. Ситуация все время меняется. Но в топах опять же Python, Java и C#.
Ну, или Вы четко знаете, чего хотите. Например, мечтаете программировать под Android. Тогда выбираете Kotlin (можно начать и с Java). Или хотите писать под IOS – выбираете Swift.
Сначала потратьте месяц на выбор языка. Попробуйте несколько языков и ориентируйтесь на свои ощущения. Благо, на Степике полно бесплатных курсов для начинающих. А выбрав – бейте в одну точку. Ведь чтобы программировать на коммерческой основе, нужно знать не только сам язык. А еще нужны различные библиотеки и фреймворки. Каждый язык – это своя инфраструктура. Например, для Java-девелопера часто требуется знание Spring, JUnit, JSF. А также Git, XML, SQL и какие-либо СУБД, и много еще чего. И так для каждого языка.
Изучили ядро языка? Посмотрите объявления о вакансиях и выберите самые популярные требования! Начните разбираться с ними, и так постепенно обретете все необходимые навыки…
❤11👍3