- Что такое структуры данных?
- По сути, это способы хранить и организовывать данные, чтобы эффективней решать различные задачи. Данные можно представить по-разному. В зависимости от того, что это за данные и что вы собираетесь с ними делать, в одной какой-то ситуации одно представление подойдёт лучше, чем другие, а в другой ситуации применение данного представления будет очень нецелесообразным.
Чтобы подробнее разобраться в структурах данных, я создал этот видео курс, посвященный именно этому! В качестве начала, мы рассмотрим с вами структуру данных СТЕК, а также напишем ее реализацию с использованием языка программирования С.
https://www.youtube.com/watch?v=8CN2v9xr2nQ
- По сути, это способы хранить и организовывать данные, чтобы эффективней решать различные задачи. Данные можно представить по-разному. В зависимости от того, что это за данные и что вы собираетесь с ними делать, в одной какой-то ситуации одно представление подойдёт лучше, чем другие, а в другой ситуации применение данного представления будет очень нецелесообразным.
Чтобы подробнее разобраться в структурах данных, я создал этот видео курс, посвященный именно этому! В качестве начала, мы рассмотрим с вами структуру данных СТЕК, а также напишем ее реализацию с использованием языка программирования С.
https://www.youtube.com/watch?v=8CN2v9xr2nQ
YouTube
Структуры данных: СТЕК
Курсы по программированию: https://clck.ru/37iG2b
Потренироваться проходить собеседования: https://clck.ru/3C2CY3
Присоединиться к моему сообществу: https://boosty.to/vladimir_balun
Консультации:
https://getmentor.dev/mentor/vladimir-balun-191
https://s…
Потренироваться проходить собеседования: https://clck.ru/3C2CY3
Присоединиться к моему сообществу: https://boosty.to/vladimir_balun
Консультации:
https://getmentor.dev/mentor/vladimir-balun-191
https://s…
💡 Как понять какого уровня программист?
Достаточно спорный и холиварный вопрос, по которому в сети существует множество различной информации. В этой информации кто-то говорит одно, другой убеждает совершенно иное, а третий и вовсе не согласен ни с тем и не с другим... В итоге становится совершенно непонятно, кого считать джуном, а кого сеньором.
Не так давно на просторах сети попалась достаточно интересная матрица: https://sijinjoseph.com/programmer-competency-matrix/, которая полноценно освящает этот вопрос.
Верить ли ей или нет - это остается за вами, но по сравнению со всеми другими источниками, она выглядит наиболее полноценной и правдоподобной!
Достаточно спорный и холиварный вопрос, по которому в сети существует множество различной информации. В этой информации кто-то говорит одно, другой убеждает совершенно иное, а третий и вовсе не согласен ни с тем и не с другим... В итоге становится совершенно непонятно, кого считать джуном, а кого сеньором.
Не так давно на просторах сети попалась достаточно интересная матрица: https://sijinjoseph.com/programmer-competency-matrix/, которая полноценно освящает этот вопрос.
Верить ли ей или нет - это остается за вами, но по сравнению со всеми другими источниками, она выглядит наиболее полноценной и правдоподобной!
Всем привет 👋
В эту субботу ровно в 18:00 пройдет бесплатный вебинар со мной и первоклассным IT преподавателем. На нем мы поговорим о том:
▪️что нужно знать новичку в программировании, чтобы устроиться на свою первую работу;
▪️как можно учиться быстрее и эффективнее;
▪️что необходимо знать, чтобы построить успешную карьеру в IT.
Приходи, будет интересно!
https://safecafe.timepad.ru/event/1589133/
В эту субботу ровно в 18:00 пройдет бесплатный вебинар со мной и первоклассным IT преподавателем. На нем мы поговорим о том:
▪️что нужно знать новичку в программировании, чтобы устроиться на свою первую работу;
▪️как можно учиться быстрее и эффективнее;
▪️что необходимо знать, чтобы построить успешную карьеру в IT.
Приходи, будет интересно!
https://safecafe.timepad.ru/event/1589133/
Уже в эту субботу в Instagram 📢
▪️Владимир Балун: https://instagram.com/vladimir_balun_programming?igshid=nmomk1t2fauo
▪️Андрей Кобец: https://instagram.com/kobezzza.channel?igshid=13aemml4m10ey
▪️Владимир Балун: https://instagram.com/vladimir_balun_programming?igshid=nmomk1t2fauo
▪️Андрей Кобец: https://instagram.com/kobezzza.channel?igshid=13aemml4m10ey
Кто-нибудь задумывался о том, что происходит, когда вы нажимаете кнопку «Run» в своей любимой IDE?
⠀
Практика показывает, что мало кто из новичков интересуется этим вопросом, поэтому я решил осветить немного эту тему и рассказать о компиляторах (об интерпретаторах расскажу в одном из других моих постов).
⠀
Прежде, чем говорить о компиляторах, стоит немного разобраться в основах Computer Science. Процессор — самая важная часть компьютера. Он обрабатывает информацию и выполняет команды пользователя, но процессор может разобрать только машинный код — набор 0 и 1, которые записаны в определённом порядке. Почему именно 0 и 1? В процессор поступают электрические сигналы. Сильный сигнал обозначается цифрой 1, а слабый — 0. Набор таких цифр обозначает какую-то команду. Процессор ее распознает и выполняет.
⠀
Программы для первых компьютеров выглядели как огромные наборы 0 и 1. Писать их было долго и сложно, поэтому инженеры стали создавать языки программирования, обозначая команды словами и знаками. Для того, чтобы процессор понимал, какие команды записаны в программе, программисты создали компилятор — программу, которая преобразует программный код в машинный.
⠀
Преобразование программного кода в машинный называется компиляцией. Компиляция только преобразует код. Она не запускает его на исполнение. В этот момент он “статически” (то есть без запуска) транслируется в машинный код. Это сложный процесс, в котором сначала текст программы разбирается на части и анализируется (чаще всего еще и оптимизируется), а затем генерируется код, понятный процессору.
⠀
В конце подведем итог. Компилятор — переводчик между программистом и процессором. Он преобразует текст программы в машинный код, определяет ряд ошибок в программе и оптимизирует ее работу. Выбирая, где компилировать программу, важно помнить о том, что машинный код для процессоров и операционных систем будет разным, и подобрать правильный компилятор.
⠀
Ну что, стоит писать отдельный пост про интерпретаторы?
⠀
Практика показывает, что мало кто из новичков интересуется этим вопросом, поэтому я решил осветить немного эту тему и рассказать о компиляторах (об интерпретаторах расскажу в одном из других моих постов).
⠀
Прежде, чем говорить о компиляторах, стоит немного разобраться в основах Computer Science. Процессор — самая важная часть компьютера. Он обрабатывает информацию и выполняет команды пользователя, но процессор может разобрать только машинный код — набор 0 и 1, которые записаны в определённом порядке. Почему именно 0 и 1? В процессор поступают электрические сигналы. Сильный сигнал обозначается цифрой 1, а слабый — 0. Набор таких цифр обозначает какую-то команду. Процессор ее распознает и выполняет.
⠀
Программы для первых компьютеров выглядели как огромные наборы 0 и 1. Писать их было долго и сложно, поэтому инженеры стали создавать языки программирования, обозначая команды словами и знаками. Для того, чтобы процессор понимал, какие команды записаны в программе, программисты создали компилятор — программу, которая преобразует программный код в машинный.
⠀
Преобразование программного кода в машинный называется компиляцией. Компиляция только преобразует код. Она не запускает его на исполнение. В этот момент он “статически” (то есть без запуска) транслируется в машинный код. Это сложный процесс, в котором сначала текст программы разбирается на части и анализируется (чаще всего еще и оптимизируется), а затем генерируется код, понятный процессору.
⠀
В конце подведем итог. Компилятор — переводчик между программистом и процессором. Он преобразует текст программы в машинный код, определяет ряд ошибок в программе и оптимизирует ее работу. Выбирая, где компилировать программу, важно помнить о том, что машинный код для процессоров и операционных систем будет разным, и подобрать правильный компилятор.
⠀
Ну что, стоит писать отдельный пост про интерпретаторы?
Нужно ли программисту изучать алгоритмы и структуры данных?
⠀
Очень холиварный вопрос, здесь представлено мое личное мнение и я не призываю никого следовать за ним…
⠀
Чтобы лучше разобраться в этом вопросе, предлагаю узнать что из себя представляет компьютерная программа… Программа – это комбинация компьютерных инструкций и данных, позволяющая аппаратному обеспечению вычислительной системы выполнять вычисления или функции управления. Ключевыми словами в этом термине являются «инструкции» и «данные». Исходя из этого, можем немного преобразовать термин в нечто абстрактное, например, что программа представляет собой набор структур данных и последовательность алгоритмов, которые взаимодействуют с этими данными. Также хотел бы отметить то, что сегодня быстродействие и память аппаратного обеспечения вычислительных систем не являются бесконечно большими.
⠀
Получается, что нам нужно писать программы, которые будут работать на машинах с ограниченными ресурсами, используя различные алгоритмы и структуры данных.
⠀
Многие скорее всего зададутся вопросом, в чем же проблема? В ответ на этот вопрос я приведу выдуманный пример: можно написать программу, которая будет выполнять какое-то определенное действие несколько минут, а можно написать программу, которая выполнит тоже самое также корректно за несколько секунд. Быстрая и медленная программы делают одно и тоже, но у них разная скорость. В итоге напрашивается вывод о том, что эффективность программы зависит от того, насколько хорошо мы подобрали алгоритмы и структуры данных для программы, чтобы она наиболее рационально использовала ресурсы машины.
⠀
Если вы пишите программы, нагрузка на которые мала или у которых очень маленькие данные, то вам знания алгоритмов и структур данных попросту не нужны (нужны лишь основы программирования), но если вы хотите писать что-то большое, то эти знания будут вам просто необходимы.
⠀
Очень холиварный вопрос, здесь представлено мое личное мнение и я не призываю никого следовать за ним…
⠀
Чтобы лучше разобраться в этом вопросе, предлагаю узнать что из себя представляет компьютерная программа… Программа – это комбинация компьютерных инструкций и данных, позволяющая аппаратному обеспечению вычислительной системы выполнять вычисления или функции управления. Ключевыми словами в этом термине являются «инструкции» и «данные». Исходя из этого, можем немного преобразовать термин в нечто абстрактное, например, что программа представляет собой набор структур данных и последовательность алгоритмов, которые взаимодействуют с этими данными. Также хотел бы отметить то, что сегодня быстродействие и память аппаратного обеспечения вычислительных систем не являются бесконечно большими.
⠀
Получается, что нам нужно писать программы, которые будут работать на машинах с ограниченными ресурсами, используя различные алгоритмы и структуры данных.
⠀
Многие скорее всего зададутся вопросом, в чем же проблема? В ответ на этот вопрос я приведу выдуманный пример: можно написать программу, которая будет выполнять какое-то определенное действие несколько минут, а можно написать программу, которая выполнит тоже самое также корректно за несколько секунд. Быстрая и медленная программы делают одно и тоже, но у них разная скорость. В итоге напрашивается вывод о том, что эффективность программы зависит от того, насколько хорошо мы подобрали алгоритмы и структуры данных для программы, чтобы она наиболее рационально использовала ресурсы машины.
⠀
Если вы пишите программы, нагрузка на которые мала или у которых очень маленькие данные, то вам знания алгоритмов и структур данных попросту не нужны (нужны лишь основы программирования), но если вы хотите писать что-то большое, то эти знания будут вам просто необходимы.
У меня есть свой определенный ТОП книг по программированию, которые я советую прочитать абсолютно каждому программисту (независимо от его сферы разработки):
⠀
▪️Стив Макконнелл – «Совершенный код»
▪️Мартин Роберт – «Чистый код»
▪️Дейв Томас и Энди Хант – «Программист прагматик. Путь от
подмастерья к мастеру»
▪️Алан Тьюринг – «Вычислительные машины и разум»
▪️Кормен Томас – «Алгоритмы: построение и анализ»
▪️Эндрю Таненбаум – «Современные операционные системы»
▪️Эндрю Таненбаум – «Архитектура компьютера»
▪️Эндрю Таненбаум – «Компьютерные сети»
⠀
Прочтение этих книг займет довольно много времени, но после их прочтения, вы будете совершенно иначе мыслить и писать намного более качественный код, в этом я вас уверяю!
⠀
А кто из вас еще посоветует какие-нибудь интересные книги по программированию?
⠀
▪️Стив Макконнелл – «Совершенный код»
▪️Мартин Роберт – «Чистый код»
▪️Дейв Томас и Энди Хант – «Программист прагматик. Путь от
подмастерья к мастеру»
▪️Алан Тьюринг – «Вычислительные машины и разум»
▪️Кормен Томас – «Алгоритмы: построение и анализ»
▪️Эндрю Таненбаум – «Современные операционные системы»
▪️Эндрю Таненбаум – «Архитектура компьютера»
▪️Эндрю Таненбаум – «Компьютерные сети»
⠀
Прочтение этих книг займет довольно много времени, но после их прочтения, вы будете совершенно иначе мыслить и писать намного более качественный код, в этом я вас уверяю!
⠀
А кто из вас еще посоветует какие-нибудь интересные книги по программированию?
Меня многие просили рассказать о структурах данных, которые нужно освоить для устройства на работу Junior разработчиком… Вот решил, наконец, написать пост об этом. Предупреждаю сразу, что тема достаточно холиварная, поэтому здесь будет описано только мое личное мнение (никого не призываю следовать за ним).
⠀
Необходимый минимум для Junior разработчика:
- массив
- связный список
- стек / очередь
- бинарное дерево / куча
- хэш таблица
⠀
Опять-таки… Я советую всем реализовывать их самостоятельно (т.е. переписывать, писать велосипеды - называйте как угодно это), а не просто прочитать статью о какой-то структуре данных и подумать о том, что вы разобрались с этим и можно двигаться дальше. Не спорю, может кому-то и удается так учить программирование, но мне кажется таких людей очень мало!
⠀
Программистам постарше желательно знать немного больше:
- графы с различными видами хранения в памяти
- самобалансирующиеся деревья (AVL, красно-черные и так далее)
- структуры для работы с пространственными данными (R деревья, K-d деревья и так далее)
⠀
Конечно же, это не все, еще есть много различных «подвидов» структур данных (например, интервальные хэш-таблицы, XOR связные списки и так далее), но в этом посте их не будет…
⠀
Необходимый минимум для Junior разработчика:
- массив
- связный список
- стек / очередь
- бинарное дерево / куча
- хэш таблица
⠀
Опять-таки… Я советую всем реализовывать их самостоятельно (т.е. переписывать, писать велосипеды - называйте как угодно это), а не просто прочитать статью о какой-то структуре данных и подумать о том, что вы разобрались с этим и можно двигаться дальше. Не спорю, может кому-то и удается так учить программирование, но мне кажется таких людей очень мало!
⠀
Программистам постарше желательно знать немного больше:
- графы с различными видами хранения в памяти
- самобалансирующиеся деревья (AVL, красно-черные и так далее)
- структуры для работы с пространственными данными (R деревья, K-d деревья и так далее)
⠀
Конечно же, это не все, еще есть много различных «подвидов» структур данных (например, интервальные хэш-таблицы, XOR связные списки и так далее), но в этом посте их не будет…
Что такое soft skills и как их развить?
⠀
Soft skills в переводе с английского — «гибкие навыки». Они не связаны с конкретной профессией, но помогают хорошо выполнять свою работу и важны для карьеры. Сейчас почти никто не работает в одиночку. Каждый работник общается с коллегами, а иногда ещё и с клиентами, партнёрами. Он должен уметь договариваться с ними, аргументировать свою позицию и доносить её до других людей.
⠀
Гибких навыков много, условно все soft skills можно разделить на несколько групп:
⃣ КОММУНИКАТИВНЫЕ НАВЫКИ - умение договариваться с другими людьми, работать в команде, аргументировать свою позицию. Сюда же относятся лидерские качества и эмоциональный интеллект — способность понимать чужие чувства и контролировать свои.
⃣ НАВЫКИ САМООРГАНИЗАЦИИ - умение эффективно организовать свою работу и грамотно распоряжаться временем.
⃣ КРЕАТИВНЫЕ НАВЫКИ - способность нестандартно мыслить сейчас нужна не только дизайнерам и представителям прочих творческих профессий.
⃣ УМЕНИЕ РАБОТАТЬ С ИНФОРМАЦИЕЙ - искать её, анализировать, делать выводы.
⃣ СТРЕССОУСТОЙЧИВОСТЬ- серьёзные изменения — это стресс, а когда их много, способность справляться с ними и сохранять работоспособность особенно важна.
⠀
Конечно же, эти навыки, как и любые другие, можно развить. Есть несколько способов:
▪на специальных курсах и тренингах.;
▪с помощью книг, посвящённых гибким навыкам, так как их издано уже довольно много;
▪развивать гибкие навыки, опираясь на обратную связь от других людей, например, ваших коллег по работе, членов семьи.
⠀
Soft skills в переводе с английского — «гибкие навыки». Они не связаны с конкретной профессией, но помогают хорошо выполнять свою работу и важны для карьеры. Сейчас почти никто не работает в одиночку. Каждый работник общается с коллегами, а иногда ещё и с клиентами, партнёрами. Он должен уметь договариваться с ними, аргументировать свою позицию и доносить её до других людей.
⠀
Гибких навыков много, условно все soft skills можно разделить на несколько групп:
⃣ КОММУНИКАТИВНЫЕ НАВЫКИ - умение договариваться с другими людьми, работать в команде, аргументировать свою позицию. Сюда же относятся лидерские качества и эмоциональный интеллект — способность понимать чужие чувства и контролировать свои.
⃣ НАВЫКИ САМООРГАНИЗАЦИИ - умение эффективно организовать свою работу и грамотно распоряжаться временем.
⃣ КРЕАТИВНЫЕ НАВЫКИ - способность нестандартно мыслить сейчас нужна не только дизайнерам и представителям прочих творческих профессий.
⃣ УМЕНИЕ РАБОТАТЬ С ИНФОРМАЦИЕЙ - искать её, анализировать, делать выводы.
⃣ СТРЕССОУСТОЙЧИВОСТЬ- серьёзные изменения — это стресс, а когда их много, способность справляться с ними и сохранять работоспособность особенно важна.
⠀
Конечно же, эти навыки, как и любые другие, можно развить. Есть несколько способов:
▪на специальных курсах и тренингах.;
▪с помощью книг, посвящённых гибким навыкам, так как их издано уже довольно много;
▪развивать гибкие навыки, опираясь на обратную связь от других людей, например, ваших коллег по работе, членов семьи.
Основы CS или как научиться писать сложные программы?
⠀
Я думаю многим новичкам в программировании знакома такая проблема, что, выучив синтаксис какого-либо определенного языка программирования, не получается написать программу сложнее, чем калькулятор…
⠀
В прошлом я также, как и вы не знал ответа на этот вопрос.
⠀
Сейчас кое-что изменилось и теперь я понимаю, что нужно делать - необходимо изучать основы Computer Science! В принципе на этом уже можно было закончить…
⠀
Но постараюсь объяснить это поподробнее на пальцах:
▪️изучив поверхностно компьютерные сети и подробно прикладной уровень TCP/IP, вы сможете писать какие-то простенькие WEB приложения;
▪️изучив основы операционных систем, вы сможете программировать несложные системные программы, например файловый менеджер;
▪️изучив базы данных, вы сможете писать какие-либо интересные приложения для учета каких-либо вещей или предметов;
▪️продолжать можно долго, поэтому ограничимся этими примерами.
⠀
В конце хотел бы добавить, что когда основ становится много и эти основы из различных сфер – то как раз именно в этот момент вы сможете писать какие-либо сложные комплексные программы.
⠀
P.S. я убежден, что только так можно перешагнуть порог невозможности программирования чего-то сложнее, чем калькулятор.
⠀
Я думаю многим новичкам в программировании знакома такая проблема, что, выучив синтаксис какого-либо определенного языка программирования, не получается написать программу сложнее, чем калькулятор…
⠀
В прошлом я также, как и вы не знал ответа на этот вопрос.
⠀
Сейчас кое-что изменилось и теперь я понимаю, что нужно делать - необходимо изучать основы Computer Science! В принципе на этом уже можно было закончить…
⠀
Но постараюсь объяснить это поподробнее на пальцах:
▪️изучив поверхностно компьютерные сети и подробно прикладной уровень TCP/IP, вы сможете писать какие-то простенькие WEB приложения;
▪️изучив основы операционных систем, вы сможете программировать несложные системные программы, например файловый менеджер;
▪️изучив базы данных, вы сможете писать какие-либо интересные приложения для учета каких-либо вещей или предметов;
▪️продолжать можно долго, поэтому ограничимся этими примерами.
⠀
В конце хотел бы добавить, что когда основ становится много и эти основы из различных сфер – то как раз именно в этот момент вы сможете писать какие-либо сложные комплексные программы.
⠀
P.S. я убежден, что только так можно перешагнуть порог невозможности программирования чего-то сложнее, чем калькулятор.