Блог

Когда я люблю проекты с исходным кодом

В случае с программами и ОС мне в принципе все равно - открыт исходный код или нет. Я уже долгие годы работаю с Windows, Linux и macOS и у меня не возникало желания поменять код. Конечно же из этих трёх ОС, я даже теоретически смог бы поменять что-то только в Linux, потому что исходники остальных не доступны. Но все равно, тут я говорил о желании, а не о возможности. 

Я просто пользуюсь программами и не думаю о коде. Если нет нужной возможности, то буду искать программу, в которой эта возможность есть, а реализовывать ее самостоятельно не хочется. Каждый должен заниматься своим делом и у меня есть своя работа, у разработчиков ОС и программ, которыми я пользуюсь - своя работа. 

Изучаю Xamarin

До сих пор я писал мобильные приложения только под iOS поэтому выбирал Objective-C или Swift и мне нравилось использовать их. Меня несколько раз спрашивали, а почему не Xamarin, ведь тогда я смогу писать и для iOS и для Андроида. 

У меня не было цели писать для нескольких платформ. Я на работе пишу на C# и приходить домой и снова писать на C# не особо хотелось. Мне нужно было разнообразие в виде Swift, ведь это новый мир для меня, который интересно и хочется познавать. 

Но вот понадобилось написать для iOS и Андроид платформ и вот тут я выбрал Visual Studio и его возможность  создавать приложения сразу для нескольких платформ. И пока это интересно. Немного непривычно, но по своему интересно. 

Скрипты для git

На работе у нас перешли с TFS на git и команда архитектуры зачем-то написала power shell скрипты, которые должны были бы облегчить работу с git. Теоретически да, с PS скриптами стало удобно работать тем, кто всегда работал с TFS и никогда не понимал, как работает git, потому что с помощью скриптов идеологию git превратили в tfs, что очень даже...

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

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

.NET Core будет поддерживать WPF

В .NET Core 3 должна появиться поддержкак десктопных приложений и IOT. И под десктопными понимается не только WinForms, но и WPF, что очень даже круто. Мне нравится XAML и считаю его великолепным решением для построения визуальных интерфейсов, потому что можно делать интерфейсы, которые легко адаптируются под любые размеры экрана. 

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

Сортировка в базе данных или приложении?

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

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

За много лет работы я сроднился с dBase и до сих пор ассоциирую сортировку таблицы с соответствующим тегом, принадлежащего ей компаундного индекса. Видимо от того и теряюсь. 

Простой пример: 

MS SQL -> microORM -> класс, соответствующий структуре выбираемой таблицы -> компонент DataGridView, принявший информацию и отсоединенный от источника данных. 

Await скоро станет умнее

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

В 7-й версии C# это станет возможно. Можно будет писать что-то типа:

foreach await (var something in asyncData) {
}

В C# 7 можно будет реализовывать методы в интерфейсе

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

Начиная с C# 7 (может 7.1) этот ответ станет неверным. В нем можно будет у интерфейсов писать реализацию по умолчанию, которую потом классы смогут переопределять. Microsoft показывает такой интерфейса:

Редактор кода против текстового редактора

После последнего моего видео, в котором я говорил, что девушки на моей прошлой работе писали код в vim или в Notepad++ в очередной раз почему-то народ начал сравнивать - что лучше и в чем лучше писать. 

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

Если человек пишет в IDE, то тут уже не факт, что он знает внутренности. Тут я уже встречал как реально хороших специалистов, так и тех, кто умеет только перетаскивать компоненты по формам. 

Обновление данных в базе

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

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

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

Межплатформенный язык или заточенный под платформу

Новый вопрос от читателя о том, что выбрать для мобильной разработки - межплатформенный язык или заточенный под платформу:

Я как понял ты занимаешься разработкой ПО под мобилы, вопрос: мне необходимо освоить это ремесло, я умею хорошо писать на C#, мне лучше использовать xamarin и убить двух зайцев, или лучше сначала написать на java под андроид, а потом изучить и написать под IOS?

Логика на SQL

Недавно получил по e-mail вопрос, на который коротко ответил уже, но потом решил более развернуто написать уже здесь на блоге:

Привет, Михаил много ли логики пишешь на Transact-Sql? Как думаешь хорошая идея писать sql-процедуры на c#? В sql-е есть такая возможность.

В самом SQL не так уж и много возможностей, а вот в Transact-SQL действительно можно написать многое. Но я не пишу логику на Transact-SQL. Я могу написать какие-то простые вещи в самом крайнем случае, но только в крайнем. 

Когда писать Unit тесты

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

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

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

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

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

Пишите мне


Я в социальных сетях
Facebook Telegram Youtube Програмысли Instagram