Является ли «Computer Science! = Software Engineering» поводом для плохого обучения программированию?


23

Мы все это слышали; всякий раз, когда говорят о том, что выпускники CS имеют плохие навыки разработки, кто-то в конце концов говорит:

Информатика - это не разработка программного обеспечения.

Проблема , которую я вижу в том , что программирование и разработка программного обеспечения будут преподаваться в CS курсы. Их просто плохо учат. Если этому учат, то почему бы не научить его правильно с первого раза? *

Итак, я хотел бы посмотреть, каковы мнения по 2 вопросам:

  1. Является ли аргумент CS! = SE компромиссом или оправданием для неправильного обучения навыкам программирования.

  2. Независимо от вашего ответа на вопрос 1; Если бы вы были в состоянии принять такое решение всемогущим: вы бы сделали акцент на правильном преподавании программирования на курсах CS?

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


7
Я уточню свой комментарий; на мой взгляд, они разные (CS! = SE). Поэтому, если я заменю CS и SE на 2 других поля A, B, где A! = B, вы можете получить что-то вроде урока боулинга! = История Японии. Тогда вы становитесь аргументом: является ли BL! = JH оправданием для неправильного обучения JH? Теперь это абсурдный вопрос, и его следует отклонить. Если вы видели выпускника CS, который не знал, почему вы используете хеш-таблицу вместо связанного списка, его плохо учили. Если вы видели выпускника CS, который плохо справился с рефакторингом кода, это может быть оправдано.
Иеремия Нанн

2
@Jeremiag Nunn: Если использовать вашу аналогию: японская история не преподается в тандеме с боулингом. Я выдвигаю аргумент, что каждая CS-программа на самом деле учит программированию и что они используют аргумент «CS! = SE», чтобы оправдать свое обучение.
Стивен Эверс

2
Еще одна мысль: является ли недостаток навыков SE в определенном КС градиентом по вине школы или ученика? В каждом классе вы, скорее всего, будете иметь довольно широкий разброс навыков от компетентных до ужасных.
Адам Лир

2
@SnOrfus Разработка программного обеспечения - это умение создавать программное обеспечение. Информатика - это теория программного обеспечения. Знание обоих - это идеал, но они все еще раздельны. Лучшей аналогией (IMO), чем у @ Jeremiah, было бы создание инструментов вместо игры на них.
dash-tom-bang

5
Сноска о том, что академикам не нужно писать поддерживаемый код, - это почти точно. Это не то, что заботит CS.
dash-tom-bang

Ответы:


27

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

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

Во-вторых, у нас очень ограниченное время для преподавания CS - очень широкого предмета - в типичной учебной программе для студентов. В моей учебной программе было 8 курсов CS (для бакалавра) или 12 курсов CS (для бакалавра), а также все необходимые курсы по математике. Это не очень много времени , чтобы научить CS и математике и программировании и программной инженерии, так что в какой - то момент вы должны решить , что важно, и то , что студент может подобрать самостоятельно.

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

Я утверждаю, что теория преподавания - CS, математика и т. Д. - так же важна, если не более важна, чем обучение конкретным навыкам, связанным с работой. Если вы научите студента тому, что стоит за методами и техниками, а не только тому, что , вы в конечном итоге найдете кого-то, кто гораздо более адаптируется при применении его знаний. Например, я пошел в очень злобную «школу Java» и, таким образом, преподавал на языке Java, но у меня также были курсы по теории языка программирования, которые объясняли причины многих языков; В результате я научился писать гораздо лучшее программное обеспечение, чем если бы у меня не было такого опыта. Конечно, я не пишу программное обеспечение на Хаскеле в своей повседневной работе, но знание многих теорий языка программирования позволило мне понять, чтоуже были применимы к моей работе в качестве программиста.

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


Это именно моя мысль, но объясняется гораздо лучше, чем мой ответ.
Иеремия Нанн

+1: так много хороших вещей здесь, я бы не хотел выбирать одну вещь, но, учитывая, что CS возник как прикладная математика, не означает ли это важность его применения - в данном случае, программирования?
Стивен Эверс

2
@SnOrfus: В той степени, в которой программирование применяется математика, да. Но так же, как информатика! = Разработка программного обеспечения, программирование! = Разработка программного обеспечения, либо.
Мипади

