Вчера получил письмо от читателя о том, что его обвиняют на форуме, что он умеет только компоненты расставлять. У меня сразу столько мыслей полетело на эту тему. Неужели это так позорно уметь расставлять компоненты? Неужели это плохо? А может так говорят те, кто не умеет расставлять компоненты? Компонентное программирование - это следующий шаг после объектного и он позволяет двигаться вперед быстрее и предоставлять продукт быстрее. А скорость разработки и время выхода на рынок очень важны в наше время. Я всегда использовал чужие разработки и буду использовать в будущем, потому что не стыжусь этого.
Использование чужих разработок позволяло мне создавать множество проектов в одиночку. Да, тогда я допустил ошибку - погнался за кучей зайцев одновременно и должным образом поймал только двоих (только две программы реально продавались). С другой стороны, всегда есть неудачные проекты и никогда не угадаешь, какой проект пойдет, а какой провалится. Если бы я все писал сам, то не смог бы написать и 20 процентов своих программ и не факт, что среди этих процентов оказалась бы успешная программа. На разработку ушло бы больше времени, а выход программиста одиночки на рынок последним равносилен самоубийству. Пока бы я писал весь код сам в одиночку, мой конкуренты убежали бы в будущее.
Я умею писать писать многое самостоятельно, но зачем это делать? На рынке программирования надо больше уметь продвигать продукты, а не писать весь код самостоятельно. Примеров тут куча и один из них - Билл Гейтс и пример с его успехом я привожу на блоге Heapar Software в заметке об использовании сторонних компонентов.
Расставлять чужие компоненты на форме абсолютно не стыдно. Куча дополнительных мыслей на тему использования компонентов сторонних разработчиков я выплеснул на блоге Heapar Software: Использование компонентов .NET сторонних разработчиков.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
А для чего, собственно говоря и придуманы компоненты?
Выпендрежи типа "использование компонентов - моветон" и связанные с этим намеки на криворукость программиста всегда меня раздражали. Мол, только когда от и до написанный ручками код, есть лучший способ доказательства состоятельности программиста.
Уверен, что очередное изобретение велосипеда и есть величайшая глупость. Она же чаще всего и тянет за собой фатальные ошибки.
Все время работы в Delphi использовал компоненты, всегда кидал их на форму, будь они визуальные или невизуальные. Единственное исключение - консольные приложения, но тут такая специфика. Я никогда не создавал собственных компонентов, поэтому я недопрограммист? Прекрасно! Если я вместо того чтобы за вечер что-нибудь забацать, буду год изобретать велосипед, то меня с работы попрут! Ведь конечного пользователя абсолютно не интересует изнанка процесса программирования. Более того, если пользователь в этом что-то смыслит, то он будет очень недоволен тем, что ему подсовывают совершенно ненужные финты ушами за дополнительные деньги, такой талант он не оценит.
Есть даже пример из жизни. Существует некоторая МИС (медицинская информационная система), так СУБД специально для нее написана с нуля, со всеми вытекающими.
Я бы предпочел держаться от такого решения подальше.
По логике получается, что если ты умеешь водить машину, но не можешь ее починить или собрать с нуля, то ты плохой водитель или кто там еще? Глупость!
Далее. Сама суть программирования сводится к тому, чтобы разработать алгоритмы и средства для обработки и представления информации в удобном виде. Это, грубо говоря, и есть создание библиотек и компонетов.
Другое дело, что накиданные на форму компоненты не делают программу законченным решением. Но и в этом случае программист должен знать только что с этим ворохом делать, а не как этот ворох устроен.
По крайней мере мне этого вполне достаточно.
Обычно так говорят форумный отцы, которые считают, что они сразу родились "супер-программистами" :)
Я тоже сейчас использую компоненты комерческие, некомерческие и собственные. Раньше старался делать минимум компонентов или даже создавал переменные типа TADOCOnnect;, к примеру, и затачивал код на него и что в итоге? Если программулина маленькая это круто типа нет компоненотов точнее ты их не видишь а они есть. :) (что то это мне напоминает). Сейчас использую компоненты везде где могу и рад до ужаса. Ведь кто кроме разработчика или сопроводителя увидит их? А удобство. Современные языки програмирования созданы для удобства создавать программы. Качественно (зависит скорее от степени знания языка) и быстро (от наличия необходимых компонентов). Ведь Button это по сути пот же компонент.
Если я просто расставив компоненты смогу заработать миллион, то мне будет абсолютно непозорно. Только расставлять компоненты тоже нужно. Кто-то пишет низкоуровневый код, кто-то рисует отчеты, а кто-то делает интерфейс расставляя компоненты. Разделение труда.
Абсолютно согласен, я тоже не считаю использование сторонних компонентов грубым тоном программирования. Да, есть некоторые минусы, например нет нужных функций, но никто же не мешает добавить их?! Да и время экономится, и нервы :). И, в принципе, на некоторых хорошо откомментированных компонентах, можно и некоторым аспектам программирования подучиться. Да и используем же мы RXLib, JVCL и т.п., и я думаю никто про них ничего не скажет, мол это моветон!
Ну вот и все с этим согласились. Даже как то скучно. Я тоже согласен. Уметь что-то делать - это уже само по себе хорошо. Но господа, программисты, позвольте всё же с вами в некоторых моментах не согласиться, Я не программист, но что такое компонент в общих чертах представляю. Спорить тут видимо не о чем и не зачем. Просто хотелось расставить всё по своим местам, высказать свои соображения по этой теме. Каждый программист (или тот кто хочет им стать) сам выбирает свой путь в этой профессии. И этих путей, объединённых под словом "программист" множество: от юной девушки, использующей VB в 1С и не догадывающейся, что есть слово "алгоритм" до матёрого драйверо/вирусо/антивирусо-писателя использующего ассемблер и не считающего программой ничего, что нельзя завершить кнопкой F10.
Сразу замечу что то что написано ниже относиться только к программированию в одиночку – без команды.
Умение ИСПОЛЬЗОВАТЬ компоненты - это замечательно. Уметь их КРАСИВО РАССТАВИТЬ тоже. И умение программировать алгоритмами тоже хорошо. Но давайте согласимся с тем что всё это в одном человеке вряд ли совместимо. Ну не успеваем мы (простые люди) уметь делать ХОРОШО всё. Физически не успеваем. И что то у нас получается хуже, а что то лучше. И каждому своё! Возьмём пример из жизни (моей жизни как пользователя программ). Потребовался мне не так давно антивирус (я говорил об этом здесь же у Михаила в блоге) Чтобы не быть голословным назову этот антивирус по имени. Только не подумайте что я рекламирую – это не так. Это антивирус Олега Зайцева – AVZ. Так вот интерфейс у программы не скажу что ужасный, но мягко говоря оставляет желать лучшего. Если штатная кнопка поставляемая средой программирования тоже компонент, то эти самые компоненты-кнопки и прочее расставлены как то непродуманно и нагромождено всё. Зато функциональность и глубина программы! Программа имеет свой диспетчер процессов, поиск в реестре, да чего там только нету! А какой сайт у программы! Энциклопедия по борьбе с нечистью! Видно что человек чётко понимает то чем занимается и учит этому нас. К чему я это всё пишу? Из этого я делаю выводы
1) первое наблюдение. программисту (одиночке) который действительно способен программировать алгоритмами и знает свою область глубоко, ему то ли некогда, то ли не интересно, то ли он от природы не склонен заниматься украшательствами или выискивать компоненты. К тому же сомневаюсь что для своего антивируса Зайцев использовал сторонние компоненты – их просто нет для задачи решаемой программой-антивирусом.
2) второе наблюдение. Серьёзный программист не скрывает своего имени. Не распространяет свои программы под каким то вымышленным именем «*****Soft». В некоторых случаях не стыдится показать свои исходники. Почему? Потому что он настоящий и ему за это доверяют пользователи. А когда в коде компонент на компоненте компонентом погоняет, что там показывать?
Как говориться сначала человек работает (иногда бесплатно) на имя, а потом имя работает на него.
Задач в программировании множество. Какие-то легче, какие то сложнее
Программистов разных мастей – море. Программистов грамотно использующих компоненты меньше. Тех кто способен писать компоненты для своего внутреннего использования на порядок меньше. Те кто пишет компоненты настолько хорошо, что продаёт их за деньги ещё меньше. Те кто помнит ассемблер и использует – их в разы меньше.
Задач много, но чем сложнее задача тем меньше людей способны её решить и тем меньше для этой задачи компонентов.
Михаил вы соглашаетесь с тем, что цитирую «По логике получается, что если ты умеешь водить машину, но не можешь ее починить или собрать с нуля, то ты плохой водитель или кто там еще?» Логика может быть и есть, но не по теме. «Водить машину» – это использовать программу. «Водитель машины» - это пользователь. И если он не умеет использовать программу – он плохой «водитель». Этот водитель не поедет на своей красивой иномарке к морю за 1500 км от дома, пока не будет уверен что вдоль всей дороги ему не расставили автосервисов (компонентов) и в каждом есть спецы именно для его машины. Именно так. Я же уду на юг и везу с собой пол багажника запчастей. Полетел генератор – достаю и меняю в течении 2 часов. Я знаю что сломалось, где это в машине стоит и как его сменить. Про генератор – это мой случай из жизни.
Но вы же не водители, как я. Вы программисты! Вы выше рангом. Вы мне эту машину делаете. И если вы не способны создать компонент самостоятельно или обойтись без него(доехать на галстуке вместо ремня генератора), то вы в воображаемом программистском цеху будете вынуждены вечно стоять у конвеера. Конвеер – это самый неквалифицированный труд. Удел таких программистов – правильно поставить на место продукт созданный более квалифицированным человеком.
Вы, Михаил, говорите о том что нужно писать больше программ. Чем больше тем лучше иначе не будет успеха. Может и так. Но я не знаю ни одной вашей программы. Они конечно есть, но я о них не слышал. С таким подходом к программированию девиз наверное такой: «Успеть!». Не успел – не продаётся. В чём то может и верно, но как то не серьёзно. Я считаю, что если программа ничем не отличается от конкурентов то зачем ей вообще быть - этой программе? Зачем она? Не правильнее ли зарабатывать штучным товаром, качественным, чем пытаться обогнать? Китайцев и индийцев сейчас вряд ли обгонишь.
Около 2 лет назад бродил по одному сайту посвящённому Delphi. И где то на форуме у них увидел просьбу авторов сайта. Профессиональные! программисты просили сказать/показать если кто-то найдёт где-нибудь компонент способный прожигать болванки. Я вот думаю, ну что же это за программисты, который ждут что кто-то где то расщедриться и выложит им компонент. Разве так заработаешь? К тому времени Nero уже существовала и продавалась во всю, а они только ещё компонент ждут. Смешно! Чтобы заработать на программным обеспечении к пишущим CD-DVD нужно было держать нос по ветру ещё до выхода первых пишущих устройств на рынок и знать о них. Ходить на сайт производителей и интересоваться тем как написать для их устройства программу-прожигалку, что почитать и где взять какой-нибудь Api, так как бесплатный компонент производитель вряд ли выложит. Вот где на мой взгляд важна скорость. Nero и Roxio были одними из первых поэтому заработали на этом, сняли все сливки и продолжают зарабатывать. Теперь это уже имена и бренды! А если ждать компонентов – удачи не видать! Как можно «успеть» если ждать компонента?
Зарабатывают на идеях, на быстрой поддержке нового оборудования, на качестве, которое никогда не выходит из моды, а такие вещи в компонентами не распространяются.
Никого не хотел задеть своими словами. Просто высказал своё мнение относительно отрицательной стороны увлечения компонентами. Все профессии важны. Правильно использовать компоненты тоже очень важно. Пользователям нужны программы быстро и в ассортименте. Без компонентов этого программисты нам предложить не смогут.
ps – если Михаил не против
Вопрос тем кто разбирается в технологии NET. Было бы интересно выслушать мнение спецов. Насколько мощный по вашему язык C# по сравнению с C++ или Delphi? Если в NET всё работает через посредника – через среду CLR – не ограничивает ли этот посредник возможностей языка C# и соответственно ваши возможности как программиста? Не пострадает ли скорость программ? Может ли C# что-то кроме того что предлагают классы NET? Можно ли на C# написать антивирус или драйвер как на C++? Запрещены же теперь в C# ассемблерные вставки и указатели как это было в Delphi для win32. Не делает ли всё это язык C# языком «слишком высокого уровня»? Кто видел материал на тему возможностей C# поделитесь пожалуйста ссылками. Хотелось бы знать и о недостатках языка C#.
Ох какую ты петицию написал.
-> Сергей2
to Сергей
Я согласен, что существует огромное множество нереализованных идей. Вопрос в том насколько они перспективны в коммерческом плане? Например ваша идея с блоками... Насколько она будет восстребована и сколько вы сможете на ней заработать? Мне, например, эта идея не показалась перспективной (в виду наличия других подобных инструментов). Я хочу сказать, что оценка рынка - это немного другая область, и этим должны заниматься другие люди - не чистые программисты. Естественно они должны хорошо ориентироваться в программировании.
Имхо, программист - это конечный исполнитель, работяга (если хотите). И даже если его посетит гениальная идея - далеко не факт, что ему удастся её реализовать в полном объёме и насладится её плодами (я сейчас не про технический аспект, а про маркетинговый)
P.S. to Фленов Михаил,
у вас тут строго как-то с комментариями ( это не способствует конструктивному общению - вы не находите? Может стоит поставить профессиональный блоговый движок, например Вордпресс? Я понимаю, что вы программист и это может ущемить ваше достоинство, но вы ведь как простой человек не можете (да и не должны) успеть всё. Так почему же посетители вашего блога должны испытывать совершенно лишний дискомфорт? Нет многих привычных возможностей, которые в WP реализуются в "два клика"...
2Сергей2
Я в своей жизни три раза использовал сторонние разработки и три раза они приводили к взлому, когда я не успевал обновить двиг. Следить за обновлениями я не могу, поэтому лучше проще, но безопаснее. Какие именно функции нужны, я по свободе постараюсь сделать их.
Полностью согласен с Михаилом. Лучше простенький движок, но свой, а не притягивающий хакеров чужой движок.
По моим наблюдениям, на блоге нехватает только автоматизировать вставку комментариев и выделение текста. Достаточно будет пару кнопок, по нажатию которых будет вставляться контейнер тегов.
=> Сергей2
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.