Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

Потому что наши преподаватели:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

о боже, не заставляй меня начинать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вышеупомянутое — это все «мягкие навыки», которые вам не нужны. нуждаться писать хороший код.

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

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

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

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

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

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

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

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

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

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

Все три вещи, которые вы упомянули (модульное тестирование, контроль версий, гибкая разработка), в той или иной степени преподаются в программе «Информатика» Гронингенского университета.Хорошо это или нет, я оставлю открытым вопросом;но это неправда, что ни один университет не учит вас «практическим вещам».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я не думаю, что гибкое программирование — это причуда, но в то же время мне было бы трудно придумать, как учитель мог бы дать вам проекты, которые позволят вам изучить его.Если вам не дали проект А, постройте а, проект Б расширит а.Проблема во времени и объеме.За 4 месяца курса это будет сложно.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top