Помогите научиться оптимально програмировать.

  • Автор темы KiR
  • Дата начала
K

KiR

Заранее извиняюсь за дебильный вопрос, но надеюсь на понимание и исчерпывающие ответы. Я вот не очень понимаю (читать мой статус) зачем использовать много функций и процедур. Т.е. делаем обработку, в которой есть кнопка Сформировать, Таб часть и какие-то реквизиты. В принцыпе ведь все (включая и печать) можно описать в процедуре Сформировать. Понятно, что если понадобиться использование предопределенных процедур - их тоже в модуле выписать нужно. Но а если нет.
 
V

vitfil

1. А если надо будет выполнять однотипное действие в разных местах процедуры?
2. А если надо будет отлаживать? Хотя тут требуется баланс между кусками кода, вынесенными в отдельные процедуры и читабельностью.
3. Ну и самое главное, я бы сказал, что разбиение одной процедуры на отдельные куски, есть наследие приверженцев ООП. Например:
1. Формируем текст запроса со всякими условиями
2. Выполняем запрос и получаем результаты
3. выводим группировки.
Если написать это все одной процедурой в каком-нить замысловатом отчете, получим строк кода раза в 4 больше.
 
V

vbs

Рад, что у активного человека возникают естественные вопросы, ибо лучше поздно, чем никогда.
Сколько я на своем веку насмотрелся на "программистов" 1С, которые понятия не имеют о структурированном коде, а
учиться категорически не желают !
Конечно, в любой среде программирования желательны общие знания.
Так что всем рекомендую не потерявшую до сих пор актуальность монографию Дональда Кнута "Искусство программирования"
 
M

mialord

Заранее извиняюсь за дебильный вопрос, но надеюсь на понимание и исчерпывающие ответы. Я вот не очень понимаю (читать мой статус) зачем использовать много функций и процедур. Т.е. делаем обработку, в которой есть кнопка Сформировать, Таб часть и какие-то реквизиты. В принцыпе ведь все (включая и печать) можно описать в процедуре Сформировать. Понятно, что если понадобиться использование предопределенных процедур - их тоже в модуле выписать нужно. Но а если нет.
Когда я учился в Университете у меня, был один очень интересный преподаватель, которого я, наверное, буду помнить всю жизнь. Он забивал в нас не просто умение составлять програмный код, решающий поставленную задачу, но, что самое главное, объяснил, что мне, и любому программисту дорабатывающему мой код должна быть видна логическая цепочка действий програмного кода. От момента получения заказа на написание ПО, до момента реализации програмного кода есть этапы не менее важные чем усвоение решаемой задачи. И главным этапом является, создание логической цепочки обработчиков, решающих узкий спектр задач, что позволяет структуризировать задачу, на более мелкие и самостоятельные задачи, что при усложнении задачи, (заказчику потребовалось изменить алгоритм) в дальнейшем, является одним из самых важных вопросов.
Написать програмный код может каждый программист, а на современных ЯВУ даже некоторые неопытные пользователи, могут решать конкретные мелкие задачи программирования самостоятельно. Ибо в программе главное не код, а логика.
Конечно, многие задачи можно решить и в одной обработке, но далеко не во всех (Вычисление определителя матрицы n - ого порядка, вспотеешь решать в одной процедуре). Но если логически разбить задачу на подзадачи (этапы) решающие конкретный спектр вопросов и в общей процедуре завязать их в рекурсию. 1 Есть логика 2 Есть красота и изящность кода 3 Любой програмер может со справочником высшей математики разобраться в вашей задачи 4 А если еще у каждой задачи комент написать, так вообще изящно.
С другой стороны в 1С очень часто встречаются процедуры и Функции, которые в процессе разнесения кода потеряли логический смысл. Очень часто рассматривая код 1С у меня появляется вопрос, что одни модули писали действительно профи, но другие напичканы студентами - программистами, вот и получается в результате что нам многие модули не нравятся по своему исполнению, а к другим и не придерешся.
Сколько я на своем веку насмотрелся на "программистов" 1С, которые понятия не имеют о структурированном коде, а
учиться категорически не желают !
- человек написавший это уверен в своём опыте написания структуированного кода, но я теперь в нем совсем не уверен :rolleyes: , язык длинный, а вот действий я ваших не вижу, а по теме отбор8.1 вы написали дважды, и два раза написали глупость. Ха - ха экстра - профи :)

