Чем отличается код дилетанта от профессионала?
Самый базовый уровень -- консистентность форматирования: одинаковые отступы, одинаковые кавычки.
Чистота в коде: отсутствие гигантских кусков закоментированного кода, вообще ненужных комментариев типа имени автора (это все можно посмотреть в системе контроля версий), грамотное именование сущностей (нет однобуквенных переменных, сущности названы по-английски, а не транслитом, и т.д.).
Знание стандартной библиотеки, отсутствие велосипедов типа array[array.length] = elem вместо array.push(elem). 
Использование очевидных и явных путей, вместо «умных» хаков.
Отсутствие копи-пейста и дублирования кода (это всегда, всегда аукнется багом).
Вообще почитайте «Совершенный код», все это ценится во всех языках.
Профи знает и учитывает массу неявных нюансов. Чтобы накопить подобный опыт необходимо годы годские плотно заниматься профессией на серьезном уровне. Профи не рождаются, профи становятся.
Еще профи, кроме всего прочего, адекватно комментирует код, т.к. знает наверняка, что он не единственный, кто будет работать с кодом, и какой бы код не был прекрасный, пару слов на простом человеческом языке порой могу сэкономить очень много времени и труда...
И я не соглашусь что дилетант всегда поймет код профи. Поглядите в код любого популярного современного фреймворка, их пишут профи, и даже не смотря на подробные исчерпывающие комментарии, не зная контекстов понять некоторые абстракции порой бывает невозможно, до усвоения этих самых контекстов.
Резюмируя вышесказанное подчеркну - профи знает тысячи способов как не надо делать, и так же немало способов как надо делать правильно в конкретном случае, и эти знания реализует в коде. 
Дилетант просто знает самый необходимый минимум чтобы завелось и взлетело. Иногда этого вполне достаточно. Если дилетант умный и усидчивый, то он быстро вырастает в профи. Если нет, то на нет и суда нет...