Какие навыки необходимы для профессионального программирования, которые обычно не преподаются в школах? [закрыто]

14

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

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

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

Любой совет с благодарностью, но если у вас есть какие-либо книги, пожалуйста, сообщите. Благодарность!

Эрик
источник
8
этот вопрос неоднократно задавался на этом сайте по-разному. пожалуйста, сначала поиск, а затем спросите. взгляните на FAQ; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/...
tgkprog
3
Я действительно искал, и я видел оба этих вопроса. Но я не занимаюсь изучением дизайна или веб-разработкой. Я заинтересован в том, чтобы узнать, что многие программисты считают, что им действительно следовало учиться в школе. У этих вопросов есть несколько полезных советов, но они не совсем то, что я ищу. Спасибо
Эрик
+1 Единственное умение, которое я хотел бы освоить, прежде чем стать программистом на полную ставку, - это сильные математические навыки, потому что математические навыки являются спорным наиболее важным навыком, потому что он тренирует ум решать проблемы и изучать новые концепции и как программист, что в основном то, что я буду делать каждый день.
Энтони
3
Workflow. И понимание того, что этот код не уникальная снежинка единорога. Примените принцип наименьшего удивления при проектировании. Думай, прежде чем сделать. Управление сложностью становится очень важным аспектом.
sleeplessnerd
1
На самом деле мне не очень нравится работать с людьми с сильными математическими навыками. Они превращают все в математическую формулу вместо того, чтобы применять принципы разработки программного обеспечения. Программное обеспечение не математика. Важно, чтобы вы написали свой код, чтобы его было легко понять.
Роб К

Ответы:

21

В школе вы узнаете о написании кода. То, о чем вы не узнаете, так это остальная часть разработки программного обеспечения. Главные вещи, о которых я ничего не узнал в школе:

  • работая в составе команды разработчиков
  • используя контроль версий
  • используя трекер ошибок

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

Мейсон Уилер
источник
4
Работа в команде разработчиков, безусловно, является тонким и сложным искусством. Однако я не понимаю, почему контроль версий и отслеживание ошибок всегда считаются серьезным препятствием для новых разработчиков. Они, безусловно, являются важными инструментами, но вы указываете новому человеку справочные страницы, книгу О'Рейли или онлайн-учебник, и они могут за несколько часов узнать об использовании хлеба и масла. Зачем тебе тратить время в классе на что-то подобное?
Чарльз Грант
1
@ CharlesE.Grant Управление версиями похоже на программирование в том смысле, что вы можете получить базовые знания за относительно короткое время, но для эффективного использования требуется опыт. И DVCS, такие как git и Mercurial, понимают больше, чем CVCS, как svn.
Изката,
8
У меня никогда не было занятий по поддержанию установленного кода (что является основной частью работы в составе команды разработчиков), и мой опыт в классе по тестированию кода был минимальным.
Velociraptors
1
@ CharlesE.Grant: несколько лет я преподаю курсы по программированию и смежные темы для выпускников. Даже аспиранты с трудом понимают, почему они должны использовать любую систему контроля версий. И когда они неохотно начинают использовать это, они, кажется, очень смущаются этим очень быстро. +1 Мэйсону за то, что он поднял это как важную необразованную тему.
Питер К.
1
+1 +1 +1, по одному на каждую точку. Это так глупо, что они не учат вас этим вещам ... или, по крайней мере, стараются научить вас.
Раду Мурзеа
20

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

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

Если ваша компания не пишет тесты для своего кода, начните писать тесты сейчас.

Если они не отслеживают ошибки, найдите подходящий трекер ошибок сейчас.

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

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

Марк Рушаков
источник
9

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

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

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

