Как стать автором
Обновить

Комментарии 51

Мне так кажется, что не всегда нужно пытаться закоммитить код в проект. Иногда достаточно аккуратно указать на ошибки или просчеты. Несколько грамотных тикетов стоят дороже пары кривых коммитов.
Не всегда, но часто стоит. Если вы только описываете проблему, то вы рассказываете «как правильно», а если исправляете ее — то показываете. Разработчикам нужно уметь и то, и другое. Владельцам проекта нужно заметно больше усилий для того, чтобы по описанию сделать исправление, чем для того, чтобы оценить готовое исправление.
Я стараюсь баг-репорты писать. Мои минимальные навыки написания скриптов и базовый C никому нафиг не нужен. А подробный баг-репорт мне отправить несложно. Даже один баг в ядре Linux закрыли. Приятно.
По третьему пункту надо добавить, что правки принимают намного живее, если, во-первых, есть открытый тикет с описанием проблемы и под ним пару человек высказалось что да, действительно, проблема, а во-вторых, на предлагаемую правку написаны тесты.
Да, но очень часто многочисленные мелкие дефекты нигде не отмечены, например, потому что их быстрее исправить, чем описывать, или потому что они не «не так уж важны», чтобы тратить на них время, в результате их можно найти только в самом коде.
К слову, практически в любом opensource проекте есть необходимость писать тесты. Так что есть возможность не только дополнять и исправлять, но и делать с нуля.
По-моему, когда бы добавляете тесты к существующему коду, это скорее дополнение, чем разработка с нуля. Да, объем этой работы может быть самым разным в зависимости от того, насколько велик объем кода, есть ли уже тесты и в каком они состоянии.
Да, это дополнения к чему-то. Суть в том, что можно написать полные программы разной сложности с нуля, не ограничивая себя каким-то чужим стилем.
Если нет каких-то особенных собственных идей, то вполне пойдет для тренировки и оттачивания умений.
Если тестов нет, то их разработка по сути является разработкой с нуля отдельного приложения, использующего тестируемое в качестве библиотеки и(или) фреймворка.
Любое приложение потому и называется «приложением», что это дополнение операционной системы до чего-то, что способно делать больше, чем она могла без него. Приложение компьютера к новому делу. Оно тоже никогда не с нуля, фактически.
Считаю что новичкам как раз нужно все писать с нуля. Анализ чужого кода влечет больше проблем, чем дает ответов на вопросы новичков.
Как аналогия: большинство классиков мировой литературы сначала прочитало множество книг прежде чем написать свою первую.
Разве? Прежде, чем написать первую, ставшую классикой мировой литературы — ок. Но первую ли для самого автора, хм.
Скорее всё же успели прочитать несколько книг, перед тем как написать даже свою первую. Если не считать первой книгой школьные прописи.
Да, но только если считать буквари за прочитанные книги)
Написание книг и программирование это совсем разные вещи. Второе это очень точная, математическая деятельность. Есть множество литературы, в которой объясняется как правильно программировать и какие ошибки могут в процессе возникнуть. Новичку куда продуктивнее будет читать подобные книги (в которых, кстати, тоже хватает примеров, куда более качественных, чем в опенсорсе) и писать что то свое с нуля, чем без теории пытаться разобраться в чужем коде.

Думаю, если бы у большинства классиков мировой литературы были бы книги с информацией о том, как нужно писать книги, а как не нужно, они согласились бы с моим подходом.
Не слишком разные на самом деле. Большая часть программистов не используют математику совсем. Думаете, много людей читают о реляционной модели прежде чем начать учить синтаксис sql? В этом смысле написание книги может потребовать даже больше умственных усилий.

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

У меня все наоборот. Копаясь в чужем коде я постепенно начал деградировать и уподобляться программистам, писавшим этот код, а именно делать все быстро, некачественно, но в срок, даже используя те же приемы, что они.

