“Strijte” jezike, ili 28 godina programiranja

Source: https://blog.osteele.com/2006/02/stretch-languages

Oliver Steele

5. veljače 2006

Nedavno sam pregledao programske jezike koje sam koristio tijekom 28 godina1 moje programske karijere. Rezultat je prikazan u donjoj tablici. (Kliknite na sliku da biste je vidjeli u punoj veličini.)

Ovdje postoje neki očiti trendovi2. Jezici se uglavnom dobivaju na višoj razini. Postoji nekoliko “preživjelih”: jezici koje sam koristio tijekom desetljeća, iako neusporedivo: C/C++, Common Lisp i Java. Java je zamijenio C (osim prostora za oko 2000, gdje sam se vratio na grafičku programiranje na niskoj razini u AlphaMask), a skriptni jezici preuzeli su iz Common Lisp-a sporiji su, ali su šareni, imaju bolje knjižnice, i lakše je implementirati.

Nije me iznenadilo da postoji toliko mnogo jezika. Jedno, volim jezike, a volim učiti kako programirati učenje novih. Za drugu stvar, vrijeme promjene i programski jezici bolje. Trebali biste biti ludi programirati 1970-ih godina BASIC ovih dana. (To je BASIC, a ne Visual Basic. Jezik na kojemu sam rezati zube nije imao funkcije ili strukture.) I tu jednostavno nema puno poziva za Z80 skup više.

Ali zašto toliko jezika u jednom trenutku?

Razlog tome je da su različiti jezici dobri u različitim stvarima. Kada sam naučio programirati, koristio sam BASIC za sve. Tada sam počeo koristiti montažu za kod koji mora biti brz, ali sam zaglavio s BASIC za obavljanje svoje zadaće. (U desetom razredu sam napisao programe za umnožavanje i umetanje matrica, tako da me ne bi dosadilo glupo to raditi ručno. Dugo je trebalo, ali bilo sam zabavno.)

To je ono što pokazuje drugi grafikon. Ponovno kliknite na sličicu da biste vidjeli verziju u punoj veličini. I čuvajte se! – boje ne znače istu stvar kao u gornjoj tablici. (Oprosti.)

Koristim četiri types jezika: komunalne jezika, za pisanje alate i rješavanje problema; primjena jezika, za pisanje neraspodjeljive integrirane aplikacije; Sustav programski jezici, za provedbu operativnih sustava i niske Ražine knjižnice; četvrta Kategorija jezike Koji Cu nazvati „protežu jezika”, za učenje kako programirati. (Također Sam brljati sa udariti za programiranju u ljusci i r za statistiku, Ali ja Stvarno ne mislim na način na koji sam ih koristiti kao programiranje).

Uslužni jezik je korisno za rješavanje malih problema i za upoznavanje problema domene. To je ono što ste napisali svoj desetominutni program u. Ako možete koristiti uslužni jezik kao manipulaciju datoteka jeziku i svom graditi jezika, sve bolje. (Neko vrijeme sam puno programiranja u C, a zatim Java, a ja sam pokušao koristiti napraviti i mrav za to. Sada kada sam koristeći Ruby kao moj komunalnih jeziku, ja sam puno sretnija pomoću grablji umjesto.)

Zahtjev jezik je za izgradnju veći, s punim radnim značajkama programa koji drugi ljudi mogu koristiti. (To je moja uporaba pojma. Misli „desktop aplikacija” ili „web aplikacije”.) Zahtjev jezik često ima zahtjeve za brzinom, OS integraciju i Razmjestivost, da je korisnost jezik ne.

Nedavno sam napisao samo web aplikacije – iako sam prije nekoliko mjeseci napisao aplikaciju MacOS, kako bi saznali više o MacOS alatnoj traci. Zato je kategorija “Desktop aplikacija” u drugom grafikonu slijedi, zamijenit će se jezicima za pisanje web aplikacija i klijente koji se temelje na pregledniku koji se povezuju s njima.)

Na kraju, točka protežu jezik je da mi naučiti nove načine za razmišljanje o programiranju. To je suprotno od komunalnih jeziku, iako se protežu jezik može pretvoriti u komunalnu jeziku nakon što sam apsorbirati svoje koncepte. Uporabna jezik olakšava izražavanje programa koje imam na umu; se dobiva iz putu, pa sam samo razmišljati o problemu domeni, a ne kako programirati. Rastezanje jezika može biti teško raditi čak i jednostavne stvari, jer ja još uvijek učim koncepte koji su potrebni da ga koristi idiomatski ili, ponekad, da ga koristiti na sve.

Ponekad se istegnuti jezik postaje uslužni jezik ili jezik aplikacije. To je bio slučaj kod Common Lisp-a, što mi je neko vrijeme značilo razumjeti, ali neko vrijeme je bio moj najproduktivniji jezik.