1
@ Дэвид Торнли: Во-первых, я и все, кого я знаю, кто изучал физику, использовали осциллограф при изучении волн. Тем не менее, аналогия не имеет места. Студентов уже учат программированию как часть степени CS. Вы были, я был, все мы, кто присутствовал на unveristy были. Это был даже не одноразовый раздел одного курса. Это неотъемлемая часть не менее 1-2 классов в семестр.
Стивен Эверс

2
+1 за объяснение, что школа (колледж, университет, что угодно) должна научить вас ловить рыбу, а не просто дать вам рыбу
Эмилиано

25

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

Я согласен, что CS! = SE, и я не уверен, что вы можете просто пойти в школу и стать SE (даже с мастерами)


+! 1: Я понимаю вашу точку зрения, но она не просто «отполирована». Многим не хватает некоторых базовых навыков.
Стивен Эверс

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

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

@ dash-tom-bang: Считаете ли вы основы управления потоками в императивных языках основами? Я могу подтвердить, что существуют ученые степени, которые не знают большинство из них.
Стивен Эверс

Я бы не стал рассматривать реализацию управления потоками на каком-либо конкретном языке как «основы информатики». Однако, если кто-то не понимает управление потоком как концепцию, он не изучил CS.
dash-tom-bang

10

CS на самом деле не SE. И люди, кажется, смешивают их все время, даже признавая это. Информатика должна быть переименована в компьютерную науку. На самом деле информатика имеет мало общего с компьютерами. Это теория графов, алгоритм анализа, структуры данных и т. Д.

Люди хотят предположить, что новый выпускник CS - это выпускник ITT; они хотят кого-то, кто был обучен в призвании. Информатика - это наука, программирование - это искусство. Это не одно и то же.

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


2
Программирование - это ремесло, а не искусство.
дэш-том-бэнг

6
Программирование - это ремесло, инженерия и искусство.
Мацей Пехотка

2
Я бы не стал его переименовывать. Что такое информатика, но наука о компьютерах? иными словами, изучение вычислительных машин, что подразумевает изучение вычислительных.
Майкл К

1
Должен быть переименован, потому что люди путают это с вами. Вы знаете Эдсгера В. Диастру? однажды он сказал: «Информатика не больше о компьютерах, чем астрономия о телескопах». :)
Boos

1
Искусство создает красоту; ремесло создает полезность. Искусство создано для его красоты; ремесло создано для его полезности. Искусство может быть полезным; ремесло может быть красивым. Software Engineering создает утилиты; следовательно, разработка программного обеспечения - это ремесло.
системович

8
  1. По крайней мере, в Соединенных Штатах образование в целом стало приносить прибыль. Школы стремятся сократить учебный план по всем направлениям, чтобы увеличить количество учащихся. В колледже больше людей, которых там нет, чем когда-либо. Изучение правильных техник - это не то, чему вы можете научить легко, а значит - нет.
  2. Лично я бы уделил больше внимания SE, чем обычно, но я считаю, что CS как программа менее подходит для людей, стремящихся попасть в промышленность. Я думаю, что больше учреждений должно предложить практическую программу SE.

+1 за № 1. Я заметил это, когда пошел в школу. Это была коммерческая школа, и я чувствовал, что многие из учеников не были там подходящими. Кроме того, школа получала деньги только за курс, а неудача со студентом означала, что они больше не получали от них деньги, поэтому довольно часто учителя старались изо всех сил пропускать учеников. У нас был по крайней мере один выпускник со степенью, который, я не думаю, мог бы даже написать программу Hello World на своем языке!
Рейчел

Поскольку вы затронули систему образования США и роль прибыли, вот обязательный хор Милтона Фридмана: youtube.com/watch?v=W3Seg0JE1PM
Работа

7

Является ли аргумент CS! = SE компромиссом или оправданием для неправильного обучения навыкам программирования.

Нет. CS не SE. Это факт, а не оправдание.

Независимо от вашего ответа на вопрос 1; Если бы вы были в состоянии принять такое решение всемогущим: вы бы сделали акцент на правильном преподавании программирования на курсах CS?

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


6

Да, это звучит как отговорка и признак незрелости CS как академической дисциплины.

Программа BS, аккредитованная Американским химическим обществом, требует, чтобы вы прошли специальные курсы, чтобы продемонстрировать определенные навыки как в теории (лекционные занятия), так и в практике (лабораторные занятия). Насколько я знаю, у CS нет ничего подобного.

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

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

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


Это не сумасшествие, это эпидемия. Около 90% кода, который я видел, написанный моими пэрами, так же удобен в обслуживании, как Пизанская башня.
Марсель Вальдес Орозко

5

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