Я не встречал еще в чужом коде ничего, с чем я не был знаком по книгам и статьям. Вот такой опыт.
1) Насколько дружелюбно сообщество к новичкам? Банально страшно лезть, зная что любое твое усилие не будет замечено/оценено. Какие проекты посоветуете, из тех, где владелец дружелюбен к новичкам?

2) cpp особенно прекрасно, когда все вокруг только и говорят о программировании на модном python. open source не очень сильно пересекается с модными технологиями.

3) OK. Я займусь рутиной в одном из open-source. Но что это мне даст в глазах работодателя? Назовите парочку работодателей. В каких проектах они рекомендуют участвовать, чтобы попасть к ним?
1. Лезть надо не для того, чтобы сообщество вас заметело и оценило, а для развития своих навыков в программировании и наблюдения за работой более опытных программистов. Сообщество не должно вас воспитывать, помогать вам.

2. А какая разница, что за язык используется?

3. Когда я последний раз искал работу, все работодатели просили предоставить пример кода в виде готового проекта (написанный мной с нуля или тот, в разработке которого я участвовал). Когда я показываю работодателю проекты с моей прошлой работы, работодатель знает, что не я один их реализовывал, но я в этом участвовал и у меня есть опыт написания подобных систем
я показываю работодателю проекты с моей прошлой работы

Как вы справляетесь с NDA? Исходники ведь не покажешь, а слова «ну, я там че-то участвовал, разрабатывал» кажутся не очень убедительными.
Исходники ведь не покажешь

Я не подписывал NDA, да и исходники у нас были открыты, как и вся платформа, на которой писалось.
НЛО прилетело и опубликовало эту надпись здесь
2) Как раз модные технологии чаще бывают опенсорсными. В топ10 языков минимум у половины есть эталонные реализации в открытом доступе и минимум у подавляющего большинства есть открытая экосистема.

3) Покажет работодателю, что:
3.1) Вы можете заниматься рутиной добровольно
3.2) Вы можете работать с чужим кодом
3.3) Вы можете писать достаточно качественный код (если примут ваш патч), согласно принятым в конкретном проекте соглашениям
3.4) Вообще покажет ему образцы вашей работы
Я — тот самый «начинающий разработчик». С интересом открываю подобные статьи (особенно многообещающий тег «жмите сюда — и вы приняты», наверное, через полгода именно по нему будут находить вашу статью). Чаще всего дочитываю уже без интереса :)

Капелька фидбека, если интересно.
Да, на на одном собеседовании мне как-то рекомендовали такой подход — участие в опенсорсе. Да я и сам — и до того, и после — думал об этом.
Только я в итоге предпочитаю либо потратить это время на литературу, либо на набивание шишек в написании своего супер-велосипеда (tm)(с), либо просто на изучение (с высокой вероятность) качествнного открытого кода, без попыток что-то туда коммитить. Почему? Потому что, во-первых, мотивация. Свой проект — он о том, что мне интересно. Опенсорсных я таких почти не нашёл. Вернее, нашёл, но даже мне ясно, что там (а это во-вторых) лютый говнокод и вообще, они мертвы уже по несколько лет. Или я лучше просто поковыряю исходники, на которых чему-нибудь научусь (либо прифигею от кучи всего непоняиного и неизвестного — тоже хорошо мотивиует), чем буду искать переполнение переменной или неинформативные имена переменных.
Кроме того, порог входа в новый проект достаточно велик. Я же не стану писать разработчикам с вопросами по коду, чтобы мне пояснили че там происходит, верно? Поэтому на вникание уйдёт гораздо больше времени. Это время может быть сопоставимо со временем: а) моей потери интереса к выбранному проекту либо осознанию его несостоятельности и того, что от такого кода надо держаться подальше; б) моего становления как разработчика :), и очевидно, в таком случае оно случится не благодаря этому опенсорсу.

Такие дела.
Я же не стану писать разработчикам с вопросами по коду, чтобы мне пояснили че там происходит, верно?

