Невже “Комп’ютерна наука! = Інженерія програмного забезпечення” є приводом навчити програмуванню погано?


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 Розробка програмного забезпечення - це майстерність побудови програмного забезпечення. Інформатика є теорією програмного забезпечення. Знання обох ідеально, але вони все одно відокремлені. Краща аналогія (ІМО), ніж @ Єремія, була б одним із будівельних інструментів проти їх гри.
dash-tom-bang

5
Зноска про те, що вченим не потрібно писати ретельний код, майже суть. Цього не хвилює CS.
Даш-Том-Банг

Відповіді:


27

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

Я думаю, що проблема полягає більше в галузі, ніж в наукових колах. Промисловість бачить ступінь CS, вказаний на резюме, і думає: "Чудово, цей хлопець добре з комп'ютерами", і наймає його робити все, що стосується комп'ютера: ІТ, програмування, розробка програмного забезпечення, будь-що інше. Ці речі не обов'язково лежать у сфері знань випускника КС. У свою чергу, багато людей, які люблять будувати комп’ютери або грати у відеоігри, входять у програму CS, сподіваючись зробити такі речі, і отримати грубий сюрприз; тобто багато студентів, які вступають до КС, насправді не належать туди, і їм було б краще в більш цілеспрямованій програмі.

По-друге, у типовій навчальній програмі для бакалаврату існує дуже обмежений час для викладання CS - дуже широкого предмета. У моїй нижчій програмі було 8 курсів CS (для бакалавра) або 12 курсів CS (для бакалавра) плюс усі необхідні курси з математики. Це не дуже багато часу , щоб навчити CS і математики і програмуванні та програмної інженерії, так що в якийсь - то момент ви повинні вирішити , що важливо, і то , що студент може підібрати самостійно.

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

Я стверджую , що теорія викладання - CS, математика і т.д. - це так само важливо, якщо не більше важливо, ніж навчання конкретних пов'язаних з роботою навичок. Якщо ви навчите студента, чому саме стоять методи та прийоми, а не лише те , що ви, ви опинитесь на когось, хто набагато більш пристосований у застосуванні своїх знань. Наприклад, я пішов у дуже злісну «школу Java» і таким чином викладав на Java, але також мав курси теорії мови програмування, що пояснювало, чому відстає багато мов; як результат, я навчився писати набагато краще програмне забезпечення, ніж якби у мене не було цього досвіду. Звичайно, я не пишу програмне забезпечення в Haskell на своїй щоденній роботі, але знання багатьох теорій мови програмування дозволило мені зрозуміти, щовже були застосовні до моєї роботи в якості програміста.

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


Це саме моя думка, але пояснена набагато краще, ніж моя відповідь.
Єремія Нанн

+1: Стільки хороших речей тут, мені б не хотілося вибирати 1 річ, але враховуючи, що CS виник як прикладна математика, чи не це означає важливість її застосування - в даному випадку програмування?
Стівен Еверс

2
@SnOrfus: Наскільки програмування застосовується математика, так. Але так само, як і інформатика! = Інженерія програмного забезпечення, програмування! = Інженерія програмного забезпечення.
mipadi

1
@David Thornley: По-перше, я і всі, кого я коли-небудь знав, хто займався фізикою, використовували осциліскоп при вивченні хвиль. І все-таки аналогія не дотримується. Студентів уже навчають програмуванню в рамках ступеня CS. Ви були, я був, усі ми, хто відвідував unveristy. Це навіть не був разовий розділ одного курсу. Це складова частина принаймні 1-2 заняття на семестр.
Стівен Еверс

2
+1 за пояснення того, що школа (коледж, університет, що завгодно) має навчити вас ловити рибу, а не просто давати вам рибу
Еміліано

25

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

Я погодився б, що CS! = SE, і я не впевнений, що ти можеш просто піти до школи та стати ВП (навіть із магістрами)


+! 1: Я бачу вашу думку, але це не просто "відшліфовано". Багатьом не вистачає деяких дуже базових навичок.
Стівен Еверс

Я думаю, це залежить від того, що ви вважаєте дуже базовими навичками. Наприклад, SQL - це основний навик, але я виявив, що мої CS-файли насправді досить слабкі, і я думаю, що цього можна очікувати. Якщо ви говорите, що вони слабкі в синтаксисі мови або базовій модульності чи концепціях OOP, то це велика проблема, і я би почав шукати випускників у різних школах
bigtang

