it-swarm-ru.tech

Почему они не учат этому в школе?

За лето мне посчастливилось попасть в Google Summer of Code. Я многому научился (вероятно, больше, чем я узнал в сумме всех моих университетских курсовых работ). Мне действительно интересно, почему они не учат нескольким вещам, которые я узнал раньше в школе. Назвать несколько:

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

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

Не поймите меня неправильно, я не думаю, что университетам всегда желательно преподавать самые модные увлечения программированием, но разве мои профессора не должны учить меня чему-то другому, кроме "нарисовать диаграмму, прежде чем вы начнете кодировать?"

118
Jason Baker

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

Например, несмотря на недавние достижения в области материаловедения, инженеры-строители уже около 2000 лет знают, как построить Арку, которая не упадет, и это то, чему можно научить и научиться в университете с относительно небольшими противоречиями. Хотя я полностью согласен с вами в отношении методов, которые должны освоить разработчики программного обеспечения, это соглашение основано на личном опыте и неформальных рассуждениях. Чтобы быть общепринятой "наилучшей практикой", нам нужны количественные данные, которые можно собрать очень дорого: насколько помогает контроль версий? Как это помогает? Модульное тестирование? Мы можем рассуждать об эффективности различных методов, но на самом деле доказать, что эффективность окончательно, будет очень дорого. Нам нужно было бы выполнить полный, реалистичный программный проект от начала до конца, много раз, с группами программистов, которые имеют одинаковый опыт, используя различные методы. По крайней мере, нам понадобится много данных о существующих проектах, которые эти проекты не захотят выпускать.

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

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

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

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

187
Glyph

Потому что наши учителя:

  1. Никогда не пробовал юнит-тестирование,
  2. Не знаю, как использовать контроль версий и
  3. Даже не слышал о "гибкой разработке".

Студенты должны взять дело в свои руки. Мы сделали это, и получилось просто отлично, не так ли?

42
mislav

Леонардо да Винчи написал:

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

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

41
Alan

Информатика всегда была несколько противоречивой; Часть, касающаяся компьютеров, - это не наука, а часть, которая касается науки, не касается компьютеров.

Университеты имеют тенденцию больше опираться на "науку" (алгоритмы, структуры данных, компиляторы и т.д.), Потому что эти вещи гораздо более "вне времени", чем современные отраслевые практики, которые имеют тенденцию развиваться и изменяться из года в год. Например, контроль версий претерпел удивительные изменения за последние 5 или 10 лет, но big-O все еще остается big-O, а хеширование, btrees и рекурсия по-прежнему полезны, как и 40 лет назад. Их идея, как правило, состоит в том, чтобы дать вам достаточно оснований, чтобы вы могли подобрать такие инструменты, как git, и понять, что это значит, когда вам сообщили, что базовая структура данных представляет собой ациклический ориентированный граф хэшей SHA-1, и что разработчики усердно работали оптимизировать количество системных вызовов, чтобы они были привязаны к io.

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

39
pjz

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

Колледж предоставляет вам ящик для инструментов, полный инструментов. Это отвертка, это полумесяц. Вы МОЖЕТЕ использовать каждый инструмент один раз в колледже. Это когда вы входите в реальный мир, когда вы действительно узнаете, что у вас есть. Вы отбираете полезные из остальных, какие вы хотите оставить дома на рабочем месте, на всякий случай, и те, которые вы держите в кармане каждый день.

Tqm, Iso, Cmm, Agile и т.д. Это все прихоти, они придут и уйдут, ни один из успешных не является чем-то большим, чем просто здравый смысл. Все успешные инженеры и компании используют некоторую разновидность здравого смысла, и именно поэтому они добились успеха, лишь немногие нуждались в названии. Проблема в том, что вы не можете продать здравый смысл, менеджер не может доказать свою ценность для компании, обучая и покупая здравый смысл без броского имени. Напишите на нем имя, которое их начальство прочитало в какой-то новостной статье или журнале, а менеджер сохраняет свою работу, а вы - свою. Очень немногие из компаний, которые утверждают, что следуют этой практике, на самом деле делают. Большинство из них выписывают чек консультанту и получают годовой и/или пожизненный сертификат в каком-либо клубе, чтобы они могли разместить на своем веб-сайте графическое изображение или ярлык на коробке, в которую входит их продукт. Многие утверждают, что это редко ... был там, видел это, это происходит. Это все часть бизнеса, иногда приходится срезать углы, чтобы оставаться прибыльным, держать двери открытыми и свет включен. Все хардкорные последователи всех этих практик утверждают, что последний был причудой, а этот нет, последний действительно был слишком дорог, чтобы следовать, этот нет. Последний был подделкой, вы только что наняли консультанта, этот настоящий. Как и языки программирования, они тоже будут развиваться.

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