Я хотел бы попробовать что-то подобное.
ChaosPandion

Вам следует обратиться в местный университет и узнать, есть ли у них что-то подобное. Где ты находишься?
Бет Уайтзел

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

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

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


Долгосрочные навыки - это CS. «Java» не является долгосрочным навыком, как и .NET, SQL, Pascal или COBOL. Если под «долгосрочным» вы не подразумеваете «будьте счастливы, что у вас есть работа, когда им нужен кто-то, чтобы поддерживать эти устаревшие системы».
дэш-том-бэнг

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

1
ИМХО CS нужен для решения более сложной проблемы, многие люди здесь не нуждаются в степени CS для написания кода, но если вам нужно обрабатывать матрицу 10x10 миллионов данных и манипулировать ею, я не могу понять, как SE может справиться с этим без степени CS.
Boos

3

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

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

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

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


Или Мастер Мастер / Ученик программы
Остин Салонен

1
Программа MD не является научной программой. Вы хотите изучать науку, вы берете биологию. Если у вас есть проблемы со здоровьем, вы не должны обращаться к биологу.
Дэвид Торнли

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

Но что мы говорим о Давиде? Сколько из нас заканчивает со степенью в CS и затем фактически проводит нашу карьеру, делая "Информатику"? То, что на самом деле делает большинство из нас, - это выйти в мир и попрактиковаться в разработке программного обеспечения. Это то же самое, что MD: они "практикуют" медицину. Мы практикуем создание приложений.
Крис Холмс

@Chris Holmes: Меня действительно раздражает мысль о том, что степень CSci должна превратить вас в программиста, готового принять на работу на работу, используя новейший горячий язык. Существует много места для такого рода степени или сертификата, вероятно, гораздо больше, чем фактический CSci. Я думаю, что разработка программного обеспечения аналогична тому, как здесь практикуется медицина, но вы не получаете докторскую степень от факультетов биологии или психологии, вы получаете ее из медицинской школы. Это очень уважаемая степень, но это не доктор философии.
Дэвид Торнли

3

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

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

Итак, на ваш первый вопрос, нет, я не чувствую, что CS! = SE - это компромисс. Это факт.

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

Хотя я бы сделал один урок - «Развитие в реальном мире». Контроль над исходным кодом, отслеживание билетов / ошибок, отслеживание кода и все такое прочее - это хорошее начало для подготовки всех будущих выпускников к тому, с чем они столкнутся на своих новых должностях.

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


++ - отличные баллы. Было бы неплохо, если бы учебные планы CS предлагали один или два занятия по этому «реальному миру», я согласен. Мы говорили об этом в моем университете (в 1993 году), но это никуда не делось.
дэш-том-бэнг

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

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

2

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

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

  • запрограммировать небольшую файловую систему в пространстве пользователя, создать linuxмодуль ядра и изменить само ядро, написать чисто объектно-ориентированную игру SmallTalk,
  • написать собственный протокол общения, а затем внедрить один, выбранный учителем (это было действительно здорово, когда программы двух учеников могли легко общаться, хотя раньше они не сотрудничали),
  • создать более крупный проект в Javaкоманде из четырех человек,
  • построить какой-нибудь функциональный программный проект,
  • написать несколько солидных программ Cдля параллельного программирования (идеи были абстрактными, но обзоры были довольно суровыми, например, потеря баллов за непредоставление правильного вывода, когда программа потерпела неудачу, как programдолжен делать хороший unix ),
  • создать веб-портал с использованием некоторого веб-фреймворка (мы выбрали django, что заставило меня полюбить этот фреймворк),
  • создать довольно большую программу, используя LAMP(у меня все еще есть кошмары php, но я использовал postgresqlвместо, MySQLи я очень рад узнать об этомDBMS сейчас),
  • и если кто-то выбрал, он мог бы написать программу для своей магистерской диссертации - я написал pythonнастольную программу на 10 тысяч строк, используя PyQt.

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

Моя точка зрения: все зависит от школы. Мне очень не нравится чистый подход к разработке программного обеспечения, где Javaосновной язык. Однажды мне пришлось помогать другу, который посещает такую ​​школу и должен был написать программу для параллельного программирования. Я должен был написать это для него в основном, потому что он, хотя, что sizeof(some_string)вC дает длину строки.