Я професійно програмував 14 років. Я переглянув SQL і навіть можу створити основні запити, але навіть ці основні навички з'явилися лише в минулому році. SQL не є CS. SQL - це реалізація теорії баз даних, що є CS.
Даш-Том-Банг

@ dash-tom-bang: Чи вважаєте ви, що заяви про керування потоком на імперативних мовах є основою? Я можу підтвердити, що існують ступінчасті свіжі CS градації, які не знають більшості з них.
Стівен Еверс

Я б не вважав, що реалізація потоку на якійсь конкретній мові є однією з «основ комп’ютерних наук». Однак якщо хтось не розуміє управління потоком як концепцію, то він не навчився CS.
dash-tom-bang

10

CS насправді не SE. І, здається, люди весь час плутають їх, навіть визнаючи це. Комп'ютерні науки справді повинні бути перейменовані на щось на зразок комп'ютерної науки чи обчислювальної науки. Насправді інформатика має дуже мало спільного з комп’ютерами. Це теорія графів, алгоритм аналізу, структури даних тощо.

Люди хочуть припустити, що свіжий CS-клас є насправді ІТТ-ступенем; вони хочуть того, хто пройшов навчання за покликанням. Інформатика - це наука, програмування - це мистецтво. Це не те саме.

Це як запитати, чому свіжий ступінь фізики не є хорошим автомобільним інженером. Це нерозумно.


2
Програмування - це ремесло, а не мистецтво.
dash-tom-bang

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

2
Я б не перейменував це. Що таке інформатика, але наука про комп'ютери? іншими словами, вивчення обчислювальних машин, що має на увазі вивчення обчислення.
Майкл К

1
Потрібно перейменовувати, тому що люди заплуталися в ньому як ви. ти знаєш Едсгера В. Діджастра? одного разу він сказав: "Інформатика - це не більше про комп'ютери, ніж астрономія, а про телескопи". :)
boos

1
Мистецтво створює красу; ремесло створює корисність. Мистецтво створене заради своєї краси; ремесло створено для своєї корисності. Мистецтво може бути корисним; ремесло може бути красивим. Інженерія програмного забезпечення створює корисність; тому інженерія програмного забезпечення - це ремесло.
системович

8
  1. Принаймні, у США освіта в цілому стала прибутковою. Школи скидають навчальну програму в цілому, щоб збільшити кількість відвідувачів. У коледжі є більше людей, які там ніколи не належать. Навчання правильним методикам - це не те, чого ви можете легко навчити, щоб вони цього не зробили.
  2. Особисто я б приділяв більше уваги SE, ніж зазвичай, але я вважаю, що CS як програма менш підходить для людей, які хочуть потрапити в галузь. Я думаю, що більше закладів повинні запропонувати практичну програму для ІП.

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

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

7

Чи аргумент CS! = SE - копія чи привід для неналежного навчання навичкам програмування.

Ні. CS не є SE. Це факт, а не привід.

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

Ні. Це було б як примусити астрономів дізнатися деталі будівництва телескопів. Або змусити програмістів дізнатися деталі побудови комп'ютерів. Пов’язані речі, але одному чоловікові не потрібно знати все.


6

Так, це звучить як для мене копа, і як ознака незрілості КС як навчальної дисципліни.

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

Один з моїх професіоналів, що займаються школом, був дуже теоретиком із вежі зі слонової кістки, кабінет якого ніколи не був пов'язаний з чим-небудь більш фізично хімічним, ніж рибалка з "Чарівними скелями", але коли я був його спеціалістом для першокурсників, він також виявився досить компетентним хіміком .

Коли я працював хіміком з промислових фарб, вони сміялися б головою над думкою, що я маю бакалавра та буду некомпетентним у лабораторії. Звичайно, деталі того, що я робив у лабораторії, були іншими, ніж ті, що я мав на уроках в лабораторії в школі, але принципи були однакові - ми просто використовували міксер для фарби та банку, а не мензурку та магнітну мішалку .

Якби застосувати той самий підхід до CS, деталі того, чому можна навчити, як практичні навички розробки програмного забезпечення для навчальної програми CS / SE, можуть залежати від школи до школи та з часом. Але мені просто звучить божевільно, що прийнятно, що хтось міг отримати ступінь в цій галузі та не бути компетентним у написанні, налагодженні та підтримці якогось коду. (Звичайно, саме так відбувається у багатьох програмах CS, але це все ще шалено.)


