„Számítástechnika” vagy „programozás”?

„Számítástechnika” vagy „programozás”?

Oktatáspolitikai fehér könyv (tipp: ezek nem ugyanazok)

Lewis Ellis és Sam Corcos

Az informatika oktatás szószólói az egyetem előtti informatika oktatásának javítását szorgalmazzák, gyakran sajnálják alulreprezentáltságát és középiskoláink elismertségének hiányát.

Ezek a panaszok nem érdektelenek: 2015 novemberétől csak 27 amerikai állam ismeri el az informatikát matematika vagy természettudományi osztályként, és a középiskolák 90% -ának nincs kínálata ezen a területen. Államférfiak, vállalkozók és hírességek ösztönzik a nagyobb informatikai oktatás felé történő elmozdulást.

Csak nincs ma elég képzett és ilyen képességekkel rendelkező ember.

- Mark Zuckerberg, Facebook

Annyi állami szószóló jelentkezik - különösen a Code.org 2014 decemberében megrendezett „Code of Code” kampánya körül - az informatikai oktatás fő kérdéssé vált. A Code.org látogatóitól megkérdezzük, hogy egyetértenek-e azzal a gondolattal, hogy „Minden iskolában minden tanulónak meg kell adni a lehetőséget a számítástechnika elsajátítására”, és aláírják a nevüket, hogy támogatást nyújtsanak. Közel 2 millió ember tette ezt, én is.

Fontos a továbblépés a jövőben, ami most van, hogy mindenki megtanulja. - Chris Bosh, a Miami Heat

De van egy finomság, amikor megpróbálsz konkrétabbá tenni, és megkérdezed valakit, hogy pontosan mit támogat. Támogatja a „programozás” vagy a „számítástechnika” tanfolyamokat? Ellentétben azzal, amit gondolhat, ez a két téma körülbelül annyira különbözik egymástól, mint a latin a lineáris algebrától . Engedje meg, hogy elmagyarázzam.

Adj neki egy lövést, és ne hagyd, hogy bárki is elmondja neked, hogy nem tudsz - Obama elnök

Mi az a számítástechnika?

Ez matematika . Magam, mint informatikus szak, első kézből mondhatom, hogy a számítástechnika nagyon kevés kódot ír le - különösen a magasabb szinteken. Ha önkényesen kellene hozzárendelnem egy százalékot a „matematika v. Programozáshoz”, akkor azt mondanám, hogy a számítástechnika legalább 80% -ban matematika és legfeljebb 20% programozás.

A számítástechnikában megismerheti az algoritmusok, a véges állapotú gépek, a túragépek, a parserek, a lexerek, a tokenek, a lambda-számológépek, a monádok, a monoidok, a functorok, a listák, a térképek, a maybes, a lencsék és a jövő tárgyát, hogy csak néhányat említsünk.

Nagyon gyakran előfordul, hogy az informatika tanfolyamok matematikai előfeltételekkel rendelkeznek. Az algoritmusok és az adatstruktúrák nagymértékben függenek a matematika háttérétől .

Szintén a közvélekedéssel ellentétben, az informatika szakok nem feltétlenül jó programozók . Igaz, magasabb képességeket mutatnak abban, hogy jó programozókká váljanak, de ritkán tudják, hogyan kell kódolni bármi hasznosat, ami informatikai végzettséggel jön ki az egyetemről.

Mi a programozás?

function fibonacci(n) { if (n < 2) { return 1; } else { return fibonacci(n - 2) + fibonacci(n - 1); }}

Valahol az idegen nyelv és a formális logika között van . A programozás során sokat hallani kívánt szó „szintaxis”, így egy adott programozási nyelv strukturálja logikáját. Ez ismerősnek tűnhet, mert ugyanaz a szó - nem véletlenül -, amelyet az idegen nyelvi osztályok használnak a mondatszerkezet leírására.

A programozáshoz nincs szükség magas matematikai háttérre, és hasonlóan egy idegen nyelvhez, a jobb programozóvá válás egyetlen módja a gyakorlás. A programozásba kezdők többsége meglepődve fedezi fel, hogy mennyire könnyű megtanulni és mennyire kevés a matematika. Ahogy egy barátom egyszer leírta nekem: "Ha egyszer már nem hasonlít a Matrixra , valójában nagyon könnyű." Tapasztalataim szerint ez a felfogásváltozás általában kevesebb, mint egy hónapot vesz igénybe.

Példa a különbség szemléltetésére: A programozás során egy véletlen számot generál a Math.random () függvénnyel . A számítástechnikában megtanulják, hogyan kell algoritmusokat készíteni, amelyek valóban véletlenszerű számokat állítanak elő, amelyek felhasználhatók egy olyan függvényben, mint a Math.random () véletlenszerű szám előállítására.

Problémaleírás

Középiskolában tanítottam magam programozni, és csalódott voltam a gimnáziumom korlátozott számítástechnikai kínálatában. A főiskolán számos féltársamnak tanultam informatikát (CS) egyetemi hallgatóként hét féléven át, és négy középiskolai szintű programozási versenyt is szerveztem és lebonyolítottam, összesen több mint 1000 résztvevővel. Jelentős időt töltöttem a CS hallgatókkal és oktatókkal való kapcsolattartásban közép- és középfokú szinten egyaránt.

Kifejezetten megvitattam már a középiskolai oktatást számos középiskolai tanárral, azok sikereinek, nehézségeinek és elutasító kudarcainak megismeréséről. A hallottak nagy része felsorakozott a Számítástechnika Tanárok Egyesületének 2013-as felmérésével , amely megállapította, hogy:

A tanárok 40 százaléka szerint a számítástechnika tanításának legnagyobb kihívása az iskolai alkalmazottak támogatásának vagy érdeklődésének hiánya. További 35 százalék szerint a hallgatók érdeklődésének vagy beiskolázásának hiánya jelentette a legnagyobb kihívást. A gyorsan változó technológiát és a tantervi források hiányát a tanárok 30,5, illetve 23,5 százaléka említette a legnagyobb kihívásként.

A tanárokkal folytatott beszélgetések a tanulmány eredményeit tükrözik. Az egyik fő probléma, amiről ezek a tanárok meséltek nekem, az, hogyan osztályozzák programozási feladataikat. Általában e-mailben kapják meg a hallgatóiktól a beadványokat, majd manuálisan futtatják és értékelik őket a saját számítógépükön. Ez az archaikus rendszer nagyságrenddel több időt vesz igénybe az osztályozáshoz, mint a legtöbb egyetemen alkalmazott széles körben alkalmazott benyújtási rendszerek és autós osztályozók.

Megmagyarázzák, hogy az egyetemi CS tanszék beiratkozási száma, személyi állománya vagy pénzügyi támogatása nélkül nincsenek erőforrásaik, hogy fejlettebb dolgokat fejlesszenek ki vagy befektessenek beléjük. Még ha lenne is, az iskolákban általában csak egy informatikatanár van, aki hasznot húzhat. Mindazonáltal ezeknek a tanároknak mindig inspiráló történeteik lennének az általuk tanított diákokról, a kíváncsiságról, amelynek segítettek kiváltani, és a diákok által végzett izgalmas dolgokra.

Az egyik kihívás meggyőzni a hallgatókat, hogy vegyenek részt informatika tanfolyamon, ha felajánlják. Ez elsősorban annak köszönhető, hogy gyakran kizárólag választhatóként kínálják. Hiányzó ösztönzők sora akadályozza az informatika oktatásának növekedését egy negatívan megerősítő spirálban. Ha egy osztály nem számít semmire, akkor:

  1. Semmi ösztönzés a hallgatók számára, hogy elvegyék, és így…
  2. nincs ösztönzés az iskolák számára, hogy felajánlják, és így…
  3. nem ösztönzi a tanárokat arra, hogy képezzék őket.

Nem lenne szerencsés, ha az egyébként érdeklődő hallgatókat idő előtt elfordítanák a szakterülettől a rosszul végrehajtott vagy alul támogatott érettségi követelmények.

A meglévő középiskolai felsőfokú számítástechnika A tanterv valójában többnyire programozási tanfolyam. Objektumorientált programozást tanít Java-val, és a vizsga teljes egészében olyan kérdésekből áll, mint például: "Itt van egy darab kód, mit csinál?" és: "Itt egy probléma, írjon egy programot annak megoldására."

A nemrégiben bevezetett AP Computer Science Principles viszont a magasabb szintű számítási gondolkodásra összpontosít, a programozás csak a hét „nagy ötlet” egyike, amelyet a tananyag lefed. Tárgyalja a hang- és videotémákat az internet működéséig, a dolgok biztonságának megőrzéséig és a számítógépes rendszerek világra gyakorolt ​​hatásait. Annyira nőtlen a programozáshoz, hogy még a tanárok sem igénylik egy adott programozási nyelv használatát.

Természetesen a zűrzavar egy része a történelemből származik: az AP Computer Science A (és korábban AP CS AB) évtizedek óta nagyrészt az egyetlen műsor volt a városban, és ez egy számítástechnikai elnevezésű programozási tanfolyam volt. Az AP Computer Science Principles tanterv egyfajta széles alapozó tanfolyam, amely alkalmas az általánosabb „Computer Science” elnevezésre.

Ezt az új AP Computer Science Principles tantervet 2014 végén vezették be a 2016–17-es tanévben történő bevezetésre, és 60 millió diák vett részt a „Code of Hour” -on 2014-ben, szemben a 2013-as 20 millióval. a számítástechnika tanfolyamok nem csupán választhatóak, és az elfogadás aránya növekszik.

De ezeknek a fejlesztéseknek az ellenére oktatási rendszerünk túl lassan halad, és nem érti egyértelműen az irányt, amely felé haladunk.

A programozás tanításának speciális kihívásai

A számítástechnika tanfolyamok tanterve meglehetősen egységes és jól megalapozott . A tantárgy matematikai megalapozása évtizedek óta nem változott, ezért gyakorlatias egy évről évre tanítani egy osztályt ugyanazokkal a kifinomult előadásokkal.

A programozás viszont egészen más . Több tucat fő programozási nyelv létezik, amelyek mindegyike eltérő használati esetekkel, összetettséggel és teljesítménnyel rendelkezik. Nem csak több tucat nyelv létezik, hanem ezeknek a nyelveknek a körüli keretei is százak, amelyek még gyorsabban változnak. Ez szinte lehetetlenné teszi a naprakész tanfolyam oktatását a témában, de vannak olyan megoldások, amelyek ezt a problémát később megvitatják.

A legtöbb főiskolai szintű programozó tanfolyam (helytelenül „informatika” néven) Java nevű programozási nyelvet tanít. A Java-t az 1990-es évek közepén vezette be az Oracle, és rendkívül népszerű volt, és napjainkban is széles körben használják. Anélkül, hogy túl részletes részletekbe menne, a Java nem az a programozási nyelv, amelyet a tanulóknak most kellene megtanulniuk: 20 évvel a Java megjelenése után. A jövő programozási nyelve egy JavaScript nevű nyelv, amely hasonló neve ellenére valójában semmilyen módon nem kapcsolódik a Java-hoz .

A JavaScript a legszélesebb körben ismert programozási nyelv, és ez a leginkább alkalmazható nyelv . A következő generációs webkeretek többségét teljes egészében a JavaScript futtatja, beleértve az Angular (a Google által támogatott), a React (a Facebook által támogatott) és a Meteor programokat. A JavaScript lehetővé teszi teljes funkcionalitású szoftverek, weboldalak, mobilalkalmazások és bármi más létrehozását, amire csak gondolhat. A Google nyelvébe történő hatalmas befektetésnek köszönhetően (további információkért lásd: V8) a JavaScript ma már több mint ötször gyorsabb, mint a Python, a tudomány és az akadémia jelenleg kedvelt programnyelve.

Annak ellenére, hogy a JavaScript minden szükséges hozzá, nehéz számomra azt mondani, hogy minden programozó tanfolyamnak tanítania kell a JavaScript-et, legalábbis bevezető szinten. A programozási nyelvek hatékonysága az idők folyamán változik, ezért a rugalmatlan tananyag beállítása több kárt okozhat, mint hasznot , így jutottunk el a 90-es évektől fogva tartott Java tanítású osztályokhoz.

Bizonyos programozási nyelvek jobban teljesítenek bizonyos feladatokat is. A C ++ egy nagyon régi nyelv, amely még mindig a rendelkezésre álló leghatékonyabb nyelvek között van. A Python emellett rengeteg rendelkezésre álló erőforrással rendelkezik, amelyek sokkal praktikusabbá teszik a gépi tanulást, mint a JavaScript-ben történő megvalósítás.

A programozás tanításának másik nagy kihívása a tantervek meghatározásának és az eredményesség mérésének nehézsége. Továbbá, amint azt a fentiekben említettük, az osztályozás munkaigényes folyamat, amelyet ironikus módon manuálisan hajtanak végre a legtöbb tanteremben.

Szakpolitikai lehetőségek

Amikor arról kérdezzük a hallgatókat, hogy mi érdekelte őket a számítástechnika iránt, gyorsan nyilvánvalóvá válik egy közös szál: a számítástechnika csak rövid kitárulkozás után szerette őket. Soha nem hallottam senkit mondani, hogy hosszú időbe telt volna, mire felkeltette az érdeklődést a téma iránt; csak bevezetésre volt szükségük, a többiről pedig a kíváncsiság gondoskodott.

Ez egy néhány évvel ezelőtt készült tanulmányhoz vezetett, amely hihetetlen kapcsolódó eredményre utalt. Az eredeti cikk itt van, és Jeff Atwood nagyszerű összefoglalót ad itt. A cikk absztraktjából:

Egy kísérlet két különálló hallgatói populációt talált: fel lehet építeni és következetesen alkalmazni a program végrehajtásának mentális modelljét; a másik vagy képtelen volt modellt felépíteni, vagy következetesen alkalmazni. Az első csoport sokkal jobban teljesített a tanfolyam végi vizsgájánál, mint a második a siker vagy a kudarc szempontjából ... Megmutatjuk, hogy a következetesség erősen befolyásolja a korai programozás elsajátításának sikerét, másrészt a háttér programozási tapasztalat , csekély vagy semmilyen hatása nincs. ”

Jeff Atwood gondolatát idézve ez azt jelenti, hogy „a programozás ténye szó szerint taníthatatlannak tűnik a beérkező informatikus hallgatók jelentős részhalmaza számára”. Ez nem csak számokat mesél; minden számítástechnikai oktatótól, akitől megkérdeztem, volt valami hasonló sejtése, hogy a dolgok egyszerűen nem kattantak be osztályuk jelentős részébe.

Koromban újra és újra láttam, mint oktató asszisztens különféle intro-szekvenciás programozási nehéz CS tanfolyamokra. Minden félévben akad olyan hallgatók száma, akik próbálkozás híján egyszerűen nem tudják végigcsinálni a tanfolyamot. Prototípusos volt: heti 20 vagy 30 órát fektettek be, megháromszorozva az átlagos hallgatóét, megpróbálták végigcsinálni az egyes feladatokat, gyakran 10 vagy néha akár 20 órát is eltöltöttek az irodai órákban útmutatással, megértés megerősítésével és kérdések feltevésével.

Tanársegédként mindent megtettünk, amit csak tudtunk, de mindig fájdalmas volt látni, hogy ezek a hallgatók annyi erőfeszítést tettek, miközben sokan mások szellőztek, ehhez képest 5 vagy 10 órát töltöttek el feladatként, és ritkán volt szükségük segítségre.

Minden félévben, minden intro CS tanfolyamon az osztály nem jelentéktelen részével történt. Ezek a világ legfényesebb hallgatói a Pennsylvaniai Egyetemen, és miután rájöttek, hogy a CS nem alkalmas számukra, kutatók, bankárok, orvosok és ügyvédek lesznek. Ha ezek az egyébként tökéletesen intelligens és szorgalmas diákok azt tapasztalják, hogy nem nekik szól, akkor miként számíthatunk arra, hogy minden középiskolás diák komoly mennyiségű programozást tanul meg?

Még akkor is, ha elvetjük azt a gondolatot, hogy sokan egyszerűen nem értik a programozást, mint mások, Dan Bricklin, az elektronikus táblázat feltalálásáról legismertebb technikus, felajánl egy újabb választ:

A programozás nagyon hibára hajlamos üzlet, különösen a „typed-statement” rendszereknél. Legtöbbjük nagyon nem tolerálja a hibákat (még az egyszerű elírásokat is) ... Hacsak nem merül el teljesen az adott programozási rendszerben ... a legtöbb ember számára nagyon nehéz megtenni ... ez nem azt jelenti, hogy sok ember nem tudna elmerülni a rendszerekben amelyek olyan megértést igényelnek. Életük számos részén teszik. Például az ügyvédek és az adókönyvelők rendszeresen ilyen bonyolultan dolgoznak a szerződéseikben és a tervezésükben. Az orvosok elmondhatatlan számú változóval dolgoznak ... Csak az az ember, aki nem hivatásos vagy hobbi programozó, általában nem akar annyira elmerülni valamiben, ami ritkán történik, és nem része életének hátralévő részében. A kérdés valóban nem az, hogy „Miért nem tud Johnny programozni?”, Hanem az, hogy miért nem Johnny választja vagy nem választja a programozást?

Ahelyett, hogy az embereket teljesítményalapú vödrökre bontaná, inkább a motivációkat és a bonyolultságot veszi fontolóra, és azt javasolja, hogy talán van némi önszelekció. Lehet, hogy egyesek egyszerűen nem akarnak sokat fektetni valamibe, aminek ennek megfelelően kevés hasznát látják. Lehet, hogy egyesek kedvelik a bonyolult ízeket, mások nem.

Sam Altman, az Y Combinator elnöke (a híres alap, amely segítette a Dropboxot, az Airbnb-t és számtalan más technológiai vállalatot a földről) nemrégiben ennek a koncepciónak a tömör összefoglalóját tweetelte:

Mindenkinek meg kell adni a lehetőséget, hogy megtanuljon kódolni. De ez nem mindenre ad választ. Nem mindenkinek fog tetszeni, vagy jó lesz hozzá. Soha nem fogom szeretni és nem leszek jó a fociban. Egy olyan világ, ahol a CS az egyetlen lehetőség, valóban szomorú lenne.

Tehát mit jelent mindez? A programozás nem mindenkinek való. Nem mindenkinek fog tetszeni vagy jó lesz; ugyanez vonatkozik az informatikára is. De elengedhetetlen, hogy a hallgatóknak előbb-utóbb lehetőségük legyen kipróbálni az informatikát, hogy maguk dönthessenek el, ha többet akarnak tanulni.

Most, hogy a háttér nagy részét lefedtük, négy szakpolitikai lehetőséget kell figyelembe venni:

  1. Minden iskolának kellene CS osztályokat kínálnia?
  2. Minden iskolának ajánlania kell programozási órákat?
  3. Kell-e minden iskolának CS osztályokat igényelnie?
  4. Minden iskolának programozási órákat kellene előírnia?

Az első kötelezné az iskolákat, hogy számítástechnika órát kínáljanak a jelenlegi tantervvel; a szakterület alapbevezetéseként elegendő a jelenlegi tanterv. Ezt a szakpolitikai lehetőséget mindenképpen érdemes megvalósítani . A legtöbb ember feltételezi, hogy ez elkerülhetetlen, de csak a jogszabályok változásával jár.

A második arra kötelezné az iskolákat, hogy programozási tanfolyamot kínáljanak. Sajnos ez újdonság lenne az állami iskolák számára, és új tananyagra és a tanárok kiegészítő képzésére lenne szükség. Az online források, mint például a CodeAcademy, a CodeSchool, a KhanAcademy és még több tucat további munkatársak óriási munkát végeztek, könnyen hozzáférhető és élvonalbeli tantervet készítve. A tantermi tanulás összekapcsolása ezen online források némelyikével lehet a kulcsa a programozási tanfolyamok oktatásának . Ezt a szakpolitikai lehetőséget csak akkor érdemes végrehajtani, ha elegendő erőforrás van elkülönítve a működéséhez.

A harmadik lehetőség megkövetelné a hallgatóktól, hogy érettségi követelményként informatika órát vegyenek. Ez valószínűleg a jövőben valamikor megtörténik, de még korai 2015-ben megkövetelni . Az erőforrások, a tanárképzés és az állami támogatás nem elegendő ennek a működéshez. Ennek ellenére a számítástechnikában tanult matematika nem kevésbé alkalmazható a hosszú távú sikerekre, mint a geometria vagy a számítás.

A negyedik lehetőség megkövetelné, hogy a hallgatók programozási tanfolyamot végezzenek érettségi követelményként. Ez azt jelentené, hogy egy olyan programozási nyelvet kell megtanulni, mint a JavaScript, a C ++, a Haskel stb. Bár ez sok ember számára hasznos készség lenne, teljesen felesleges ezt megkövetelni az osztályteremben . Az angoltól, a matematikától vagy a történettől eltérően a programozás olyan készség, amelynek széles körű alkalmazhatósága nincs a programozás tényén kívül.

Szakpolitikai ajánlások

Néhány intézkedést könnyű feltétel nélkül támogatni: Igen, egy jó informatika órának többnek kell lennie, mint egy választhatónak. Igen, több iskolának kínálnia kellene informatika órákat. Igen, azt akarjuk, hogy minél több ember tanuljon informatikát. De ezeken a könnyebben támogatható javaslatokon túl nem olyan egyértelmű, hogy mit kell tenni.

Az egyik javaslat az, hogy tágabb bevezető CS tanfolyamot tegyenek elérhetővé minden hallgató számára . Csak annyit kell kínálnunk, hogy a hallgatók kipróbálhassák és megnézzék, tetszik-e nekik. Ha megteszik, és többet akarnak megtudni, akkor a tanfolyam a célját teljesítette, és remélhetőleg mélyebb felajánlások is rendelkezésre állnak. Ha nem teszik meg, akkor a tanfolyamnak még mindig hasznos megértéseket kellene tanítania, nem csak egy csomó programozási sajátosságot, amelyeket az érdektelen hallgató valószínűleg soha többé nem fog használni.

Egy másik ajánlás egyértelmű tanúsítási utak és tantervek meghatározása az informatika tanárok számára . Kevés állam tette ezt, de ez segít az informatika oktatásának elérhetőbbé tételében az érdeklődő tanárok számára. Ez több informatikatanárhoz vezet, ami több iskolának lehetővé teszi számítástechnika órák felajánlását. Segít abban is, hogy mikor van elegendő CS tanárunk nagyobb jövőbeli kezdeményezések mérlegeléséhez, amelyek több erőforrást igényelnek, mint amennyi jelenleg rendelkezésre áll.

Átfogó politikaként a következőket javasolnám fontossági sorrendben:

1. All high schools should offer computer science courses, with the current curriculum.
2. Computer science courses should satisfy a math or science course requirement.
3. All students should have the option to take at least an introductory computer science or programming course.
4. Programming courses, where taught, should be offered in a modern language, such as JavaScript.

Bárki is olvassa ezt, nagyon szeretném hallani, mit gondol, és várom, hogy olvassa el a megjegyzéseit.

További

A fotók az Unsplash jóvoltából

* Szerencsére a középiskolám egy CS osztályt kínált, az informatikus tanárom pedig remek volt. De csak egy volt belőle, és rengeteg más osztályt tanított, és nem sokan vették át a CS osztályát, így nem volt sok remény semmi továbbira.

** PClassic.org

Sam Corcos a Sightline Maps, a 3D-s topográfiai térképek leg intuitívabb platformjának, valamint a LearnPhoenix.io vezető fejlesztője és társalapítója, amely egy fejlett oktatóhely a skálázható gyártási alkalmazások felépítéséhez a Phoenix és a React segítségével.