magog 20.01.2011 21:11 Kopete

Рано или поздно каждый программист понимает, что каждый день он занимается только тем, что применяет уже ранее полученные знания. Он перестает развиваться, а стоит на одном и том же уровне. Никто и никогда в проекте, который он делает на заказ, не будет экспериментировать: у нас с вами нету шанса на ошибку и времени на попытки. А как же тогда изучать что-то новое?
У новичков здесь возникает в чем-то похожая проблема: изучать языки и библиотеки по сухой документации, какой бы она прекрасной ни была, после некоторого этапа уже не так здорово и увлекательно, как при написании собственного проекта, желательно, хоть как-то полезного и используемого в реальной жизни.
(продолжение под катом)

Recommended by: @0xd34df00d, @AVanGarD
1. magog 20.01.2011 21:11 Kopete

Решение простое — Проект. Да, именно так, с большой буквы П. Чем больше и сложнее проект — тем лучше. Тут нет месту скромности, зато есть амбициям. Хотите ось — делайте ось, хотите игру — делайте игру. Это проект станет для вас полигоном, лабораторией — чем угодно. Именно тут вы будете тестировать новые технологии, паттерны, алгоритмы и новые особенности языков.
И тут важным становится еще один аспект, особенно для только изучающих язык или бибилотеку: проект «для себя» редко приносит удовольствие и еще реже доживает до какого-то разумного состояния, когда не стыдно показать другим. Часто не знаешь, что попробовать. Часто не можешь придумать, что сделать, хотя и представляешь, как. Не хватает той креативной жилки, которая позволяет не улучшать что-то, а именно придумывать — такое часто бывает, и, я думаю, каждый с этим сталкивался не раз.
И я предлагаю вообще простое решение — присоединиться к какому-нибудь опенсорс-проекту на нужном вам языке. От вас ничего не будут требовать — все добровольно и по вашему желанию. Хотите — делайте, хотите — нет. Зато сколько пользы вы получите от этого — неисчислимо. Новые знания. Реальное использование и испытание на практике этих только что полученных знаний. Удаленная работа в команде, может быть, с участниками из разных стран. Вы узнаете как это — писать весь код в одном, заранее заданном стиле кода, кооперируясь с другими людьми. Реальный опыт командной работы. У вас будет возможность
пообщаться с программистами куда сильнее вас и что-то перенять у них, а, например, мне этого всегда очень не хватало. Как говорил Орсон Скотт Кард о программистах, «единственный человек, чья похвала чего-нибудь стоит — это другой кодер». А когда ты занимаешься развитием чего-то не ради денег, то и получаешь от этого совсем другие ощущения. Какое удовольствие слышать слова благодарности от пользователей программного продукта, к которому ты приложил руку!
Для меня таким проектом стал LeechCraft (leechcraft.org) — и не сочтите за пиар, пусть даже оно так и может выглядить, но я лишь хочу поделиться своими впечатлениями от участия в опенсорс-проекте, и это трудно сделать без отсылок к конкретному проекту, в котором я участвовал.
Я не буду сейчас рассказывать, что это такое и зачем, а если вкратце — это проект, который начинался как модульный торрент-клиент, и постепенно разросшийся в полноценный интернет-клиент с браузером, RSS, IM в разработке и кучей других вещей, и имеющий те самые амбиции стать полноценным Desktop Shell — чем-то вроде Gnome или KDE.
Так вот, как-то раз о нем зашла речь в Jabber-конференции, посвященной Gentoo, и я сказал лиддеву, что могу пописать код для этого проекта. После первого взгляда на проект я подумал — да это же что-то огромное и невообразимо сложное, куда мне там с моими знаниями! И как-то сдрейфил. И уже даже забыл про него, но через какое-то время лиддев в той же конфе просто сказал мне напрямую: сделай импорт истории, закладок и прочего из своего любимого браузера в LeechCraft, и я подумал, что стоит просто хотя бы попробовать.
Я начал разбираться в коде личкрафтов и понял, что один не тяну — моих знаний не хватает, но лиддев всегда мне помогал, советовал, хвалил... Как бы не смешно это звучало, но такие похвалы были для меня мотиватором куда большим, чем любые деньги. Когда у меня наступали застой в написании импорта, я просто запускал leechcraft и пользовался им, замечал недостатки и неудобства и отправлял в багтрекер. Но лиддев сказал — ты не отправляй просто так — бери и решай. И я попробовал. И спустя пару дней появился мой первый официальный коммит. Сказать, что я был счастлив — это ничего не сказать. Вообще я заметил, что маленькие похвалы, которые ты получаешь за реализацию чего-то, это обычное «спасибо» — это круто, куда лучше сухого «благодарю» и оплаты твоей работы. А процесс проверки твоих коммитов и исправления замеченных недочетов — так это вообще нечто! Так и пошло дальше по накатанной — я написал плагин, потом еще, сейчас собираюсь писать еще два плагина.
Я уже отношусь к этому проекту не как к чему-то, а как к частичке себя, ведь я вложил в него то свои силы, энергию, интерес и что-то еще, что трудно описать. Я узнал много аспектов Qt, которые вряд ли бы узнал сам, потому что часть из них лежит далеко не на поверхности, а по другой части неочевидная или неполная документация, и нужен просто опыт использования, обмен которым происходит сам собой при участии в таких проектах.
Тут часто появляются статьи про Qt, напоминающие вольное изложение документации. Нет пользы от них. Никакой. Если ты программист и не можешь осилить документацию которая идет с фреймворком — ты выбрал не то занятие. Реально научиться программировать можно только разбираясь в чужом коде и практикуясь.
И я предлагаю вам эту возможность. Можно вместе писать эти личкрафты. Да даже не обязательно именно их, просто это один из тех проектов, с амбициями, и, в силу специфики, с огромным полем для возможной работы — от реализации протоколов в IM до медиа-плеера, от поддержки расширений Google Chrome до низкоуровневого взаимодействия с Xlib/Xcb для реализации соответствующих компонентов Desktop Shell. Не думайте, что там все ужасно сложно — там куча задач для новичков, и также немало задач и для серьезных программистов со стажем. И не все задачи там подразумевают плотное взаимодействие с Qt — например, для реализации window manager'а потребуется совсем немного Qt и очень много уже упомянутых Xlib/Xcb. Да даже использование C++ не обязательно — есть возможность писать модули на JS и Python, и можно добавить хоть Ruby, хоть C#, хоть Haskell, было бы желание.
Опенсорс редко пишется за деньги, особенно на начальных этапах. Он пишется из желания что-то сотворить, зачастую — для себя. Привнести что-то в этот мир, что-то в нем изменить и улучшить, довести до ума. «Успех — это не когда много поклонников, это когда ты можешь изменить мир. Хоть чуть-чуть. Своей волей.»
Если вы заинтересовались конкретно этим проектом, я был бы рад увидеть вас в нашей конференции, leechcraft@conference.jabber.ru. Ну а на нет и суда нет :)
P.S. Насчет амбиции — они у этого проекта велики, мы позиционируем его в перспективе как десктоп-шелл. Так что у вас будет огромный полигон, что бы что-то попробовать и увидеть, как на созданное вашими руками реагируют пользователи. А пользователи опенсорса — самые привередливые.
P.P.S. И сразу всем кричащим «это не нужно, нам не нужен еще один браузер» я скажу: я не прошу вас им пользоваться, а предлагаю вам поучаствовать в разработке прокта, которым пользуются люди. У которого отличный лиддев и очень качественный код. Я предлагаю вам повышать свой скилл не переписывая примеры из книжек, а применяя свои навыки и стремление к новому в реальном большом проекте.

