Владимир Балун
5.44K subscribers
290 photos
44 videos
317 links
Канал Балун Владимира — C++/Go разработчика из BigTech. Здесь вы найдете глубокие знания и материалы по программированию, личные истории и лайв-контент.

Сотрудничество: @vladimir_balun
Download Telegram
​​Всем привет 👋

В эту субботу ровно в 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
​​Кто-нибудь задумывался о том, что происходит, когда вы нажимаете кнопку «Run» в своей любимой IDE?

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

Прежде, чем говорить о компиляторах, стоит немного разобраться в основах Computer Science. Процессор — самая важная часть компьютера. Он обрабатывает информацию и выполняет команды пользователя, но процессор может разобрать только машинный код — набор 0 и 1, которые записаны в определённом порядке. Почему именно 0 и 1? В процессор поступают электрические сигналы. Сильный сигнал обозначается цифрой 1, а слабый — 0. Набор таких цифр обозначает какую-то команду. Процессор ее распознает и выполняет.

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

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

В конце подведем итог. Компилятор — переводчик между программистом и процессором. Он преобразует текст программы в машинный код, определяет ряд ошибок в программе и оптимизирует ее работу. Выбирая, где компилировать программу, важно помнить о том, что машинный код для процессоров и операционных систем будет разным, и подобрать правильный компилятор.

Ну что, стоит писать отдельный пост про интерпретаторы?
​​Нужно ли программисту изучать алгоритмы и структуры данных?

Очень холиварный вопрос, здесь представлено мое личное мнение и я не призываю никого следовать за ним…

Чтобы лучше разобраться в этом вопросе, предлагаю узнать что из себя представляет компьютерная программа… Программа – это комбинация компьютерных инструкций и данных, позволяющая аппаратному обеспечению вычислительной системы выполнять вычисления или функции управления. Ключевыми словами в этом термине являются «инструкции» и «данные». Исходя из этого, можем немного преобразовать термин в нечто абстрактное, например, что программа представляет собой набор структур данных и последовательность алгоритмов, которые взаимодействуют с этими данными. Также хотел бы отметить то, что сегодня быстродействие и память аппаратного обеспечения вычислительных систем не являются бесконечно большими.

Получается, что нам нужно писать программы, которые будут работать на машинах с ограниченными ресурсами, используя различные алгоритмы и структуры данных.

Многие скорее всего зададутся вопросом, в чем же проблема? В ответ на этот вопрос я приведу выдуманный пример: можно написать программу, которая будет выполнять какое-то определенное действие несколько минут, а можно написать программу, которая выполнит тоже самое также корректно за несколько секунд. Быстрая и медленная программы делают одно и тоже, но у них разная скорость. В итоге напрашивается вывод о том, что эффективность программы зависит от того, насколько хорошо мы подобрали алгоритмы и структуры данных для программы, чтобы она наиболее рационально использовала ресурсы машины.

Если вы пишите программы, нагрузка на которые мала или у которых очень маленькие данные, то вам знания алгоритмов и структур данных попросту не нужны (нужны лишь основы программирования), но если вы хотите писать что-то большое, то эти знания будут вам просто необходимы.
​​У меня есть свой определенный ТОП книг по программированию, которые я советую прочитать абсолютно каждому программисту (независимо от его сферы разработки):

▪️Стив Макконнелл – «Совершенный код»
▪️Мартин Роберт – «Чистый код»
▪️Дейв Томас и Энди Хант – «Программист прагматик. Путь от
подмастерья к мастеру»
▪️Алан Тьюринг – «Вычислительные машины и разум»
▪️Кормен Томас – «Алгоритмы: построение и анализ»
▪️Эндрю Таненбаум – «Современные операционные системы»
▪️Эндрю Таненбаум – «Архитектура компьютера»
▪️Эндрю Таненбаум – «Компьютерные сети»

Прочтение этих книг займет довольно много времени, но после их прочтения, вы будете совершенно иначе мыслить и писать намного более качественный код, в этом я вас уверяю!

