Мы все это слышали; всякий раз, когда говорят о том, что выпускники CS имеют плохие навыки разработки, кто-то в конце концов говорит:
Информатика - это не разработка программного обеспечения.
Проблема , которую я вижу в том , что программирование и разработка программного обеспечения будут преподаваться в CS курсы. Их просто плохо учат. Если этому учат, то почему бы не научить его правильно с первого раза? *
Итак, я хотел бы посмотреть, каковы мнения по 2 вопросам:
Является ли аргумент CS! = SE компромиссом или оправданием для неправильного обучения навыкам программирования.
Независимо от вашего ответа на вопрос 1; Если бы вы были в состоянии принять такое решение всемогущим: вы бы сделали акцент на правильном преподавании программирования на курсах CS?
*. У меня есть подозрение, основанное на неподтвержденных доказательствах, которые я получил на протяжении всего своего образования, что большинству ученых в этой области не приходилось писать код, который нужно поддерживать, и он не поддерживал код, и в результате не имеют знаний / навыков. научить этому эффективно.
источник
Ответы:
Я не думаю, что это отговорка, а скорее утверждение, что компьютерные науки - это не разработка программного обеспечения, это не программирование - это наука о формализованных вычислениях. По сути, это математика (на самом деле, многие программы CS начинались как программы прикладной математики).
Я думаю, что проблема больше связана с промышленностью, чем с научными кругами. Индустрия видит степень CS, указанную в резюме, и думает: «Отлично, этот парень хорош с компьютерами» и нанимает его делать все, что связано с компьютером: IT, программирование, разработка программного обеспечения, что угодно. Эти вещи не обязательно лежат в сфере компетенции выпускника CS. В свою очередь, многие люди, которые любят строить компьютеры или играть в видеоигры, заходят в программу CS, ожидая, что они сделают подобные вещи, и получат грубый сюрприз; то есть, многие студенты, поступающие в CS, на самом деле не принадлежат там, и им будет лучше в более целевой программе.
Во-вторых, у нас очень ограниченное время для преподавания CS - очень широкого предмета - в типичной учебной программе для студентов. В моей учебной программе было 8 курсов CS (для бакалавра) или 12 курсов CS (для бакалавра), а также все необходимые курсы по математике. Это не очень много времени , чтобы научить CS и математике и программировании и программной инженерии, так что в какой - то момент вы должны решить , что важно, и то , что студент может подобрать самостоятельно.
Этот последний момент имеет решающее значение: я думаю, что хороший студент - в любой предметной области - будет изучать идеи самостоятельно. У меня есть степень CS, но я думаю, что я вышел из колледжа как достойный разработчик, потому что я учился и писал программное обеспечение самостоятельно . Колледж - это не только занятия; это также дает студентам время для развития своих навыков полуавтономно, в то же время давая ценные рекомендации.
Я утверждаю, что теория преподавания - CS, математика и т. Д. - так же важна, если не более важна, чем обучение конкретным навыкам, связанным с работой. Если вы научите студента тому, что стоит за методами и техниками, а не только тому, что , вы в конечном итоге найдете кого-то, кто гораздо более адаптируется при применении его знаний. Например, я пошел в очень злобную «школу Java» и, таким образом, преподавал на языке Java, но у меня также были курсы по теории языка программирования, которые объясняли причины многих языков; В результате я научился писать гораздо лучшее программное обеспечение, чем если бы у меня не было такого опыта. Конечно, я не пишу программное обеспечение на Хаскеле в своей повседневной работе, но знание многих теорий языка программирования позволило мне понять, чтоуже были применимы к моей работе в качестве программиста.
Я также думаю, что индустрия ждет от студентов колледжа слишком многого. Промышленность хочет сократить свои собственные расходы, поэтому вместо того, чтобы готовить новобранцев для работы, они ожидают, что колледжи станут торгово-техническими училищами; по сути, они хотят, чтобы колледжи обучали их. Нельзя ожидать, что выпускники колледжа узнают все, что только что из колледжа. Быть хорошим разработчиком - это как опыт, так и знания (особенно в относительно молодой области, такой как разработка программного обеспечения).
источник
Частично проблема заключается в том, что 4 года недостаточно для того, чтобы стать разработчиком программного обеспечения. Учитывая, что мы хотим, чтобы у старшекурсника было больше возможностей, чем просто курсы по математике и CS, и тот факт, что есть много чистой механики для изучения (алгоритмы, структуры данных, синтаксис языка), мы не можем ожидать, что зеленый CS будет инженер-программист.
Я согласен, что CS! = SE, и я не уверен, что вы можете просто пойти в школу и стать SE (даже с мастерами)
источник
CS на самом деле не SE. И люди, кажется, смешивают их все время, даже признавая это. Информатика должна быть переименована в компьютерную науку. На самом деле информатика имеет мало общего с компьютерами. Это теория графов, алгоритм анализа, структуры данных и т. Д.
Люди хотят предположить, что новый выпускник CS - это выпускник ITT; они хотят кого-то, кто был обучен в призвании. Информатика - это наука, программирование - это искусство. Это не одно и то же.
Это все равно что спросить, почему новый выпускник по физике не хороший автомобильный инженер. Это глупо.
источник
источник
Нет. CS не SE. Это факт, а не оправдание.
Нет, это все равно, что заставлять астрономов изучать детали создания телескопов. Или заставлять программистов изучать детали создания компьютеров. Связанные вещи, но одному человеку не нужно знать все.
источник
Да, это звучит как отговорка и признак незрелости CS как академической дисциплины.
Программа BS, аккредитованная Американским химическим обществом, требует, чтобы вы прошли специальные курсы, чтобы продемонстрировать определенные навыки как в теории (лекционные занятия), так и в практике (лабораторные занятия). Насколько я знаю, у CS нет ничего подобного.
Один из моих аспирантов-профессоров был очень теоретиком в башне из слоновой кости, чья должность никогда не была запятнана чем-то более физически химическим, чем аквариум с Волшебными скалами, но когда я был его помощником по химии для новичка, он также оказался весьма компетентным химиком-испытателем. ,
Когда я работал химиком-промышленником, они смеялись над тем, что у меня будет бакалавр и я буду некомпетентен в лаборатории. Конечно, детали того, что я делал в лаборатории, отличались от того, что я делал в лабораторных классах в школе, но принципы были те же - мы просто использовали миксер для краски и банку, а не мензурку и магнитную мешалку ,
Если применить такой же подход к CS, детали того, что можно преподавать в качестве практических навыков разработки программного обеспечения для учебного плана CS / SE, могут варьироваться от школы к школе и с течением времени. Но мне кажется просто сумасшедшим, что допустимо, чтобы кто-то мог получить степень в этой области и не быть компетентным в написании, отладке и поддержке какого- либо кода. (Конечно, так обстоит дело во многих программах CS, но все же это безумие.)
источник
Я согласен, что 4 года - это достаточно времени, чтобы дать им хорошую основу для роста. Тем не менее, я думаю, что одна вещь, которая действительно помогает, - это когда люди из отрасли вовлекаются в разработку учебных программ и даже преподавание в классе. В прошлом году я был научным сотрудником в классе разработки программного обеспечения в местном университете. Это был очень откровенный опыт для меня. Мы с профессором работали вместе над содержанием курса, и мы поместили гораздо больше информации о процессе разработки, лучших отраслевых практиках и «реальных» ситуациях, чем они делали раньше. Мы обнаружили, что, поскольку большинство инструкторов не разрабатывают широко используемый и не обслуживаемый код, привлечение кого-то из отрасли помогло выявить и обучить навыкам, необходимым для этого.
источник
Да, это 100% отбор, они должны преподавать долгосрочные навыки, которые будут полезны на протяжении всей нашей карьеры. Независимо от того, хотите ли вы пойти в академию или отрасль, вам нужно будет иметь возможность программировать таким образом, чтобы его можно было поддерживать, даже если это только вы сами.
Да, хотя это будет только подчеркиваться на соответствующих курсах. Лично, если бы мне пришлось поговорить с вами, чтобы лучше понять, как вы пытались реализовать алгоритм, я бы понизил вашу оценку.
Даже если вы пойдете на чистые исследования в области CS, вам, вероятно, придется создавать код для демонстрации своих идей. В какой-то момент вам пригодятся правильные навыки программирования, так почему бы не начать обучение в колледже.
источник
Я думаю, что наша проблема в том, что мы гораздо больше похожи на врачей, чем готовы признать ... У нас есть идея, что четырехлетняя степень должна подготовить студентов к написанию программного обеспечения. Это даже не близко.
Наша профессия находится в зачаточном состоянии по сравнению с другими дисциплинами. Возможно, вопрос должен заключаться в следующем: как мы можем улучшить CS, чтобы студенты, получившие высшее образование с такой степенью, лучше подходили для того, чтобы стать продуктивными членами реальной команды разработчиков программного обеспечения за гораздо более короткий промежуток времени?
Может быть, мы должны быть больше похожи на лекарства. Четыре года основной работы (степень CS) и затем резидентура - практика ремесла под руководством более опытного инженера-программиста. Может быть, это то, что у нас уже есть, но это менее формально ... Я имею в виду, как житель, мы изучаем наши самые ценные навыки на рабочем месте на наших первых работах.
Может быть, в качестве дисциплины нам просто нужно лучше формализовать это.
источник
У меня есть степень CS, и в течение всего года моей программы не было никакого программирования, только теория. Нам сказали, что мы не получаем диплом в программировании, но в области компьютерных наук. Если вы хотите стать программистом, поступайте в общественный колледж.
Мы узнали об алгоритмах, шаблонах проектирования и множестве теорий о решении проблем без пространственного языка. Языки программирования приходят и уходят, но теория подчеркивания остается неизменной.
Итак, на ваш первый вопрос, нет, я не чувствую, что CS! = SE - это компромисс. Это факт.
На ваш второй вопрос, нет, я не думаю, что я буду. Как вы учите программированию? Помимо циклов, ifs, методов, классов и ООП, что было бы «правильным программированием» и как бы вы сделали его подходящим для любого языка программирования? Вам нужен опыт написания кода, который не может подготовить вас к 4-летнему обучению.
Хотя я бы сделал один урок - «Развитие в реальном мире». Контроль над исходным кодом, отслеживание билетов / ошибок, отслеживание кода и все такое прочее - это хорошее начало для подготовки всех будущих выпускников к тому, с чем они столкнутся на своих новых должностях.
Я думаю, что это на нас, когда мы нанимаем нового выпускника, чтобы понять, что они, вероятно, не будут писать удостоенный наград код. Им нужно руководство и направление.
источник
Для университета важно найти хороший баланс между теоретическими знаниями и практическими навыками. Во время посещения разных курсов я выучил оба. В первые годы было много математики и алгоритмов / структур данных. За этим последовал выбор: либо вы могли бы продолжить изучение информатики (своего рода художественный путь, где вы могли бы, например, посещать курсы со сложными алгоритмами сопоставления строк), либо сосредоточиться на разработке программного обеспечения. Вы все еще должны были получить некоторое основание программирования в течение этого времени.
Я выбрал разработку программного обеспечения, потому что меня никогда не интересовали абстрактные проблемы. Но даже те, кто любил чистую информатику, должны были:
linux
модуль ядра и изменить само ядро, написать чисто объектно-ориентированную игруSmallTalk
,Java
команде из четырех человек,C
для параллельного программирования (идеи были абстрактными, но обзоры были довольно суровыми, например, потеря баллов за непредоставление правильного вывода, когда программа потерпела неудачу, какprogram
должен делать хороший unix ),django
, что заставило меня полюбить этот фреймворк),LAMP
(у меня все еще есть кошмарыphp
, но я использовалpostgresql
вместо,MySQL
и я очень рад узнать об этомDBMS
сейчас),python
настольную программу на 10 тысяч строк, используяPyQt
.Возможно, были и другие проекты, но я просто забыл их сейчас.
Моя точка зрения: все зависит от школы. Мне очень не нравится чистый подход к разработке программного обеспечения, где
Java
основной язык. Однажды мне пришлось помогать другу, который посещает такую школу и должен был написать программу для параллельного программирования. Я должен был написать это для него в основном, потому что он, хотя, чтоsizeof(some_string)
вC
дает длину строки.Я буду честен: я ненавидел математику, мне было больно, когда мне приходилось готовиться к абстрактным задачам, которые можно было бы сдавать на экзаменах по алгоритмам / структурам данных. Но это дает мне определенные преимущества: я могу мыслить очень абстрактно. Это как когда ты изучаешь боевые искусства и не береги себя (по крайней мере, там, где ты должен). Тренер просто продолжает приходить и бить тебя по голове, когда ты опускаешь руки, потому что ты забыл или потому что устал уставать от них. Но через некоторое время вы просто продолжаете их. И становится действительно трудно ударить тебя по лицу. То же самое с абстрактными алгоритмическими задачами. Поймите содержание введения в алгоритмы и действительно мало что удивит в работе.
источник
Я думаю, что ответ да (в некотором смысле).
Дело в том, что невозможно научить детей за короткий промежуток времени программированию. Надо продумывать логическое мышление программистов, как решать (в меньших масштабах) проблемы программиста.
Я уверен, что школьные программы должны быть пересмотрены, я, моя крошечная страна «третьего мира», к счастью, предпринимаются усилия для того, чтобы это произошло. Мы первая страна, которая внедрила программу OLPC; http://laptop.org/en/
источник
Исходя из собственного опыта (я студент на данный момент), я должен сказать, да, это оправдание. Все называют CS как науку, которая учит нас всем основам компьютеров, а SE - как специальную ветвь в CS, которая явно обучает программированию. Имо, каждый, кто имеет BS в CS, должен знать, как писать хороший и оптимизированный код (даже если программирование не является его / ее специальностью). Так что да, если бы у меня была всемогущая возможность принимать такое решение, я бы заставляла студентов приобретать хорошие навыки программирования.
источник
Предполагая, что цель состоит в том, чтобы обучить хороших инженеров-программистов (программистов), потому что они нужны миру, можно ли ответить, сказав, чему я должен научить?
Во-первых, это важно, потому что в настоящее время передача знаний очень неэффективна. Когда потенциальные программисты посещают занятия, их умы открыты, и они усваивают то, чему их учат. В то же время профессора (я был один) слишком часто заинтересованы в том, чтобы заполнить магистратуру аспирантуры студентами, которые могут работать по эзотерическим предметам. Когда возражают, что студенты не готовятся к реальным проблемам, я вижу, как профессора утверждают, что это не их работа . Это работа в реальном мире.
Затем, когда студенты становятся программистами в реальном мире, хотят ли они учиться у своих новых коллег? Не в моем опыте. Скорее они стремятся распространять Евангелие, которое они приобрели в школе. Я помню, как студент и молодой практикующий думал о том, как тяжело будет продвигать новые идеи среди старых ворчунов. Теперь, когда я старый дурак, я вижу, как трудно открыть глаза новым программистам на разницу между теорией и практикой.
Я учился на инженера-механика, а затем на электротехнику. Фундаментальной частью этого были а) математические основы и б) практическое решение проблем. Разработка программного обеспечения должна быть такой, а не просто программированием.
Я думаю, что программирование (программирование) должно преподаваться с достаточным количеством информатики, чтобы быть практическим знанием - базовая теория автоматов и теория информации. Это не должно быть сделано в глубине. После того, как вы освоите базовые навыки программирования, должны появиться совместные проекты нетривиального размера. Неотъемлемой частью этого должно быть предложение и рассмотрение альтернативных решений конкретных проблем, с анализом плюсов и минусов, а не только самой последней религии или «следующей большой вещи» или универсального подхода. Наконец, должно быть сотрудничество и партнерство между промышленностью и научными кругами, чтобы идеи и улучшения могли передаваться обоими способами, что значительно повышает контроль качества.
источник
Те, которые могут, делают; те, которые не могут, учат.
В моем университете база знаний учителей крайне скудна. Я видел, как преподаватели изо всех сил пытались понять, как представлять полуструктурированные таблицы в XML, удерживая степень доктора философии в области проектирования баз данных. Я видел, как мой учитель по сборке спросил меня, что делает мой код, когда это его фрагмент кода, который я скопировал и вставил. Я видел, как мой учитель по разработке программного обеспечения сказал нам, что метод Agile такой же, как метод водопада, только быстрее, что модель итеративного процесса разработки имеет и может иметь только 3 итерации, потому что это то, что изображено в книге в качестве примера. Один из моих учителей даже не знал, что это за заявление.
Я не верю, что они «справляются» или оправдываются, я искренне верю, что они делают все возможное со своим опытом, которого у них очень мало.
Я согласен с другими людьми, которые пишут здесь, что 4 года недостаточно для того, чтобы стать опытным программистом, но опыт, полученный моими учителями, также недостаточен, чтобы сделать их опытными. Это очень похоже на «Тень Эндера», где Бин замечает, что метрики, используемые учителями в школе сражений, терпят неудачу, потому что последняя война, которая является руководящим правилом, была слишком короткой, чтобы действительно показать, что на самом деле нужно. Другими словами, учителя делали все возможное, но им не хватало опыта, чтобы знать, что действительно нужно, чтобы сделать хорошего командира (или хорошего программиста в данном случае).
источник
Those that can, do; those that cannot, teach.
Я также не согласен с этим: академическая и производственная карьера ведут к совершенно разному образу жизни. Большая часть исследований в мире происходит от ученых. И я не вижу, каким образом вы ответили на первоначальный вопрос.Компьютерные ученые и программисты разные. Ученые - это парни, которые проводят сумасшедшие эксперименты и придумывают алгоритмы, которые мы, разработчики программного обеспечения, используем, чтобы быть лучше.
Подумайте о химиках, проводящих эксперименты для фармацевтической компании. Они не заботятся о том, как производить химические вещества в массовом порядке. Они также не заботятся о маркетинге, упаковке, распространении или обо всем, что происходит с препаратом после его обнаружения. Черт, они даже не заботятся о процессе сертификации. Все, о чем они заботятся, - это найти химическое вещество, которое оказывает действие, когда его дают испытуемым. Компания несет ответственность за это.
Ученые-компьютерщики похожи на этих химиков. Все, что они делают, это проверяют теории с помощью кода. Они не заботятся о том, насколько поддерживается код. Они доказывают теорию и переходят к следующей. Кто-то еще упаковывает этот алгоритм и делает его полезным для широких масс, и у нас есть MP3 или компьютерное зрение с Kinect или потоковое видео на вашем iPhone. Так что CS! = SE - верный аргумент.
WRT вторая часть вашего вопроса. Если бы я предложил степень по теории музыки, возможно, был бы обязательный курс по написанию песен или что-то в этом роде, но не требовал бы, чтобы кто-нибудь изучал инструмент. Студент должен искать знания, которые они хотят. Компьютерные науки - это не разработка программного обеспечения ... если вы хотите изучать SE, изучите двойную специализацию.
источник
Эдсгер Вайбе Дейкстра был голландским специалистом по компьютерам.
Он получил премию Тьюринга 1972 года за фундаментальный вклад в развитие языков программирования , однажды сказав:
«КОМПЬЮТЕРНАЯ НАУКА О КОМПЬЮТЕРАХ БОЛЬШЕ, ЧЕМ АСТРОМИЯ О ТЕЛЕСКОПАХ».
CS действительно отличается от SE. (CS! = SE).
CS - ученый, который приобрел знание компьютерной науки.
ИНФОРМАТИКА или вычислительная наука (иногда сокращенно CS) - это изучение теоретических основ информации и вычислений, а также практических методов их реализации и применения в компьютерных системах. Это часто описывается как систематическое изучение алгоритмических процессов, которые создают, описывают, и преобразовывать информацию.
Информатика имеет много областей, например:
Многие из нас не нуждаются ни в каких навыках в повседневной работе или хотя бы немного в этом.
ПРОГРАММИСТ (SE) - это профессия, посвященная разработке, внедрению и модификации программного обеспечения, чтобы оно было более качественным, более доступным, обслуживаемым и быстрее создавалось. Это «системный подход к анализу, проектированию, оценке, внедрению, тестированию, техническому обслуживанию и реинжинирингу программного обеспечения путем применения разработки к программному обеспечению»
Как специалист по CS, он должен обладать знаниями для управления действительно сложными проблемами без знания какого-либо действительно хорошего языка программирования. ИМХО, здесь мы можем открыть другую ветку, где СТЕПЕНЬ для меня - ТОЛЬКО НАЧАЛЬНАЯ Точка, а не КОНЕЦНАЯ ЦЕЛЬ.
Будучи SE-специалистом, он должен обладать знаниями, чтобы управлять созданием этой действительно сложной проблемы и управлять развитием команды или проекта в этой области.
Вместе сделайте исследование в науке, сделанное CS в прикладной науке с помощью SE.
Я не имею в виду, что CS лучше, чем SE, я имею в виду CS! = SE.
Этот вопрос - тот же вопрос, который задают себе некомпьютерные люди, когда спрашивают вас, почему, как программисты, вы не можете решить по телефону проблему программы X, Y, Z в операционной системе J, M, Н. ;)
На самом деле мне очень надоело писать код после 10 лет разработки Unix-систем в области безопасности, и после прочтения этого вопроса я понял, что мне нужно больше изучать информатику и меньше компьютерного языка и компьютерной системы или протокола!
Никто на моей работе не может справиться с разницей в SE и CS! это действительно плохие вещи.
Если вы думаете, что CS может быть оправданием плохого навыка программирования, вы действительно упускаете из виду, что это CS и что такое SE.
Я предполагаю, что вы SE, знаете ли вы, например, что весь язык, вся парадигма и все, что связано с компьютерным языком, могут быть математически выражены в виде набора частично рекурсивных функций, и независимо от того, изучаете ли вы новый язык, ЛЮБОЙ НОВЫЙ ЯЗЫК, вы только изучать новую абстракцию над той же рекурсивной частичной функцией?
повеселись :)
источник