Какие направления программирования вы бы порекомендовали новичку?

Я студент, изучающий разработку программного обеспечения, и мне кажется, что программирование в целом слишком широкая тема, чтобы пытаться знать все. Чтобы быть профессиональным, вы должны решить, на каких областях следует сосредоточить свое обучение и понимание. Определенные наборы навыков взаимодействуют друг с другом, например веб-разработка на основе данных и опыт SQL. Однако весь мировой опыт использования Win32 API не может напрямую применяться к разработке под Linux. Это наводит меня на мысль, что как начинающий программист я должен начать решать, где я хочу специализироваться, после того, как у меня будет общее понимание основных принципов разработки программного обеспечения.

На самом деле это вопрос, состоящий из нескольких частей:

  1. Каковы общие специализации в компьютерном программировании и разработке программного обеспечения?
  2. Какие из этих специализаций имеют более долгосрочную ценность как основа для других специализаций, так и / или как востребованные навыки?
  3. Какие наборы навыков дополняют друг друга?
  4. Есть ли области специализации, которые мешают вам развивать другие области специализации?

Ответов (6)

Решение

Бен, почти все опытные программисты все еще учатся программированию. Когда ты разработчик, ты никогда не перестаешь чему-либо учиться. Но если вы действительно начинаете свою карьеру, вам меньше всего следует беспокоиться о специализации. Все API, фреймворки и навыки, которые, как вы ожидаете, обеспечат вам долгосрочное существование в этой области, не появятся. Кажется, что технологии сильно меняются, и вы должны быть достаточно универсальными и гибкими, чтобы чему-то научиться. Знания, которые вы приобретаете на одной платформе / api / framework, не отмирают. Вы можете применить свои навыки к следующей лучшей платформе / api / framework.

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

Извините, если я прозвучал как большой советник; но это то, что я думаю. :-)

Я думаю, что более важный вопрос: какие области специализации вас больше всего интересуют?

Как только вы узнаете, начните учиться в этой области!

Пойдите как можно глубже, начав с одной среды, win32, .net, Java, Objective C ... что угодно.

Важно сформировать глубокое понимание того, как работает X ... чтобы вы могли переводить те же концепции на другие языки или платформы / среды, если хотите.

«Есть ли области специализации, которые мешают вам развивать другие области специализации». Вроде, но ничего постоянного, я думаю.

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

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

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

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

Тем не менее, я бы посоветовал вам погрузиться в то место, которое ВАМ понравится. Обучение ведется на энтузиазме .

Поскольку в настоящее время я работаю у интернет-провайдера, я считаю, что знание сетевых технологий особенно полезно. Но когда-нибудь мне захочется поиграть с 3D графикой (не обязательно в игры).

Будучи студентом, я бы рекомендовал забыть о том, что вы программируете, и сосредоточиться на самом процессе разработки программного обеспечения. Понять, как анализировать проблему и задавать правильные вопросы; изучите все возможные шаблоны проектирования и примените их все, чтобы по-настоящему понять и оценить объектно-ориентированный дизайн; напишите тесты, а затем кодируйте ровно столько, сколько вам нужно, чтобы тесты прошли. Я думаю, что лучший способ действительно научиться - это просто кодировать столько, сколько вы можете - язык и домен не важны, просматривайте sourceforge и freshmeat для любых интересных проектов и принимайте участие. Важно понимать основы разработки программного обеспечения.

И да, это включает C. или Ассемблер. Это самый простой способ получить хорошее представление о том, как работает ваш компьютер и что на самом деле делает ваш высокоуровневый код.

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