VP in Research and Development at Samsung Research Kyiv, Ukraine
  • Я не умею решать алгоритмические задачки

    Google search «IEEE Software Engineering Body of Knowledge COMPUTING FOUNDATIONS».

    Знания, которыми Вы владеете полностью предопределяет то, ЧЕМ Вы занимаетесь.

    Mike Gorchak прав насчёт «сплавления по Днепру».

    Если писать, а не пользовать фреймворки/библиотеки, то страшно подумать, что их пишут те, кто.... продолжать не буду....

    Підтримав: Maksym Koshel
  • Хорошее название

  • О качестве кода и профессионализме

    На тему профессионализма разработчиков ПО, качества (пожалуй, проектов в целом, не только кода) и этики есть хорошее эссе Архипенкова www.citforum.ru/...ect/psychology (содержит определение профессионала)
    Того же автора www.citforum.ru/.../antipatterns/ «Слова не мальчика, но мужа».

    Рекомендую — не пожалейте времени на прочтение!:). Там же есть ссылки на подобное чтиво.

  • О качестве кода и профессионализме

    2 Anton Naumov, мы не разошлись во мнении:). Вы конкретизировали систему целей («...важно, что бы продукт не только работал, но был прост в поддержке и улулчшении...»), которая является generic’овой в контексте следующих (будущих) проектов либо поддержке при текущего, и является, как раз, технической целью. Конечно, хорошо покрытый и документированный код, скорее всего окажется и более подходящим под более мощное множество целей. В этом смысле такой код более «этичен». Моё утверждение можно уточнить так: примерять к коду эмоционально-окрашенные атрибуты (этичный, хороший, плохой) и определять его качество вне контекста — это не практично, исходя из постанвки вопроса в теме: можно увлечься ложными (нецелесообразными) ценностями и перерасходовать энергию-время. Так что ответить на вопрос темы «как оценить, окупятся ли дальнейшие усилия...», вне контекста, как правило, практически нет возможности. Качество — это не абсолютная, а условная характеристика кода. Либо, тогда его (качество) надо определят через нечто инвариантное вроде коэффициентов покрытия юнит-тестами и т.п. А потом сопоставлять эти показателями с расходами и прочими внешними (по отношению к коду) вещами. В любом случае, профессионалы интересны не как «сферичекие кони в вакууме» (в том числе и друг другу), поэтому и подчёркнута важность контекста. Если в контексте стоит во главе угла технический аспект, как например, возможность использования кода другими, и все готовы на сопутсвующие этому затраты, то Егор Егоров прав на все 99% — это очевидно и статистически доказано. Поскольку командная разработка — явление весьма распространённое, то такая постановка «этики» оправдана. Главное, чтобы эти сопутсвующие затраты не стали самоцелью, а для этого и нужно понимание и контекста, возвращаясь к профессионализму. По теме: стандарты должны быть, но уровень следования ним, должен быть постоянно под контролем и сопоставлением с условиями внешней среды:)

  • О качестве кода и профессионализме

    Чтобы ответить на вопросы темы, нужно сформулировать что такое «код». Предлагается определить так: код — это модель вычислительного процесса, записанная на формальном языке. Конечный пользователь (заказчик) потребляет не код, а вычислительный процесс (конфигурацию). То есть код, прежде чем стать процессом должен быть помещён в конкретный контекст (конфигурация + пользователь), пройдя в общем случае через ряд преобразований, которые, в общем случае (на самом деле, в большинстве случаев) не полностью контролируются командой.
    Говорить о «качестве кода» в отрыве от целей, для которых он создавался (от контекста) — полная бессмыслица. Пример: код на 99, 9% покрыт юнит-тестами, а будучи компилированным и установленным у заказчика вызывает только возгласы: «это не то, что мне надо!».
    Профессионализм в случае разработки ПО — это способность понимать контекст создаваемых моделей («кода») и, как раз, умение находить баланс в системе целей, как технического характера, так и не-технического (конечно, при всех прочих равных условиях и навыках команды. Признак профессионализма также в том, что необходимо уметь вываливаться из этого контекста и обозревать его не «изнутри», а «снаружи». То есть, кроме того, что создавать модели своей разрабатываемой системы (код), удерживать ещё и модель собственного процесса (метамодель), корректируя и то и другое в соответствии с системой целей.
    Интегрально, более профессиональной командой можно считать ту, которая за каждый, отдельно взятый, промежуток времени меньшими усилиями добивается наибольшего продвижения в системе целей, удовлетворяя при этом как можно большее количество пользователей (не только с помощью кода:).

    «Этичен» и «хорош» тот код, который будучи помещён в конечную конфигурацию, максимально удовлетворяет своего пользователя. При этом, если понадобится помещать код в конфигурацию другому пользователю, а вы к этому окажетесь не готовы, то это скорее «неэтичность» по отношению к себе в будущем или по другому «неэффективность» (а следовательно и непрофессионализм). Тогда в этом смысле код окажется «плохим», а команда «непрофессиональной». Это к тому что, понятие профессионализм и качество кода — вещи условные. Хотя, конечно и бесспорно, выполнение предусловий в виде best practices («стандаров»), повышают априорную вероятность быть профессиональным в указанном выше смысле. Но, думается, это НЕ необходимое и НЕ достаточное условие — это просто эмпирическое знание по множеству команд и проектов, которое НЕ обязательно сработает в каком-то конкретном случае и не обязательно является определяющим фактором в достижении целей конкретного проекта.