А как создают программы?

Любитель-испытатель
7/25/2006, 11:29:59 AM
(Unknown_Identifier @ 28.06.2006 - время: 01:25) Лично я, конечно, обычно могу объяснить свой код, если сам помню как он работает. А если не помню - то могу быстро разобраться/вспомнить. А вот другие разобраться обычно не могут. В коде комментариев почти нет, зато детально описаны интерфейсы. Т.е. код - это личное, даже в командной работе. Хотя раньше работал по другим правилам и нужно было строго соблюдать правила кодирования (и делать понятный всем код).
Ага - личное дело. Когда в команде 20 разработчиков, то код становится далеко не личным делом, а общественным. Так что комменты оставлять надо, а в большинстве случаев нужно. Другое дело когда программируешь для души. Можно и без коментов тогда.
Unknown_Identifier
7/26/2006, 4:47:13 AM
(Любитель-испытатель @ 25.07.2006 - время: 07:29) Ага - личное дело. Когда в команде 20 разработчиков, то код становится далеко не личным делом, а общественным. Так что комменты оставлять надо, а в большинстве случаев нужно. Другое дело когда программируешь для души. Можно и без коментов тогда.
Все зависит от организации труда. Втч предусмотрена ли ситуация, что другой человек будет вносить изменения в реализацию написанных мной функций. В моем случае это исключено, т.к. эффективнее пнуть автора кода, а если это невозможно, то либо разобраться (если просто), либо переписать. Ибо простые вещи и так понятны, а сложные - они и с комментариями сложные. Проще и надежнее переписать, чем влазить и создавать тем самым баги. Ну и конечно писать надо так, чтобы необходимость переписывания не возникала :)

Да и если даже 20 разработчиков, то это ж не значит, что все они пишут код :)
Тем более одного проекта. Шибко уж большой проект будет :)
mvf23
8/9/2006, 1:27:07 AM
Ну для разминки о себе. Раз уж тут все так живописано описываютте языки которыми овладели. Начинал я тоже со Spectrum'a... Сачала был бейсик, потом ассемблер для Z80. (К слову асм у Z80 и x86 все же отличается, хоть и не приципиально, но довольно заметно.)

Потом был долгий перерыв, потом был турбо паскаль (для PC), потом асм для PC, C++, потом (ужас!) TCL/Tk, Delphi, JavaScript, PHP и потом ещё много всего... :) Сейчас дописываю первую софтинку на Python. Кстате очень советую - можно на нем и не писать но ознакомиться оч. советую - крайне интересный, удобный и довольно нетипичный язык.

А вообще на чем писать - не важно. Я иногда пишу на бумажке. :)

2 JeyLo: я поражен :) Жена, вещающая про цепи Маркова - это сильно... Боюсь даже спрашивать над какими проектами вы с ней работаете, если ты считаешь что для того чтобы стать программистом нужно изучать машины тьюринга, а жена вещает про цепи Маркова... :) Это скорее фундаментальные основы информатики, чем практические вопросы обычного программиста.

И возвращаясь к теме. Моя версия того что нужно, чтобы стать программистом:

обладать соответствующим складом ума

написать свою первую "Hello, world!"

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

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

Напиать несложную программу.

Написать сложную программу.

Теперь можно считать себя начинающим программистом. Если после этого останется желание стать законченным программистом - нужно почитать трехтомник Кнута, изучить ещё 3-4 языка программирования, поработать пару лет программистом.

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

Как вариант можно вместо всего этого сначала поучиться в школе, а потом в вузе. :)
DELETED
8/9/2006, 3:34:59 PM
Как вариант можно вместо всего этого сначала поучиться в школе, а потом в вузе. :)

Да уж, тут с тобой поспорить нельзя wink.gif
DELETED
8/9/2006, 7:31:57 PM
(mvf23 @ 08.08.2006 - время: 21:27) Жена, вещающая про цепи Маркова - это сильно... Боюсь даже спрашивать над какими проектами вы с ней работаете, если ты считаешь что для того чтобы стать программистом нужно изучать машины тьюринга, а жена вещает про цепи Маркова... :) Это скорее фундаментальные основы информатики, чем практические вопросы обычного программиста.