ВЫВОД: Я считаю, что для организации логической цепочки ПО необходимо, прамо таки жизненно, описывать обработчики конкретных этапов задачи, что облегчает понимание програмного кода, читабельность и, конечно, вызов этих маленьких помошников для решения всё тех же и тех же вопросов.
Пример: Открываешь TLB, и видишь, аккуратно упакованные процедуры и функции для решения конкретной, логически завершенной задачи. Открываешь эту процедуру (при наличии исходников) и видишь что задача решается решением нескольких более мелких задач, и, каждая подзадача должна быть логически завершена. Вот это код который я быстро усвою, быстро разберусь, и, буду в дальнейшем, с удовольствием его использовать.
 
K

KiR

Хотя тут требуется баланс между кусками кода, вынесенными в отдельные процедуры и читабельностью.
Вот тут и заключается самая большая трудность. Когда все же стоит выносить какое-то действие в отдельную поцедуру, а когда писать все в одной...
Может быть этому и учат в вузах, но я-то по образованию не програмер, проходил только 2 курса 1Сок, но там как бы на подобных вопросах не заостряли внимание - были важны другие более жизненые случаи типа как сделать то-то и то-то чтобы получить результат, а не как это красиво выписать. А и еще лет 7 назад вбивали в меня курс С++ но тогда меня это не сильно интересовало/занимало, а посеу и вопросов не появлялось что да как да почему, а тем более как лучше...
А так как сейчас работаю с 1Ской (чему-то научился) и думаю получать таки сертификаты - то и задумался над "правильностю" и "красотой" написания кода...
 
V

vitfil

Так что всем рекомендую не потерявшую до сих пор актуальность монографию Дональда Кнута "Искусство программирования"
Полностью поддерживаю! Замечательный труд! Не даром он переживает уже которое переиздание?
 
M

mialord

задумался над "правильностю" и "красотой" написания кода
Думаю даже не правильность и красота кода важны, а его оптимальность. Опять таки всё зависит от того что мы понимаем под словом оптимальность: производительность, читабельность или полнота. Вот так вот и получается что Kir поднял вопрос который нас всех рано или поздно начинает интерисовать. И вопрос на самом деле очень не простой, в чем мы уже убедились из ранних ответах.
 
V

vitfil

И вопрос на самом деле очень не простой, в чем мы уже убедились из ранних ответах.
Вопрос, на самом деле, простой. Ответы на него можно найти у того же Дональда и прочих Кнутов.
А вот в чем лично я убедился, точнее даже укоренился в своем мнении, что курсы 1С не делают человека программистом. Хотите стать программистом? Читайте книги по программированию, а не занимайтесь изучением языков программирования.
 
K

KiR

Ну как бы сама платформа 1С - эт тоже своего рода не совсем програмерская среда ИМХО. Т.е. некий узкоспециализированный продкут. Вот именно в этом ключе на курсах и учат. Да, програмист найдет массу вариантов расширить узкие возможности, но если нужно просто добавить несколько реквизитов в справочник или сварганить два три отчета - то тут как бы ни не обязательно быть квалифицированным програмером. Другое дело что скорость работы и "качество" написания будут естественно отличаться...
 
M

mialord

А вот в чем лично я убедился, точнее даже укоренился в своем мнении, что курсы 1С не делают человека программистом
Кха, кха, глупо было даже предпологать что курсы 1С сделают из человека программиста.
Читайте книги по программированию, а не занимайтесь изучением языков программирования
Хочу заметить, что книги решают далеко ни все проблемы. Да они помогают решать бональные вопросы, причем, чаще всего, вопросы привязанные к конкретному языку программированию. А вот философия программирования наробатывается годами или, например, логику заложенную в 1С можно понять только экспертным путем. Ну, если кто-то просто прочитал книжку и сел рулить, поздравляю, Вы гений :rolleyes:.
И еще, не согласен, с последней фразой. Читать книги можете сколько угодно, но надо, на самом деле, делать параллельно эти процессы. Поднял свой уровень, начал прогить по малу, появился вопрос, открыл книгу, рассмотрел советы, приподнял свой уровень. И вопрос ни шиша не простой. если вы знаете ответы, как лучше, и почему именно так, поздравляю вы снова гений :), но над этим вопросом уже давно карячатся, так как нет какого - либо единого языка программирования организованного идеально по всем тематикам (Имеются в виду ЯВУ)
ПРАКТИКА ВСЕГДА РАСХОДИТСЯ С ТЕОРИЕЙ