Це не шалено, це епідемія. Близько 90% коду, який я бачив, написаного моїми однолітками, такий же ретельний, як і пізанська башта.
Марсель Вальдес Ороско

5

Я погоджуюсь, що 4 роки - лише достатньо часу, щоб дати їм хорошу основу, на якій можна вирости. Однак я думаю, що одне, що справді допомагає, - це коли люди з галузі залучаються до розробки навчальної програми і навіть викладання в класі. Минулого року я був науковим співробітником у класі розробки програмного забезпечення в місцевому університеті. Це було дуже відкритим для мене досвідом. Ми з професором працювали разом над змістом курсу, і ми надавали набагато більше інформації про процес розробки, найкращі практики в галузі та ситуації "реального світу", які вони раніше робили. Ми виявили, що більшість інструкторів не розробляють широко використовуваний та підтримуваний код, залучення когось із галузі допомогло визначити та навчити навичок, необхідних для цього.


Я хотів би спробувати щось подібне.
ChaosPandion

Вам слід зв’язатися з місцевим університетом і дізнатися, чи є у них щось подібне. Де ви знаходитесь?
Бет Вайтзель

3
  1. Так, це 100% копту, вони повинні навчати довготривалим навичкам, які будуть корисні протягом усієї нашої кар'єри. Незалежно від того, чи маєте ви намір увійти в академію чи галузь, вам потрібно буде вміти програмувати таким чином, який можна підтримувати, навіть якщо це лише ви самі.

  2. Так, хоча це було б наголошено лише на належних курсах. Особисто, якщо мені доведеться поговорити з вами, щоб краще зрозуміти, як ви намагалися реалізувати алгоритм, я зазначив би вашу оцінку.

Навіть якщо ви пройдете чисте дослідження CS, вам, мабуть, доведеться створити код, щоб продемонструвати свої ідеї. Правильні навички програмування вам будуть корисні в якийсь момент, то чому б не почати навчання в коледжі.


Довгострокові навички - це CS. "Java" не є довготривалим майстерністю, не є .NET, SQL, Pascal або COBOL. Якщо під терміном "довгостроково" ви не маєте на увазі "будьте щасливі, що у вас є робота, коли їм потрібен хтось для підтримки цих спадкових систем".
Даш-Том-Банг

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

1
IMHO CS потрібен, щоб мати можливість підійти до більш складної проблеми, багато людей тут, не потрібно ступінь CS для написання коду, але якщо вам потрібно обробити матрицю 10x10 мільйонів даних і маніпулювати нею, я не можу зрозуміти, як SE може обробляти це без ступеня CS.
boos

3

Я думаю, що наша проблема полягає в тому, що ми набагато більше схожі на лікарів, ніж ми готові визнати ... Ми маємо ідею, що чотирирічна ступінь повинна готувати студентів до написання програмного забезпечення. Це навіть не близько.

Наша професія багато в чому зароджується порівняно з іншими дисциплінами. Можливо, питання має бути таким: як ми можемо поліпшити КС, щоб студенти, які закінчили цей ступінь, були більш придатними стати продуктивними членами команди реальної розробки програмного забезпечення в реальному світі за набагато коротший проміжок часу?

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

Можливо, як дисципліну нам просто потрібно це краще формалізувати.


Або програма майстер-майстер / учень
Остін Салонен

1
Програма МД - це не наукова програма. Ви хочете вивчати науку, ви берете біологію. Якщо у вас є проблеми з медициною, ви не приймаєте її до біолога.
Девід Торнлі

Це дуже гарна ідея: формалізація того факту, що інженерія програмного забезпечення - також питання досвіду. Те саме стосується юристів та лікарів
Еміліано

Але про що ми говоримо про Девіда? Скільки з нас закінчують ступінь CS, а потім фактично проводять свою кар'єру, роблячи "Комп'ютерні науки"? Що насправді більшість з нас робить - це вийти у світ та практикувати майстерність розробки програмного забезпечення. Це те саме, що і доктор медичної медицини: вони «практикують» ліки. Ми практикуємо створення додатків.
Кріс Холмс

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

3

У мене ступінь CS, і цілий рік моєї програми не було програмування, а лише теорії. Нам сказали, що ми не здобуваємо ступеня програмування, а з інформатики. Якщо ви хочете бути програмістом, перейдіть до коледжу громади.

Ми дізналися про алгоритми, схеми проектування та багато теорії про вирішення проблем без просторової мови. Мови програмування йдуть і йдуть, але підкреслювана теорія залишається такою ж.

