Pull to refresh
71
0
Катерина Галкина @fierce-katie

Программист

Send message

Почему типы так много значат для программистов?

Reading time13 min
Views26K

Адаптация статьи What do types mean for programmers? (Ville Tirronen)


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


Основное значение слова «Тип»


Что имеют в виду учёные-информатики или программисты, когда используют слово «тип»? В обычном смысле слово «тип» используется в таких предложениях, как «не люблю этот тип людей» или «есть разные типы лыж». Его синонимы включают такие слова, как «вид», «род», «класс», «семейство» и т.п. (забавно, что эти слова в английском языке также являются ключевыми в некоторых языках программирования: kind, sort, class, ...). Мы используем это слово, чтобы выразить мысль, что некоторые вещи отличаются от других, обычно по какому-то фундаментальному признаку. И именно это, я считаю, также объясняет происхождение данного термина в программировании.



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

Читать дальше →
Total votes 22: ↑20 and ↓2+24
Comments39

Лучшие практики тестирования микросервисов

Reading time9 min
Views15K

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

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

Читать далее
Total votes 4: ↑3 and ↓1+2
Comments1

А вы знаете, где используется Haskell?

Reading time4 min
Views26K

Всем привет! Мы хотим продолжить серию постов на тему “где используются эти ваши странные языки программирования”. В прошлый раз мы рассказали про Лисп, а сегодня продолжим разговор про функциональные языки и обратим внимание на Haskell.  Он является основным языком разработки в Typeable и, конечно, мы не смогли пройти мимо такой темы.

Haskell — чистый функциональный язык программирования общего назначения. Среди его отличительных особенностей можно выделить строгую статическую типизацию, ленивые вычисления, алгебраические типы данных и серьёзную теоретическую основу. Это относительно молодой язык, он появился в 1990 году, но уже оказал значительное влияние на другие языки и на теорию языков программирования в целом.

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

Читать далее
Total votes 34: ↑33 and ↓1+37
Comments27

Си должен умереть

Reading time21 min
Views111K

Язык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу.

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее
Total votes 185: ↑147 and ↓38+156
Comments643

Взгляд на легаси со стороны «пассажира»

Reading time5 min
Views5.1K

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

Возможно, вы уже слышали слово “легаси” (legacy) от сотрудников технических отделов и, как правило, в негативном ключе. Данным термином обозначают методы, технологии и компьютерные системы или прикладные программы, которые по каким-либо причинам признаны устаревшими. Однако всегда ли такое наследство несет негативный эффект для бизнеса, обязательно ли от него избавляться и как понять, что оно действительно вам мешает?

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

Читать далее
Total votes 7: ↑5 and ↓2+6
Comments21

Какой вклад внесло функциональное программирование в современные языки?

Reading time10 min
Views18K

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


Парадигма программирования — это в первую очередь стиль мышления: то, как программист думает о представлении данных и процессе их обработки. Другими словами, парадигма живёт в голове программиста, а не является свойством языка. Разные языки могут в той или иной степени поддерживать определённую парадигму. Если сейчас зайти на Википедию и начать читать про самые популярные ЯП, мы увидим, что многие из них заявлены как "мультипарадигменные": на них можно писать в разных стилях, но какие-то из них использовать будет удобнее.



В своей недавней статье мы рассказывали о практических применениях Лиспа и упомянули, что он сильно повлиял на развитие других языков программирования, но не стали вдаваться в детали. Пришло время более подробно раскрыть эту тему и разобраться, какой вклад функциональное программирование в целом (не только Лисп!) внесло в развитие других языков. Поскольку мы используем Haskell как основной язык разработки, и наша команда разработчиков состоит из ФП-энтузиастов, мы не смогли пройти мимо такой темы.


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

Читать дальше →
Total votes 39: ↑38 and ↓1+47
Comments15

Динамические окружения GitLab vs self-service портал. Что выбрать?

Reading time8 min
Views3.9K

Как все члены наших проектных команд вдруг стали немножко DevOps’ами

