Ваша главная ошибка в том вопросе была в том, что вы просто скинули нам код, мол сами разбирайтесь что у меня там не работает. Так не хорошо.
А говнокод - это все временно. С приходом опыта код становится лучше.
1) Рихтер CLR via C# (хотя эта книга не для начинающих, и стоит отложить ее на потом)
Макконнелл Code Complete.
Еще что-нибудь по алгоритмам.
Ну и что-нибудь по C# типа Шилдта или Троелсена (я бы выбрал 2 вариант)
2) Код программы должен быть максимально читаемым и модульным, чтобы куски кода можно было переиспользовать в дальнейшем. Еще погуглите паттерны проектирования.
3) Избегайте конструкций, которые приводят к копипасте кода. Это главное. И второе - избегайте конструкций, из-за которых код становится менее читабельным. Например можно с помощью LINQ и лямбда-выражений написать кучу кода в несколько строчек (я так один раз по фану быструю сортировку в одну строчку написал, включая объявление метода). Так вот, так делать плохо, потому что сильно ухудшается читаемость кода. Лучше расписать это все подробнее. Будет больше строчек, но зато понятно, что написано.
4) А вот тут не знаю. У всех свои ошибки