Često su koncepti koji naučim iz proširenog jezika pomoći u korištenju drugih jezika, čak i ako moram izraziti te pojmove pisanjem ekvivalenta makro proširenog koda ili VM-a. Na primjer, napisao sam nastavnik koji se temelji na podudaranju uzoraka u Common Lisp-u i logičkom programu u Java, iako niti jedan jezik ne podržava te značajke. Projektiranje programa kao da postoje mogućnosti postojale su teško rješenje.

Konačno, učenje pojmova iz jednog jezika olakšava mi prepoznavanje i započinjanje korištenja kada su dostupni na više mainstream jezika ili onih s boljim karakteristikama implementacije. Oni od nas koji su upoznati s savjetima i CLOS MOP imali su nogu za razumijevanje korištenja AOP-a kada je došao do Jave. Moderni krug skriptnih jezika (Python 2.x i Ruby) imaju MOP-ove – ako ste upoznati s njima iz Smalltalk-a, znate kako ih iskoristiti i kod Python i Ruby. A ako ikad moram ponovno koristiti C++, barem ću od Haskella znati tražiti implementaciju predložaka biblioteka kombinatora.

Ovo su jezici koje sam naučio od više godina, a ono što sam naučio iz svake od3 mom, Neki od jezika koji nisu uPopis će biti savršeno respektabilna protežu jezika za nekog drugog – Slučajno sam se upoznati sa svojim konceptima u trenutku kada sam stigao do njih. Na primjer, Python je vjerojatno u redu način da uče o OO (i moj sin naučio puno OO pojmova iz Logo MicroWorlds), a mogao sam saznao metaobject programiranje iz Ruby, ako sam ga već naučila iz Smalltalk i Common Lisp.

  • BASIC: osnovno programiranje
  • Z80: ADT; rekurzija
  • Prolog: logičke varijable; apstrahiranje nad kontrolnim tokom
  • CLU: iznimka rukovanje; coroutines; parametrirane vrste podataka
  • Smalltalk: OOP
  • Common Lisp: funkcionalni objekti; meta objektni programiranje
  • Java: konkurencija
  • Eiffel: dizajn prema ugovoru
  • Haskell: lijena procjena; vrsta klasa
  • LZX (OpenLaszlo): programiranje temeljeno na ograničenjima

Trenutačno moj jezik je Haskell. Kad pišem u Haskellu, opet se osjećam kao početni programer. Ne mogu ga koristiti kad sam u žurbi, a ja ga ne koristim kad sam više zainteresiran za problematiku nego u obrtu programiranja. Čitanje Haskella je poput čitanja poezije (vrlo sam sporo i ne mogu se prevladati jer je gustoća novog koncepta vrlo visoka), a pisanje Haskella je poput pisanja poezije (nešto drugo što me zauvijek vodi). Za razliku od Python i Ruby, koji su prozaičniji i Enterprise Java, što je više kao porezni oblik.

  1. Prvo sam naučio programirati u sedmom razredu, iz TRS-80 Level I Basic reference. To me čini obje (1) gotovo 30, i (2) bezbroj.
  2. U ovom čitavom eseju kvantificiram više od jezika koje koristim i načinom na koji ih upotrebljavam. YMMV.
  3. Ovaj popis uključuje više jezika nego grafikoni jer uključuje jezike koje nikada nisam koristio komercijalno. Na primjer, koristio sam Prolog i CLU za koledž projekte, ali ionako sam puno naučio od njih.

 

 

Computer science
Kratka povijest interneta

Source: http://www.walthowe.com/navnet/history.html Anegdotalna povijest ljudi i zajednica koji su doveli do interneta i weba (Zadnji put ažuriran 23. kolovoza 2016.) A Brief History of the Internet by Walt Howe is licensed under a Creative Commons Attribution- Noncommercial-Share Alike 3.0 United States License. Based on a work at www.walthowe.com. Internet je bio rezultat nekog vizionarskog razmišljanja …

Computer science
Intervjui s ranim razvojnim programerima · Internet povijest

Source: http://internetbrothers.com/interviews.htm O čemu se radi: Prije gotovo desetak godina, Internet Brothers intervjuirao je brojne rane pioniri u nezavisnoj zajednici produkcije web stranica. Neki su stvarali umjetnost, drugi su razvili nove tehnologije, neki su čak i počeli pokretati internetsku trgovinu. Svi su bili dobro poznati u web krugovima zbog svoje genijalnosti …

Computer science
O FreeCol

Source: http://www.freecol.org/about.html   Tim FreeCol-a ima za cilj stvoriti Open Source verziju kolonizacije (izdano pod GPL). Isprva ćemo pokušati napraviti točan klon kolonizacije. Vizualnosti će se ažurirati s novijim standardima, ali će ostati čiste, jednostavne i funkcionalne. Određene će nove “značajke” biti implementirane, ali gameplay i pravila bit će jednaki kao …