LINUX.ORG.RU

Хочу научиться программировать правильно


1

3

В универе, естественно, за 5 лет научили только теории, и только основам. Как следствие, код получается некрасивый. Накидайте, пожалуйста названий книг, ссылок на статьи, и одним быдлокодером станет меньше. Спасибо.

★★★★

читать код, думать перед тем как писать, давать читать свой код кому-нибудь еще. Мне не очевидно как этому можно научиться по книжкам

nokachi
()
Ответ на: комментарий от nokachi

Ну есть же разные методики, вроде нисходящего программирования, вот, хотелось бы почитать, как еще можно упростить себе и другим жизнь

alix ★★★★
() автор топика
Ответ на: комментарий от alix

Ну, мне в универе помогали — я сдавал код, он прогонялся на тестах и еще проверяющий человек делал code review, design review. Если где-то делал неоптимально или код дупликейшн, вычитал поинты. Еще у меня в проектах были партнеры, так мы друг другу не давали писать говнокод.

nokachi
()

Хех... это сродни постигания Дзена. После каждого проекта я смотрю на прошлые и ужасаюсь удивляюсь.

Один из самых важных шагов у меня было - это написание первого демона + имплементация протокола веб-сокетов с нуля, начиная с 76-го черновика стандарта. Теория разбилась о железобетонную реальность.

Так вот - напиши чё-то сам, стараясь сделать это настолько качественно, насколько ты знаешь. А потом ещё что-нибудь. И ещё.

Даже на рабочих проектах ты будешь ещё учиться, и это нормально.

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от nokachi

нет. код не красивый как правило из-за недостаточного уровня абстракции. ну или слишком высокого. так что sicp как раз уместна.

ymn ★★★★★
()

Подозреваю что проблема не в коде, а в планировании (архитектуре) программы.

sdio ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

То есть фактически - это дело опыта?

Так вот - напиши чё-то сам, стараясь сделать это настолько качественно, насколько ты знаешь. А потом ещё что-нибудь. И ещё.

Всякий раз, когда пишу что-то, в какой-то момент времени приходит понимание, что всё неправильно начато, и легче переделать с нуля, чем городить костыли. Так и делаю.

alix ★★★★
() автор топика
Ответ на: комментарий от Rastafarra

а я недавно обнаружил, что у Э. Реймонда вообще нет высшего образования :)
и идеи он всякие толкает сомнительные

хотя the art of unix programming годной книжкой кажется

Harald ★★★★★
()
Ответ на: комментарий от alix

На мое мнение - это нормальное явление и хороший показатель того, что ты развиваешься. Просто в начале практики оно имеет бешенные темпы, так как ты сталкиваешься со многими новыми вещами.

Chaser_Andrey ★★★★★
()

Код всегда будет получаться плохим. Когда я смотрю свой код месячной давности, то всегда нахожу места, которые можно исправить. Плохо, если это не так --- это признак отсутствия прогресса. Так что переживать не стоит.

Из того, что почитать, рекомендовал бы книгу «Программист-прагматик» - это примерно то же, что «Совершенный код», только более концентрированно.

Но самое главное, что нужно делать, это:

  • писать много кода;
  • читать много чужого кода, сравнивать его со своим;
  • не лениться исправлять свой код, если видишь, как его можно улучшить.
nkalex
()
Ответ на: комментарий от Harald

а я недавно обнаружил, что у Э. Реймонда вообще нет высшего образования

да и хрен с ним.

и идеи он всякие толкает сомнительные

ну... они вообще все сомнительные, даже идея свободное vs проприетарное ;)

Rastafarra ★★★★
()

Чем больше пишешь, тем более правильнее начинаешь мыслить. Смотри примеры, кодь, со временем все станет зашибись.

Zhbert ★★★★★
()
Ответ на: комментарий от alix

Всякий раз, когда пишу что-то, в какой-то момент времени приходит понимание, что всё неправильно начато, и легче переделать с нуля, чем городить костыли. Так и делаю.

Ага, аналогично. Один проект начинал 3 раза, причем каждый раз код получаелся все более совершенным, меньшим и более работоспособным.

Zhbert ★★★★★
()

Хочу научиться программировать правильно

Никто не умеет программировать правильно. Те кто говорят, что умеют, - нагло врут!

Идеального кода не существует, это мистификация. В любом коде есть изъяны. Начиная от неправильной архитектуры, заканчивая банальными тайпо.

Но читать книжки - да, очень полезно. Рекомендую sicp.

nanoolinux ★★★★
()
Ответ на: комментарий от nokachi

real world

haskell

научная фантастика в другом разделе

buddhist ★★★★★
()

