Умение думать, чтобы быть хорошим программистом [закрыто]


10

Я программирую последние 15 лет со степенью без CS. Основная причина, по которой я увлекся программированием, заключалась в том, что мне нравилось изучать новые вещи и применять их в своей работе. И я смог найти и исправить ошибки программирования и их причины быстрее, чем другие. Но я никогда не становлюсь гуру или экспертом, возможно, из-за моего специалиста не из CS. И когда я увидел замечательных программистов, я заметил, что они очень хороши, конечно, намного лучше меня, в решении проблем.

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

Поэтому мне интересно, есть ли другие навыки мышления, чтобы быть хорошим программистом. Я следовал за Q & As ниже и фактически прочитал некоторые книги, рекомендуемые там. Но я не мог подобрать хорошие методы, непосредственно применимые для моей работы по программированию.

Какие непрограммные книги должен прочитать программист, чтобы развить навыки программирования / мышления?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Ответы:


10

Спасибо за указатели на существующие вопросы. Ответы на них довольно сильно отличаются от того, что, как я понимаю, вы хотите. Я дам вам несколько советов из собственного опыта. Моя собственная степень в области физики, я пришел в область с пробелами в формальности, правильности / проверке, анализе алгоритмов, динамическом программировании, системах баз данных и, в значительной степени, в начале, выборе структур данных и алгоритмов. Наиболее очевидные пробелы (например, структуры данных и алгоритмы) я закрыл рано, но я все еще читаю книги в этой области, чтобы углубить свое понимание, увидеть альтернативные презентации и освежить свою память. (Мне около 40, поэтому книги работают на меня :)

Вот список для чтения (ни в каком конкретном порядке, кроме того, в котором они пришли на ум).

  1. Программирование Жемчуг (Джон Бентли)
  2. Больше Программирования Жемчуга (Джон Бентли)
  3. Искусство компьютерного программирования (Дональд Кнут)
  4. Алгоритмы в C ++ (Роберт Седжвик)
  5. Руководство по разработке алгоритмов (Стивен Скиена)
  6. Практика программирования (Керниган и Пайк)
  7. Элементы программирования (Степанов)
  8. Как это решить (Поля)
  9. Структура и интерпретация компьютерных программ (Абельсон и Суссман)

Я также многому научился писать Solid Code, когда читал его в середине 90-х. Но его нет в списке, поскольку на самом деле он не имеет большого отношения к навыкам мышления как таковым (он больше касается разработки API-интерфейсов, чтобы минимизировать вероятность случайного неправильного использования - или, по крайней мере, это было моим основным недостатком).

Я также получил много пользы от Гёделя, Эшера, Баха (Хофштадтер) в подростковом возрасте, но это уже упоминалось в ответах на вопросы, на которые вы уже указали. Это книга для удовольствия, а не для непосредственного развития навыков информатики.

Я работаю с довольно большим количеством талантливых программистов, и почти всегда они являются поклонниками Programming Pearls . Конечно, я хотел бы, чтобы больше кандидатов, с которыми я беру интервью, прочитали главу 4 этой книги.


4

Первый; для любой дисциплины всегда найдется кто-то намного лучше в этом. Не беспокойся об этой части.

Затем; Степень CS хороша и все такое, и теоретические знания, которые она дает вам, безусловно, полезны, но это ни в коем случае не означает, что кто-то является хорошим программистом. Некоторые из лучших программистов самоучки, и, поверьте мне, мир полон выпускников CS, которые не могли запрограммировать свой выход из мокрого бумажного пакета. Так что не беспокойся об этой части.

Что касается того, чтобы стать хорошим программистом: я думаю, что две вещи важны. Одна из них заключается в том, что вам нужно уметь подходить к проблемам строго формально и мыслить на определенном уровне абстракции. Если вы понимаете указатели и рекурсию, вы, скорее всего, хороши на этом фронте. Другой - преданность и настойчивость. Как и в любом другом ремесле, программированию требуются десятки тысяч часов целенаправленной, целенаправленной практики, чтобы овладеть ею, это не происходит за ночь. Требуется по крайней мере десять лет, чтобы достичь мастерства, так или иначе. Если вы увлечены, то легко уделить время, сосредоточиться и найти новые вызовы; если нет, я думаю, что это все еще возможно, но это не будет приятной поездкой.


2

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

Затем хорошо известная «практика совершенствуется», и это также применимо здесь в программировании. Чем больше вы играете с кодом, запускаете код, читаете существующий код, чтобы исправить его, вы станете не хорошим программистом gr8.


0

Есть две книги по непрограммированию, которые я считаю критически важными.

Первый - «Леди или тигр», Раймонда Смулляна. Это великолепный набор логических головоломок, которые незаметно включают в себя обзор теории автоматов. Отличная штука.

Второй - «Гедель, Эшер, Бах: вечная золотая коса» Дугласа Хофштадтера, который заставляет вас задуматься о рекурсии и теории языка.

Если вы хотите иметь хорошие привычки для новичка, прочитайте «Шаблоны ученичества» Гувера и «Руководство по выживанию новых программистов» Картера. Обе эти книги рассказывают о том, как расширить свои навыки и как расширить свою карьеру. Они используют разные подходы, но они хорошо работают вместе.


0

Мне интересно, как вы оцениваете мастерство других программистов.

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

Конечно, если вы сможете накопить знания и научиться использовать инструменты, которые помогут вам позже, это даст вам преимущество. Я считаю, что здесь немного помогает изучение широкого спектра тем, поскольку в конечном итоге они перекрывают больше, чем я ожидал, и просто знание, где искать нужную информацию, может сэкономить много времени. Но, возможно, это только я.


0

Вы любите изучать новые вещи и можете быстро исправлять ошибки. Это означает, что у вас есть два ключевых элемента, чтобы стать гуру: энтузиазм и способность. Но вы думаете, что никогда не найдете себя экспертом, может быть, вам нужны еще две вещи: сосредоточенность и время. Например, когда Линус Торвальдс впервые выпустил Linux в 1991 году, никто не считал его гуру. Он все еще работает над Linux каждый день, и вы можете увидеть его журнал слияния из репозитория Git ядра Linux. Его внимание делает его самым известным гуру в области Linux. Время - это абстрактное понятие, оно означает, что нужно держать себя в курсе, приобретать опыт через постоянную практику, делиться своими знаниями с другими людьми и совершенствоваться ретроспективно.

У меня такая же ситуация с тобой. Я программирую в течение 15 лет со степенью не CS (EE), и меня всегда смущает мой огромный разрыв с гуру в моей области. Но у меня есть мечта стать гуру и начать посещать проект с открытым исходным кодом. Навыки мышления приходят из практики и опыта. Некоторые книги могут быть полезны, но их значение в основном носит учебный характер. Навыки мышления, принадлежащие вам, основаны на вашем собственном опыте. Давайте начнем с этого момента!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.