Привет, Хабр! Мы недавно с коллегами читали статью компании Flant о динамических окружениях в GitLab и хотели бы поделиться с вами мыслями о том, почему мы эту, казалось бы, очень долгожданную и классную фичу не используем. Не потому что она плохая, а потому что организационно мы хотели получить решение, которое было бы доступно для использования всеми членами проектных команд, а не только DevOps-инженерами.

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

Читать далее
Total votes 11: ↑10 and ↓1+12
Comments1

7 полезных инструментов на Haskell

Reading time5 min
Views9.7K

Вступление


Haskell это чистый функциональный язык программирования общего назначения со статической типизацией и ленивыми вычислениями. Появился в 1990 году и был назван в честь Хаскелла Карри. На данный момент основной реализацией является компилятор GHC.


Мы в Typeable очень любим этот язык и используем его как основной язык разработки. Хотя Haskell уже достаточно широко используется в индустрии, всё ещё бытует мнение, что это академический язык и применяется исключительно в научных целях. В этой статье я бы хотел рассказать про несколько достаточно популярных инструментов, которые написаны на Haskell и могут оказаться вам полезны.


Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments34

Антирегрессионное тестирование – минимизируйте затраты

Reading time5 min
Views18K


Регрессионное тестирование играет важнейшую роль в разработке продукта и считается непростой задачей. С этим трудно не согласиться, когда вы тестируете то, что уже было протестировано, а потом тестируете это снова. Термин «регрессия» ассоциируется у членов команды с большими усилиями. Мы знаем, насколько головоломным и вместе с тем незаменимым может быть регрессионное тестирование для процесса релиза и спрашиваем «Приведет ли невыполненное регрессионное тестирование к неудовлетворительному результату?» и «Нужно ли проводить регрессионное тестирование, если программа без ошибок – это недостижимая цель?» Что ж, ответом будет «Да! Регрессионное тестирование нужно проводить регулярно».


Что подразумевается под регрессионным тестированием?


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



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

Читать дальше →
Total votes 10: ↑7 and ↓3+5
Comments3

А вы знаете, где сейчас используется Лисп?

Reading time5 min
Views33K

Введение


Лисп — второй по старшинству из ныне живых высокоуровневых языков программирования (после Fortran) и первый функциональный язык. Он был разработан в 1958 году и сильно изменился с тех пор, породив множество диалектов и оказав значительное влияние на развитие других языков. На данный момент наиболее известные диалекты: Common Lisp, Scheme, Racket и Clojure.



Слева: Лисп-машина в музее MIT.
Справа: Лисп-машина Symbolics 3640, фото Michael L. Umbricht и Carl R. Friend (Retro-Computing Society of RI)


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


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


Мы в Typeable любим и применяем функциональное программирование, а влияние Лиспа на функциональные языки всё ещё сильно, поэтому нам стало интересно разобраться в этом вопросе.

Читать дальше →
Total votes 40: ↑38 and ↓2+44
Comments48

7 ложных предположений о том, как устроены строки

Reading time10 min
Views24K

Как Unicode уничтожает большинство ваших предположений о том, как на самом деле работают строки



Когда речь идет о написании чего-то простого, мы, программисты, обычно действуем интуитивно. В случае с простыми вещами мы полагаемся на четкий набор предположений вместо конкретных знаний о том, как эти вещи работают. Например, мы предполагаем, что если b = a + 1, то b больше a, или что если мы применим функцию malloc для какого-то буфера, то получим необходимое количество памяти для записи. Мы не заглядываем в документацию всякий раз, когда имеем дело с мелочами.


Мы делаем так, потому что тотальная проверка замедлит работу. Однако если бы мы все-таки провели проверку, мы бы обнаружили, что обычно ошибаемся в своих предположениях. Существует арифметическое переполнение, в результате которого a + 1 может быть значительно меньше, чем a. Иногда malloc дает нам null вместо буфера и мы оказываемся в пролете.


Нам обычно приходится обжечься на таких вещах, чтобы хотя бы немного изменить свои предположения. И даже тогда мы обычно исправляем их весьма условно.
Столкнувшись с досадной ошибкой переполнения, мы можем скорректировать свое предположение о целых числах в виде «a + 1 больше a, если отсутствует вероятность, при которой a представляет собой очень большое число». И мы действуем исходя из этого, вместо того, чтобы обдумать четкие правила, по которым работает переполнение.