Читайте больше чужого кода, читайте различные общие книжки: SICP, Masterminds of Programming, HtDP, Zen of Programming. Читайте книжки по, казалось бы, уже старым технологиям и вещам, чтобы понимать, почему были сделаны те или иные решения при проектировании новых технологий. Но без чтения чужого кода никуда.

buddhist ★★★★★
()
Ответ на: комментарий от alix

Refactoring. Переписывать с ноля - это из пушки по воробью :)

Deleted
()

И теории: Макконел «Совершенный код» и Мартин «Чистый код». Дальше только опыт.

По поводу техник, TDD попробуйте - тоже расширяет сознание как следует.

kulti ★★
()

В дополнение к вышесказанному: Sutter, Alexandrescu - C++ Coding Standards, если будешь писать на с++.

JackyTreehorn
()
Ответ на: комментарий от nokachi

Там больше по менеджементу разработки, но, имхо, такая инфа тоже очень полезна.

kulti ★★
()

Брукс «Мифический человеко-месяц».
Макконелл «Совершенный код».
Фаулер «Рефакторинг».

Ну и программировать по 8 часов в день, рефакторить свой код, находить в нем хорошие и плохие решения.

trex6 ★★★★★
()

Макконелл УГ, воды тонны, а полезной информации - ноль. Чего только стоит глава «личность», или там фраза «нелегко расширить сельскохозяйственную метафору на область разработки ПО». Вы посмотрите на него, он же упоротый!! Дважды пытался читать и оба раза начинала ехать крыша. Чувак просто вывалил на бумагу все что у него в голове было, тихий ужас короче.

А вообще, лучше всего устроиться стажером-программистом, старшие товарищи всему научат.

harvos
()
Ответ на: комментарий от harvos

Я подозреваю, что в оригинале оно не так дико читается.

Hoodoo ★★★★★
()
Ответ на: комментарий от Hoodoo

просто у меня предвзятое отношение ко книгам толще 300 страниц. Если это не справочник, конечно, вроде Стивенса. Вот, например, «Практика программирования» Кернигана и Пайка или там «Программист-прагматик» - хорошие весчи.

harvos
()

Пиши код. И мне в свое время здорово помогла книга Гради Буча «Объектно-ориентированный анализ и проектирование», но только второго издания. В третьем издании появилось много авторов, перешли на официальный UML, и книга стала просто скучной. Во втором издании дается методология того, как подходить к разработке проекта. Изложен итеративный метод.

Что касается других методов разработки, а это напрямую влияет на код, то они часто связаны с особенностями языков. Восходящий метод хорошо подходит для функциональных языков типа лиспа, где есть к тому же мощный REPL. Там чаще встречаются чистые функции. Нисходящий больше подходит для процедурных типа Си. Итеративная разработка - для ООП. Но это очень грубая прикидка, потому что походы можно смешивать от задачи к задаче. Задачи могут быть вложенными и т.д. Да и сами языки сейчас распространены смешанные, мультипарадигменные.

А от того, как ты анализируешь и проектируешь, напрямую зависит то, как ты пишешь код. Код является скорее следствием. Например, из Буча я почерпнул, что очень важно в начале выделять сценарии или, как их еще называют, варианты использования. А это фактически постановка задачи. И ставить задачи нужно постоянно, на разных уровнях. Даже если ты - просто юниор. Если задача поставлена правильно, то считай, что код на половину написан.

Еще я хотел бы предостеречь от разных книг, где говорится, как нужно «правильно» писать код. Это все относительно. Я видел такие статьи, где за «правильный код» преподносится то, что, например, лисперу будет казаться дико неправильным и несовершенным. Лучше думай своей головой.

dave ★★★★★
()
Ответ на: комментарий от harvos

Читаю сейчас Макконела, вроде особого отторжения не вызывает. Мне, как ненастоящему сварщику, наверное, полезно читать такие книги - у меня-то нет университетского образования.

«Прагматика» и другие книги из серии многие советуют, нужно будет раздобыть.

А, ну «Code Complete» же O'Reilly издаёт, нет? У меня слабость к этому издательству.

Hoodoo ★★★★★
()

SICP

SICP

SICP

SICP

SICP

читай-читай... видно тренд такой сейчас. Все лица продвинутой ориентации предпочитают LISP. А я вот по старинке...

drBatty ★★
()
Ответ на: комментарий от Andersen

Andersen

что то кнута никто не рекламирует.

кому он нужен?!

SICP

drBatty ★★
()

Вам ещё повезло, что вас в универе хоть вообще программировать учили. Хотя бы теории. Нас и этому не учили... зато требуют непонятно чего %(

BattleCoder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.