Отже, до вашого першого запитання, ні, я не відчуваю, що CS! = SE - копа. Це факт.

До вашого другого питання, ні, я не думаю, що хотів би. Як ви правильно навчаєте програмуванню? Крім циклів, ifs, методів, класів та OOP, що було б «належним програмуванням» і як би ви зробили це відносно будь-якої мови програмування там? Вам потрібен досвід написання коду - те, до чого 4-річний ступінь не може вас підготувати.

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

Я думаю, що це на нас, коли ми наймаємо новий град, щоб зрозуміти, що вони, ймовірно, не збираються писати нагородний код. Вони потребують керівництва та спрямування.


++ - відмінні бали. Було б непогано, якби навчальні програми CS пропонували клас чи два на цьому "реальному світі" речі, я згоден. Ми говорили про це в моєму університеті (в 1993 році), але ніколи нікуди не дійшло.
Даш-Том-Банг

Як від вас очікували продемонструвати свою майстерність у класах, що складали рік не теорії програмування, а лише теорії? Чисто письмові іспити?
Carson63000

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

2

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

Я обрав інженерію програмного забезпечення, тому що мене ніколи не дуже цікавили абстрактні проблеми. Але навіть тим, хто любив чисту інформатику, доводилося:

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

Можливо, були й інші проекти, але я зараз просто їх забув.

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

Буду чесним: я ненавидів математику, болів, коли мені доводилося готуватися до абстрактних завдань, які подаватимуться на іспити з алгоритмів / структури даних. Але це дає мені певну перевагу: я можу думати дуже абстрактно. Це так, як коли ти вчиш бойові мистецтва і не тримаєш свого охоронця (принаймні в тих місцях, де тобі належить). Тренер просто продовжує підходити і б’є вас по голові, коли опускаєте руки, тому що ви забули або через те, що ви втомилися тримати їх. Але через деякий час ти їх просто тримаєш. І стає важко вдарити тебе в обличчя. Те саме з абстрактними алгоритмічними задачами. Зрозумійте зміст Вступу до алгоритмів і дійсно мало речей здивує у роботі.


Звучить як хороша програма. Деяка теорія. Багато практики.
Майк Данлаве

1

Я думаю, що відповідь - так (певним чином).

Вся справа в тому, що неможливо навчити дітей за короткий проміжок часу програмуванню. Їм слід звернути увагу на логічне мислення програмістів, як вирішити (у меншому масштабі) проблеми програміста.

Я впевнений, що програми школи повинні бути переглянуті, я дуже маленька країна "третього світу", на щастя, докладаю зусиль, щоб це відбулося. Ми перша країна, яка впровадила програму OLPC; http://laptop.org/uk/


1

З мого власного досвіду (на даний момент я студент), я повинен сказати «так», це виправдання. Усі називають CS як науку, яка вчить нас усім основам комп'ютерів, а SE як особливу галузь у CS, яка явно викладає програмування. Imo, кожен, хто має BS в CS, повинен знати, як написати хороший та оптимізований код (навіть якщо програмування не є його спеціальністю). Так так, якби я мав всемогутнє становище приймати таке рішення, я змусив би студентів здобути хороші навички програмування.


Мій ступінь отримав назву "Комп'ютерна наука та інженерія програмного забезпечення", і він мав на меті дати вам найкраще з обох світів, тобто бути грамотним програмістом і знати теорію достатньо, щоб можна було продовжувати навчання в школі або на дослідження. Я думаю, що це був хороший підхід.
Майкл К

1

Припустимо, що мета полягає в тому, щоб виховувати хороших інженерів програмного забезпечення (програмістів), оскільки світ їх потребує, чи правильно відповідати, кажучи, що я думаю, що слід навчати?

По-перше, це важливо, оскільки зараз передача знань є дуже неефективною. Коли потенційні програмісти проходять на заняттях, їх розум відкритий, і вони поглинають те, чого навчають. У той же час, професори (я був такий) занадто часто цікавляться заповненням випускницької програми студентами, які можуть працювати над езотеричними предметами. Коли висловлюється заперечення, що студенти не готуються до реальних проблем, я бачив, що професори стверджують, що це не їхня робота . Це справжня робота у світі.