Обычный программист сталкивается ежедневно с этими фундаментальными основами. А кодеру все эти алгоритмы нафиг не нужны, для этого есть формы, да компоненты всякие. И в результате у него не ПО, а хаотичный набор кода. Я вон лет десять назад считал себя талантливым программистом - на кривой кобыле не подъехать, а теперь мне листинг на глаза попал своего же кода тех времен. Коммерческого, заметьте, кода. Короче если бы я был тогда своим начальником, то уволил бы себя без выходного пособия и с волчьим билетом. И в морду бы дал. Дважды. Бред на бреде и бредом погоняет. Основ фактически никаких, только все начиналось, а мнения о себе - выше крыши. Зато сейчас ко мне приходят студенты, и если у него в голове отложилась Кнута наука, то он наш клиент, а если у него в голове задержалась часть специфического API и он не слышал о Тьюринге - бай-бай! Понимаете о чем я? :) Не важно знать API, как важно понимать логику и суть. А на все остальное есть MSDN, маны, RFC и так далее. :) Программирование - это неземная красота логики, творчество, базирующееся на строгой стандартизации. Это вечный путь к совершенству. А начать можно двумя способами - или сначала себе выстроить фундаментальными основами скоростную магистраль, или брести в калошах по киселю проб и ошибок.


Без основ профессионалом не стать, каким бы ты талантливым и гениальным не был. Имхо. :)))
mvf23
8/9/2006, 9:01:14 PM
Обычный программист сталкивается ежедневно с этими фундаментальными основами.

Хм... Ну конечно если задуматься. То, пожалуй, конечно сталкивается. В принципе мы и физику ежедневно видим в самых извращенных проявлениях... На эту тему позволю себе небольшой оффтопик (да простят меня модеры):

Все я думаю слышли такое словосочетание: "Сферический конь в вакууме." Но мало кто слышал анекдот который и породил её. Итак.

---- cut ----

Ассоциация букмекеров наняла биолога, математика и физика, чтобы они разработали метод прогнозирования результатов забегов. дали каждому по миллиону баксов и году времени.

Год прошёл, заслушивают отчёты.

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

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

Физик: мне нужны ещё 10 миллионов баксов, лаборатория, штат ассистентов и пять лет времени. а пока я разработал только модель победы сферического коня в вакууме..

---- cut ----

:)

Это я к тому что мы ежедневно видим такую немерянную физику, которую никогда в жизни не смоделируем и не просчитаем. В принипе жить это мешает не очень сильно. :)

Так вот, точно также, хотя теория Тьринга и Поста, цепей Маркова, и много чего ещё и лежат в основах не только программирования, но функционирования компьютеров вообще (с некоторой натяжкой), это нисколько не мешает не только пользоваться компьютерами, но и писать какие-нибудь в меру полезные программы.

сначала себе выстроить фундаментальными основами скоростную магистраль

В принципе конечно в этом что-то есть, но это уж слишком фундаментальный подход. Это все равно что рассказать школьнику аксиомы геометрии и тут же попросить, ну скажем, посчитать площадь треугольника... Ведь собственно - эти аксиомы - совсем неплохой фундамент, и Лобачевский показал что без него все совсем по-другому :)

Кстати из знание и глубокого понимания фундаментальных основ вовсе не следует умение применять их на практике. А программист - это прежде всего практик.

Есть у меня один знакомый кандидат физ.-мат наук, доцент. Почтенный дядечка, работает в университете. Может расчитать что угодно. Специализируется на моделировании распространения электро-магнитных волн. Периодически рассчитывает вские суровые вещи - типа оптимального расположения базовых станций сотовой связи в городе, с учетом высот, затроек и т.д и т.п. Короче монстр в этом деле. А вот мобильным телефоном пользоваться не умеет :)

JeyLo: Я так полагаю что и ты начинал не с теории Тьюринга? :) Боюсь что тогда бы все изначально показалось бы слишком неинтересным и скучным, чтобы этим заниматься. :) И завязал бы в самом начале. Так что все же по-моему гораздо путь когда изначально учишься что-то делать а потом начинаешь понимать что на самом деле происходит. :) Это вполне естественный и физиологичный процесс - ведь мы сначала учимся ходить, и лишь значительно позже понимаем благодаря (точнее вопреки) чему умудряемся стоять на 2-х ногах. Знали бы мы как сложно устроены ступни и ноги человека, как сложно просто балансировать, удерживая на 2-х конечностях туловище, не говоря уж о том чтобы ходить - думаю что сейчас бы все ползали... :)

Не важно знать API, как важно понимать логику и суть.

А вот тут согласен на 110%. :) Все же сейчас подавляющее число людей называющих себя программистами - обычные кодеры, которые освоили один или несколько инструментов для работы. Если я правильно понимаю - JeyLo скорее даже и не программист, а архитектор ПО. (По крайней мере в англ. это так называют.)

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