Kir +1, присоединяюсь
 
V

vitfil

если нужно просто добавить несколько реквизитов в справочник или сварганить два три отчета - то тут как бы ни не обязательно быть квалифицированным програмером.
Приходилось встречаться с творениями таких программистов...
Необходимо было фиксировать автора документа. Сделано было так: общий реквизит (строка) и в каждом документе:
ВводНового()
Автор = ИмяПользователя();
Я был в шоке! У человека был сертификат 1С.
Кха, кха, глупо было даже предпологать
Глупо было предполагать, что земля круглая, атом делим, скорость света - максимальный предел. Про корпускулярно-волновой дуализм я вообще молчу - бОльшей глупости и предположить трудно.
поздравляю, Вы гений
Спасибо, я это знаю!
поздравляю вы снова гений
и снова, спасибо!
А вот философия программирования наробатывается годами
Годами нарАбатывается опыт, а философия черпается из первоисточников. Или вы считаете, что каждый программист вырабатывает свою философию? Еще раз повторяю: не читайте книги по программированию на С++ или на Java, читайте книги по программированию (большая точка!).
Языки программирования - всего лишь инструменты, приспособленные для решения тех или иных задач. Само программирование лежит несколько в иной плоскости. Есть умельцы, которые срубят дом при помощи одного только топора, но в реальности приходится использовать множество инструментов (языков программирования) для решения тех или иных задач, которые возникают при строительстве дома.
На сей оптимистичной ноте заканчиваю. Спасибо многоуважаемой аудитории, что внимательно меня выслушали. Надеюсь, сделаете правильные выводы.
 
M

mialord

Языки программирования - всего лишь инструменты, приспособленные для решения тех или иных задач. Само программирование лежит несколько в иной плоскости. Есть умельцы, которые срубят дом при помощи одного только топора, но в реальности приходится использовать множество инструментов (языков программирования) для решения тех или иных задач, которые возникают при строительстве дома.
Надо же Америку открыли :).
скорость света - максимальный предел
Я вам посоветую, "читайте книжки" ;), ибо этот вопрос 2 года назад стал огромным вопросом, возникшим при моделировании взрыва сверхновой.
Или вы считаете, что каждый программист вырабатывает свою философию?
Именно!!! И не только программист, каждый человек нарабатывает в процессе жизни свою философию, ибо философия не является точной наукой, но является первоисточником всех наук. Именно благодаря содержанию в нас различных ответов, наработанных в процессе жизни, мы столь уникальны и неповтаримы, и воспринимаем одну и ту же картину, каждый по - своему, и видим мир по - своему.
Есть умельцы, которые срубят дом при помощи одного только топора, но в реальности приходится использовать множество инструментов (языков программирования) для решения тех или иных задач, которые возникают при строительстве дома.
Читайте внимательно, прежде чем что - либо писать
(Из предыдущего поста) нет какого - либо единого языка программирования организованного идеально по всем тематикам (Имеются в виду ЯВУ)
Именно из - за того что нет идеального языка... приходится использовать разнообразные языки для решения тех, либо иных задач. Например: БД - Delphy, COM,OLE,Active + - С. Это на моём личном опыте, для решения этих задач приходилось использовать различные языки, ориентированные, по моему мнению, в указанных направлениях, лучше остальных.
Надеюсь, сделаете правильные выводы.
Правильные для кого??? С чем - то я согласен, но с чем - то я котигорически не согласен, и подводить общую черту, подгоняя всех под неё, только на размере своих познаний, ГЛУПО.
 
K

KiR