Почему люди думают, что cmm или agile, или кто-то еще, это причуда? Почему они думают, что это не так? Почему профессор научил вас программировать таким образом? Чтобы избежать gotos или избежать констант или чтобы избежать того и того? Это потому, что он производит более надежный код? Лучше выполнять код? Уменьшает человеческую ошибку? Или потому, что легче оценивать документы/программы, давая им больше времени для исследований? Это потому, что они не умеют программировать и просто следуют чьей-то книге на эту тему? Научили ли вас, что вы не можете иметь поддерживаемый, надежный и высокопроизводительный код? Вы не можете даже "выбрать любые два", которые можно обслуживать, мешает надежной и высокой производительности? Иногда вы жертвуете надежностью ради производительности. Иногда вы не заботитесь о надежности или производительности, вы просто хотите перейти с версии 117.34.2 еще одной программы бухгалтерского учета до версии 118.0.0. Ваша бизнес-модель основана на продаже обновлений версий и технической поддержке, и если разработчики программного обеспечения будут делать то же самое, любой старый робот сможет писать один и тот же код. Замените сгоревший на свежий из колледжа и продолжайте продавать обновления.

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

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

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

Мир внутри и снаружи университета примет эти формулы (cmm, agile и т.д.) Для решения проблем, и когда появится следующая, они отбросят их так же быстро. Вам не нужно использовать контроль версий, чтобы добиться успеха, с таким же успехом можно добиться столько же успехов, сколько и без (ну, на самом деле, из-за возраста отрасли еще много успехов без контроля версий). Точно так же вы можете добиться успеха с минимальным тестированием (посмотрите на действительно громкие имена в компьютерной индустрии в качестве примеров). Вы можете добиться успеха, протестировав свой собственный код, а также добиться успеха, следуя правилу, согласно которому вы никогда не должны тестировать свой собственный код. Вы можете добиться успеха, используя emacs, и вы можете добиться успеха, используя vi. Вы должны решить, какой микс вам подходит, и, если вам повезет, найти место для работы, которое с вами согласится. Со временем то, что работает для вас, изменится: от инструментов к языкам, от стиля программирования до страхов, контроля версий, документации и т.д. Вы поженитесь и родите детей и решите, что, возможно, захотите спрятаться в углу этой большой компании с большой пакет медицинского страхования со скучной работой и наслаждайтесь своими детьми вместо того, чтобы быть горячим программистом в маленьком запуске.

Когда вы выйдете из колледжа и попадете в реальный мир, слушайте, работайте и спорьте со "старыми таймерами". У них накоплен десятилетний или многовековой опыт, в которые они попали, в ловушку, которых вы могли бы избежать и или испытать самостоятельно (возможно, вы понимаете, что вам не нужно трогать горячий горшок, чтобы узнать, что он вас обожжет). Большинство из них видели, как минимум один или два из этих причуд приходили и уходили, и, в частности, насколько сильно они были сожжены и что они сделали, чтобы оправиться от этого. Они знают много разных способов тестирования, а также названия стилей тестирования, которые приходили и уходили. Что работает, что нет. Где риск и как не тратить время на касательную. Когда вы повзрослеете и станете старым таймером, передайте его вперед. Платите за то, что вы узнали, пытаясь научить тех, кто следует за вами. Не забудьте научить их КАК ловить рыбу, а не просто дать им рыбу. И иногда вы должны позволить им потерпеть неудачу, прежде чем они преуспеют, не дать им слишком сильно обгореть.

Что я действительно хотел сказать здесь, так это то, что сейчас мы находимся в редкой ситуации, когда мы можем наблюдать эволюцию параллельной вселенной (и, возможно, влиять на нее). Да, информатика - молодая наука по сравнению, скажем, с физикой. Но в то же время он развивался много раз. В зависимости от того, где вы работаете и с кем вы работаете, вы можете наблюдать за аппаратными инженерами. Языки программирования в мире аппаратного обеспечения, конечно, не новы, но они развиваются не так быстро, как в мире программного обеспечения. У программного обеспечения было несколько десятилетий. Аппаратные средства всегда думали о программистах как о гражданах второго сорта. Наша работа легкая, их работа тяжелая. (Обратите внимание, что я на самом деле инженер по аппаратному и программному обеспечению). Что интересно, прямо сейчас они все еще имеют дело с тем, что мы считаем элементарными или инфантильными проблемами. Зачем мне нужно использовать контроль версий, я единственный, кто работает на этом чипе. Ваш опыт работы с gcc или другими дешевыми компиляторами или бесплатными IDE, возможно, не сможет сравниться с дорогими инструментами, которые я использую, если компания посчитает, что вы достаточно достойны ее использования, или даже знает, как ее использовать, они купят вам копию. И длинный список других оправданий. Я имел удовольствие изучать как vhdl, так и verilog и стать продуктивным в обоих случаях в течение недели, что было почти оскорблением от такого инженера по аппаратному обеспечению (несмотря на мой диплом, говоря, что инженер-электрик, моя должность - инженер-программист). Я хотел изучать эти языки, когда инструменты были доступны для меня, я оставался в офисе до вечера и учил себя. С этого момента этот инженер, в частности, понял, что то, что я говорил, было правдой, языки - это всего лишь синтаксис, основы программирования одинаковы, инструменты все делают одно и то же. Его яблоки и яблоки не яблоки и апельсины.

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

Помните, что инженеры по аппаратному обеспечению действительно покинули колледж с коробкой блестящих новых инструментов, как и вы. Вы изучили 17 различных языков программирования, из которых вы можете использовать только один, остальные языки вашей карьеры будут придуманы после окончания колледжа. Когда они закончили колледж, они могут рассказать вам, что они знают о исчислении и теории относительности, сколько электронов содержится в каждом из элементов, и вычислить заряд вокруг гауссовой поверхности. Но основная часть их карьеры - один, ноль, и/или нет (эй, у нас есть общие черты, все, что вам действительно нужно знать о компьютерах, один, ноль и/или, а не инженер по аппаратному или программному обеспечению). Если учесть фундаментальные законы физики, исчисления, электроны не изменятся так быстро, как это делают языки программирования. Но основы программирования одинаковы для всех языков и останутся в будущем. Ты ушел из колледжа, зная об этом, или ты решил, что Java отличается и лучше, чем С ++, потому что и то, и другое?

Как и в любом другом бизнесе, работа университетов заключается в том, чтобы оставаться прибыльным. Они должны нанимать правильных преподавателей, чтобы приносить как нужным студентам, так и правильные деньги на исследования и правильные виды исследований, чтобы сделать университет прибыльным. Они должны предлагать правильные классы, чтобы привлечь нужных студентов и подготовить правильных выпускников, чтобы с течением десятилетий работодатели, находящиеся рядом с университетом и, надеюсь, далеко, осознали, что в этом университете работают продуктивные и прибыльные сотрудники. (да, и иногда вам нужно привлекать правильных спортсменов в правильном виде спорта, чтобы получить правильное количество телевизионного времени и нужное количество узнаваемых имен и спортивных доходов). Некоторые университеты будут преподавать C++ и Java, некоторые никогда не будут. Некоторые будут изобретать CMM, а некоторые будут учить Agile, некоторые - нет. Если в университете есть какая-то ценность, вам есть чему поучиться. Они не научат вас всему, чему можно научиться, но у них будет что-то полезное. Узнайте, что-то, пока вы там, собрать разумное количество различных форм инструментов в вашем ящике для инструментов. Выйди из университета и найди работу. Если ваш набор инструментов отстой, возможно, найдите другой университет и никогда не упоминайте первый. Если все в порядке, используйте эти инструменты и постройте новые в свое время. Если это довольно хороший ящик для инструментов, скажите что-нибудь хорошее об этом университете и хороших преподавателях, у которых вы и то учились, и заплатите школе за то, что они дали вам. Даже если вы не получили все возможные инструменты в универсальном каталоге университетских инструментов, вы уйдете с определенным подмножеством. Даже если ты не закончил ...

