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

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

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

Предположения:

  • У вас все еще есть результаты для создания, но вам разрешено использовать одну неделю в месяц в течение года для этого обучения.
  • Обучение может происходить из любого места. IE: классная комната, инструктор на месте, книги, подписки, подкасты и т.д.
  • Тема может охватывать любую платформу, технологию, язык, СУБД, набор инструментов и т.д.
4b9b3361

Ответ 1

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

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

Ответ 2

Безопасность

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

Расширенная разработка баз данных

Такие вещи, как хранилище данных (MDX, OLAP-запросы, звездные схемы, таблицы фактов и т.д.), расширенная настройка производительности, расширенные схемы и шаблоны запросов и т.п. всегда полезны.

Ответ 3

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

Ответ 4

Вопросы интернационализации, тем более, что похоже, что это не была бы передовая тема. Но это так.

Ответ 5

Доступность

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

Ответ 6

Объектно-ориентированные шаблоны проектирования.

Ответ 7

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

  • Многопоточные методы, которые идут кроме "блокировки" и когда применять их.
  • Углубленное обучение для обучения и привыкнуть к умным функции в их инструментальной цепочке (IDE/текст редактор, отладчик, профайлер, оболочка.)
  • Некоторая теория криптографии и практический опыт с различными общими недостатками в схемах безопасности, которые создают люди.
  • Если они работают с базой данных, изучают внутреннюю базу своей базы данных и состав запросов и методы настройки.

Ответ 8

Разработчики должны знать основы разработки SQL и то, как их решения влияют на производительность базы данных. Одно дело - написать запрос, другое дело - написать запрос, понять план объяснений и принять проектные решения на основе этого вывода. Я думаю, что хороший курс по разработке PL/SQL и производительности базы данных будет очень полезен.

Ответ 9

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

  • Возьмите наушники и поговорите с кто-то вместо IM'ing или отправки по электронной почте парень на следующем столе.
  • Поднимите телефон и поговорите с клиент вместо лоббирования электронной почты над забором.
  • Задавайте вопросы на конференции вместо того, чтобы сидеть за ноутбуком экран щебетать.
  • Активно участвовать в нетехническом совещании на работе.
  • Представьте что-нибудь публично.

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

Это не повредит вашей карьере.

Ответ 10

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

Дополнительно: это, вероятно, не имеет значения. В чем заключается тема - тот факт, что организация заинтересована в ней и платит за нее, а разработчики хотят идти и идут, - это лучший показатель успеха/улучшения, чем любой конкретной теме.

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

Ответ 11

Я человек книги, поэтому я бы не потрудился с инструкцией.

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

  • Программирование OO
  • Функциональное программирование
  • Структуры данных и алгоритмы
  • Параллельная обработка
  • Установленная логика (по существу, теория sql и как ее применять).
  • Создание парсеров (я только ставил это, потому что он действительно появился там, где я работаю)
  • Метод разработки программного обеспечения

Ответ 12

NP Completyness. В частности, как определить, является ли проблема NP-Complete, и как построить приблизительное решение проблемы.

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

Ответ 13

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

  • Microsoft.NET Framework v3.0/v3.5/v4.0
  • Облачные вычислительные среды (Amazon EC2, Windows Azure Services, GoGrid и т.д.)
  • Шаблоны проектирования

Ответ 14

Я из мира разработчиков, основанных на MS, так что вот мое занятие на этом

  • Подробнее о новых концепциях в Cloud Computing (различные API и т.д.). как индустрия делает ставку на него на некоторое время.

  • Подробнее о LinQ для .net framework

  • Распределенные базы данных

Ответ 15

Методы рефакторинга (что подразумевает также обучение писать хороший набор функционально-функциональных тестов).

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

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

Ответ 16

Параллельные вычисления - самый простой и лучший способ изучить его

Ответ 17

Отладка

Отладка David J. Agans - хорошая книга по этой теме. Отладка может быть очень сложной, когда вы имеете дело с многопоточными программами, сбоями, алгоритмами, которые не работают. и т.д. Всем лучше было бы хорошо отлаживаться.

Ответ 18

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

Ответ 19

Перейдите в Дефисы

и конференции ACCU


Прочитайте

  • Agile Software Development, Principles, Patterns and Practices (Robert C. Martin).
  • Чистый код (Robert C. Martin)
  • Прагматический программист (Andrew Hunt & David Thomas)

Ответ 20

Хорошо, если вы здесь, я надеюсь, что теперь у вас есть основы:

  • Лучшие практики ООП.
  • Шаблоны проектирования
  • Безопасность приложений
  • Безопасность/Запросы/Схемы безопасности

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

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

Ответ 21

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

Ответ 22

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

Ответ 23

Автостопом по Галактике.

Ответ 24

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

Ответ 25

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

Однако мой ответ идет на дизайн GUI - это довольно сложная вещь, чтобы получить право. Там слишком много ужасных приложений, которые можно предотвратить, просто потратив время на то, чтобы следовать советам/проектам HCI (Human Computer Interaction). Возьмите Google/Apple за вдохновение при создании графического интерфейса - не ваши типичные сотни комбинаций кнопок/ярлыков, которые слишком часто вытесняются.

Ответ 26

  • Автоматическое тестирование: модульное тестирование, функциональное тестирование интеграции, нефункциональное тестирование
  • Подробности компилятора (более релевантные на некоторых платформах, чем другие): Как компилятор реализует некоторые общие конструкции в языке X? На интерпретируемой платформе с байтовым кодом, как работает компиляция JIT? Что может быть скомпилировано JIT (например, можно ли скомпилировать виртуальные вызовы JIT?)?
  • Основная веб-безопасность
  • Общие идиомы дизайна из других проблемных областей, чем тот, над которым вы сейчас работаете.

Ответ 27

Я бы посоветовал узнать о Рефакторинге, Test Driven Development и различных модулях модульного тестирования (NUnit, Visual Test, CppUnit и т.д.). Я также узнал, как включить автоматическое модульное тестирование в ваши непрерывные интеграционные сборки.

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

Test Driven Development (TDD) - это более новый подход к разработке, который начинается с требований, когда вы начинаете с написания теста перед написанием кода. Затем вы пишете достаточно кода, необходимого для прохождения теста. Вы должны остановиться, прежде чем писать дополнительный код (который вам никогда не понадобится), потому что вы будете реорганизовать его позже, если найдете, что вам действительно это нужно.

Что делает TDD крутым, так это то, что плохой интерфейс (например, один с большим количеством зависимостей) также очень трудно писать тесты. Это так сложно, что кодер скорее реорганизовал интерфейс, чтобы сделать его более легким для тестирования. И этот рефакторинг упрощает код, устраняет несоответствующие зависимости или группирует связанные тесты вместе, чтобы облегчить тестирование, улучшая тем самым сплоченность. Сделав это сразу же разработчику, когда он пишет плохо взаимодействующий модуль, разработчик придерживается архитектуры и тяготеет к принципам жесткой сплоченности и свободной связи. Хорошие интерфейсы - естественный результат. И в качестве бонуса, как только вы пройдете все свои тесты, вы знаете, что все готово.

Ответ 28

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

Итак, что такое "продвинутая тема" в информатике? Кто такой Тьюринг, Кнут, Тёдон 21-го века?

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

Ответ 29

Довольно забавно, что никто не упомянул:

  • отладки.
  • инструменты и идеи, с которыми вы работаете
  • и платформу, для которой вы разрабатываете.

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

Ответ 30

Контроль источника