А кто из вас еще посоветует какие-нибудь интересные книги по программированию?
​​Меня многие просили рассказать о структурах данных, которые нужно освоить для устройства на работу Junior разработчиком… Вот решил, наконец, написать пост об этом. Предупреждаю сразу, что тема достаточно холиварная, поэтому здесь будет описано только мое личное мнение (никого не призываю следовать за ним).

Необходимый минимум для Junior разработчика:
- массив
- связный список
- стек / очередь
- бинарное дерево / куча
- хэш таблица

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

Программистам постарше желательно знать немного больше:
- графы с различными видами хранения в памяти
- самобалансирующиеся деревья (AVL, красно-черные и так далее)
- структуры для работы с пространственными данными (R деревья, K-d деревья и так далее)

Конечно же, это не все, еще есть много различных «подвидов» структур данных (например, интервальные хэш-таблицы, XOR связные списки и так далее), но в этом посте их не будет…
​​Что такое soft skills и как их развить?

Soft skills в переводе с английского — «гибкие навыки». Они не связаны с конкретной профессией, но помогают хорошо выполнять свою работу и важны для карьеры. Сейчас почти никто не работает в одиночку. Каждый работник общается с коллегами, а иногда ещё и с клиентами, партнёрами. Он должен уметь договариваться с ними, аргументировать свою позицию и доносить её до других людей.

Гибких навыков много, условно все soft skills можно разделить на несколько групп:
⃣ КОММУНИКАТИВНЫЕ НАВЫКИ - умение договариваться с другими людьми, работать в команде, аргументировать свою позицию. Сюда же относятся лидерские качества и эмоциональный интеллект — способность понимать чужие чувства и контролировать свои.
⃣ НАВЫКИ САМООРГАНИЗАЦИИ - умение эффективно организовать свою работу и грамотно распоряжаться временем.
⃣ КРЕАТИВНЫЕ НАВЫКИ - способность нестандартно мыслить сейчас нужна не только дизайнерам и представителям прочих творческих профессий.
⃣ УМЕНИЕ РАБОТАТЬ С ИНФОРМАЦИЕЙ - искать её, анализировать, делать выводы.
⃣ СТРЕССОУСТОЙЧИВОСТЬ- серьёзные изменения — это стресс, а когда их много, способность справляться с ними и сохранять работоспособность особенно важна.

Конечно же, эти навыки, как и любые другие, можно развить. Есть несколько способов:
на специальных курсах и тренингах.;
с помощью книг, посвящённых гибким навыкам, так как их издано уже довольно много;
развивать гибкие навыки, опираясь на обратную связь от других людей, например, ваших коллег по работе, членов семьи.
​​Основы CS или как научиться писать сложные программы?

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

В прошлом я также, как и вы не знал ответа на этот вопрос.

Сейчас кое-что изменилось и теперь я понимаю, что нужно делать - необходимо изучать основы Computer Science! В принципе на этом уже можно было закончить…

Но постараюсь объяснить это поподробнее на пальцах:
▪️изучив поверхностно компьютерные сети и подробно прикладной уровень TCP/IP, вы сможете писать какие-то простенькие WEB приложения;
▪️изучив основы операционных систем, вы сможете программировать несложные системные программы, например файловый менеджер;
▪️изучив базы данных, вы сможете писать какие-либо интересные приложения для учета каких-либо вещей или предметов;
▪️продолжать можно долго, поэтому ограничимся этими примерами.

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

P.S. я убежден, что только так можно перешагнуть порог невозможности программирования чего-то сложнее, чем калькулятор.
​​Воскресенье 15:00 - Прямой эфир в Instagram

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

Приходи, будет интересно:
https://www.instagram.com/vladimir_balun_programming/
​​Словарь программистов или как быть с ними на одном языке?