Ага... В точку. Или одним словом - это искусство. (с) D. Knuth. :)

Эх, если бы все писали программы как Кнут!.. :) и были бы готовы платитть деньги за найденные баги... :) (я имею в виду TeX)
DELETED
8/10/2006, 9:07:39 PM
(mvf23 @ 09.08.2006 - время: 17:01)Хм... Ну конечно если задуматься. То, пожалуй, конечно сталкивается. В принципе мы и физику ежедневно видим в самых извращенных проявлениях... .... видим такую немерянную физику, которую никогда в жизни не смоделируем и не просчитаем. В принипе жить это мешает не очень сильно.
Однако программист видит алгоритмы :) каждый день, а разве само понятие "алгоритм" не фундаментальное? Деревья, сортировки, списки, графы и далее - все они обычные, скромные фундаментальные понятия, которые невозможно не понимать и быть при этом программистом. Да и вообще, сомневаюсь, что возможно ощутить вкус алгоритма, не поиграв в простейшие автоматы. А разве можно переходить к автоматам, не нарисовав десяток-другой блок-схем? А представления Бэкуса-Науэра? Как без всего вышесказанного можно выучить алгоритмический язык? :) Так что, имхо, не задумываются о фундаментальных основах и понятиях или те, кто их не знает, или те, для кого эти основы характеризуются ёмкой фразой "это же очевидно" (или, как Вы верно подметили, ходят на двух ногах, не задумываясь, как же оно все работает). :)

(mvf23 @ 09.08.2006 - время: 17:01)JeyLo: Я так полагаю что и ты начинал не с теории Тьюринга? :)
Вы не поверите, я начинал с книги про архитектуру VAX/DEC wink.gif одновременно со знакомством с ГДР'овским чудом под названием Robotron. И в том, и в другом я мало чего понимал, но зато определился с будущей жизнью и буквально через полгода проводил все время в советской еще конторе, занимавшейся тогда разработкой микроконтроллеров. :)

(mvf23 @ 09.08.2006 - время: 17:01)Боюсь что тогда бы все изначально показалось бы слишком неинтересным и скучным, чтобы этим заниматься. :)
О, нет! Это было потрясающе. Прямо как первый секс. Нет, лучше. Первый секс был в подъезде и не помню с кем, а первое осознание красоты алгоритмов пришло под характерный запах и звук работающей техники в огромном зале с высоченными потолками, где из людей был только десятилетний пацан... До мельчайших подробностей помню свою первую программу. Конечно у меня ничего не получилось, но каково оно было.... А первая работающая программа? :)) А через восемь лет попытки придумать алгоритм сортировки лучше чем у Кнута? Эхх... Сейчас разрыдаюсь.

(mvf23 @ 09.08.2006 - время: 17:01)Если я правильно понимаю - JeyLo скорее даже и не программист, а архитектор ПО.
wink.gif


Впрочем, в чем-то неуловимом мы сходимся во мнениях. Не все определяется пограничными состояниями.
mvf23
8/10/2006, 9:35:35 PM
Впрочем, в чем-то неуловимом мы сходимся во мнениях.

Сходимся, и однозначно drinks.gif

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

Правда похоже мы тут всех распугали такой дискуссией vampire.gif
doodge
8/2/2007, 7:19:27 PM
(mvf23 @ 10.08.2006 - время: 20:35)
Мнения разошлись только по поводу того с чего нужно начинать. Как идти к такому "просветлению". 0073.gif Но вобщем-то это, наверное, не главное.

Правда похоже мы тут всех распугали такой дискуссией vampire.gif
biggrin.gif
вот вот))

прочитав всё тему "от корки до корки" (вредная кстати привычка - т.к. вы сами поняли почему))))

для себя уловил что не плохо начинать с C++? А!? скачал с инета книгу Д.Стефан -а С++ для чайников, начал читать потихоньку, еще хочу сказать что раньше не программил, но в школе и техникуме проходили Basic, алгоритмы тоже рисовали


ну так что я хотел уточнить, С++ возможно начинать 1-st или же для первого изучения что попроще нужно? как считаете?
DELETED
8/2/2007, 7:49:54 PM
(doodge @ 02.08.2007 - время: 15:19) ну так что я хотел уточнить, С++ возможно начинать 1-st или же для первого изучения что попроще нужно? как считаете?
Паскаль и бейсик. С полгода на них, а потом уже можно и к C перебираться.
barrakuda
8/2/2007, 11:13:29 PM
Паскаль и бейсик. С полгода на них, а потом уже можно и к C перебираться.

