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

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

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

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

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

4b9b3361

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

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

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

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

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

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

182
ответ дан 17 сент. '08 в 5:39
источник

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

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

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

43
ответ дан 17 сент. '08 в 5:29
источник

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

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

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

40
ответ дан 17 сент. '08 в 5:30
источник

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

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

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

37
ответ дан 17 сент. '08 в 5:45
источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

12
ответ дан 17 сент. '08 в 8:16
источник

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

12
ответ дан 17 сент. '08 в 5:31
источник

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

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

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

11
ответ дан 17 сент. '08 в 5:25
источник

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

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

10
ответ дан 17 сент. '08 в 6:12
источник

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

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

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

8
ответ дан 17 сент. '08 в 5:33
источник

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

6
ответ дан 17 сент. '08 в 5:26
источник

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

5
ответ дан 17 сент. '08 в 5:29
источник

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

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

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

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

5
ответ дан 17 сент. '08 в 6:07
источник

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

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

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

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

4
ответ дан 12 янв. '09 в 22:51
источник

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

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

3
ответ дан 17 сент. '08 в 5:59
источник

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

2
ответ дан 26 марта '09 в 18:22
источник

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

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

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

2
ответ дан 17 сент. '08 в 6:42
источник

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

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

2
ответ дан 17 сент. '08 в 5:38
источник

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

2
ответ дан 04 авг. '09 в 1:04
источник

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

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

2
ответ дан 17 сент. '08 в 5:26
источник

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

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

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

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

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

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

2
ответ дан 17 янв. '09 в 4:22
источник

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

2
ответ дан 17 сент. '08 в 6:11
источник

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

1
ответ дан 17 янв. '09 в 3:55
источник

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

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

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

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

1
ответ дан 17 сент. '08 в 5:27
источник

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

1
ответ дан 17 сент. '08 в 5:25
источник

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

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

1
ответ дан 17 сент. '08 в 5:26
источник

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

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

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

1
ответ дан 17 сент. '08 в 5:35
источник

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

1
ответ дан 17 сент. '08 в 5:39
источник

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

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

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

1
ответ дан 18 окт. '08 в 3:19
источник

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

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

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

1
ответ дан 17 сент. '08 в 5:47
источник

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

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

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

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

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

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

1
ответ дан 17 сент. '08 в 6:54
источник