Я буду честен: я ненавидел математику, мне было больно, когда мне приходилось готовиться к абстрактным задачам, которые можно было бы сдавать на экзаменах по алгоритмам / структурам данных. Но это дает мне определенные преимущества: я могу мыслить очень абстрактно. Это как когда ты изучаешь боевые искусства и не береги себя (по крайней мере, там, где ты должен). Тренер просто продолжает приходить и бить тебя по голове, когда ты опускаешь руки, потому что ты забыл или потому что устал уставать от них. Но через некоторое время вы просто продолжаете их. И становится действительно трудно ударить тебя по лицу. То же самое с абстрактными алгоритмическими задачами. Поймите содержание введения в алгоритмы и действительно мало что удивит в работе.


Похоже, хорошая программа. Немного теории. Много практики.
Майк Данлавей

1

Я думаю, что ответ да (в некотором смысле).

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

Я уверен, что школьные программы должны быть пересмотрены, я, моя крошечная страна «третьего мира», к счастью, предпринимаются усилия для того, чтобы это произошло. Мы первая страна, которая внедрила программу OLPC; http://laptop.org/en/


1

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


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

1

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

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

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

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

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


0

Те, которые могут, делают; те, которые не могут, учат.

В моем университете база знаний учителей крайне скудна. Я видел, как преподаватели изо всех сил пытались понять, как представлять полуструктурированные таблицы в XML, удерживая степень доктора философии в области проектирования баз данных. Я видел, как мой учитель по сборке спросил меня, что делает мой код, когда это его фрагмент кода, который я скопировал и вставил. Я видел, как мой учитель по разработке программного обеспечения сказал нам, что метод Agile такой же, как метод водопада, только быстрее, что модель итеративного процесса разработки имеет и может иметь только 3 итерации, потому что это то, что изображено в книге в качестве примера. Один из моих учителей даже не знал, что это за заявление.

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

Я согласен с другими людьми, которые пишут здесь, что 4 года недостаточно для того, чтобы стать опытным программистом, но опыт, полученный моими учителями, также недостаточен, чтобы сделать их опытными. Это очень похоже на «Тень Эндера», где Бин замечает, что метрики, используемые учителями в школе сражений, терпят неудачу, потому что последняя война, которая является руководящим правилом, была слишком короткой, чтобы действительно показать, что на самом деле нужно. Другими словами, учителя делали все возможное, но им не хватало опыта, чтобы знать, что действительно нужно, чтобы сделать хорошего командира (или хорошего программиста в данном случае).


3
Я думаю, что многие из ваших примеров, очевидно, являются просто случаями, когда ваш учитель пытается упростить вещи для вашей выгоды. Those that can, do; those that cannot, teach.Я также не согласен с этим: академическая и производственная карьера ведут к совершенно разному образу жизни. Большая часть исследований в мире происходит от ученых. И я не вижу, каким образом вы ответили на первоначальный вопрос.
Никто

2
Какое отношение XML имеет к дизайну базы данных, помимо того факта, что можно было бы, если бы никто не интересовался производительностью, использовать XML в качестве резервного хранилища для базы данных? Нельзя сказать, что некоторые учителя могут упустить момент (я помню, что спорил с инструктором по поводу пунктов, удаленных из-за «чрезмерного комментирования», когда учебный план к этому моменту учил «комментировать как ветер»), но это своего рода завышено. Если кто-то хочет изучать Java, есть более дешевые способы сделать это, чем пройти курс обучения по CS.
dash-tom-bang

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

@ dash-tom-bang, XML является почти идеальным примером полуструктурированных баз данных. en.wikipedia.org/wiki/Semi-structured_model
Malfist

1
XML, используемый таким образом, все еще является реализацией теории баз данных. Это не сама теория.
dash-tom-bang

0

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

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

Ученые-компьютерщики похожи на этих химиков. Все, что они делают, это проверяют теории с помощью кода. Они не заботятся о том, насколько поддерживается код. Они доказывают теорию и переходят к следующей. Кто-то еще упаковывает этот алгоритм и делает его полезным для широких масс, и у нас есть MP3 или компьютерное зрение с Kinect или потоковое видео на вашем iPhone. Так что CS! = SE - верный аргумент.

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


0

Эдсгер Вайбе Дейкстра был голландским специалистом по компьютерам.

Он получил премию Тьюринга 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, знаете ли вы, например, что весь язык, вся парадигма и все, что связано с компьютерным языком, могут быть математически выражены в виде набора частично рекурсивных функций, и независимо от того, изучаете ли вы новый язык, ЛЮБОЙ НОВЫЙ ЯЗЫК, вы только изучать новую абстракцию над той же рекурсивной частичной функцией?

повеселись :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.