Подтвердить что ты не робот

Приоритет обучения программированию и другие предложения

Как я уже в стартовом году карьеры в разработке программного обеспечения (С++ и С#), теперь я вижу свои недостатки и то, что мне не хватает в этой сфере. Из-за этого я пришел к некоторым выводам и сделал себе план, чтобы заполнить эти пробелы и расширить свои знания в разработке программного обеспечения. Но вопрос, который я наткнулся после выполнения задач, которые мне нужно сделать, не совсем ясен. Каков приоритет этих задач? Вот эти задачи и мой приоритет, нумеруя:

Обучение:

  • Функциональное программирование (Scala)
  • Структуры данных и алгоритмы (книга Cormen на помощь + TopCoder/ProjectEuler/etc)
  • Шаблоны проектирования (GOF или Head First)

Согласны ли вы с этими задачами и приоритетами? Или я что-то пропустил? Любые предложения приветствуются!

4b9b3361

Ответ 1

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

В дополнение к книге из четырех, есть много других книг шаблонов дизайна - "Шаблоны архитектуры корпоративных приложений". Возможно, стоит посмотреть на них после того, как вы получите хорошее заземление. Но я также рекомендую Domain Driven Design, который, как я думаю, дает вам представление о том, как структурировать вашу программу, а не просто идентифицировать здесь и там.

Далее вы можете пойти с алгоритмами. Я предпочитаю Skiena Руководство по разработке алгоритмов, основное внимание уделяется тому, чтобы люди знали, как выбирать и использовать алгоритмы, а также строить их из хорошо известных "частей", чем на том, чтобы люди знали, чтобы делать доказательства об алгоритмах. Это также доступно для Kindle, что было полезно для меня.

Также, получите хорошую книгу структур данных - люди часто пренебрегают этим. Мне нравится Справочник по структурам данных и приложениям, хотя я также рассматриваю Расширенные структуры данных.

Однако я не могу рекомендовать TopCoder или Euler для этой задачи. TopCoder, imho, в основном о написании кода быстро. Ничего плохого в этом нет, но вряд ли это может повлиять на повседневную жизнь. Если вам это нравится, непременно сделайте это. Кроме того, это отличная подготовка к собеседованию с более технически настроенными компаниями.

Project Euler, с другой стороны, гораздо более ориентирован на научные вычисления, информатику и функциональное программирование. Это будет отличная тренировочная площадка при изучении функционального программирования.

Есть что-то, что имеет несколько шаблонов проектирования, алгоритмов и функционального программирования, которые Элементы программирования. Он использует С++ для своих примеров, что является плюсом для вас.

Что касается функционального программирования, я думаю, что он менее срочен, чем два других. Однако я указываю либо Clojure, либо Haskell вместо Scala.

Обучение функциональному программированию в Scala походит на изучение испанского языка в латиноамериканском районе, а изучение функционального программирования в Clojure - это как изучение испанского языка в Мадриде, а изучение функционального программирования в Haskell - это изучение испанского языка в изолированном монастыре в Испании,: -)

Помните, я предпочитаю Scala как язык программирования, но я уже знал FP, когда пришел к нему.

Когда вы дойдете до функционального программирования, получите Chis Okasaki Purely Functional Data Structures, для хорошего обоснования алгоритмов и структур данных для функционального программирования.

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

Ответ 2

В зависимости от того, что вы делаете.

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

Ответ 3

Структуры данных и алгоритмы помогут вам независимо от того, какой язык вы используете. Сначала я работаю над этим. Тогда шаблоны проектирования (любой язык ООП выиграет от них). Функциональное программирование хорошо, но не обязательно является главным приоритетом.

Ответ 4

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

Ответ 5

Я думаю, что в целом темы, которые вы выбрали, очень важны, и я даю вам шанс сделать что-то большее, чем обычные скучные вещи. Однако я считаю, что порядок должен быть примерно таким:

  • Структуры данных и алгоритмы
  • Функциональное программирование
  • Разработка программного обеспечения
  • Специальные технологии, которые вам нужны.

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

Важно иметь хотя бы базовое понимание других парадигм. Хорошим примером является функциональное программирование. Вы также можете ознакомиться с логическим программированием. Наличие базового понимания алгоритмов и структур данных поможет вам понять, как работают такие языки. Я не знаю, является ли Scala лучшим языком для этой цели, но, вероятно, это сделает. Кроме того, вы можете выбрать что-то более классическое, например Lisp, или Scheme. Haskell также является интересным языком.

О шаблонах проектирования... знание шаблонов проектирования поможет вам в создании объектно-ориентированного дизайна, но вы должны знать, что шаблоны проектирования - это всего лишь набор решений для популярных задач. Знание шаблонов проектирования отнюдь не такое же, как знание того, как разрабатывать программное обеспечение. Чтобы улучшить навыки разработки программного обеспечения, вы должны изучить и другие материалы. Хорошим примером того, где вы можете получить представление об этих концепциях, является книга Code Complete или курс MIT 6.170 (его материалы общедоступны).

В какой-то момент вам нужно будет ознакомиться с деталями конкретной инфраструктуры (или фреймворков), которые вам понадобятся для того, что вы делаете. Имейте в виду, что такие рамки меняются, и вы должны уметь адаптироваться и изучать новые технологии. Например, знание ASP.NET MVC теперь может быть бесполезным через 5 лет (или может и не быть, кто знает?).

Наконец, имейте в виду, что независимо от того, что вы читаете, вам нужно много практиковать, что означает решение проблем, написание кода, разработку программного обеспечения и т.д. Большинство этих понятий не могут быть легко объяснены или даже выражены слова, поэтому вам нужно будет использовать большинство из них самостоятельно (т.е. вам придется многократно изобретать колесо).

Удачи вам в карьере!

Ответ 6

Если бы вы считали, что функциональное программирование будет иметь низкий приоритет, так как языки, которые вы используете, являются OO в природе, я бы подумал, что потратить некоторое время в Design Patterns и на специфику самого языка было бы более полезным.

Я читал как GOF, так и HeadFirst, HeadFirst, вероятно, легче и веселее, но намного толще. Вероятно, вам стоит взглянуть на шаблоны Enterprise Design, например, на страницу Мартина Фаулера http://martinfowler.com/eaaCatalog/

В каком поле, по вашему мнению, вы будете работать? Игры? Веб? Вероятно, это решит, насколько важна часть Алго.

Ответ 7

Я бы сказал, что вам сначала нужно понять (даже если не вспомнить) базовые алгоритмы и структуры данных. (используйте Knuth и Cormen), а затем узнайте архитектуру (образцы дизайна здесь). Функциональное программирование - это всего лишь один тип программирования и является обязательным. Есть много отличных программистов, которые не используют функциональное программирование, но я предполагаю, что для всех видов вы должны сначала знать основы - алгоритмы и структуры данных.

Ответ 8

Я бы сказал, что №2 идет первым, особенно если вы планируете использовать С++/С# на работе, имея хорошую команду структур данных и алгоритмов, вы получите некоторое преимущество. Я вижу # 1 и # 3 как несколько параллельные пути, но у меня есть несколько предложений: начните с книги Head First для шаблонов, GOF больше похож на справочник, а также обозначение и язык могут стать довольно заумными. Что касается функционального программирования, могу ли я предложить Clojure вместо Scala? Я убежден, что "функционально-первый" язык (например, F # или Clojure) заставит вас думать о функциональности (хорошая вещь) вместо того, чтобы просто исправлять свои навыки O-O/imperative.