Приходилось встречаться с творениями таких программистов...
Необходимо было фиксировать автора документа. Сделано было так: общий реквизит (строка) и в каждом документе:
ВводНового()
Автор = ИмяПользователя();
Я был в шоке! У человека был сертификат 1С.
Ну ИМХО тут стоит учитывать много фактров и не исплючать тот, что все люди разные. Возможно было мало времени, денег, опыта, желания... Кроме того не всегда можно обойтись только програмным продуктом, не регулируясь еще другими контрольными органами (диреторскими приказами, которые что-то запрещают и т.д. и т.п.).
 
E

etc

Например: БД - Delphy, COM,OLE,Active + - С. Это на моём личном опыте, для решения этих задач приходилось использовать различные языки, ориентированные, по моему мнению, в указанных направлениях, лучше остальных.
Надо отметить - опыт, мяхка говоря, скуден, посему не догма. :)

PS:Нравица мне 1с разборки, иногда учавствую. ;)
 
M

mialord

Надо отметить - опыт, мяхка говоря, скуден, посему не догма.
Вы пожалуйста когда пишите такие заметки описывайте на основании чего вы это сообщение пишите. А то получается свист в сторону и тишина.
Для разработки БД удобен язык программирования Delphy, он заточен на базы. Если ошибаюсь, пишите почему, и, я приму ваш ответ к сведению, либо отвечу почему вы не правы. С COM объектами наиболее сподручнее общаться на языке С, в данном случае заточка языка способствует более гибкой и привязанной работе с COM объектами. Если хотите что - либо прокоментировать всегда пожалуйста. Напишите в личные сообщения я обязательно, и с удовольствием ознакомлюсь с вашими умозаключениями. Дальнейшее отклонения по этой теме жду с удовольствием в личной переписки.
PS:Нравица мне 1с разборки, иногда учавствую.
В разработках 1С я не учавствую, а вы, насколько я понял учавствуйте. Ну, если честно даже приятно, что есть люди занимающиеся непосредственно разработками 1С. Ну не вижу смыска вашего поста. Вы не ответили на вопрос по теме. Тоже будет очень интересно выслушать ваше мнение, и мнения всех интересующихся посетителей форума, т.к. вопрос, я считаю, очень интересным, и даже философским.
 
K

KiR

Народ, я эту тему создавал не для споров, распрей, взаимообвинений и выявления истин. Просто в 1С достиг определенного уровня (когда ставиться задача и она каким-то образом реализуется - т.е. работает и ладно). Теперь же хочется разобраться глубже для того чтобы писать не просто код, который будет работать, а именно оптимальный "правильный" код. Так сказать для повышения образованности. Вот)
 
E

etc

mialord На основании ваших заявлений, очевидно. Ну а если вы придрались к моим ошибкам - специательно сделанным, то тогда ваш опыт в Delphy, действительно о многом говорит. :)

По существу вопроса, ну ок, если рассматривать программирование в целом, и не в связи с 1С, то таки я согласен по сути с vitfil.
Писать надо учиться правильно и красиво сначала, потом будет айайай.

и выявления истин
В программировании этого нету, тут даже бывает, что 2+2<>4. О! ;)

Теперь же хочется разобраться глубже
А ненадо разбираться, вот придете на работу к vitfil, или к такомуже, отгр*цензура*е сразу по самое неболуй, и все, на сим все разборки правильности канут в лету. это по дружески такой совет. ;)

ммммм, цитата из приватного сообщения
mialord На основании ваших заявлений, очевидно. Ну а если вы придрались к моим ошибкам - специательно сделанным, то тогда ваш опыт в Delphy, действительно о многом говорит.
Цитата(KiR @ 31:03:2009 - 11:38)
и выявления истин
В программировании этого нету, тут даже бывает, что 2+2<>4. О!

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

Цитата
В программировании этого нету, тут даже бывает, что 2+2<>4. О!

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

mialord

