Скажу сразу, что программист я не очень опытный ещё Поэтому часть из моих размышлений о работе в составе команды носит чисто теоретический характер
Насколько я себе представляю,если я участвую в разработке какого-то проекта, то всегда могу лично пообщаться с другими его участниками. Кроме того, мне, по всей видимости, известен общий дизайн проекта (структура классов, возможно, UML — диаграммы.)
Мне, как начинающему, интересно разобраться с популярными open-source проектами, такими как, например, eMule, Miranda или, скажем Quake
Но КАК можно в ЭТОМ всём разобраться, ведь там же ТОЛЬКО исходники
Мои познания на сегодня: ("частично" — значит не до конца ещё осилил )
Assembler — с деЦтва
Pascal — успешно забыт
C — Керниган и Ричи
С++ — Дейтелы, частично — Страуструп
Win32 — Петзольд
Advanced Win32 — частично Рихтер.
MFC — частично Круглинский
OOD — частично Буч
Здравствуйте, Advanced_User, Вы писали:
A_U>Мои познания на сегодня: ("частично" — значит не до конца ещё осилил ) A_U>Assembler — с деЦтва A_U>Pascal — успешно забыт A_U>C — Керниган и Ричи A_U>С++ — Дейтелы, частично — Страуструп A_U>Win32 — Петзольд A_U>Advanced Win32 — частично Рихтер. A_U>MFC — частично Круглинский A_U>OOD — частично Буч
A_U>плюс ко всему — физический факультет
A_U>Какие будут ваши рекомендации ?
Нет ничего страшного, осилишь все сам, было бы желание.
Чужой код (Open source) интересен сам по себе, по нему просто учится можно и получать удовольствие и он снимает зашореннось, которую вдалбливают в процессе учебы
Для начала неплохо бы узнать, а что вообще делает код
с точки зрения пользователя. Когда знаешь, для сего все это сделано,
то намного легче понять как это сделано.
Потом можно придумать какую-нибудь тестовую задачку.
Придумай, что можно полезного добавить или что-то изменить.
Можно попробовать реализовать какую-нибудь фичу повторно.
Не страшно, если это будет просто повторение того, что уже сделано
не тобой. Как минимум ты поймешь "дух" и идеи дизайна
В общем случае нужно иметь какую-нибудь цель и знать, для чего тебе вообще это нужно.
Изучать код просто ради интереса, я лично просто не могу.
Всевозможные "тулзы" для удобной навигации в коде
в этом конечно же сильно помогают.
Здравствуйте, Advanced_User, Вы писали:
A_U>Здравствуйте, bkat, Вы писали:
B>>Всевозможные "тулзы" для удобной навигации в коде B>>в этом конечно же сильно помогают.
A_U>Можно поподробнее о "тулзах", пожалуйста ?
Хорошая "тулза" должна уметь строить диаграмы классов
и поддерживать регулярные выражения для поиска чего-либо в коде.
SNiFF очень неплох для навигации и поиску по коду.
Он позволяет настроить себя так, что ты из всей массы
файлов будешь видеть только то, что нужно тебе.
Здравствуйте, Advanced_User, Вы писали:
A_U>Насколько я себе представляю,если я участвую в разработке какого-то проекта, то всегда могу лично пообщаться с другими его участниками. Кроме того, мне, по всей видимости, известен общий дизайн проекта (структура классов, возможно, UML — диаграммы.)
Не знаю как за опенсорец, но в коммерческих разработках типическая ситуация — куча мутно написанного кода, не со всеми разработчиками можно пообщаться, а с некоторыми и не хочется, структура классов ничего не отражает, дизайна нет, а проектная документация ничему не соответствует. И в этой ситуации нужно исправить ошибку, подавить утечку памяти, впарить новую фичу, отпортировать проект на другую операционку/базу данных, довести сырой код до ума и т.д. и т.п. Да, и мантру русского программиста — "Все это надо переписать" — разрешается произносить только про себя.
Вот так и разбираешься в чужом коде. Причем с годами приходит тонкое исскуство разбираться только в том чужом коде, что нужно, и ни строкой больше.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, Advanced_User, Вы писали:
A_U>>Насколько я себе представляю,если я участвую в разработке какого-то проекта, то всегда могу лично пообщаться с другими его участниками. Кроме того, мне, по всей видимости, известен общий дизайн проекта (структура классов, возможно, UML — диаграммы.)
GS>Не знаю как за опенсорец, но в коммерческих разработках типическая ситуация — куча мутно написанного кода, не со всеми разработчиками можно пообщаться, а с некоторыми и не хочется, структура классов ничего не отражает, дизайна нет, а проектная документация ничему не соответствует. И в этой ситуации нужно исправить ошибку, подавить утечку памяти, впарить новую фичу, отпортировать проект на другую операционку/базу данных, довести сырой код до ума и т.д. и т.п. Да, и мантру русского программиста — "Все это надо переписать" — разрешается произносить только про себя.
GS>Вот так и разбираешься в чужом коде. Причем с годами приходит тонкое исскуство разбираться только в том чужом коде, что нужно, и ни строкой больше.
Как это близко!!!
Могу еще добавить, что, как правило, код без комментов или с такими, что лучше бы их и не было :D).
Здравствуйте, George Seryakov, Вы писали:
GS>Не знаю как за опенсорец, но в коммерческих разработках типическая ситуация — куча мутно написанного кода, не со всеми разработчиками можно пообщаться, а с некоторыми и не хочется, структура классов ничего не отражает, дизайна нет, а проектная документация ничему не соответствует.
Поэтому желательно нормально комментировать свои проги для того, чтобы тот, кто придет после тебя не ругал тебя последними словами. И вообще писать прогу нужно так, чтобы ее код был читабельным не только для тебя.
Я на своей шкуре сталкивался как с читабельными прогами , так и с полной мутью .
А недавно столкнулся с прогой, которая вроде бы написана красиво (осмысленные всех имен классов, темплейтов и переменных, комментарии и т.д.), но логика работы была настолько запутаной , что я просто переписал все с нуля .
Здравствуйте, George Seryakov, Вы писали:
GS>Не знаю как за опенсорец, но в коммерческих разработках типическая ситуация — куча мутно написанного кода, не со всеми разработчиками можно пообщаться, а с некоторыми и не хочется, структура классов ничего не отражает, дизайна нет, а проектная документация ничему не соответствует. И в этой ситуации нужно исправить ошибку, подавить утечку памяти, впарить новую фичу, отпортировать проект на другую операционку/базу данных, довести сырой код до ума и т.д. и т.п. Да, и мантру русского программиста — "Все это надо переписать" — разрешается произносить только про себя.
GS>Вот так и разбираешься в чужом коде. Причем с годами приходит тонкое исскуство разбираться только в том чужом коде, что нужно, и ни строкой больше.
Совершенно точно подмечено! Меня мой проект уже забодал, порой возникает такое чувство, что остальные разработчики, с которыми общаюсь по аське, просто ничего не понимают в программировании, проектирования нет никакого, код мутнее мутного... Тешу себя мыслей, что хоть мой код привносит немного света в беспроглядную тьму...
Однажды я заикнулся, что надо все переписать, был послан куда подальше в вежливой форме. Однажды спросил робко про CodeRules, встретил полное непонимание... При этом проект успешно продается и все такое.
Пример из практики — этими разработчиками была написана своя версия функции регистрации COM-сервера, просто потому, что они не знали, что есть стандартная.
Здравствуйте, Advanced_User, Вы писали:
A_U>Какие будут ваши рекомендации ?
Мои рецепт:
разобрался с переменной/функцией -добавь свой комментарий/переименуй
Так постепенно разберёшся со всем..
кроме того помогает разбиение на более мелкие части и выделение потворноуоптребляющихся частей в модули
Здравствуйте, Demiurg, Вы писали:
D>... Тешу себя мыслей, что хоть мой код привносит немного света в беспроглядную тьму...
А твой код еще не переписывали? Типа — сделал все чистенько: классы, смартпойнтеры, QWAN. А потом заходишь в архив и видишь правку — кто-то убрал смартпойнтеры, понапихал глобальных переменных, испортил логику и т.п. И все просто потому, что не понимал, что написано.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, Demiurg, Вы писали:
D>>... Тешу себя мыслей, что хоть мой код привносит немного света в беспроглядную тьму...
GS> А твой код еще не переписывали? Типа — сделал все чистенько: классы, смартпойнтеры, QWAN.
В Дельфе нет шаблонов, так что обходимся без смартпойнтеров Как же я ее ненавижу... крик души...
GS> А потом заходишь в архив и видишь правку — кто-то убрал смартпойнтеры, понапихал глобальных переменных, испортил логику и т.п. И все просто потому, что не понимал, что написано.
Со мной, слава б-гу, такого не было (только зачастую мой код к своему страшному стилю приводят), а вот с коллегой как-то ужас такой произошел... Именно из-за непонимания кода, все убрали, по-своему написали (неправильно), пришлось с нуля все переписывать, месяц загублен...
Здравствуйте, Demiurg, Вы писали:
GS>> А твой код еще не переписывали? Типа — сделал все чистенько: классы, смартпойнтеры, QWAN.
D> В Дельфе нет шаблонов, так что обходимся без смартпойнтеров Как же я ее ненавижу... крик души...
Смартпоинтеров там нет не из-за отсутствия шаблонов, а из-за отсутствия автоматических деструкторов.
Здравствуйте, AndrewVK, Вы писали:
D>> В Дельфе нет шаблонов, так что обходимся без смартпойнтеров Как же я ее ненавижу... крик души...
AVK>Смартпоинтеров там нет не из-за отсутствия шаблонов, а из-за отсутствия автоматических деструкторов.
А их там и не может быть, так как исключительно ссылочная модель. Предположим, что они там есть, как реализовать смартпойнтер без шаблонов? Не представляю
Здравствуйте, Demiurg, Вы писали:
D> А их там и не может быть, так как исключительно ссылочная модель. Предположим, что они там есть, как реализовать смартпойнтер без шаблонов? Не представляю
А в чем проблема то? В том что одним единственным смартпоинтером для всех типов не обойтись?
Здравствуйте, AndrewVK, Вы писали:
D>> А их там и не может быть, так как исключительно ссылочная модель. Предположим, что они там есть, как реализовать смартпойнтер без шаблонов? Не представляю
AVK>А в чем проблема то? В том что одним единственным смартпоинтером для всех типов не обойтись?
Именно. Тогда придется писать кучу смартпойнтеров для каждого типа, или извращаться. Лучше тогда вообще их не писать... Для меня указатель это просто указатель на что-то, независимо от типа, а в дельфе эта парадигма уже не соблюдается... Вообще, отсутствие шаблонов — большой сакс... Помню, писал я функцию, в которую объекты разных классов должны передаваться, но обработка для них одна. Такую гадость написал для анализа их типов... Все равно неуниверсально вышло, как ты понимаешь.
Здравствуйте, Demiurg, Вы писали:
D> Именно. Тогда придется писать кучу смартпойнтеров для каждого типа, или извращаться.
Ну зачем так жестоко? Можно создать базовый класс и написать для него смартпоинтер, а потом все управляемые классы наследовать от него.
D>Лучше тогда вообще их не писать...
Ну это уже другой вопрос. Главное что смартпоинтеры отсутствуют прежде всего из-за отсутствия автоматичиеских деструкторов.