Тоді, коли студенти стають програмістами в реальному світі, вони прагнуть вчитися у своїх нових колег? Не в моєму досвіді. Швидше вони прагнуть поширювати будь-яку євангелію, яку вони здобули в школі. Я пам’ятаю, як студент і молодий практик думав, як важко було сприяти появі нових ідей серед старих придурків. Тепер, коли я старий придурливий хлопець, я бачу, як важко відкрити новим програмістам очі на різницю між теорією та практикою.

Я був студентом інженерії, в машинобудуванні, а згодом і в електротехніці. Фундаментальною частиною цього було а) математичні основи та б) практичне вирішення проблем. Інженерія програмного забезпечення повинна бути такою, а не тільки програмування.

Я думаю, що інженерія програмного забезпечення (програмування) повинна викладатися з достатньою інформатикою, щоб вона була робочим знанням - базовою теорією автоматів та теорією інформації. Це не потрібно робити у великій глибині. Після засвоєння базових навичок програмування повинні бути спільні проекти нетривіального розміру. Істотною частиною цього повинно бути пропозиція та розгляд альтернативних рішень конкретних проблем з аналізом плюсів і мінусів, а не лише новітньої релігії або "наступної великої речі" або "єдиного розміру". Нарешті, має бути співпраця та партнерство між промисловістю та науковими колами, щоб ідеї та вдосконалення можна було доносити обома шляхами, значно покращуючи контроль якості.


0

Ті, що можуть, роблять; тих, хто не може, навчити.

У моєму університеті база знань викладачів надзвичайно дефіцитна. Я бачив, як викладачі намагаються зрозуміти, як представити напівструктуровані таблиці в XML, зберігаючи PHD в базі даних. Я бачив, як мій викладач Асамблеї запитує мене, що робить мій код, коли його скопіював і вставив фрагмент коду. Я бачив, як моя вчителька програмного забезпечення розказує нам, що метод Agile такий же, як метод водоспаду, тільки швидше, що ітеративна модель процесу розвитку має і може мати лише 3 ітерації, оскільки саме так зображено зображення, яке книга використовує як приклад. Один з моїх викладачів навіть не знав, що таке інше твердження.

Я не вірю, що вони «справляються» або виправдовуються, я справді вірю, що вони роблять все можливе зі своїм досвідом, який у них мало цінних.

Я погоджуюсь з іншими людьми, які публікують тут, що 4 років недостатньо, щоб стати досвідченим програмістом, але досвіду, який мали мої вчителі, недостатньо, щоб зробити їх також досвідченим. Це так само, як у Тіні Ендера, де Бін помічає, що показники, які використовували викладачі в бойовій школі, виявляються недостатніми, оскільки остання війна, що є правилом, була занадто короткою, щоб справді показати, що насправді потрібно. Іншими словами, вчителі робили все, що могли, але не мали досвіду, щоб знати, що насправді потрібно, щоб зробити хорошого командира (або хорошого програміста в цьому випадку).


3
Я думаю, що багато ваших прикладів, очевидно, є лише випадками, коли ваш вчитель намагається спростити речі на вашу користь. Those that can, do; those that cannot, teach.Я теж не згоден з цим: академічна та промислова кар'єра ведуть до зовсім іншого способу життя. Значна частина світових досліджень походить від науковців. І я не бачу жодного способу, як би ви відповіли на початкове запитання.
Ніхто

2
Що XML має відношення до дизайну баз даних, окрім того, що можна було б, якби він був настільки незацікавлений у продуктивності, використовувати XML як резервну сховище для бази даних? Не кажучи про те, що деякі вчителі можуть пропустити суть (я пам’ятаю, посперечавшись з інструктором щодо балів, видалених через «надмірне коментування», коли навчальний план до цього моменту викладав «коментар, як вітер»), але це завищено. Якщо хтось хоче вивчити Java, існують більш дешеві способи цього зробити, ніж пройти навчальну програму CS.
dash-tom-bang

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

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

1
XML, що використовується таким чином, все ще є реалізацією теорії баз даних. Це не сама теорія.
dash-tom-bang

0

Вчені-комп’ютери та інженери програмного забезпечення різні. Вчений - це хлопці, які виконують шалені експерименти та придумують алгоритми, якими ми користуємось інженерами програмного забезпечення, щоб бути кращими.

Подумайте про хіміків, які проводять експерименти для фармацевтичної компанії. Їм не байдуже, як виробляти хімічну масу. Вони також не піклуються про маркетинг, упаковку, розповсюдження чи щось, що трапляється з препаратом після їх виявлення. Чорт їх навіть не хвилює процес сертифікації. Їм важливо лише знайти хімічну речовину, яка надає дію під час тестування. Компанія несе відповідальність за переміщення її за межі цього.

Вчені-комп’ютери - це як ті хіміки. Все, що вони роблять, - це перевірити теорії з кодом. Їм не байдуже, наскільки ретельний код. Вони доводять теорію і переходять до наступної. Хтось інший пакує цей алгоритм і робить його корисним для маси, і ми маємо MP3 або комп’ютерне бачення з Kinect або потокове відео на вашому iPhone. Тож CS! = SE - вагомий аргумент.

Напишіть другу частину вашого питання. Якби я запропонував ступінь з теорії музики, може знадобитися необхідний курс написання пісень чи щось таке, але я б не вимагав від когось вивчення інструменту. Студент повинен шукати знання, які вони хочуть. Інформатика - це не програмне забезпечення інженерії програмного забезпечення ... якщо ви хочете вивчити ІП, візьміть подвійний мажор.


0

Едсгер Війб Дійкстра був голландським вченим-комп’ютером.

Він отримав премію Тьюрінга 1972 року за фундаментальний внесок у розробку мов програмування , одного разу сказав:

"КОМП'ЮТЕРНА НАУКА НЕ БІЛЬШЕ ПРО КОМП'ЮТЕРАХ, ЩО АСТРОМІЯ ПРО ТЕЛЕСКОПИ."

CS дійсно відрізняється від SE. (CS! = SE).

CS - це вчений, який здобув знання КОМП'ЮТЕРНОЇ НАУКИ.

КОМП'ЮТЕРНА НАУКА або обчислювальна наука (іноді скорочується CS) - це вивчення теоретичних основ інформації та обчислень, а також практичних прийомів їх впровадження та застосування в комп'ютерних системах. Це часто описується як систематичне вивчення алгоритмічних процесів, які створюють, описують, та трансформувати інформацію.

Інформатика має багато підполів, наприклад:

  • Теоретична інформатика
  • Теорія обчислення
  • Алгоритми та структури даних
  • Комп'ютерні елементи та архітектура
  • Багатопроцесорна
  • Обчислювальна наука
  • Штучний інтелект
  • Програмні системи

Багатьом з нас не потрібна ця навичка в щоденній роботі або хоча б трохи її.

ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ (SE) - це професія, яка присвячена розробці, впровадженню та модифікації програмного забезпечення, щоб воно було більш високої якості, доступнішим, ремонтом та швидшим побудовою. Це "систематичний підхід до аналізу, проектування, оцінки, впровадження, тестування, обслуговування та реінжиніринг програмного забезпечення шляхом застосування інженерії до програмного забезпечення".

Як знання CS, він, мабуть, має знання для управління реальною складною проблемою, не знаючи жодної дійсно хорошої мови програмування. ІМХО тут ми можемо відкрити інший потік, де ДЕПРИ для мене ТІЛЬКИ НАЧАЛЬНИЙ ОК, а не ЗАКОННА ЦІЛЬ.

Як знання ЗП, він, мабуть, має знання для управління виробництвом цієї реальної складної проблеми та управління розвитком команди чи проекту в цій галузі.

Разом проводять дослідження в галузі науки, проведені ЦС з прикладної науки, за допомогою ІП.

Я не маю на увазі, що CS краще, ніж SE, я маю на увазі CS! = SE.

Цей тип запитань - це те саме питання, яке задають люди, які не користуються комп’ютером, коли запитують вас, чому, як програмісти, ви не в змозі по телефону усунути проблему програми X, Y, Z в операційній системі J, M, Н. ;)

Насправді мені дуже нудно кодування після 10 років розвитку системи Unix у сфері безпеки, і після прочитання цього питання я розумію, мені потрібно вивчити більше інформатики та менше комп'ютерної мови та комп'ютерної системи чи протоколу!

Ніхто в моїй роботі не може впоратися з різницею щодо SE та CS! це справді погані речі.

Якщо ви думаєте, що CS може бути виправданням для поганої майстерності програмування, ви насправді пропускаєте думку про те, що це CS та що таке SE.

Я припускаю, що ви є представником SE, чи знаєте ви, наприклад, що вся мова, вся парадигма та всі пов'язані з комп'ютерною мовою речі можуть бути виражені математично в наборі частково-рекурсивної функції, і що б ви не вивчали нову мову, БУДЬ-ЯКЮ НОВУ МОВУ, ви тільки вивчення нової абстракції над рекурсивною частковою функцією SAME?

весело :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.