12
dwelch

Я учил этим вещам, когда был адъюнктом в Орегонском технологическом институте. Их учат, только редко.

12
Scott Hanselman

о боже, не заводи меня

однажды мне пришлось, чтобы декан CS в уважаемом университете сказал мне, что объектно-ориентированное программирование было просто "модой", поэтому они не предлагали никаких классов для передачи таких фантазий, как C++.

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

11
Steven A. Lowe

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

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

10
matt b

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

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

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

8
William

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

6
Allen

Это зависит от университета. Я закончил в 2003 году из австралийского университета. За это время мы изучили UML, модульное тестирование, XP (и другие гибкие методологии), а также все формальные вещи, такие как Z, алгоритмы и структуры данных, операционные системы и т.д.

Тем не менее, они не подробно рассказали о модульном тестировании, а просто оплатили его за прохождение одной лекции. Было бы здорово узнать, как писать эффективные модульные тесты, а не просто "Что такое модульный тест".

Что касается контроля версий, мы использовали его (CVS) в наших проектах программирования со 2-го года.

Я полностью согласен с тем, что сказал Глиф, тоже. CS - настолько незрелая область, действительно только вокруг в последние 50 лет, что мы не знаем, что мы должны изучать, и что является только преходящим увлечением. Дайте ему 150 лет, тогда вещи могут успокоиться. Количество неудачных проектов в реальном мире свидетельствует о том, что это незрелая отрасль. Представьте, что 80% строительных проектов провалились!

6
Rob Gray

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

5
Martin Beckett

Все это может быть легко рассмотрено в одном классе по практике разработки программного обеспечения. Это не является частью большинства учебных программ по CS, потому что это не то, чем занимается CS, хотя я думаю, что некоторые материалы по этому вопросу полезны. В моей школе был такой класс; он не охватывал управление версиями, но охватывал UML, сбор требований, методологии разработки (различные agile и waterfall), модульное тестирование, интеграционное тестирование и т. д. и требовал от нас работы в группах по 4-5 человек для разработки проекта. (довольно простой плагиат Clue в Java). Если вы почувствовали необходимость в дополнительных классах по разработке программного обеспечения, они были доступны в качестве факультативных.

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

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

Помните, что в колледже есть много способов научиться чему-то, кроме занятий; воспользоваться этим. Вы платите много, чтобы посещать занятия и пользоваться оборудованием, так что доите это столько, сколько стоит, и посещайте собрания LUG и ACM, участвуйте в проектных командах (всегда есть несколько ME, создающих робота, которым нужен программист), или получаете работа по администрированию сервера гуманитарного отдела. Отберите компьютер из загрузочного дока здания Material Engineering, загрузите Linux iso с вашим быстрым интернет-соединением и поиграйте.

4
Adam Jaskiewicz

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

В нашем курсе нас учили Personal Software Process, который охватывал такие вещи, как запись времени, потраченного на проекты, хорошее комментирование и т.д., Но не упомянул о профессиональных основах, таких как контроль версий.

3
Deeksy

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

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

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

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

Выше приведены все "мягкие навыки", которые вам не нужны нужны для написания хорошего кода.

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

2
gbjbaanb

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

Это все о выборе правильной школы, ИМХО. Если вы попадете в топ-10, вы быстро выучите все это.

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

2
Alex Gartrell

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

2
CaptainHastings

Я изучил все это в университете. Возможно, это зависит от выбранных вами курсов? Мои курсы были очень разнообразными (дизайн программного обеспечения, дизайн пользовательского интерфейса, электронная коммерция, искусственный интеллект, функциональное программирование и т.д.). Дизайн программного обеспечения был подвержен шаблонам проектирования и модульному тестированию (один большой проект, который включал различные вещи). UI Design ... мы были группой из трех человек, работавших над проектом. Мы ничего не могли сделать без контроля версий, поэтому мы получили это. И гибкое развитие было тем, о чем постоянно говорили нам наши профессора, но они оставляли это на усмотрение каждой группы.

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

2
Swati

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