Уточненные предположения – это опыт. Чаще всего они позволяют нам работать быстрее и правильнее. Однако мы можем вообще переместить некоторые вещи, например, правильную обработку malloc, из нашей внутренней категории «простые вещи» во внутреннюю категорию «сложные вещи». И тогда мы действительно можем пойти и уточнить, как они работают.

Читать дальше →
Total votes 67: ↑65 and ↓2+85
Comments40

Property-based тестирование с QuickCheck

Reading time10 min
Views5K

Автор статьи: klntsky



Что такое Property-Based Testing?


Property-based testing (PBT) — подход к тестированию ПО, подразумевающий автоматическую проверку свойств функций (предикатов), специфицируемых программистом-тестировщиком. Для проверки, т.е. поиска контрпримеров, используются автоматически сгенерированные входные данные. PBT позвляет разработчикам значительно увеличить тестовое покрытие и эффективно расходовать своё время, не придумывая входные данные для тестов самостоятельно. В общем случае данные, генерируемые во время property-based тестирования, ничем не ограничены, поэтому проверка может быть произведена на тех значениях, про которые разработчик мог забыть или для которых не счёл нужным написать юнит-тесты (действительно, не перебирать же все значения входных параметров вручную).


PBT-подход был популяризован библиотекой QuickCheck, написанной на Haskell, и в этой статье будет показано, как пользоваться этим инструментом эффективно.

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments1

Когда стоит выбирать микросервисы

Reading time10 min
Views8.3K

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

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

Сам подход оформился на стыке технологий из конкурентной необходимости мгновенно вывести бизнес на новый уровень, и поэтому решения развивались лавинообразно и быстро обзаводились надстройками, паттернами и CI/CD обвеской. Для бизнеса причины не теряют актуальности и интерес к микросервисам также не угасает последние десять лет. При этом сделать решение на микросервисах для ИТ команды – задача творческая, интеллектуальная, позволяющая опробовать современные подходы и уложить на лопатки драконов консерватизма предыдущих решений. То есть, вполне благородный вызов. 

Но вот стоит ли поддаваться этой магии — большой вопрос. 

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

Впрочем, давайте разбираться.

Читать далее
Total votes 15: ↑14 and ↓1+14
Comments4

Haskell – хороший выбор с точки зрения безопасности ПО?

Reading time7 min
Views8.7K


Команда Typeable понимает ценность безопасности. Мы любим Haskell, но стоит ли его выбирать, если ваша цель – создание защищенного программного обеспечения? Хотелось бы сказать «да», но как и для большинства эмпирических вопросов о разработке ПО, здесь просто нет объективного доказательства, подтверждающего, что Haskell – или ещё какой-нибудь язык программирования – обеспечивает большую безопасность, чем любой другой. Нельзя сказать, что выбор языка в Typeable не имеет значения для безопасности, но какое именно значение он имеет, еще нужно подумать.


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

Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments60

Создаем веб-приложение на Haskell с использованием Reflex. Часть 3

Reading time7 min
Views2.3K

Часть 1.


Часть 2.


Всем привет! В этой части мы рассмотрим использование класса EventWriter и библиотеки ghcjs-dom.


Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments0

Nix: воспроизводимая сборка

Reading time6 min
Views5.2K


Привет, Хаброюзеры!


Сегодня мы продолжим наш цикл статей о Nix и как мы в Typeable его используем.


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


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


Весь код для этой статьи можно найти в репозитарии на Github.

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments10

Как мы выбираем языки программирования в Typeable

Reading time6 min
Views7.7K

Неоднократно меня спрашивали, почему я предпочитаю использовать такие языки программирования как Haskell и Rust, т.к. они не являются самыми широко используемыми и популярными инструментами. Этот пост написан с целью демистифицировать то, что происходит у меня в голове, когда я думаю о выборе технологии.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments12

8 «забавных» вещей, которые могут произойти без защиты от CSRF-атак

Reading time7 min
Views6K


Введение


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

Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments3

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity