Alan Kay: Paano ko ituturo ang Computer Science 101

"Ang isa sa mga dahilan upang aktwal na pumunta sa unibersidad ay upang lumampas sa simpleng bokasyonal na pagsasanay at sa halip ay maunawaan ang mas malalim na mga ideya."

Alan Kay: Paano ko ituturo ang Computer Science 101

Pag-isipan natin nang kaunti ang tanong na ito. Ilang taon na ang nakalilipas, inanyayahan ako ng mga departamento ng Computer Science na magbigay ng mga lektura sa ilang unibersidad. Halos nagkataon, tinanong ko ang aking unang audience ng mga undergrad, graduate na estudyante, at propesor tungkol sa kanilang kahulugan ng "Computer Science." Ang bawat tao'y maaari lamang magbigay ng isang kahulugan ng engineering. Ginawa ko ito sa bawat bagong lugar, at saanman may mga katulad na resulta.

Ang isa pang tanong ay: "Sino si Douglas Engelbart?" Ilang tao ang nagsabi, "hindi ba ito may kinalaman sa isang computer mouse?" (at ito ay lubhang nakakabigo sa akin, dahil ang aking siyentipikong komunidad ay naglagay ng maraming pagsisikap upang matiyak na ang sagot sa tanong na ito ay posible sa dalawa o tatlong pag-click ng mouse at kumbinsido na si Engelbart ay talagang may kinalaman sa computer mouse) .

Bahagi ng problema ang kawalan ng kuryusidad, bahagyang makitid ng mga personal na layunin na hindi nauugnay sa pag-aaral, bahagyang kakulangan ng pag-unawa sa kung ano ang agham na ito, at iba pa.

Nagtatrabaho ako ng part-time sa departamento ng computer science sa Unibersidad ng California sa loob ng ilang taon (talagang propesor ako, ngunit hindi ko kailangang pumunta sa mga pulong ng departamento). Paminsan-minsan ay nagtuturo ako ng mga klase, minsan para sa mga mag-aaral sa unang taon. Sa paglipas ng mga taon, ang mababang antas ng kuryusidad sa Computer Science ay bumagsak nang malaki (ngunit ang antas ng kasikatan ay tumaas din, dahil ang pag-compute ay nakikita bilang isang landas sa isang mahusay na suweldo na trabaho kung maaari kang mag-code at makakuha ng isang sertipiko mula sa isang nangungunang 10 paaralan). Alinsunod dito, wala ni isang estudyante ang nagreklamo na ang unang wika sa Unibersidad ng California ay C++!

Para sa akin, nahaharap tayo sa isang sitwasyon kung saan ang parehong kahulugan ng "Computer" at "Science" ay nawasak ng mahina, napakalaking konsepto upang lumikha ng isang bagong termino - isang uri ng label sa maong - na mukhang maganda ngunit medyo walang laman. Ang isang kaugnay na termino na katulad na nawasak ay "software engineering", na, muli, ay hindi gumamit ng pinaka-mapanlikhang ideya ng "programming" at "engineering", ngunit pinagsama-sama lamang ang mga ito (ito ay sadyang ginawa noong dekada sisenta, noong ito ay likhang termino).

Ang isa sa mga dahilan upang aktwal na pumunta sa unibersidad ay upang lumampas sa simpleng bokasyonal na pagsasanay at sa halip ay maunawaan ang mas malalim na mga ideya. Para sa akin ay medyo makatwiran para sa isang pagpapakilala sa isang espesyalidad na subukanβ€”sa pamamagitan ng mga halimbawa kung maaariβ€”upang maakit ang mga estudyante sa mga problema sa totoong buhay at magsimulang maunawaan kung ano ang talagang kawili-wili, mahalaga, at sentro sa larangan.

Nagagalak ang mga unang baitang kapag ipinakita sa kanila kung paano nagiging pandagdag na makina ang ruler sa ibabaw ng isa pang ruler, kung saan maaari nilang talunin ang mga bata sa ika-5 baitang sa pagdaragdag ng mga fraction. At pagkatapos ay magiging masaya silang makibahagi sa pagbuo ng pinahusay na pagdaragdag ng mga makina. Nahawakan nila ang isang tunay na computer - isang pisikal at mental na tool na tumutulong sa atin na mag-isip. Natutunan nila ang isang talagang epektibong paraan upang kumatawan sa mga numero - mas epektibo kaysa sa itinuturo sa mga paaralan!

Nagawa nilang pagsamahin ang kanilang sentido kumon na ideya ng "pagdaragdag" bilang "pag-iipon" sa isang bagay na katulad ng makapangyarihang mga bagong katangian. Pinoprograma nila ito upang malutas ang iba't ibang mga problema.

Pinalawak din nila ito. At iba pa. Ito ay hindi isang digital na computer. At hindi ito isang computer na may kabisadong programa. Ngunit iyon ang kakanyahan ng isang computer. Kagaya ng mekanismo ng antikythera - Ito ay karaniwang ang kakanyahan ng isang computer at computing.

Alan Kay: Paano ko ituturo ang Computer Science 101

Mekanismo ng Antikythera

Hanggang saan ba ang ating mararating at hanggang saan ang ating magagawa bago mawalan ng kontrol ang mga bagay-bagay at mawala tayo sa mga abstraction? Palagi akong naging partial sa characterization Alan Perlis - ang unang nagwagi ng Turing Award, na maaaring nag-imbento ng terminong "Computer Science" - na noong dekada 60 ay nagsabi: "Ang Computer Science ay ang agham ng mga proseso." Lahat ng proseso.

Para sa kapakanan ng Quora, huwag nating subukang itulak pa ito o gawing relihiyosong dogma. Gamitin na lang natin ang ideya nang masaya Ala Perlisapara pag-isipang mabuti ang ating larangan. At lalo na kung paano ito ituro. Kailangan na nating tingnan ang modernong kahulugan ng "agham", at medyo kumpiyansa ang Perlis na hindi ito dapat palabnawin ng mas lumang mga kahulugan (tulad ng "koleksiyon ng kaalaman") at gamit (gaya ng "library science" o maging "social. agham") "). Sa pamamagitan ng "agham" sinubukan niyang maunawaan ang isang kababalaghan sa pamamagitan ng paglikha ng mga modelo/mapa na sumusubok na ipakita, "subaybayan" at hulaan ang mga kababalaghan.

Alan Kay: Paano ko ituturo ang Computer Science 101

Nagbigay ako ng ilang mga panayam tungkol sa kung paano ang pinakamahusay na mga mapa at modelo ay madalas na magkasya sa isang T-shirt, sa paraan ng mga equation ni Maxwell at iba pa. Ang pagkakatulad ay mayroong "agham ng mga tulay," kahit na ang karamihan sa mga tulay ay gawa ng tao. Ngunit kapag ang isang tulay ay naitayo, ito ay kumakatawan sa mga phenomena na maaaring pag-aralan ng mga siyentipiko, ang mga tulay ay maaaring gamitin upang gumawa ng mga modelo ng maraming uri, at bumuo ng komprehensibo at kapaki-pakinabang na "mga teorya ng tulay." Ang saya ay maaari kang magdisenyo at bumuo ng mga bagong tulay (nabanggit ko na na halos wala nang mas masaya kaysa sa mga siyentipiko at inhinyero na nagtutulungan upang malutas ang malaki at mahahalagang problema!)

Alan Kay: Paano ko ituturo ang Computer Science 101

Herbert Simon, isang Turing Award at Nobel Prize winner, tinawag itong lahat na "agham ng artipisyal" (at nagsulat ng isang mahusay na libro na may parehong pamagat).

Alan Kay: Paano ko ituturo ang Computer Science 101

Bigyan kita ng isang halimbawa. Noong dekada 50, ang mga kumpanya at unibersidad ay nagtayo ng mga memory computer at sinimulan ang pagprograma ng mga ito - at nagkaroon ng isang espesyal na sandali nang lumabas ang Fortran noong 1956 - na hindi ang unang wikang may mataas na antas, ngunit marahil ang una ay ginawa nang mahusay na ito ay naging ginagamit sa maraming iba't ibang lugar, kabilang ang marami na dati ay ginawa lamang sa wika ng makina.

Ang lahat ng ito ay nagbunga ng "phenomena".

Alan Kay: Paano ko ituturo ang Computer Science 101

John McCarthy

Ang kasaysayan ng Lisp ay mas kumplikado, ngunit si John McCarthy ay naging interesado sa pagsisikap na makahanap ng isang "matematika na teorya ng pagtutuos" at determinado na gawing perpekto ang lahat. Ang eval function, na nagpapakahulugan sa Lisp, ay madaling magkasya sa isang T-shirt! Kung ikukumpara sa isang β€œprogramming system,” ito ay hindi gaanong mahalaga. Higit sa lahat, ang "teorya ng pagtutuos" na ito ay isang mas makapangyarihang konsepto kaysa sa Fortran! Ito ang pinakamagandang ideya sa tulay!

Ang maliit na likas na katangian ng Lisp ay nagbibigay-daan sa buong ideya ng programming na makuha sa isang pares ng mga pag-click sa isang mas malalim na antas at pag-isipang mabuti sa isang antas na tila imposible kapag tumingin ka sa malalaking artifact (ito ay isa sa mga dahilan bakit gusto ng mga siyentipiko na maging compact at powerful ang matematika). Ang matematika na ginamit dito ay bagong matematika dahil pinapayagan nito ang mga konsepto tulad ng "bago" at "pagkatapos" at ito ay humahantong sa "variable logic" na nagpapahintulot sa parehong functional dependence at lohikal na daloy ng pag-iisip na mapanatili habang pinapayagan din ang posisyon at ang pagpasa ng oras. (Ito ay hindi pa rin naiintindihan sa ating panahon sa malupit na mundo ng situational programming).

Lisp, bilang isang malakas na programming language at metalanguage na maaaring kumatawan sa sarili nitong teorya, ay isang halimbawa ng tunay na computer science. Kung matutunan mo ito at iba pang katulad na mga bagay, mas makakapag-isip ka nang mas malalim at magiging mas responsable para sa iyong sariling kapalaran kaysa kung natuto ka lang mag-program sa Fortran o sa mga modernong katumbas nito (... para mas mapalapit ka sa mga programmer! ).

Marami ka pang matututuhan tungkol sa mga espesyal na uri ng disenyo na kailangan sa pag-compute (halimbawa, hindi ito karaniwang pinahahalagahan kapag ang pag-compute ay madalas na nangangailangan ng paglabas sa kapaligiran ng computing: isa sa mga espesyal na katangian ng naka-imbak na soft computing ay hindi lamang ang materyal para sa programa, ngunit materyal para sa isang ganap na bagong computer).

Ang isa pang dahilan sa pagpili ng depinisyon ng Perlis ay na, sa pangkalahatan, ang pag-compute ay higit na nababahala sa paglikha ng mga sistema ng maraming uri kaysa sa mga algorithm, "mga istruktura ng data" o maging sa mismong programming. Halimbawa, ang isang computer ay isang sistema, ang computing ay isang sistema, isang lokal na network at ang Internet ay mga sistema, at karamihan sa mga programa ay dapat na mas mahusay na mga sistema kaysa sa mga ito (ang lumang estilo ng programming mula sa 50s ay tumagal hanggang sa tila ang programming ay dapat na tulad nito - wala nang hihigit pa sa katotohanan).

Ang Internet ay isang magandang halimbawa - hindi tulad ng karamihan sa software sa mga araw na ito, ang Internet ay hindi kailangang ihinto upang ayusin o pagbutihin ang anumang bagay - ito ay mas katulad ng isang biological system - sa pamamagitan ng aming layunin - kaysa sa kung ano ang iniisip ng karamihan sa mga tao bilang isang computing system. At ito ay mas nasusukat at maaasahan kaysa sa halos lahat ng software system na magagamit ngayon. Ito ay talagang sulit na pag-isipan bago magturo ng hindi gaanong makapangyarihang mga konsepto sa mga newbie programmer!

Kaya ang kailangan nating gawin sa unang taon na kurso sa Computer Science ay isinasaalang-alang kung ano ang eksaktong ginagawa ng mga mag-aaral sa simula pa lang, at pagkatapos ay subukang manatili sa loob ng kanilang "cognitive load" upang matulungan silang makarating sa kung ano ang talagang mahalaga . Mahalagang "manatiling totoo" at maghanap ng mga paraan na intelektwal na tapat at angkop para sa mga nagsisimula pa lamang. (Mangyaring huwag magturo ng masasamang ideya dahil lang sa tila mas simple ang mga ito - maraming masamang ideya ang talagang mas simple!).

Ang mga mag-aaral ay dapat magsimula sa pamamagitan ng paglikha ng isang bagay na mayroong maraming mahahalagang katangian na aking tinalakay dito. Ito ay dapat na isang sistema ng ilang mga dynamic na nakikipag-ugnayan na mga bahagi, at iba pa. Ang isang mahusay na paraan upang magpasya kung aling programming language ang gagamitin ay ang simpleng paggawa ng isang bagay na may libu-libong mga nakikipag-ugnayang bahagi! Kung hindi, pagkatapos ay dapat mong mahanap ang isa. Ang pinakamasamang bagay na maaari mong gawin ay itakda ang mga mag-aaral sa isang landas ng masyadong maliit na katatasan, na lubhang maglilimita sa malalaking ideya. Pinapatay lang sila nito - at gusto namin silang palakihin, hindi patayin.

Tungkol sa GoTo School

Alan Kay: Paano ko ituturo ang Computer Science 101

Pinagmulan: www.habr.com

Magdagdag ng komento