Брайан Оукли
источник
+1 за тестовую часть. В моем университете их тоже не учат. У меня был 1 класс (да: один), где учитель упомянул юнит-тестирование ... около 3 минут. Вот и все.
Раду Мурзеа
Я знаю, что это запоздалый ответ, но это было одной из причин, по которым моя степень по математике привлекла моих работодателей. Это мнение определенно разделяют и работодатели.
Эрик
Согласитесь, во многих школах алгоритмы (то есть «решение проблем») не учитываются должным образом, или вообще не учитываются, или не учат, как применять его с языком программирования, даже если они должны быть «агностичными».
umlcat
Хмммм .... твой ответ не может быть более противоположным тому, что я испытал. Основная задача школы - дать задний фон, чтобы вы могли эффективно изучить проблему, понять ее и найти решения. Новый выпускник, возможно, не «хорош» в этом только что после школы, но он, безусловно, должен быть обучен и способен на это. В моей школе программирование вообще не преподавали. Вы должны были научиться программировать (самостоятельно), изучая информацию, которую курс пытался научить вас. Так что, где вы получаете, они только учат "механике кодирования" от меня выше ...
Данк
... В приличных школах Вы не получаете кредит просто за то, что научились кодировать. Если вам сложно использовать контроль версий, тогда у вас есть гораздо более серьезные проблемы, которые никакое обучение не сможет помочь. Когда вы придете к определенному способу написания кода, который легко поддерживать, напишите книгу и станьте богатым. Никто еще не решил эту проблему. Вы, должно быть, пропустили те части в школе, где вам нужно было сдать свои программы для тестирования. Приемочное / регрессионное тестирование зависит от конкретной отрасли, и его лучше учить на работе, выполняя ее в компании, а не в школе.
Данк
7

По моему мнению, некоторые из самых важных вещей, которые не изучены (или правильно изучены) в школе:

  • Как правильно использовать и IDE; Использование всех возможностей современной IDE обеспечивает огромное увеличение производительности: автоматический рефакторинг, навигация по коду, интеграция с VCS, анализ кода, автозавершение кода и т. д.
  • Как правильно использовать отладчик: удаленная отладка, отладка многопоточных приложений, экспресс-оценка и т. Д.
  • Исправление ошибок и обслуживание; в университете они почти ничего не учат этому, но в промышленности довольно часто можно исправить ошибки.
  • Как работать в большой команде и над большим проектом; в основном в университете проекты небольшие по сравнению с крупными промышленными проектами.
  • Как написать хороший код и как сделать акцент на удобочитаемости; это приходит с опытом, но есть несколько книг, которые научат вас основам (Code Complete, Clean Code и т. д.).
  • Как использовать фреймворк на полную мощность, используя его настройку; в университете, возможно, вы узнали, как использовать некоторые фреймворки в некоторых очень простых сценариях; в промышленности вы достигнете угловых случаев.
  • Как понять и написать код после спецификации; вы, вероятно, узнаете, как написать спецификацию, но теперь как ее прочитать и как ее интерпретировать

VCS, системы отслеживания ошибок, инструменты сборки и т. Д. - это инструменты, которые вы обязаны изучить, чтобы иметь возможность работать с командой; они не требуют много времени для изучения на базовом уровне и довольно просты после этого (по крайней мере, в начале); Приведенный выше список содержит тонкости, которые, если известны, увеличат вашу производительность.

m3th0dman
источник
aka «Программирование» - это не просто знание языка программирования, это «окружающая среда», «экосистема», «инфраструктура» ...
umlcat
4

Самая большая вещь, которую я вижу в новых выпускниках - это хорошее понимание контроля версий.

Если у вас есть опыт разработки программного обеспечения с открытым исходным кодом с использованием репозиториев исходного кода (например, GitHub ), вы на шаг впереди mostсвоих одноклассников.

Второе - это понимание сложности ( big O). Большинство людей, не посещающих колледж, слышали об этом, но им еще предстоит разработать настоящее программное обеспечение там, где оно вступает в игру, и, следовательно, не понимает его реальной важности.

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

