Отличный набор советов!
Посмотрим, что я не видел упомянутого ..
используйте много маленьких классов. Каждый класс должен делать одну вещь хорошо. Я никогда не видел слишком много классов, практически всегда слишком мало.
Прочитайте книгу «Рефакторинг» - в разделе «Запахи плохого кода» перечислено много вещей, на которые стоит обратить внимание.
Самыми большими указателями, которые вы делаете OO неправильно, является множество сеттеров и геттеров, желание использовать оператор switch и большое дерево наследования, но есть много других (ваш вопрос не был OO, но достаточно близок).
Не инициализируйте локальные переменные по привычке (String s = null;), иначе компилятор не сможет уловить эту проблему:
String s;
if(x == 5)
s="5";
if(y == 5)
s.append("5"); // Compiler will tell you s might not have been assigned
// UNLESS your first line was "String s=null"
Изучите Javadocs. Просто привыкните использовать их, они не такие сложные.
Используйте Eclipse или NetBeans. Включите проверку ошибок. Обратите внимание на ошибки. Некоторые из них, которые вы можете решить, не важны, но многие помогут.
Если вы работаете в Swing, узнайте о потоке событий - продолжайте, иначе ваш графический интерфейс будет выглядеть как дерьмо.
В SDK есть несколько УДИВИТЕЛЬНЫХ библиотек. Многим программистам не хватает расширенного управления потоками, справочных классов, NIO и рефлексии - и это лишь поверхностное представление.
Тем не менее, не злоупотребляйте рефлексией - это может усложнить поддержку вашего кода - просто знайте, что он есть и что он может делать.
Не обнуляйте переменные для освобождения памяти - это практически никогда не полезно и заставляет вас выглядеть так, будто вы не понимаете сборку мусора. Еще глупее сделать это методом финализации.
Хмм, пока мы там - не используйте методы финализации. Когда-либо. Если вам нужно очистить внешний ресурс, найдите справочные классы (WeakReference).