Вы ошибаетесь:
Досканально знать язык не нужно. Хорошо в нем ориентироватся - да. На остальное - есть справочники. Тебе нужно ориентироваться, чтобы знать где именно искать.
Вторая ваша ошибка:
Говнокодерство к уровню знания языка отношения не имеет.
Да, самое никакующее знание языка будет давать говнокодерство.
Но при этом и самое отличное знание языка от говнокодерства ничуть тебя не гарантирует.
Не говнокодить - это знать методологии/паттерны/приемы, а не язык. И грамотно и уместно применять их - а это вообще не знания даже, а навыки.
Более того: с отличной практикой по методологиям/паттернам/приемам - у вам больше шансов не говнокодить даже на начальном этапе изучения языка, пока вы его едва-едва знаете.
Чтобы не быть г*внокодером
Кроме отрицательной эмоциональной окраски - что тут такого.
Даже выдающиеся программисты говнокодят, если проект одноразовый или сроки жмут.
Это нормально.
Другое дело, что есть и такие которые всегда говнокодят и иначе не могут.