2. miviru 21.01.2011 05:34 Gajim

Хехе

3. werehuman 21.01.2011 11:35

До рекалмы ликчратфов все было ок, дальше зокрыл.

4. magogwerehuman /3 21.01.2011 11:37 Azoth

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

5. 0xd34df00dwerehuman /3 21.01.2011 11:39 Azoth_primary

> реклама личкрафтов
И что там выставляет личкрафты как удобный няшный продукт для конечных пользователей?

6. werehuman0xd34df00d /5 21.01.2011 11:45

авторское мнение

7. magogwerehuman /6 21.01.2011 11:46 Azoth

пруфы оттуда привидите, где я утверждаю, что leechcraft нужны пользователям

8. 0xd34df00dwerehuman /6 21.01.2011 11:47 Azoth_primary

Щито?

9. werehumanmagog /7 21.01.2011 11:48 lithium

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

10. magogwerehuman /9 21.01.2011 11:49 Azoth

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

11. werehumanmagog /10 21.01.2011 11:56 lithium

> это годный проект для программистов
> и только
> что он нужен кому-то
Ты говоришь это так, будто легко смешал программистов с говном, типа они сколько угодно могут там строить громадные замки в песочнице, главное чтобы попу на холодном песке не простудили.
О чем это я? О том, что я сказал, что вторая часть рассказа совершенно не интересна в силу резкого перехода от чего-то высокоабстрактного к чему-то сугубо индивидуальному. И, видать, вызвал у тебя зуд внутришортной области.

12. magog 21.01.2011 11:59 Azoth

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

13. 0xd34df00dwerehuman /11 21.01.2011 12:46 Azoth_primary

Блядь, что? Где ты там это умудрился это прочитать?

Do you really want to delete ?