А для меня сущий изврат, начинать с паскаля, чтобы затем перейти к С. А потом мучительно отучиваться от этих Begin End и привыкать к {} biggrin.gif
do-do
8/3/2007, 12:19:15 AM
Вообще то Наиболее правильный подход - постановка задачи (да хоть редактор написать например) Оценка потребного софта. Алгоритмизация. Ну и само исполнение - НА ЛЮБОМ понравившемся языке (понятно, он должен быть адекватен, кому и Форт язык, кому Паскаль, а кто кроме Джавы ничего слышать не хочет)
Но полезно Знать 3-4 языка
DELETED
8/3/2007, 12:39:58 AM
(do-do @ 02.08.2007 - время: 20:19) Но полезно Знать 3-4 языка
Наиболее правильный подход - почитать Кнута. Все остальное - пыль. Для нормального программиста язык - лишь средство реализации.
doodge
8/3/2007, 1:58:38 AM
(JeyLo @ 02.08.2007 - время: 23:39)
Наиболее правильный подход - почитать Кнута. Все остальное - пыль. Для нормального программиста язык - лишь средство реализации.
JeyLo понятно, но всё же для начала я считаю нужно изучить это самое средство!!! хотя бы одно (один язык) а потом уже совершенствовать себя.
do-do
8/3/2007, 11:52:54 AM
(JeyLo @ 02.08.2007 - время: 20:39)
Наиболее правильный подход - почитать Кнута.
Ага, а если прочитаешь телефонный справочник, то будешь крутым телефонистом :)
Без практики, суха теория мой друг.
Поэтому реальные перцы идут на Link1, Link2, Link3 и тп - скачивают или прямо в браузере используют MIX машину и евоЙный компиллятор (можете сразу глянуть по ссылке2) и только тогда плотно изучают эти великолепные книги, решая примеры!
Только нужно учесть, из помоему планируемых 7 томов написано только 3 (про четвертый слышал глухие упоминания - типа пишет)

А так, поглядеть из спортивного интересу себя - можно ТУТ
DELETED
8/3/2007, 8:35:39 PM
Любители учиться (сам таким был) могут, конечно, начинать с теории.

Но важнее, мне кажется, осознать необходимость чего-либо.

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

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

Первый комп у меня был БК-шка. Прилагались зашитый BASIC и FOCAL на внешней ПЗУ-шке. BASIC не понравился сходством с Fortran-ом. Купил книжку по фокалу, тупо накодил игрушку из примера в книжке ("змейка"). Не работает! Вот с этого момента стало интересно, нашел три ошибки в коде - и оно заработало! Когда заработало, снова стало неинтересно...

Появились несколько DOS-ов для БК-шки (в Питере). Купил дисковод, дискету с осью. Дискета была защищена от копирования, а хотелось поделиться с друзьями. Летать за дискетами в Питер из Владивостока было несколько накладно... Засел за asm PDP-11 - и через энное время взломал защиту - забил NOP-ами процедуру проверки результата чтения искусственно сбойного блока...

Так что у меня двигателем изучения программирования были прикладные, интересные лично мне задачи.

В процессе решения задач начинаешь понимать красоту или ублюдочность некоторых приемов. В свое время поразился способу формирования суммы прописью у одного паренька на Fox-е. Прилагаю.

При всем при том я НЕ программист. Железячник. Системщик.
DELETED
8/3/2007, 8:57:07 PM
(doodge @ 02.08.2007 - время: 21:58) JeyLo понятно, но всё же для начала я считаю нужно изучить это самое средство!!! хотя бы одно (один язык) а потом уже совершенствовать себя.
Такое впечатление, что Кнута тут никто не читал.. )
do-do
8/3/2007, 9:49:25 PM
что Кнута тут никто не читал.. )
Руку тяну
-Я, я дяденька читал.... - и опасливо
-Ток давно это было
DELETED
8/4/2007, 12:02:11 AM
(do-do @ 03.08.2007 - время: 17:49) Руку тяну
-Я, я дяденька читал.... - и опасливо
-Ток давно это было
(сурово)
Ну-ну....
maxdiversexnarod1
8/8/2007, 3:12:56 AM
Наиболее правильный подход - почитать Кнута
Позволю себе не согласиться :)
ИМХО лучше набор Кормен + Сейджвик + Шень + Вирт + Окулов (по убыванию сложности).