Какие направления программирования вы бы порекомендовали новичку?
Я студент, изучающий разработку программного обеспечения, и мне кажется, что программирование в целом слишком широкая тема, чтобы пытаться знать все. Чтобы быть профессиональным, вы должны решить, на каких областях следует сосредоточить свое обучение и понимание. Определенные наборы навыков взаимодействуют друг с другом, например веб-разработка на основе данных и опыт SQL. Однако весь мировой опыт использования Win32 API не может напрямую применяться к разработке под Linux. Это наводит меня на мысль, что как начинающий программист я должен начать решать, где я хочу специализироваться, после того, как у меня будет общее понимание основных принципов разработки программного обеспечения.
На самом деле это вопрос, состоящий из нескольких частей:
- Каковы общие специализации в компьютерном программировании и разработке программного обеспечения?
- Какие из этих специализаций имеют более долгосрочную ценность как основа для других специализаций, так и / или как востребованные навыки?
- Какие наборы навыков дополняют друг друга?
- Есть ли области специализации, которые мешают вам развивать другие области специализации?
Ответов (6)6
Бен, почти все опытные программисты все еще учатся программированию. Когда ты разработчик, ты никогда не перестаешь чему-либо учиться. Но если вы действительно начинаете свою карьеру, вам меньше всего следует беспокоиться о специализации. Все API, фреймворки и навыки, которые, как вы ожидаете, обеспечат вам долгосрочное существование в этой области, не появятся. Кажется, что технологии сильно меняются, и вы должны быть достаточно универсальными и гибкими, чтобы чему-то научиться. Знания, которые вы приобретаете на одной платформе / api / framework, не отмирают. Вы можете применить свои навыки к следующей лучшей платформе / api / framework.
При этом вам следует просто перестать беспокоиться о будущем и сосредоточиться на основах. Структуры данных, анализ и проектирование алгоритмов, проектирование компилятора, проектирование операционной системы - вот минимум, что вам нужно. Кроме того, вы должны быть готовы вернуться и прочитать книги в этой области в любое время в вашей карьере. Это все, что нужно. Удачи.
Извините, если я прозвучал как большой советник; но это то, что я думаю. :-)
Пойдите как можно глубже, начав с одной среды, win32, .net, Java, Objective C ... что угодно.
Важно сформировать глубокое понимание того, как работает X ... чтобы вы могли переводить те же концепции на другие языки или платформы / среды, если хотите.
«Есть ли области специализации, которые мешают вам развивать другие области специализации». Вроде, но ничего постоянного, я думаю.
Поскольку я сам относительно экологичен (менее 4 лет), я исхожу из настоящего мышления ООП. Я редко выпрыгивал из .NET, поэтому мне было нелегко выполнить одну работу, когда я столкнулся со встроенным кодом. Со встроенными программистами, опасающимися создания объекта и потери производительности при наследовании. Мне пришлось изучить среду, серьезно нехватку памяти и медленное время часов, из-за которых они исходили. Пришло время расти, мне было лучше, потому что я хорошо разбирался в своей области.
Я скажу, что если вы выберете что-то, на чем будете специализироваться с точки зрения конкурентоспособности и денег, вы, вероятно, быстро выгорите. Если вы начнете специализироваться, выберите то, что вам нравится. Я люблю программирование с графическим интерфейсом и ненавижу вещи на стороне сервера, мой приятель - противоположность, но мы оба любим свою работу. Если бы он выполнял мою работу, а я - свою, мы бы сошли с ума от скуки.
Не хочу прямо отвергать вашу предпосылку, но я на самом деле думаю, что быть универсальным специалистом - это хорошая позиция в программировании. Вы, безусловно, приобретете опыт в определенных областях, но, скорее всего, это будет продукт либо личных интересов, либо производственной необходимости. Со временем то, что вы можете передавать между языками и проблемными областями, становится основой того, что делает хороших программистов.
Я думаю, что лучший навык - это адаптироваться ко времени, потому что, если ваш работодатель видит в вас этот потенциал, им будет разумно держаться крепче.
Тем не менее, я бы посоветовал вам погрузиться в то место, которое ВАМ понравится. Обучение ведется на энтузиазме .
Поскольку в настоящее время я работаю у интернет-провайдера, я считаю, что знание сетевых технологий особенно полезно. Но когда-нибудь мне захочется поиграть с 3D графикой (не обязательно в игры).
Будучи студентом, я бы рекомендовал забыть о том, что вы программируете, и сосредоточиться на самом процессе разработки программного обеспечения. Понять, как анализировать проблему и задавать правильные вопросы; изучите все возможные шаблоны проектирования и примените их все, чтобы по-настоящему понять и оценить объектно-ориентированный дизайн; напишите тесты, а затем кодируйте ровно столько, сколько вам нужно, чтобы тесты прошли. Я думаю, что лучший способ действительно научиться - это просто кодировать столько, сколько вы можете - язык и домен не важны, просматривайте sourceforge и freshmeat для любых интересных проектов и принимайте участие. Важно понимать основы разработки программного обеспечения.
И да, это включает C. или Ассемблер. Это самый простой способ получить хорошее представление о том, как работает ваш компьютер и что на самом деле делает ваш высокоуровневый код.
Наконец, никогда не прекращайте учиться - сервис-ориентированная архитектура, инверсия управления, предметно-ориентированные языки, управление бизнес-процессами - все это демонстрирует огромные преимущества, поэтому о них важно знать - но к тому времени, когда вы закончите учебу и присоединитесь к рабочей силе, которая знает, что будет дальше?