АПИ — описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой.
АПРУВ — подтверждение, согласие, одобрение чего-либо.
АУТСОРС — передача компанией выполнения определенной работы специалистам вне штата (фрилансерам или работникам других компаний).
БАГ — ошибка в программе, из-за которой результаты выполнения программы неправильные.
БЭКАП — резервное копирование
ДАМП — файл с полной или частичной копией содержимого памяти компьютера или базы данных в момент создания данного файла.
ДЕДЛАЙН — крайний срок выполнения или сдачи проекта/задания/работы.
ДЕМО — демонстрационная версия чего-либо, как правило, с урезанным функционалом или с пробным периодом использования.
ДЕПЛОЙ — это развертывание (перенос) программного обеспечения на сервер или устройство, где оно должно функционировать.
ИНСАЙТ — внезапная догадка, озарение или прозрение.
КЕЙС — реальная ситуация (или случай), которая произошла с автором.
ЛЕГАСИ — устаревший чужой код, написанный очень давно, и с которым сейчас приходится иметь дело.
ЛИБА — библиотека.
МИТАП — встреча специалистов определенной сферы деятельности для обмена опытом.
МИТИНГ — собрание людей.
ОПЕНСОРС — программное обеспечение с открытым исходным кодом.
ОТЛАДКА — этап в разработке программного обеспечения, на котором выполняется поиск и исправление ошибок.
ОФФЕР — предложение о работе. Как правило, в нем указываются должность, должностные обязанности и зарплата.
ПАТЧ — дополнение или обновление, которое исправляет ошибки/баги/глюки. Применение патча к программе называется «пропатчиванием».
РЕПА — репозиторий, хранилище данных.
ТУЛЗА — вспомогательное программное обеспечение, предназначенное для выполнения специфических задач.
​​Так ли необходимо изучать Английский?

На просторах Рунета до сих пор ведутся споры о необходимости знания английского в сфере программирования. Одни утверждают, что без него неплохо обходятся, другие приводят разумные аргументы в пользу владения английским. Лично я хочу поделиться с вами подборкой того, что дает знание английского языка:

▪️ВСЯ ФУНДАМЕНТАЛЬНАЯ СПЕЦИАЛИЗИРОВАННАЯ ЛИТЕРАТУРА НАПИСАНА, В ПЕРВУЮ ОЧЕРЕДЬ, НА АНГЛИЙСКОМ
Далеко не все было переведено на русский. Еще меньше материала переведено корректно.

▪️В РАБОТЕ ЧАСТО ВОЗНИКАЮТ ТРУДНОСТИ
Иногда приходится искать решение проблемы во всемирной паутине, и часто бывает так, что нужной информации в Рунете просто не публиковалось. А вот в англоязычной среде можно найти практически любую необходимую сведения, особенно по теме IT.

▪️ВСЕ КРУПНЕЙШИЕ IT КОМПАНИИ МИРА БАЗИРУЮТСЯ В США(GOOGLE, APPLE, MICROSOFT ETC.)
Если вы не владеете языком, то построить карьеру в одной из крупнейших мировых IT-корпораций у вас не выйдет.

▪️ПРОГРАММИСТАМ НЕРЕДКО ПРИХОДИТСЯ РАБОТАТЬ С ЗАРУБЕЖНЫМИ ЗАКАЗЧИКАМИ
Часто коммуникации происходит на английском – и первичные переговоры, и составление технического задания, и его согласование, и взаимодействие во время реализации проекта.

▪️БОЛЬШИНСТВО МАСТЕР-КЛАССОВ, СЕМИНАРОВ И ВЕБИНАРОВ ОТ ИЗВЕСТНЕЙШИХ ГУРУ В СФЕРЕ IT ПРОХОДЯТ НА АНГЛИЙСКОМ
Не секрет, что посещение таких мероприятий чрезвычайно полезно для профессионального и личностного роста, а также для вдохновения.