В опенсорсе хватает документации, чтобы можно было разобраться в проекте без вопросов к разработчикам.
Давайте говорить правильно: иногда в некотором опенсорсе хватает документации, чтобы достаточно опытному программисту, потратив какое-то весьма ощутимое время, можно было разобраться в проекте без вопросов к разработчикам.
иногда в некотором опенсорсе хватает документации

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

Ну для начала можно суваться без доработок. Любое сообщество оценит, если вы будете писать документацию, юнит-тесты и сообщать о багах.
Мне кажется, вы забываете о начале разговора. Сообщество оценит, не сомневаюсь. Или не оценит, и тогда получится, что я тупо слил недели труда и времени. Другой вопрос: а работодатель оценит? А он оценит больше мой вклад в опенсорс как технического писателя — или всё таки лучше почитать книжки по основному направлению, разработке?)
Если бы вы пришли ко мне на собеседование и сказали, что помогаете паре-тройке опенсорсных проектов в написании документации, тестов и дебагинге, это было бы для меня большИм плюсом, нежели если бы вы показами мне красный диплом.
или всё таки лучше почитать книжки по основному направлению, разработке

Теория без практики мертва, практика без теории слепа.
Ну, то, что вы нашли баги в, например, ORM на языке Х или написали какие-то тесты для неё, то обычно это значит, что язык X вы используете.
Я думаю, если бы я нашёл баги в ORM, то мне было бы что показать и кроме этого) Вроде же речь про начинающих, не?
Вы создаете несколько классов с наследованием, прописываете метаданные для ORM, радостно записываете первый десяток объектов в базу и бах — ошибка. Собираете инфу по этой ошибке и шлете сообществу. Разве для этого нужно быть профессионалом?
>Вы создаете несколько классов с наследованием, прописываете метаданные для ORM, радостно записываете первый десяток объектов в базу

То есть этот абстрактный «я» использует опенсорсную разработку — но в своём проекте? Который, возможно, очередной велосипед. Кажется, с этого мы начинали разговор, не? :)
И еще есть тонкий момент между «искал и нашёл» и «случайно наткнулся» — вероятность на несколько порядков ниже.
Либо используете в своем проекте, либо просто изучаете, тыкаете палкой на предмет — а завоняет ли.
вероятность на несколько порядков ниже

Это мешает вам изучать опенсорсные проекты?
Изучать — не мешает, и даже не помогает. Писать им тесты, документацию или код — на это тоже вообще никак не влияет. Тем не менее, я за изучение, но считаю слабовероятным остальное, почему — см. первый комментарий. У меня ощущение, что вы возражаете каждому моему комментарию, причём отдельно, забывая про всё сказанное мной в предыдущих.
Не «им», а себе, делясь с другими.
У меня такое же ощущение относительно вас ))) Видимо мы друг друга не понимаем.
Забавно) Хотя, я вас услышал, даже если и не понял.
Да и в любом случае, я свой никомуненужный велосипед тоже где-нибудь когда-нибудь на гитхабе выложу. Ачо, тоже опенсорц :)
Есть случаи, когда все таки стоит задать вопрос по непонятному куску кода. Это даже может помочь разработчику найти возможную ошибку или он расскажет вам о каком нибудь хитром приёме.
Дополню: и даже без документации часто гораздо быстрее самому посмотреть в исходном коде, чем ждать ответа разработчиков.
НЛО прилетело и опубликовало эту надпись здесь
твердил как мантру, что к БД не притронусь

оценил иронию :)



И ОпенСорс он всегда более глубок, чем кажется на первый взгляд
Развернёте мысль? :)
Кроме того, что вам мешает опенсорсить для души?
НЛО прилетело и опубликовало эту надпись здесь
По первому примеру кода — а ничего, что переполнение уже при расчёте secondsInMilliseconds может случиться, и тогда предложенная проверка не отработает ;)
Конечно, «чего», об этом сказано в тексте абзацем ниже. Исправлена только сама неработающая проверка.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий