Заметки Техдира
541 subscribers
20 photos
24 links
Мир разработки глазами технического директора. Рассказываю о глобальных трендах в мире IT и делюсь личным опытом

По поводу сотрудничества пишите: @Tehjoy

Сайт: https://ag-soft.ru
Download Telegram
Простота прекрасна

А тема сегодняшнего поста: история языка С

Язык С - это прадед C++, C#, Java а также всех других Си-подобных языков. Из всех языков, Си – самый легендарный и до изящности простой, именно он стал основой для многих, чуть ли не всех, языков программирования. Это, я бы сказал, ящик пандоры, который открыли Керниган и Ритчи.

Мощность языка Си одна из самых больших (больше только у Ассемблера), он краток и лаконичен. Единственное, что может сделать Ассемблер и не может сделать Си – это перевод процессора в защищенный режим.

Первая книга (#моялюбимая) о языке Си была написана Керниганом и Ритчи в 1978 году и вышла в свет под названием «Язык программирования Си». Позже именно она стала неофициальным стандартом Си.

Сам Ритчи наиболее известен как создатель языка программирования C и ключевой разработчик операционной системы Unix. Я лично считаю его одним из самых великих программистов в мире. Он
Какова сложность алгоритма пирамидальной сортировки?
Anonymous Quiz
2%
O(n)
54%
O(log n)
4%
O(1)
40%
O(n log n)
​​Знания математики в программировании. Зачем?

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

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

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

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

Для работы с интерфейсами нужны не только базовые школьные знания математики, но и основы математического анализа, которые обычно дают на первых курсах ВУЗа. Есть также смежные с программированием сферы: прикладная математика, которая, например, позволяет посчитать сопротивление лобового стекла автомобиля и т. д.

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

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

Как видите, математика нужна каждому, кто хочет заниматься программированием. Кому-то она понадобится в большей степени, кому то в меньшей, но без нее так или иначе не обойтись
fn main() {
println!("Hello, world!");
}
Какой язык программирования в примере выше?
Anonymous Quiz
52%
Rust
36%
Go
6%
Ruby
6%
Kotlin
​​Agile — это итеративный подход к управлению проектами и разработке программного обеспечения, который помогает командам быстрее и с меньшими проблемами поставлять ценность клиентам.

Agile-подходы используют разработчики Google, Netflix, Spotify и других компаний. В России об «agile-трансформации» также объявил «Сбер».

К заказной разработке, по моему опыту, Agile относительно неприменим. Сейчас я расскажу, почему.

Есть некий продукт, я бы даже сказал “идея продукта”, к примеру: нужно доставить человека из одного города в другой. Вот для решения задачи сначала сделают скейтборд, на котором он таки доберется до другого города, затем скейтборд апгрейднут до велика, а далее - до мотоцикла. Так появился самолет.

Agile - это про постепенную разработку и реализацию проекта, идея которого состоит в том, чтобы прийти к самолету в поэтапно. А заказная разработка - это “сделай мне самолет, сразу”, вот поэтому аджайл и заказ - штука не совсем совместимая.
Какова сложность алгоритма, описанного псевдокодом выше?
Anonymous Quiz
29%
O(n)
32%
O(n^2)
35%
O(n log n)
4%
O(log n)
​​Что такое паттерны ООП ?

Паттерн (от англ. «pattern» - шаблон) – алгоритм действий, который можно применить при решении той или иной задачи. Паттерны ООП – это набор рекомендаций, который придумали опытные программисты и который не накладывает на программиста никаких обязательств.

Рассмотрим паттерн «singleton» (одиночка) - описание какого-то класса в системе, который будет создан всего один раз. Набор правил, которых нужно придерживаться и которые обязывают программу создавать только один экземпляр.

Простым языком: пусть у нас есть некое множество овец. Определенные внешние факторы требуют, чтобы у этих овец был только один пастух. Если же пастухов становится 2 и более, овцы теряются. В данном контексте singleton – это пастух. Это значит, что система, которая создается программистом, должна обеспечить уникальность пастуха и не должна позволять другим программистам ставить еще одного или более пастухов для выпаса овец. Таким образом, программист будет обращаться все время к одному пастуху.

Паттерны объекто-ориентированного программирования важны с точки зрения построения архитектуры приложений. Данные рекомендации сильно помогают в работе программистам.
Section Header
+ name := HELLO_WORLD;
Section Public
- main <-
(
"Hello world\n".print;
);
Какой язык программирования был использован выше?
Anonymous Quiz
33%
Scala
8%
Lisp
56%
Lisaac
4%
Smalltalk
​​​​Что такое паттерны ООП ?

Паттерн (от англ. «pattern» - шаблон) – алгоритм действий, который можно применить при решении той или иной задачи. Паттерны ООП – это набор рекомендаций, который придумали опытные программисты и который не накладывает на программиста никаких обязательств.

Рассмотрим паттерн «singleton» (одиночка) - описание какого-то класса в системе, который будет создан всего один раз. Набор правил, которых нужно придерживаться и которые обязывают программу создавать только один экземпляр.

Простым языком: пусть у нас есть некое множество овец. Определенные внешние факторы требуют, чтобы у этих овец был только один пастух. Если же пастухов становится 2 и более, овцы теряются. В данном контексте singleton – это пастух. Это значит, что система, которая создается программистом, должна обеспечить уникальность пастуха и не должна позволять другим программистам ставить еще одного или более пастухов для выпаса овец. Таким образом, программист будет обращаться все время к одному пастуху.

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

PS: данный пост уже выходил на моем канале. На данный момент мы с командой изменили дизайн и движемся в новом направлении и начать решили именно с поста про ООП и овец :)
Алгоритм Хаффмана

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

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

Ответ на этот вопрос дает один из самых важных и изящных алгоритмов в компьютер сайнс - алгоритм Хаффмана.

Также этот алгоритм дает ответ на вопрос «как построить оптимальный код?», то есть тот код, в котором каждый из элементов алфавита кодируется наименее возможным количеством бинарных символов.
Всем привет! На связи Aero QA. В декабре мы наблюдаем, что CTO наших клиентов стало сложнее защищать бюджеты нового года на разработку, сохраняя ресурсы на текущем уровне. В этих условиях необходимо дойти до нужного результата, сократив Time to market.

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

Начинаем с DevOps аудита — это бесплатно. В этом году готовы взять еще два проекта от целевых клиентов.

По срокам займет от 2 до 4 недель. В итоги аудита включим:

1. Отчет, где покажем:
- Анализ окружений
- Точки роста по каждому направлению
- Практические рекомендации по воздействия
2. Семинары, где расскажем, как использовать полученные наработки.

За подробностями — в директ @dmitri_marin. Мы покажем на конкретных кейсах экспертизу и то, как помогли клиентам значительно сократить time2market активных проектов.

#промо
​​​​Недавно состоялась одна из самых громких свадеб года – свадьба Джигана. Давайте разберем, как работает нагрузочное тестирование на данном примере.

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

Свадьба Джигана транслировалась в ВКонтакте в онлайн-формате, общее число зрителей трансляции перевалило за 7,5 млн человек. Общая длительность трансляции составила более 5 часов. И ВКонтакте все это выдержал. Перед этим, конечно же, проводилось нагрузочное тестирование.

По сути нагрузочное тестирование — это определение качества работы продукта под определённой нагрузкой на заданном интервале времени.

Главной задачей является определение того, насколько хорошо продукт выдерживает повышенные нагрузки
Что такое протоколы встреч и зачем они нужны?

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

В крупных компаниях они как правило ведутся секретарем и подписываются обеими сторонами по всем канонам.

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

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

Можно долго перечислять пользу от протоколов , но есть одна важная причина, по которой я обязательно составляю протоколы – это безопасность обеих сторон. Все, что обсуждалось – утверждено и подписано.
Заметки Техдира
Какой язык программирования в примере выше?
Недавно проводил опрос про языки программирования. Конечно же, правильный ответ - Rust.
​​Rust, он же “ржавый”, уже почти 7 лет подряд (с 2016 по 2022) считается любимым языком программирования по версии Stack Overflow среди разработчиков, да и это не удивительно, потому что он модный, надежный и весьма перспективный.

Разрабатывает его компания Mozilla, автором его является Грэйдон Хор, а основан он на “трех китах” - безопасности, скорости и эргономике. Впервые возник он в 2015 году и до сих пор модернизируется. Ходят слухи, что это полноценный приемник С++ и С.

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

К слову, Rust также предоставляет средства для защиты от целочисленных переполнений, имеет мощную статистическую типизацию и имеет лаконичный синтаксис, похожий на синтаксис C.

Rust рассматривается как перспективный язык для разработки ядер операционных систем.
Какой здесь язык программирования ?

Transcript show: 'Hello, world!'
Anonymous Quiz
10%
Pascal
11%
Basic
74%
Smalltalk
5%
Fortran
​​Как избежать выгорания сотрудников в IT?

IT специалист - та профессия, которая наиболее подвержена выгоранию (от англ. «burn out») из-за огромного количества проектов и темпов их развития, с которыми приходится справляться сотрудникам.

Забавно, что в массы образ разработчика транслируется следующим образом: солнце, море, прекрасный пляж Бали, куча денег и кокосовый смузи. На деле это скорее выглядит так: постоянный недосып, просевшее зрение и постоянно открытый компьютер. Локация в данной ситуации значения не имеет, ты все равно ее не видишь.

В Европе, кстати, во время собеседований на позицию специалиста IT сферы то и дело пытаются вытянуть «истинную мотивацию», иными словами, высчитывают насколько тебя реально хватит. «Угольки» отметаются сразу, поэтому на собеседовании нужно всегда «держать лицо» и не выдавать усталость.

Почему выгорают IT-специалисты?

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

Я стараюсь поддерживать своих сотрудников следующим образом:

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

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