В итоге заключение от меня следующее:
1️⃣ Можно быть просто программистом даже не зная английского языка
2️⃣ Чтобы добиться профессионального роста нужно знать английским
3️⃣ Чтобы стать действительно сильным специалистом необходимо свободное владение английским языком + знание отраслевой лексики
​​Какую программу написать?

Я считаю, что у новичком в программировании существует два наиболее популярных вопроса:
1️⃣ Какой язык программирования выбрать?
2️⃣ Какую программу написать?

Сейчас поговорим о моих личных проектах, а также о том, что я писал во время обучения и работы программистом. Все нижеперечисленные проекты можно найти у меня на GitHub (VladimirBalun):

▪️RacingWorld - по праву считается моим самым лучшим проектом, благодаря ему меня приняли на одну из моих прошлых работ даже без тестового задания (хотя всем остальным приходилось его выполнять). Идея этого проекта заключалась в создании гоночный 3D онлайн игры с генерацией мира из карт OpenStreetMap. Писал я этот проект, когда уже работал программистом. При написании этой игры не преследовал цель разбогатеть, а просто хотел в деталях познакомиться с процессом разработки игр. Движки и сторонние библиотеки, конечно же, не использовал, все писал сам руками, начиная от математики, заканчивая рендерором и работой с сетью.

▪️Trainter - написал этот проект совсем недавно, уже работая в Тинькофф и понимая, как нужно писать WEB приложения. Идея проекта заключалась в написании доски объявлений для тренингов, курсов, семинаров по различным темам (некое подобие Booking или Avito). Написал быстренько прототип на PHP за пару месяцев и запустил проект в тест, чтобы проверить будет ли на него спрос. Но итоги теста показали, что нет достаточного спроса, да и плюс ко всему обнаружился аналог на рынке (существует на рынке более 5 лет), который превосходит мой проект в несколько раз.

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

А писал ли ты какие-нибудь программы?
​​Так ли необходим ментор?

У каждого из нас есть менторы (или наставники), причем с самого раннего возраста. Это могут быть и родители, и учителя в школе, и тренеры в спортивной секции. Арнольд Шварценеггер в предисловии к книге «Tools of Titans» написал:

💭 “…it is not true that I am self-made. Like everyone, to get to where I am, I stood on the shoulders of giants. My life was built on a foundation of parents, coaches, and teachers; of kind souls who lent couches or gym back rooms where I could sleep; of mentors who shared wisdom and advice; of idols who motivated me from the pages of magazines (and, as my life grew, from personal interaction).”

Наша карьера, наши успехи, да и жизнь в целом зависят от менторов, которых нам посчастливилось встретить. Мир IT не исключение. Мне повезло: на протяжении всей моей карьеры у меня были менторы. Если не самой карьерой, то, как минимум темпами её развития я обязан именно им.

Чем же ментор может помочь преодолеть сложный начальный этап?

1️⃣ ОТВЕТЫ НА ВОПРОСЫ
Пожалуй, одна из самых важных составляющих — это ответы на вопросы. Чем меньше у человека опыта, тем больше у него вопросов и тем сложнее эти вопросы оформить в правильный поисковый запрос.

2️⃣ ПРОВЕРКА КОДА
Другая немаловажная задача хорошего ментора — это проверка кода ученика (code review). Вместо предложения готового решения ментор может подталкивать в нужном направлении и отказываться принимать код до тех пор, пока он не будет «идеальным».

3️⃣ КОРРЕКТИРОВКА ЦЕЛИ И ПРОГРАММЫ ОБУЧЕНИЯ
Ответы на вопросы и проверка кода — это, скорее, рутина менторской деятельности и далеко не то, что нужно вам в первую очередь. Вам нужна индивидуальная программа обучения, подходящая только вам. Что, и в каком порядке учить, почему именно это, а не другое и т.д. И здесь преимущества менторства раскрываются на 100%. Единственное, что потребуется от вас — это понимание своей цели, а задача ментора — сделать всё, чтобы вы её достигли.

