Вчера я создал первый проект под .NET Core, потому что сейчас эта платформа уже более-менее стабилизировалось и можно начинать на нее смотреть. До это я как-то попробовал поставить Visual Studio Code и .NET Core на свой мак, но даже не было времени разобраться с этим.
Мне постоянно на почту приходят письма с новыми предложениями о работе и я для себя вчера отметил, что позиции архитекторов есть только у Java и .NET. Я не помню, чтобы мне хоть раз попадали в ящик позиции архитекторов в PHP сфере.
Интересно, в агентствах и компаниях, где используют PHP не используют архитекторов или там каждый себе архитектор? В мире .NET и Java я много раз видел разделение, когда есть более опытные программисты, которые умеют видеть картину в общих чертах и есть программисты, которым даже не нужно этого знать - кодеры. Кодеры просто пишут код и не принимают никаких решений о том, как все должно быть реализовано.
Я в свободное время как раз консультирую по архитектуре команду, куда явно не смогли найти хорошего архитектора, знающего высоконагруженные сайты и я даже представить себе не могу, как они могли бы работать самостоятельно.
Это классно, когда программист умеет и общую картину составить, правильно продумать все, да еще и реализовать самостоятельно, но для этого нужен хороший опыт и знания. Неужели в PHP нет начинающих и все супер специалисты, или там архитекторов называют по другому, просто может лидерами команды.
От качества кода зависит многое – качество конечного продукта (программы, сайта, мобильного приложения…), стоимость дальнейшей поддержки и даже интерес работы над проектом.
Сейчас я работаю над проектом, код которого написан еще в 2007-м году и за 9 лет его постепенно убивали и превращали в откровенный мусор. Работая с таким кодом совершено не испытываешь никакого удовольствия.
Сейчас читаю статью: Главный вопрос программирования, рефакторинга и всего такого и (http://www.viva64.com/ru/b/0391/) по мере чтения решил поделиться своими мыслями. Автор на примерах различных реальных ситуаций показывает преимущества программы статического анализатора PVS-Studio и заодно показывает интересные вещи, которые будут полезны любому программисту.
Сразу же с первого примера нам показывают интересный классический случай копипастеров. Я не буду приводить этот пример здесь, чтобы лучше было понимать, о чем я говорю, просто зайди и почитай эту заметку, прежде чем продолжать дальше.
У нас на работе при найме есть тест на соображалку типа дано два массива символов и нужно найти все совпадения больше двух раз. Задание конечно же не это, но надеюсь смысл понятен. Главное тут понимать возможные проблемы производительности и уметь находить оптимальные решения.
На прошлой работе у меня в команде работал хороший программист и я решил его посоветовать. Он пришёл на тест, и как он мне сказал, решил его с помощью LINQ выражения.
Я то знаю, что он хороший программист, но не уверен, что LINQ - это правильное решение. Если бы я принимал тест, я бы заставил переделать все без использования LINQ.
Что ты думаешь по этому поводу? Правильно ли принимать решения задачи, если она решена с помощью LINQ? Может ли это показать профессионализм программиста?
Совсем недавно я написал о задании для программиста, которое мне прислали, где нужно было найти натуральные числа на Transact-SQL (читаем заметку здесь). Там было ещё два задания, которые я точно не помню, но смысл в том, что они легко решаемы, но нужно писать процедуру или какой-то другой код на стороне Transact-SQL.
В той заметке я так же спросил, что говорит такое задание. Для меня это говорит то, что компания очень много использует хранимых на сервере базы данных процедур и/или функций, а я такое не люблю, поэтому в такой компании не очень горю желанием работать. И объясню почему.
Если переносить логику на базу данных, то на неё увеличивается нагрузка. Хранимые процедуры с курсорами, циклами и так далее обходятся серверу не дёшево, да и в любом случае, даже дешёвые операции лучше лишний раз не кидать на сервер. Базу данных очень тяжело масштабировать горизонтально. Можно наращивать мощность процессора, увеличивать размер оперативной памяти, но ставить два сервера одновременно не так уж и легко.
Недавно мне написал рекрутер и сказал, что его клиент ищет программиста с моими навыками, но для получения работы мне нужно написать тест. Я говорю - ну ладно, без проблем напишу. Мне присылают тест из трёх заданий. Я все их точно не помню но одно кажется было - найти все натуральные числа в диапазоне. Казалось бы, вполне классическая задача, решение которой можно найти в интернете без проблем, но тут же приписано, что я должен это сделать на Transact-SQL.
Я даже не стал заморачиваться и писать этот тест, просто подобного я даже не встречал. Но задание вполне интересное и если кто-то хочет решить, то интересно было бы увидеть, как бы ты это сделал?
Интересно еще твое мнение, что ты думаешь о таком задании и что оно говорит о том программисте, которого тестируют.
Вчера получил e-mail от консультантов, которых я консультирую, в котором показана ошибка сохранения данных в базу и там четко сказано, что строка будет обрезана. Из SQL я увидел только одну колонку, которая может быть не достаточно большой и ответил на письмо, мол увеличьте размер колонки и будет счастье.
Через минут 10 падает еще одно письмо с ошибкой SQL Management Studio. Программист явно пытался увеличить колонку с помощью SQL Management Studio, а я уже не раз замечал, что с модификацией колонок эта студия часто тупит и явно генерирует не очень хороший SQL для обновления. Я только видел это, сам давно не встречался, потому что сам всегда все делаю с помощью SQL.
Сейчас работаю над приложением для iOS и я постоянно стал замечать, что мыслю, как будто я программирую для Web. Появляются такие мысли, а как я сохраню состояние переменных между отрисовками. Блин, состояние никуда не денется, это же не Web.
С другой стороны, это достаточно правильное мышление даже на мобильной платформе, ведь пользователь может в любое время нажать кнопку Домой на iPhone и выйти из приложения, а потом ОС может убить программу и если есть какое-то состояние, требующее сохранения, то лучше его сохранить раньше.
Недавно был на встрече с новым клиентом и обсуждали вопрос строительства сайта. Ребята явно хорошо разбираются в HTML, в фронтенде, но вот на заднем плане у них явные проблемы. Вместо того, чтобы сказать - "мы напишем для вас все, что угодно", их ответ был - "Мы не пишем проекты, мы найдём готовый OpenSource проект и прикрутим его к вашему сайту". Причем за свою работу они просят достаточно большие деньги.
Сразу же ясно, что ребята совершенно не Dev шоп. Возможно они хорошие дизайнеры и умеют резать картинки на HTML, но вполне понятно, зачем им понадобились мои услуги.
Но в целом мне такой ответ напоминает комара, который как паразит кровь сосёт у других. Программисты стараются, работают за булочки и пишут открытый код, а вот такие паразиты берут открытый проект и прикручивают его к себе и зарабатывают лимон баксов с сайта.
В MS SQL Server ты можешь создавать поля типа varchar(max) и с точки зрения производительности это чуть лучше, чем text. Если размер текста в поле меньше 8k, то сервер будет пытаться сохранить его вместе с остальными данным в той же странице. Если больше 8 кило, то данные точно уйдут в отдельное хранилище, что отрицательно скажется на производительности, если массово выбирать данные.
Обычно для запросов, которые возвращают данные для сеток или списков данных, не нужно возвращать текстовые поля. Трудно представить себе сетку, где будет большой текст. Разве что блоги. Например, у меня запись блога состоит из двух текстовых полей - первое показывается в списке, а второе, когда вы открываете саму статью. Не знаю как MySQL, но в MS SQL Server эти текстовые поля притормаживали бы запросы.
За счёт того, что я показываю на блоге записи постранично, максимум 10 записей на странице, то потри не смертельны, но на нагрузке на сервер это все же сказывается. Для сайтов с большим трафиком я бы все же сделал поле Intro, которое у меня отображается в списке не текстовым, а varchar. 1000 символов должно хватить с головой. Главное не выполнять запросов типа SELECT *, но к сожалению этим грешат многие программисты. Да и я сам такой же.