Хороший программист, как и любой иной хороший исполнитель, способен довести задачу до ее завершения, а не бросить на половине пути (читай, протсо забить на свои обязанности). Результат не особо зависит от текущих знаний, потому что их можно получить в процессе решения задачи. В большинстве случаев в моей практике лучшими в итоге оказывались не "рок-звезды", знающие кучу языков программирования, а обычные ребята, которые просто брали и делали. Просто брали и делали.
Код хорошего программиста лучше оптимизирован, более надежен. Кроме того, хороший программист производительнее, пишет более понятный для других программистов код.
По-моему мнению тут 2 отличия существенных.
1) хороший спец пишет код так, чтобы его мог понять любой человек + он может объяснить почему он выбрал то или иное решение
2) хороший спец сам решает задачу, а не ждет от кого-то
Тут все очевидно - хороший сделает надолго, а к посредственному нужно будет снова обращаться за ремонтом. Если окончил институт по такой профессии, то не значит, что сразу все сможешь. Опыт надо иметь.