Ну, я вам уже отписался по этому вопросу. Хочу добавить только один коммент, "правильный" или "оптимальный" код написать не сможет ни кто:). Все это враки. Для начала необходимо определиться что для вас значит слово "оптимальный", а как "правильно" писать не знает никто. Я стараюсь как - то откорректировать ошибки в написании кода, так как нахожу места, которые, как оказывается, может выполняться с более высокой скоростью, если к решению задачи подойти иначе, не так как я её видел ранее. Есть много книг и статей посвященных этим вопросам, но так как я начинал писать не под 1С, а на Delphi 4. Когда вышла Delphi 5 меня заинтересовали вопросы правильности написания программ в дельфях. Я тоже собирал теоретический материал, какие-то моменты мне приоткрыл автор Кенту "Программирование для профессионалов", но множество вот таких вот, как вы называете, неоптимальных зон, мне приходилось искать самому методом проб и ошибок, анализируя ранее написанные программы, и замечая, новым, более профессиональным взглядом, свои ошибки и недочеты.
До сих пор, после большой самостоятельной работы, и после окончания факультета автоматизации (Разработка ПО для автоматизации деятельности предприяьтий), я не зкажу что научился писать "правильно", и я не скажу, что авторы книг научили меня писать правильно. Но я с большой уверенностью могу сказать, что я нахожу и исправляю, и стараюсь в дальнейшем не делать ошибки, совершенные мною ранее. Так что я возвращаюсь назад к старому посту и повторю еще раз. Нет теории которая Вас научит профессионализму, есть книги которые Вас могут напрвить в нужное русло. Но Ваш профессионализм - это ваши ошибки, и ваша критика написанного вами творения. Ваш профессионализм - это опыт, накопленнный врезультате решения конкретных поставленных перед вами задач, с самооценкой по выполненной вами работы.
Например: Оцените конкретную свою работу на красоту её выполнения по 100 бальной шкале. Откройте её через месяц, и, возможно, Вы её оцените уже на 95% так как видите, что можно было сделать иначе, лучше, быстрее, полнее. Это и есть результат вашего роста. Это и есть результат вашей работы над собой. Ни какая книга не заменит этого (я не говорю что не надо в таком случае их читать, они направляют Вас в нужное русло развития (ни все книги, к сожалению, а меньшенство)), это ваше, личное, накопленное. Поэтому заявляю что профессионализм - это опыт, а не умная книжка. по этому и говорю надо работать над реальными задачами. По этому и говорю надо переоценивать свою работу, критиковать с какой - либо переодичностью, критиковать беспощадно и безжалостно, с новым взглядом, с новым опытом, приобретенным вами за последнее время, т.к. если Вы подняли этот вопрос - это значит, что Вы уже находили в своих програмных творчествах, то что уже хотите изменить, т.к. это не так, не то, это должно быть иначе. Это происходит потому что Вы растете, ваши познания расширяются, а Ваш опыт говорит Вам как лучше поступить в том или ином случае.
Я всегда сравнивал программированием с исскуством. Пускай 1000 человек напишут одну и ту же картину, вложат в неё свои знания, опыт, а порой и душу. И вы не найдете 2 абсолютно одинаковых решения и это не потому что они читают разные книжки, факторов много, и об этом обо всем я не напишу на форуме, это книга и причем не одна, но ряд факторов Вы должны и сами осознавать. ВНИМАНИЕ: Это не относится к студентам институтов у которых две программы из двух абсолютно идентичны - это значит, что кто - то из них, а возможно и оба, не вложил в эту программу не только знания, но даже не проявил к ней минимум уважения :).
Мда, пол книги получилось. Надеюсь я все же смог передать свои мысли, которые я отстаиваю в этой теме, если нет, прошу извенения за то что не смог, либо мне не дано, либо Вами не взято. Удачи в познании и в самоосознании. В этй теме пишу Вам жирное ПОКА т.к. для меня вопрос решен, я сам для себя нашел много ответов отвечая Вам, и это хорошо. :)
 
K

KiR

Давайте вернмся в тему. Попрошу пожалуйста примеров. Вот стоит какая-то задача, ну скажем загрузить некие данные в бд. Понятно, что рисуется некая форма диалога и переходим к модулю. На каком этапе начинается использование процедур (кроме одной, которая привязанна к кнопке)? В смысле в какой последовательности следует "планировать" структуту модуля? надеюсь понятно объяснился?...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!