Блог

Как стать программистом

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

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

Проблема PHP – обращение к системе

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

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

В случае с .NET и Windows вообще, то тут подход немного другой. Тут предпочитают строить все целыми платформами и переходы меж уровнями и доверительными зонами сводится к минимуму. Например, сама платформа .NET на столько мощная, что необходимость в обращении к системе минимальна. Если в PHP для выполнения операции ping нужно вызвать system, то в .NET можно использовать классы.

Обновление на Heapar Software

Вчера залил серьезное обновление своего пакета базовых компонентов для .NET. Основное изменение произошло в компоненте Small Report Renderer. В нем добавлена возможность выделять текст и копировать его в буфер обмена. Ведь очень часто нужно не просто вывести на экран текст в виде отчета, нужно еще и дать пользователю возможность копировать текст из этого отчета.

Вообще компонент Small Report Renderer вызвал неплохой интерес и только ради него один пользователь хочет купить его и ожидал функцию выделения. Его заинтересовали возможности компонента и он готов был заплатить 1000р (именно столько стоит Heapar Essential Library .NET) и он хочет посмотреть, как он реализован. Я так понял, что он хочет написать что-то собтственное в виде движка отчетности как у Fast Report. Правда Fast Report очень хороший двиг и с ним тягаться будет тяжеловато.

Помимо этого исправлено несколько недочетов и пару ошибок, оптимизирована работа графики в трех компонентах и улучшин внешний вид компонента TabManager.

Какой язык программирования выбрать?

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

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

Я рекомендую изучать сразу пару языков. Когда я начинал изучать программирование, то выбрал С++ и Delphi. Я их изучал одновременно и писал программы на обоих языках сразу, просто разные программы. Благо на работе моему начальству было пофиг, на каком языке я пишу программы, им нужно было, чтобы они работали. Я использовал поочередно оба языка и постепенно потребность в Delphi выросла и С++ сам собой отпал. Его я стал использовать очень редко и в основном для себя. Я и сейчас его использую редко и в основном для написания небольших DLL, функции которых потом вызываю из C#.

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

Командная разработка кода

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

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

Но я категорически против того, чтобы код смотрел только один программер, который старший по званию. Это очень серьезное заблуждение, которое делает код хуже, а командную разработку более конфликтной. Код должна рассматривать команда из 3-4 человек. Чаще всего программеры работают небольшими командами, и они должны обсуждать код, который будет написан до того, как кто-то приступает к кодированию. Они должны обсуждать архитектуру и решение до кодирования.

Бесплатные компоненты

Пользователи твитера или просто те, кто следит за мной на твитере уже знают о том, что я сделал Heapar Essential Library .NET абсолютно бесплатной и абсолютно с открытым исходным кодом. Я планировал развивать библиотеку в что-то большое, но в ней получаются только простые компоненты и трудно прикидываться идиотом и пытаться продать то, что входит сейчас в нее. Они просто не стоят этих денег. Эту библиотеку никто не купил, в то время как другие продукты покупаются. Чтобы не повторятся, просто прочитай заметку Бесплатные .NET компоненты на блоге Heapar.

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

Межплатформенные приложения на .NET

У .NET много преимуществ, и одно из этих преимуществ – компиляция кода налету под ту платформу, на которой выполняется программа. Один раз компилируем код, и если запускаете его на 32-х битной машине, то платформа компилирует IL код в 32-х битный. Если же запустить программу на 64-х битной машине, то IL будет скомпилирован в 64-х битном виде. Никаких дополнительных телодвижений для .NET кода не нужен.

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

Нативный код я еще использую, но стараюсь делать это по минимуму. Главная причина, по которой мне пришлось создать два разных дистрибутива для обеих платформ – это база данных. Я использую SQL Server Compact Edition, а библиотеки доступа к данным написаны на нативном коде. Именно из-за них пришлось выпендриваться и поддерживать два файла установки.

Исходники графической программы на C#

Постоянные посетители уже должны знать, что мне абсолютно паралельны все слова об OpenSource и о какой-то там мнимой и выдуманной свободе. Я открываю исходники не ради этого бреда. А я снова выкладываю исходник, на этот раз это достаточно большой исходник, это целый графической программы на C# и WPF. Для этого я даже создал русскоязычную версию сайта.

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

Исходники свободны и распросраняются под лицензией BSD со всеми вытекающими последствиями. Если и говорить о свободе, то BSD реально свободна, а GNU - это свобода только на словах. Исходники программы написаны на Visual Studio 2010, потому что он лучше себя ведет с Ribbon. Кто-то может попытаться использовать Visual Studio 2008, но не факт, что он убдет стабилен с WPF.

Параметры по умолчанию в C#

Чего я с нетерпением жду от C# 4 - так это параметров по умолчанию. Скорей бы уже эта спецификация набрала популярности. Лично я в своих проектах буду использовать 4-ю версию, но не уверен, что на работе она войдет в обиход так же быстро.

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

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

Система контроля на основе тикетов

Для того, чтобы контролировать работу программиста, какой-то очень гениальный человек придумал тикеты и их учет. Один из ярых приверженцев этого подхода - знаменитый Джоел. Но если почитать его книгу, то он явно использует это изобретение правильно и для того, чтобы повысить производительность труда и избавиться от лишних загрузов друг-друга, а четко определять кто и что делает. Все остальные компании, где я работал, использую тикеты (если вообще используют) для того, чтобы заниматься ерундой и пинать себя в грудь, что у них поставлен учет. Когда я работал в Интерстепе, то там начальник просто кепяточком писал от этих тикетов. Я один раз написал тикет, о том как я писал тикет, для того, чтобы написать тикет. Жопа полная творилась. Благодаря этой системе планирования, я придумывал кучу причин, чтобы не работать. Можно было написать в систему любое фуфло, все равно высшее начальство туда не смотрит, а мой начальник пару раз увидел, что я туда пишу, поржал, и забыл.

К чему я это? У несколько дней назад на работе не работала тестовая база данных. ping идет с моей машины прерывистый и постоянно пропадает. На все остальные компьютеры и сервера я коннекчусь без проблем, а с этим какая-то лажа. А это основная база, которую я использую в разработке и моя работа на прочь встала. Хорошо, что у меня была не срочная работа и я мог переключиться на аналитический сервак и с него работать над другими тикетами. Я подошел к администратору и объяснил ситуацию. Она меня послала к администратору базы данных. Объяснил этому администратору. Тут меня послали создавать тикет. Создал тикет на администратора базы данных. Через пять минут его перекинули на администратора сети, потому что проблема явно не с БД, ведь даже пинг не проходит. Там тикет уснул на долго.

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

О блоге

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

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

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

Пишите мне