Форумное образование
Давно уже меня огорчает одна мысль, что программист-самоучка с помощью форумов может развиться только до определенного уровня, обычно недостаточного для профессиональной работы. То есть, с помощью форумов можно разобраться, как грамотно писать маленькие программы, как использовать какую-то технологию, но знания о грамотной разработке больших программ получить затруднительно.
Ну, возможно, если хорошо разобраться в паттернах, то можно пытаться говорить, о том, какие из них надо применять в той или иной программе. Но так могут быть упущены разные мелочи в коде, которые важны именно в больших проектах.
Кроме того, так не появится опыт работы в команде и т.п.
Примерно то же можно сказать и про обучение по книгам – не всегда поймешь, какую надо читать и для чего. Кроме того, идеи, изложенные в книгах не будут правильно поняты, если нет соответствующей практики.
---
Возможные альтернативы для развития, которые я вижу:
1. Устроиться на работу, где есть команда грамотных программистов, разрабатывающих большие проекты. Это, наверно, наиболее эффективный способ, но не всегда подходящий. Например, если уже есть хорошая работа (по другим параметрам подходящая), или нет подходящей фирмы в родном городе, или там не нужен программист такого уровня.
2. Копаться в исходниках крупных проектов с открытым исходным кодом. Желательно, чтобы эти проекты были бы аналогами того, что создает программист самоучка. Это непредсказуемый путь, так как не отличишь ошибочное решение от правильного, и поспорить об этом не с кем. Да и "переварить" кучу кода бывает тяжело.
3. Участвовать в развитии существующих проектах с открытым кодом. Если есть контакт с другими авторами, то, наверное, это хороший путь для развития. Недостаток тут в том, что проект уже готов, и многие этапы его развития останутся не прочувствованными. Хотя может это и не требуется для большинства программистов.
4. Создать собственный учебный проект с открытым кодом, рассчитанный на команду. Это хороший путь, но наиболее фантастический. Тут и идея интересная нужна, и команда самоучек с похожим опытом, и организатор, и какие-нибудь опытные кураторы... Вроде бы и самоучкам будет опыт, и кураторы будут знать кто на что способен, если надо будет найти программиста для работы. Но вот организовать такое дело обычно невозможно.
---
Вопросы. Заблуждаюсь ли я относительно возможностей форума? Есть ли еще какие-нибудь альтернативы для развития?
Извините, за большой текст.
Все возможно. Главное - иметь желание.
Форум может помочь в отдельных частях программы (полностью поддерживаю всю первую часть сообщения Kogrom). А вот насчет второй части, по поводу альтернатив. Почему не рассматривается вариант обучения ? Насколько я знаю, не все программисты в наше время работают по специальности. Следовательно они не знают некоторых деталей, которые преподают в ВУЗах
Пример. Я являюсь программистом - самоучкой. В школе информатику нам вообще не преподают (а я 11-классник!!!), мне понравилось когда я случайно наткнулся на программирование. Изучал исключительно с помощью форума(кстати именно CodeNet). Скачивал отсюда учебники. Учил Паскаль и С++ но понимаю, что многого не знаю. Например, я читал вопрос-ответы на форуме и почти уверен что тут если и сделаю ошибку, то смогу исправить. Но я не знаю азов! Поэтому я для себя определился, что хочу получить специальность "Программист". И надеюсь, что в ВУЗе мне расскажут и объяснят многие детали программирования....
Спасибо, что дочитали до конца)))
Ну все же, ВУЗ дал хотя бы начальные знания? Я не спорю, что для развития все же надо дополнительно читать книги, спрашивать на умных форумах и главное, конечно, не потерять интерес.
А про остальные предметы : меня уже морально подготовили к этому)))
Еще вопрос :
проблема только в том, что скучно и неинтересно? Я только попробую предположить, что это можно уже пережить) в крайнем случае, заниматься в это время... цитирую с изменениями...
Если я где-то ошибся, исправьте пожалуйста.
Университет - здесь уже сложнее. Трудно сказать дадут ли там какие-то основы или нет. По-крайней мере трудно для меня, потому как я всегда бежал вперед программы. Вообще с университетами и нашей специальностью сейчас складывается нехорошая ситуация. Потому как к сожалению падает профессиональный уровень преподавателей, потому как те люди, который действительно хорошо смыслят в нашем деле, преподавать не останутся.
Лучшее образование - это однозначно книги и только книги. Без них никуда. Причем читать их приходится все время, чтобы не отстать от прогресса.
Ну и конечно книги хорошо, но без практики ничего путного не выйдет. Только на практике можно узнать все мелочи и тонкости нашей деятельности.
1. Курсом математического анализа (1 - 2 курс), который "ставит" мозги (если, конечно, есть желание и нормальный преподаватель).
2. Системностью программы обучения. По книжкам очень многому можно научиться в отдельных областях, но упустить что-то элементарное и важное в смежной области.
Форум все же не источник образования, но позволяет самоучкам обнаружить пробелы в системе своих знаний. И, часто, пути их восполнения (конкретные книги и т.д.)
:)
Это вполне может быть и работа в офисе на полный рабочий день.
Все возможно. Главное - иметь желание.
То, что сразу приходит в голову, когда учишься - купить хороший учебник и изучить. Однако, тут можно нарваться на плохой учебник (особенно, если он от отечественных авторов). То есть форум может дать совет по хорошей книге.
Второе. Книгу не поймешь, если не делать практические упражнения. При этом самоучка не всегда сможет понять - грамотно и оптимально он написал маленькую программу или нет. Форум же дает задачи для решения, опытные участники форума показывают ошибки самоучки. Так самоучка может грамотно научиться писать маленькие программы.
Не совсем так. Не на каждый сложный вопрос можно получить ответ. Пример: есть глюки в большой программе и выделить в чем они - трудная задача. Тут, конечно, можно выкладывать архив с программой, как делают наивные люди. Но кто же это будет читать?
Еще хуже - если программа работает без ошибок, но написана самым кривым образом и самоучка этого не видит. Тут уже никто ему не поможет.
То есть, довольно трудно дать советы по проектированию больших программ, и т.п.
Если я не ошибаюсь, то в ВУЗах в лучшем случае научат хорошо писать маленькие программы, работать в одиночку. Но опыт создания большого проекта, созданного командой, в ВУЗе наверное не получают (возможно, я заблуждаюсь).
Кто мешает читать книги, указанные в закреплённой теме "общих вопросов программирования", писать новые программы с учётом полученных знаний, а где непонятно - спрашивать на форуме? Вопрос вида "как разрулить такую вот диаграмму классов?" лично мне кажется более интересным, чем вопрос по взаимодействию двух форм.
Конечно, с профессионалами, обучаемыми другими профессионалами, такой подход вряд ли поможет сравниться, но для самостоятельного обучения будет весьма неплохим подспорьем.[QUOTE=Kogrom]Но опыт создания большого проекта, созданного командой, в ВУЗе наверное не получают (возможно, я заблуждаюсь)[/QUOTE]В ВУЗе получают любой опыт, который реально хотят получить.
Смотря в каком вузе и какой опыт. Если конечно ты понимаешь под "в ВУЗе" - от официальных преподавателей, а не за годы, потраченные на получение ВО.
Если я правильно понял, пишете о том, о чем я писал в первом сообщении:
Кроме того, так не появится опыт работы в команде и т.п.
Ну что же. Можно и с этого начать, хотя такой путь немного ущербный.
Что посоветуете изучать для начала? "Паттерны проектирования" от "банды четырех" или может что-то про UML? Вон, смотрю, в Общих вопросах, в двух сообщениях еще какого-то Мартина Фаулера советуют. Может с него начать?
Мне пока что не сильно страшно, но вообще меня это уже напрягает, что я не знаю элементарных действий. Например, как использовать отладку)) это вообще стыдно, но мне можно признаться, мне вообще никто не рассказывал про программирование. Все, что знаю, сам изучал.
Могу сказать, что учусь я ради корки, и спецу выбрал, потому что престижная и больше к моей области лежит. Потому что вышка дает многое, по крайней мере её наличие (тем более это плюс к зарплате).
Чисто на программиста учиться - смысла не вижу. Только зря годы потратишь. Лучше выбирай профессию, которая более востребована + требует навыков программирования. Так как программированию можно научиться и самому (сам научился тем языкам, которые знаю).
Если можно, поподробнее пожалуйста. При условии что программист все таки востребованная профессия. А востребованность я все таки проверю как-нибудь...
Наверное ты хотел сказать "языку программирования". Тут не спорю. А вот сам процесс + отладка(как я говорил - больное место) самому будет ТЯЖЕЛО (я не говорю нереально) понять и разобраться. Особенно начать!
Ну, это только ИМХО
Если можно, поподробнее пожалуйста. При условии что программист все таки востребованная профессия. А востребованность я все таки проверю как-нибудь...
Я к тому, что программистом можно быть и самоучкой) Причем на работе будут смотреть именно на твои умения. А программированию в универах учат так себе. У меня было 2-3 препода по программированию по С++. Если честно, то мне кажется, что я больше них соображаю. Когда один препод у меня просит исходники, чтобы разобраться как я со StringGrid работаю, с другим я вообще хавался из-за того, что я вот такие - /* */ - комментарии использовал, типа не надо так:D
Я к тому и говорю, что чистая профессия программист - это зря, потому что можно самому научиться программировать без хождения в универ. Надо что-то такое, чтобы было в комплексе.
Нет, именно программированию) Если научиться хорошо программировать на одном языке, то другие будут даваться в разы легче. Я, например, оч.хорошо знаю PHP и JavaScript. И, считай, только благодаря этому я очень быстро писал проги на С++ и паскале, так как знаю саму логику. Ну точнее как там строку обработать, как реализовать какой-то подход. А уж языки - это роли не играет.
Ну такие вещи с опытом приходят) Хотя это сложно, согласен
А я кстати не соглашусь в очередной раз. Рассуждать по конкретному ВУЗу о всех неправильно. Я например своим ВУЗом был вполне доволен. И преподаватели там были именно профессиональные и атмосфера соответствующая. Да хороших вузов может и немного в этом направлении. Да видимо отраслевые вузы - те вобще зачахают. Но надо просто грамотно выбрать сразу. Вы же когда себе технику или, например, автомобиль выбираете, тоже ведь не от балды первое попавшееся берете. =)
А насчет того, что не захочешь учиться - никакой ВУЗ не поможет. Ну да так. Только на нашу специальность в хороший вуз обычно не идут те, кто не хочет учиться. И есть еще общая атмосфера, традиции в ВУЗе, на факультете, которые поддерживают тебя в этом. Если так повелось что нужно хорошо разбираться в изучаемой области - и это нормально, а иначе не круто и вобще как то для неудачников, это стимулирует студентов. Если же принято всеобщее разгильдяйсто (а я видел много и таких вузов), то понятно студентам будет сложнее мотивировать себя. ))
Книги – это конечно хорошо. Но они дают только теорию, которая без практики плохо воспринимается. Если самоучка в одиночку делает проект по книгам, то все равно будет "вариться в собственном соку". Он будет лишен необходимой критики, советов, и соответственно проекты его будут ущербными.
Между тем, сейчас наступает экономический кризис, и работодатели будут иметь возможность нанять грамотного специалиста, вместо студента. Таким образом, у студентов будет меньше возможностей научиться разрабатывать большие проекты.
Отсюда вопрос. Есть ли люди, готовые участвовать в учебном проекте с открытым исходным кодом?
Цель проекта:
1 Освоить грамотное использование ООП в проектах среднего размера (около 10000-50000 строк кода).
2 Освоить грамотный рефакторинг кода.
3 Научиться использовать чужие разработки с открытым исходным кодом в проекте.
4 Освоить работу в команде удаленных разработчиков.
Задачи сделать полезный и оригинальный проект не ставится, главное, чтобы был рабочим.
Понимаю, что идея скорее всего не реализуема, но вдруг что-то получится.
Учебный проект с открытым исходным кодом
Предполагаемые условия и средства разработки:
1. Язык разработки – c++, как наиболее демократичный.
2. Операционная система – Windows XP (2000, Vista). Эту ОС используют большинство начинающих программистов-самоучек.
3. Готовые библиотеки классов на первом этапе не используются – только самодельные и стандартная (STL), с учетом наработок Boost, MFC, WTL, wxWidgets и т.д. Использование готовых библиотек отложено до этапа рефакторинга.
4. Компилятор для некоммерческого проекта должен быть свободно распространяемым, поэтому будет использоваться порт MinGW для GCC.
5. IDE: Code::Blocks. Обсуждается.
6. Репозиторий: SVN.
7. Сервер для репозитория – пока не найден.
8. Средства общения: IRC, ICQ, форум.
Идея проекта.
Редактор роликов для Театра Смайликов. Думаю, это для учебного проекта как раз подходит – весело и бесполезно. Если данная идея не нравится, то у меня есть еще парочка.
Участники:
1. Организатор. Пока я. Обязанности: освещать ход развития проекта, привлекать людей.
2. Разработчики: программисты-самоучки для которых и затевается этот проект. Обязанности: проектировать программу, писать код. Требования: знать основы ООП в c++ , STL (контейнеры, потоки, алгоритмы), основы Win32 API.
3. Кураторы: опытные программисты, имеющие опыт в создании крупных проектах. Обязанности: отслеживать изменения проекта, указывать на ошибки, давать советы. Требования: знания на уровне п.2 и опыт работы в крупных проектах.
4. Руководитель. Не знаю, для чего он нужен, но обычно таковой в больших проектах есть.
5. Возможно, художник. Художником также могу быть я (способностей на учебный проект хватит - уровень моего художественного мастерства можно оценить по аватарке).
Приблизительные сроки.
1. Поиск участников, согласование средств, идей: декабрь 2008 – конец января 2009.
2. Проектирование, написание кода: февраль 2009 – январь 2010.
Поясню: так как предполагается, что основное участие примут студенты, то лучше начинать проектирование и написание кода после зимней сессии. Кроме того, мне надо теорию почитать.
Выгода:
1. Для разработчиков – опыт, новые умения.
2. Для кураторов – пока не придумал. Возможно, любопытство.
Уфф... Надеюсь, правила форума не нарушил.
Книгу нашел и проглотил за день (хорошо идет, когда тайком вместо работы). Еще неделю буду осознавать.
Некоторые идеи понравились – их можно использовать и при программировании в одиночку.
Однако состав операционной бригады в книге подробно описан только для коммерческого проекта. Для учебного проекта он дан очень кратко: четыре человека, из которых один – архитектор, другой – менеджер, остальные двое – неизвестно кто. Наверно, тут можно назначить инструментальщика и отладчика.
Вроде бы, для лучшей работы необходимо, чтобы все участники учебного проекта прочитали книгу, но в ней много устаревших примеров (типа, как разделить один компьютер на 60 программистов). Да и в конце книги автор вдруг выкладывает, что некоторые идеи, изложенные в книге, были ошибочными. В общем, тут лучше какой-то конспект сделать. Хотя пока желающих принять участие проекта совсем мало, а как напишу ТЗ и план развития – их станет еще меньше :)
Отдельно порадовала глава про блок-схемы :D
Почему? Их не стоит читать???:rolleyes:
Вот к каким выводам я пришел, почитав теорию.
В идеале, хотелось бы создать программу со структурой, которая позволила бы с наименьшим трудом перенести программу на другую ОС, на другой язык (например, перенести с c++ на java). То есть представляется некоторая модель, в которой можно было бы с наименьшими усилиями заменить любую деталь на какую-то другую.
Пока же, к сожалению, есть опыт создания программ типа снежного кома. То есть некоторые детали, которые снаружи кома заменить сравнительно легко, а то, что внутри заменить невозможно, не разобрав весь ком. Да и вообще, на определенном этапе работать с таким "снежным комом" становится трудновато.
Естественно, я не хочу делать очередной "снежный ком". Поэтому предполагается для начала сделать подготовительный учебный проект с внятной структурой. Думаю сделать что-то типа простейшей базы данных. Может еще что-то более простое придумаю - что не жалко несколько раз начинать собирать с нуля, пока получится нужный результат.
Пока всё. Продолжаю изучать теорию.
Первое. До прочтения книг по проектированию я не знал, как разделить проект на нескольких участников. Теперь появились кое-какие мысли.
Например, нужно мне создать программу с графиком. График начинающему программисту (мне) представляется монолитным куском программы и трудно представить как его сделать вдвоем, втроем. Но можно построить диаграмму на которой программа будет разделена на несколько почти независимых кусков, как сделано тут:
http://forum.codenet.ru/showthread.php?t=52913&page=2
Теперь один программист может создавать класс Chart, другой - Axis, третий — Field и т. д.
Вывод. Для начала нужно научиться проектировать программы.
Вероятно, тут лучше всего использовать какой-то упрощенный вариант UML. Для построения диаграмм UML есть разнообразные программы. Уважаемый Der Meister похвалил программу Visio. Так же есть бесплатный аналог — Dia. Однако, в связи с некоторой глючностью программы особо рекомендовать ее не буду.
Второе. Естественно, чтобы проще было проектировать нужен какой-то реальный проект. С другой стороны, для начала хотелось бы обойтись минимумом ресурсов.
Предлагаю использовать упрощенный проект адресной книги, который предложил участник форума kot_ на своем сайте в статье про STL.
Итак, выкладываю черновик ТЗ проекта, первый этап проектирования, ну и образец диаграммы сделанной с помощью Dia.
Трудности проекта:
1. Нет руководителя, который бы имел право последнего слова в спорных ситуациях.
По моему мнению, ни один из учеников (участников проекта, которые не работали в команде, да и вообще опыт программирования которых мал) не может быть руководителем, так как несет груз неверных представлений, как должен развиваться проект, как правильнее надо программировать. То есть, такой руководить точно заведет проект в тупик.
Поэтому тут есть 2 пути: либо использовать какого-то механического руководителя, выбор которого будет случайным, либо найти опытного программиста. Но в любом случае, руководитель-человек лучше.
На месте руководителя я бы хотел видеть такого человека, как Green, Der Meister, или Zorkus. На мой взгляд, они сочетают в себе как опытность, так и адекватный характер. Думаю, для них это может быть полезно — тут они могут испытать какие-то модели руководства, которые в реальных проектах они не рискнут использовать.
2. Нет инструментальщика, который бы решал технические проблемы.
Пока с другими участниками мы выбрали следующие способы работы: код и диаграммы проекта выкладываются в социальной группе Учебный проект. Для диаграмм это, вероятно, хорошее место, но никак не для кода.
Там же ведется часть обсуждений. Но это медленно и затратно, поэтому часть обсуждений ведется в виде диалогов в аське, что, по моему мнению, не есть хорошо — часть участников выполняют роль "глухих телефонов", да и какой-то лог бы не помешал.
Есть еще некоторые проблемы, но они носят второстепенный характер.
То есть нужен человек, который искал бы нужные инструменты, настраивал их и объяснял участникам как ими пользоваться.
Конечно, можно было бы задействовать кого-то из учеников для решения этих проблем, но тогда этот человек будет исполнять 2 функции, что опять таки повредит проекту. Поэтому хотелось бы использовать человека, который не участвует в разработке проекта напрямую.
Думаю тут подошли бы люди типа Phodopus, Washington. Они толковые, вроде бы любят испытывать разные инструменты. Думаю, для них это может быть интересно — решить нужную задачу, используя минимум ресурсов. Опять таки, можно испытывать какие-то свои задумки, которые в реальных проектах страшновато использовать.
3. Пока участие кураторов носит неопределенный характер.
Но это уже проблема организатора (то есть моя).
Если кто-нибудь заинтересуется - буду рад.
1.Проблемы.
Недавно в очередной раз обсуждалась тема типа "До чего дошла современная молодежь", где возмущались наглым поведением ленивых студентов. Тогда у меня возникла мысль, что и с адекватным студентом говорить мало пользы. Ну что с того, что мы решим совместно задачку? К реальным проектам это имеет мало отношения.
Для иллюстрации следующей проблемы приведу интересную цитату:
Си/С++/С#, асм(основы), VB, ASP, HTML!=)
Это стандартный подход многих новичков: человек не видит куда и для чего расти и начинает изучать основы разнообразных языков программирования (и не программирования, и не языков).
2.Альтернатива.
Конечно можно ныть про нынешнюю молодежь, можно вводить для них фильтры, запреты, вообще закрывать всякие границы. Но на мой взгляд это потеря времени. Если не нравится что-то, то придумай альтернативу, которая понравится.
Альтернативу, которую я хочу предложить — Учебный проект. Этот проект был бы моделью, на которой можно было исследовать различные методики программирования.
На первый взгляд, я предлагаю что-то вроде: "а давайте сделаем ММОРПГ". Это не так. В тех призывах главное результат. У меня же главной целью является процесс.
Например, все говорят ООП, ООП... Но, я думаю, на маленьком примере невозможно показать преимуществ ООП. Там всегда проще и понятнее использовать процедурное программирование. Поэтому большинство начинающих программистов не понимают в необходимом объеме, что такое ООП, и используют лишь его имитацию.
Или, например, можно читать про итеративное проектирование, про XP и т.д. Но как эти методы испытать в маленьком проекте, в одиночку?
3.Реализация проекта.
Как реализовать проект я плохо представляю — мало опыта. Но некоторые скромные результаты уже есть. Хотя, конечно, всегда хочется большего.
4.Выгоды.
Для учеников выгоды очевидны. Они начинают понимать, как лучше создавать большие проекты, как лучше использовать конкретный язык программирования.
Для руководителей тоже есть плюсы. Например, они хотят испытать какую-то модель разработки программы. Но в текущих реальных проектах пока не получается (начальство не одобряет и т.п.). Учебный проект более гибок в этом смысле.
Для инструментальщиков выгода может быть, если они давно хотели испытать какие-то инструменты, средства, но в текущих проектах это не оправдано.
Пример 1. Инструментальщик не одобряет политику ICQ, предпочитая другое средство общения. Тут он может пропагандировать другую систему. Трудность заключается в том, что он должен выбрать конкретный клиент, конкретный способ подключения и объяснить всем участникам, как использовать это средство, и чем оно эффективнее ICQ.
Пример 2. Инструментальщик хочет попрактиковаться в работе с сервером, который есть в его распоряжении. Тут он может установить (создать) систему контроля версий и испытывать ее на участниках.
Думаю тут подошли бы люди типа Phodopus, Washington. Они толковые, вроде бы любят испытывать разные инструменты. Думаю, для них это может быть интересно — решить нужную задачу, используя минимум ресурсов. Опять таки, можно испытывать какие-то свои задумки, которые в реальных проектах страшновато использовать.
Так то оно конечно так, коли оно не эдак (с). Только вот я "дельфин" =), а "дельфины" тебе не нужны вроде. Да и время как-то нифига лишнего нет. :(
Инструментальщик - это вроде как сисадмин. Не особо важно какие языки программирования он знает.
С другой стороны полезно изучить C++, так как много умной литературы есть по проектированию программ, где примеры даются на этом языке. Хотя, есть определенное количество авторов (Фаулер и его последователи) приводят примеры на Java...
Тут же никаких сроков нет. Проектом занимаемся чисто из интереса. Ну типа, как если бы кто-то от нечего делать установил Убунту и начал ее изучать, или создал свой блог :) Ведь находится же время.
Ну, в общем команда уже собрана - не хватает только инструментальщика. Вот я и развел тут шум.
ну тут как, если я буду всех тормозить будет не в прикол. А я щас до вечера работаю, а вечером реализовываю собственный проект. Этот проект я планирую закончить в пределах февраля, затем еще будет альтернативный shell и интернет-магазин. Вот и думай, когда я буду этим заниматься.
большинство примеров на C++ я к счастью смог бы понять. Ну не учить же ради этого язык. =) На крайняк хелп есть.
экий ты. я это все делал до того, как устроился на работу. Сейчас вот думал перевести блог на Wordpress а времени то нема. :(
Ну, в общем команда уже собрана - не хватает только инструментальщика. Вот я и развел тут шум.
А кто еще есть?
Я весь декабрь и январь работал так: 8 часов на работе + брал работу на дом. И почти без выходных. Бывает.
Сейчас вроде намного проще - всего только 8 часов на работе, да и выходные вроде появляются.
Это как?