2
Matthew Sposato

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

2
Nathan Strong

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

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

2
Swati

Все три вещи, которые вы упоминаете (модульное тестирование, контроль версий, гибкая разработка), в той или иной степени преподаются в программе Computing Science Университета Гронингена. Хорошо это или нет, но я оставлю этот вопрос открытым. но это неправда, что ни один университет не научит вас "практическим навыкам".

1
Thomas

Они основаны на моем ограниченном опыте участия в программе CS до того, как я сменил специализацию, и на моем опыте стажера в крупной софтверной компании. Модульное тестирование не преподается, потому что большинство программ, которые вы должны создать, недостаточно велики, чтобы нуждаться в автоматическом тестировании, вы гарантировали определенный набор входных данных, чтобы можно было проверить все вручную. Обучение тому, как автоматизировать тестирование, может также повлиять на оценку вашего проекта, так как большинство проектов оцениваются скриптами, которые запускают автоматические тесты, с быстрым взглядом на код, чтобы убедиться, что у вас нет int foo1; int foo2; и вы используете правильный отступ.

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

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

1
Jared

Я не думаю, что гибкое программирование - это прихоть, но в то же время мне будет трудно придумать, как учитель может дать вам проекты, которые позволят вам изучить его. Если только они не дали вам проект A build a, Проект Б расширить на. Проблема во времени и размахе. На 4-х месячном курсе было бы сложно.

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

Структуры данных и алгоритмы - это то, над чем можно работать в классе. Честно говоря, им требуется гораздо больше усилий, чтобы понять, чем модульное тестирование и управление версиями. Постарайтесь запомнить часть университета, чтобы научить вас учить себя. Коллаж не совсем такой же мандат. Или, по крайней мере, не в такой же степени. ПО МОЕМУ МНЕНИЮ.

1
baash05

Я думаю, что хорошие программы CS должны научить основам, которые послужат вам основой для всего будущего обучения программированию. Методологии разработки, такие как Agile, и инструменты контроля версий похожи на причуды; они приходят и уходят. Кроме того, они, как правило, используются в промышленных условиях, а не в академических, поэтому я думаю, что университеты редко освещают такие вещи, как те, которые вы, вероятно, изучите на работе. Я не говорю, что это правильно, но это, вероятно, академический менталитет.

1
Bullines

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

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

1
Dave

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

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

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

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

1
Jerub

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

Plug: Получив BS в Comp Sci и MS в Soft Eng в университете DePaul, меня в основном преподавали преподаватели/профессора, которые преподавали неполный рабочий день, что было хорошо для меня, потому что я бы предпочел, чтобы они пришли с анекдотом из предыдущего дня и связать это с классом. Кроме того, так как это в основном пригородная/заочная школа, большинство учеников работают, используя то, что они изучают.

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

Во время моего школьного обучения тестирование всегда присутствовало. Несмотря на то, что они начали вас на Java, они заставили нас использовать ANT и JUnit для всего проекта. Это было хорошее начало для конфигурации сборки и модульного тестирования.

И Экстремальное Программирование было включено в приблизительно 3 или 4 из классов, которые я взял. Я помню, что все они начинали с 12 различных аспектов, от парного программирования до модульного тестирования (см. Выше). И теперь кажется, что основное внимание уделяется Agile.

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

1
Glennular

Большинство университетских программных проектов должны вписываться в рамки одного класса, что фактически означает 5-6-недельный проект с участием от 1 до 4 разумных неопытных программистов. Модульное тестирование и контроль исходного кода становятся убедительно эффективными только после того, как вы перейдете за рамки более долгосрочных проектов с участием большего количества людей. В результате трудно встроить такие методы в проект класса таким образом, чтобы это не казалось бессмысленным требованием.

1
Shalmanese

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

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

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

1
Christopher Cashell

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

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

Кроме того, как давно существует agile и какую форму вы имели в виду? Есть много разных реализаций этого из того, что я видел.

1
JB King

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

Школа - это противоположность самообучения, и, поскольку эти вещи (контроль версий, модульные тесты) легче всего изучать, они должны убедиться, что даже наименее способный ученик способен выполнять самые важные базовые программы и алгоритмы, и сделать "вокруг вещи" позже.

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

0
jokoon