Как перестать писать говнокод?
Здравствуйте! Три месяца назад меня взяли работать в небольшую организацию, для нужд которой необходимо написать приложени (под Android, пишу на Java). На собеседовании особых вопросов не задавали. Сказали, мол, приложение будет простенькое , учиться вместе будем и тд. Руководитель мой, программист C#, он мне задания и даёт. Т.к. база программирования у меня крайне слабая уповаю я, лишь на гугл. Со временем, понимание начинает приходить, мозги работать. Т.е. постоянно идет работа с поиском кода, его чтением, анализом, что непонятно сразу в доки, книжки, статьи. Как то раз даже нашел в городе программиста, и напросился на встречу, где он мне написал кусок кода, который меня спас от увольнения. Даже зарегистрировался тут и на стэковерфлоу. Но я пишу откровенный говнокод. Руководитель ругает меня за низкую скорость. И может иногда карательные меры предпринять, хоть и не смертельные. Я действительно неэффективно работаю. Напрашивается вывод, нужно увеличивать знания java core. И писать, писать, писать. Но после рабочего дня, если я его честно отрабатываю, откровенно не халтуря, то мои мозги не могут воспринят информацию, в нужном объёме. Мне код снится ночью уже. Чаще мой рабочий день это 12 часов, за которые я успеваю выжать себя как лимон, потратить время на отвлекающие факторы и что то написать, вернее "наговнокодить". Проект двигается, разрастается и с каждым днем я понимаю, что это вавилонская башня.
Мне нужен Ваш совет, умеющие программисты. Какой то жизненный опыт, ваш. Как перестать говнокодить?? Спасибо!
Да в общем-то никак. Умение писать грамотный код придет со временем, если, конечно же, регулярно практиковаться. Для новичка (особенно если речь идет всего о трех месяцах опыта) говнокод и медленная скорость работы - это вполне нормальная картина. Ему просто неоткуда знать, как писать код грамотно и быстро (к сожалению этому не учат даже в институтах ). Со временем, если у новичка есть голова на плечах и желание развиваться, он будет накапливать положительный и отрицательный опыт, научится грамотно распределять свое время и усилия, и мало-помалу этот процесс сдвинется с мертвой точки. Главные условия - это регулярная практика и самообучение. Описанная вами картина очень хорошо знакома многим (читая ваши строки, вспоминал, что почти то же самое происходило и со мной) - срывы сроков работы, регулярные баги, любовь к костылям, повсеместный говнокод, нагоняи от начальства. Серебряной пули здесь нет, это болезнь роста. Она излечивается со временем при соблюдении вышеуказанных условий.
В любом случае хорошим подспорьем будет ковыряние в чужих исходниках (Гитхаб к вашим услугшам), чтение подходящей литературы ("Совершенный код" Макконелла или "Рефакторинг и улучшение существующего кода" Фаулера). Поинтересуйтесь также такой вещью, как рефактринг - изучение его принципов способно помочь в понимании того, как следует писать код. Если вы пишете на C# в Visual Studio, то великолепнейшим помощником для вас может стать Resharper. Он способен разглядеть тысячу потенциальных проблем в вашем коде и просто облегчить работу. Также очень благотворно может повлиять наличие наставника, который мог бы что-то показать и объяснить. Хотя с этим обычно сложнее.
- Разберитесь как правильно писать на Java: Thinking in Java, Effective Java.
- Пишите код.
- Читайте про хороший код: Clean Code, Beautiful Code, Code Complete, Implementation Patterns.
- Пишите код.
- Читайте чужой хороший код. Изучайте исходники популярных open-source продуктов. Разумеется, вы не сможете сразу отличить хорошие примеры кода от плохих. Но это даст вам пищу для размышлений и образцы для подражания (пусть даже и не лучшие). Получится своего рода бесплатный опыт: вам не пришлось тратить время на разработку и написание, вы смотрите уже на готовый код.
- Продолжайте писать код. Перечитывайте материал из пунктов 1-3. Выкидывайте плохой код. Пишите еще. Не бойтесь рефакторить.
- Будет отлично, если вы сможете учиться у других программистов и кто-то будет адекватно критиковать ваш код, например в рамках open-source проекта.
- Читайте про проектирование, принципы SOLID, паттерны, тестирование. Постепенно вы научитесь отличать хороший класс от плохого.
- Возвращайтесь к своему старому коду (даже полугодовалой давности). Обдумывайте, что в нем не так, что вы бы улучшили. Опирайтесь в дальнейшем на этот опыт.
Я это все к чему: умение писать хороший код не приходит спонтанно. Необходимо накопить некоторую критическую массу опыта только для того, чтобы начать понимать что лучше, а что хуже. Намного быстрее этот опыт набирается в среде опытных разработчиков, где вам есть с чем сравнить свой код, чем в изоляции.
Чаще мой рабочий день это 12 часов, за которые я успеваю выжать себя как лимон
Не думаю, что оно того стоит. Такая работа - путь к стагнации и разочарованию в профессии.
Три месяца назад меня взяли работать
А это вообще не срок. Все впереди. Главное не позволяйте работе довести себя до "творческого выгорания".