Мартин Йорк
источник
1
Я думаю, что недостаток образования контроля версий начинает меняться. Контроль версий был в моей школе очень тяжелым.
Лапа-заяц
@SouthpawHare: я не говорю, что это не существует, они даже учили это в мой день. Просто люди, выходящие из университета с таким опытом, все еще в меньшинстве. И как таковые люди, которые имеют это, являются более ценными. Я не согласен с тем, что он сильно изменился за последние 20 лет.
Мартин Йорк,
3

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

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

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

Джек Эйдли
источник
2

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

По моему опыту, моя школа никогда не учила меня решать проблемы.

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

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

Абиджит Кп
источник
2

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

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

user86834
источник
2

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

Они могут прийти только из опыта работы непосредственно на местах.

  • Научиться сотрудничать и общаться с людьми вне вашей «профессии», такими как графические дизайнеры, дизайнеры, менеджеры и т. Д.

  • Понимание того, что ваша задача - не писать код, а воплощать продукт в жизнь. Легче сказать, чем сделать.

  • Умение сочетать хорошие практики кодирования с практическими соображениями. Получение способности судить, когда код «достаточно хорош», «перегружен» или «нуждается в рефакторинге».

  • Учимся преодолевать собственные слабости и неуверенность. Приобретение способности противостоять критике. Отпусти свое эго. Узнав, что значит взять на себя личную ответственность, а затем принять ее.

Легко читать обо всем этом. Это совсем другое дело - применять это на практике. Единственный способ это сделать. Вы будете много раз кусаться, и это, вероятно, будет больно, но вы выйдете из этого сильнее и лучше.

Соответствующее чтение: шаблоны ученичества

Hasen
источник
1

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

Но школа не учит одно: детали. Довольно часто, когда школа преподает какую-то технологию или практику (например, веб-разработку, разработку пользовательского интерфейса JAVA, продвинутые базы данных), они лишь поверхностно рассматривают и никогда не углубляются в детали, которые были бы необходимы для использования этой технологии или практики в реальном бизнесе. Вы получите общий обзор возможных способов решения ваших проблем, но вам нужно будет самостоятельно изучить необходимые детали.

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

Euphoric
источник
1
  • требования - поймите их неправильно, а отдых - в основном пустая трата
  • приоритеты (какая особенность в каком выпуске)
  • сделать или использовать из коробки (купить / бесплатно)
  • совместная деятельность
  • управление проектами - требования, качество (образцы данных в prod, контрольные примеры, как тестировать, охват перед кодированием, больше похоже на стоимость, но не имеет значения. читайте книгу PMI
  • средства коммуникации (почта, встречи: календарь планировщик)
  • управление исходным кодом
tgkprog
источник
0

Хотелось бы, чтобы я раньше решил в игре, хочу ли я быть общим программистом, изучать много разных вещей, языков, баз данных и платформ и в конечном итоге стать веб-разработчиком, или я должен просто специализироваться на одной CMS, или даже просто специализируясь на Photoshop, будучи специалистом, ваши навыки были бы столь же ценными и прибыльными, чем знание того, что должен знать настоящий программист. Другими словами, если вам просто нужно хорошо заработать, просто специализируйтесь на ОДНОЙ ВЕЩИ. Если вы любите компьютер и любите решать проблемы, будьте программистом.

[размышляя над и после изучения, как 4 или 5 различных javascript-фреймворков, до того, как JQuery действительно стал сильным, получение сертификата в JAVA и никогда не получение позиции java, а также после работы на нескольких платформах; AS400- rpg,> .NET - c # и PHP, прежде чем пожелать, я просто освоил Photoshop и заработал равные деньги без необходимости исправления ошибок или написания программного обеспечения. ]

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

Эрик
источник
2
Да, но такого рода специалист никогда не собирается открывать собственный магазин. Если в будущем вы мечтаете стать генеральным директором собственного стартапа, вам понадобится ОГРОМНЫЙ набор навыков.
Давор Адрало