Пользовался ли ты когда-нибудь услугами ментора, если да то, что из этого вышло?
​​Основные ошибки в обучении

Собрал основные ошибки начинающих программистов и решил поделиться этим списком с вами:

▪️ЗУБРЕЖКА ФУНКЦИЙ
Иногда люди думают, что главная их задача - это изучить сам язык программирования. Из этого заблуждения, кстати, вытекает еще одна ошибка. Тратить бесконечно много времени на попытки «с дивана» выяснить какой язык лучше. На что лучше потратить это время? На изучение фундаментальных вещей, которые обязательно вам пригодятся, и которые должен знать любой профессиональный программист. Принципы работы операционных систем, структуры данных, алгоритмы, математика и т.п. Поверьте, все это вам очень пригодится и сыграет на руку при трудоустройстве и сильно ускорит ваш рост.

▪️ВИДЕОКУРСЫ
Где брать знания? Кроме очевидного - Youtube, Coursera, Stepic, Openedu, курсы Хекслета, стоит начать активно читать книги (бумажные или электронные - разницы нет). Видеокурсы все больше движутся в направлении развлечений, народ хочет зрелищ. Скучать никто не хочет. Людей приучают развлекаться, и они постепенно привыкают. А ведь обучение по книге гораздо более эффективно, потому что информация в книге сконцентрирована. Не зря говорят: «У бедных людей большие телевизоры, а у богатых большие библиотеки». Поэтому, читайте больше.

▪️ПЕРФЕКЦИОНИЗМ
Некоторые хотят выучить все идеально, даже и не приступая к реальным проектам. Чтобы не дай бог где-то не ошибиться, не показать себя глупым. Грубо говоря, хотят стать senior программистом, еще перед трудоустройством. Им всегда кажется, что они знают мало, нужно еще, еще, еще. Еще чуть-чуть подготовиться, тогда можно и сходить на собеседование. Мне кажется, здесь основной страх один - показаться плохим(неумелым) перед какими-то людьми, мнение которых для тебя важно. Реальность же такова, что практически невозможно к чему-то подготовиться «с дивана». Стоит принять для себя, что неудачи это просто опыт. Не бойтесь показаться глупыми. Не бойтесь ошибок, не бойтесь отказов, не бойтесь неудач - это путь к лучшей жизни.
​​Как быстро стать программистом?

Многие спрашивают о том, как научиться программировать и найти свою первую работу в IT. Расскажу о 5 фактах, которые ярче всего описывают мой процесс обучения:

1️⃣ У меня всегда в телефоне были книги по программированию. Когда я стоял в очереди, ждал чего-то или просто ехал в автобусе – я постоянно читал их.

2️⃣ В то время, как учился в колледже, мне нужно было встать в 7 утра, чтобы успеть на первую пару. Я мог проснуться на час раньше, чтобы посмотреть какое-то видео по программированию или почитать книжку.

3️⃣ В машине и когда гулял по улице, я часто вместо музыки включал английские подкасты, чтобы как можно скорее выучить это язык.

4️⃣ На парах, когда все могли сидеть страдать херней или залипать в телефонах, я открывал IDE и решал какие-либо алгоритмы.

5️⃣ После работы я никогда не приходил и не падал на диван перед телевизором (не смотрю его уже на протяжении 5 лет, скажу больше - его даже нет у меня последних 2 года). Я всегда включал компьютер и изучал что-то новое для себя.

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

Мне все это нравилось, так как это превратилось в мое хобби, и я не хотел терять ни минуты свободного времени. Благодаря этому я за два года смог научиться программировать и найти свою первую работу.

Этим нужно гореть, это нужно любить, а не идти из-за «неплохой» зарплаты. Зарабатывать хорошо ты начнешь только тогда, когда будет опыт и будешь уже что-то уметь… На своей первой работе я работал за копейки и был рад этому, мне было наплевать на зарплату, мне было важно только то, что я занимаюсь своим любимым делом!

Может и ты поделишься своим процессом обучения?