Компьютерлік программалауға үйрететін танымал тілдерді өте тез салыстыру

The source text is taken from here: http://www.ariel.com.au/a/teaching-programming.html

Патрик Джордан/Patrick Jordan

Қазіргі уақытта мен қазіргі уақытта оқытатын есептеу техникасы бөлімінде жаңадан үйренгендерді үйрету үшін қандай бағдарламалау тілін қолдануға болатыны туралы пікірталасқа кірдім. Java және С – кафедрадағы ең жиі қолданылатын тілдер, және көптеген тақырыптар үшін бұл орынды, бірақ абсолютті жаңадан бастағандарға (менің ойымша) сәйкес емес. Менің ойымша, Python жаңадан бастаушылар үшін әлдеқайда жақсы таңдау және өз позициямды нығайту үшін төменде сипатталған өте қысқа, өте ғылыми емес сынақты орындадым.

***

Сынақ

Мен (қарапайым) түрлі тілдердегі қарапайым бағдарламаларды жазуға қатысты немен айналысқым келді. Мен таңдаған тілдер BASIC, C, Java және Python болды. Мен C және Java-ді қолдандым, себебі олар кафедрада ортақ пайдалануда (және басқа да оқу орындарында) Мен Python-ты таңдадым, себебі оны жақсы көремін және мұны оқыту үшін тамаша таңдау деп санаймын және BASIC-ды таңдадым, себебі, жеңіл…

«Hello World» біршама тривиальды болып көрінді, сондықтан мен пайдаланушыдан екі нөмірді оқып, оларды қосып, нәтижені басып шығару туралы қарапайым тапсырма бойынша шешім қабылдадым. Менің қызығушылығым болды

  • Қанша уақыт жаза алып, кодты тіруге алмады
  • Қанша заттар студенті осы кодты жазу мақсатында түсіну қажет етпейді

Кодты жазу уақыттары, студент талап ететін уақыттың өкілі болмауы керек, бірақ менің ойымша, олар дәл салыстырмалы салыстыру өлшемін береді. Мен әрбір тілде жеткілікті білікті (1-5 жыл жұмыс тәжірибесі), сондықтан мен негізсіз алдын ала ойлаған жоқпын.


BASIC

Мен 70-ші жылдардың аяғында, I TRS-80 деңгейінде және менің орта мектебіме кездейсоқ қол жеткізген уақытты бөлісу жүйесінде бағдарламаны үйрендім. Бағдарлама жақсы ескі BASIC-де тривиальды:

10 INPUT A
20 INPUT B
30 C=A+B
40 PRINT C

RUN

Жазу уақыты:

15 секунд. Мен BASIC аудармашының қолайлы екендігін мойындаймын және оны сынамағанымды мойындаймын, бірақ мен оны білемін. (Жақсы, мен TRS-80 эмуляторын жалдайтынмын және оны іс жүзінде орындадым – ол жұмыс істейді…)

Түсіндіруге болатын нәрселер:

  • Сызық нөмірлері
  • Айнымалылар
  • INPUT
  • PRINT
  • RUN

Артықшылықтар мен кемшіліктер

BASIC бастаушыдан бастауға өте оңай, бірақ ескі, нашар ойластырылған тіл. Visual BASIC «жақсы ескі BASIC» үшін көп нәрсе қосады, бірақ бір платформалы меншік тілін үйрету үшін (менің ойымша) сәйкес емес. Және бұл әлі де жақсы тіл емес.


C

#include <stdio.h>

int main(int argc, char*argv[]) 
{
    int a,b,c;

    scanf("%d",&a);
    scanf("%d",&b);

    c = a+b;
    printf("%d\n",c);
}

%> gcc -o add add.c
%> ./add

Жазу уақыты:

шамамен үш минут, соның ішінде отладки.

Түсіндіруге болатын нәрселер:

  • #қамтиды, функциялары (негізгі), қайтару түрлері, argc, argv
  • айнымалылар, түрлері (int)
  • scanf (және көп кешікпей бұл шектеулер және олармен қалай айналысуға болады)
  • printf, форматты жолдар
  • көрсеткіштер (қазірдің өзінде!!)
  • компиляция, жақшалар және нүктелі үтір

Артықшылықтар мен кемшіліктер

C жоғарғы хакерлердің өздерінің пайдалануына арналған. Ол операциялық жүйелерді, компиляторларды және басқа да жүйелік құралдарды жазу үшін жасалған, және бұл роль толықтай доминантты болды.

Ол жақсы жұмыс істеуді қамтамасыз етеді (алгоритмді жақсы таңдау және жақсы C дағдыларына байланысты) және аппараттық қамтамасыз етудің төмен деңгейіне қол жеткізуге мүмкіндік береді, бірақ бұл әдетте жаңадан талап етілетін нәрсе емес. C көрсеткішін пайдалану – жаңадан бастағандар үшін бұзылулар мен шатасулардың көзі, бірақ олар тіпті өте тривиальные бағдарламаларда да маңызды (жоғарыда айтылғандай, тривиальді түрде).

Бұдан басқа, C жолдарын өңдеу басқа көптеген заманауи тілдермен салыстырғанда әлсіз (жоғарыда пайдаланылған scanf функциясы қате болып табылады).

C ірі және өте маңызды тіл болып табылады, және барлық бағдарламашылар оған елеулі тәуекеліне тиіс. Бұл, алайда жаңадан үйрету қорқынышты тілі болып табылады. Тым көп бар түсіндіру үшін аз уақыт қалдырып, түсіндірді керек бағдарламалау.


Java

import java.io.*;
public class Addup
{
    static public void main(String args[])  {
        InputStreamReader stdin = new InputStreamReader(System.in);
        BufferedReader console = new BufferedReader(stdin);
        int i1 = 0,i2 = 0;
        String s1,s2;
        try {
            s1 = console.readLine();
            i1 = Integer.parseInt(s1);
            s2 = console.readLine();
            i2 = Integer.parseInt(s2);
        }
        catch(IOException ioex) {
            System.out.println("Input error");
            System.exit(1);
        }
        catch(NumberFormatException nfex) {
            System.out.println("\"" + nfex.getMessage() + "\" is not numeric");
            System.exit(1);
        }
        System.out.println(i1 + " + " + i2 + " = " + (i1+i2));
        System.exit(0);
    }
}
%> javac Addup.java
%> java Addup

Жазу уақыты:

19 минут! Шын мәнінде мен шамамен 15 минут өткіздім, сәтсіздікке ұшырадым, содан кейін Google-ды мысалға келтірдім. Жоғарыда келтірілген код веб-беттен көшіріледі, ол, менің ойымша, «деп ойлаймын, екі пайдаланушыда жазылған бағдарлама бүтін санға енгізілді және олардың сомасын басып шығару қарапайым код болар еді» деп ойлайды.

Әлбетте, бұл код осы жерде берілген басқа бағдарламаларға мүлдем тең келмейді, себебі ол дұрыс қателерді тексереді, бірақ Java қатені тексеруді қиындатады. Сіз ерекше жағдайларды ұстауыңыз керек және оларды ұстап алып, олармен бір нәрсе жасай аласыз.

Мен шынында да осындай қиындықтарға тап болдым – мен екі жыл бойы коммерциялық Java-пакетте жұмыс істеп жүрмін, бірақ GUI негізделгендіктен, консольден оқуды сирек жүргізуім керек. Нағыз Java бағдарламашыларым мені өкінішті және жиренішті қоспамен қарауы мүмкін. Бұл өмір.

Түсіндіруге болатын нәрселер:

  • импорт, сыныптар, нүктелі үтірлер
  • қоғамдық, статикалық, жарамсыз, String, бастысы args[]
  • InputStreamReader, BufferedReader, System.in
  • айнымалылар, түрлері
  • тырысыңыз, ұстаңыз, ерекше жағдайлар, readLine, parseInt
  • System.out.println, құрастыру, жүгіру

Артықшылықтар мен кемшіліктер

Java – кросс-платформалық GUI әзірлеу үшін пайдалы тіл, ол OO әзірлеу үшін сенімді платформа болып табылады және сынып кітапханаларының ауқымды және жоғары дамыған жиынтығына ие. Мүмкін, ең бастысы, бұл Java тілінде ең танымал тіл және Java бағдарламашылары үшін көп жұмыс орындары бар.

Үлкен класс кітапханасы, алайда, өте қиын. Барлығы дерлік класс бар, ал «Java-де бағдарламалау» көпшілігі «дұрыс классты іздеу» сияқты көрінеді. Тіпті екі жылдан кейін мен құжаттамаға үнемі сілтеме бермей Java-да көп нәрсені жасай алмаймын деп ойлаймын.

Java объектіні бағдарлауды, ерекшеліктерді тексеруді және қатаң теруді – бұл барлық (жақсы) жақсы нәрселерді жүзеге асырады – олар бағдарламашы тобына үлкен жүйелерді сенімді жасауды жеңілдетеді. Бірақ кішігірім проблемалар үшін (мысалы, кіріспе бағдарламалау сабақтарында кездесетіндер сияқты) бұл заттар күрделі, уақытты сіңіретін ауыртпалықтан басқа ештеңе болмайды.

Жалғыз жұмыс істеудің себебі Java-ні «үйрету керек» деген ланагуга жеткілікті, бірақ, егер біз мұны біз көрсеткен ең жақсы тіл болса, біздің студенттерге кедергі жасайтынына сенемін.


Python

import sys

a = sys.stdin.readline()
b = sys.stdin.readline()
c = int(a) + int(b)
print c

%> python add.py

Жазу уақыты:

шамамен бір минут, оның ішінде тестілеу және отладка.

Түсіндіруге болатын нәрселер:

  • импорт
  • айнымалылар
  • sys.stdin
  • readline (жолды оқиды)
  • int (жолды бүтін санға түрлендіреді)
  • басып шығару

Артықшылықтар мен кемшіліктер

Python жақсы ұпай өте көп бар:

  • жақсы бағдарламалау стилі қолданады (шегініс мағыналы болып табылады)
  • қолданысқа қолжетімді, бірақ OO
  • пайдаланылатын Ерекшеліктер, бірақ қолданысқа
  • ойыншық немесе академиялық тілі емес – көп нақты әлемдік жұмыс Python жүзеге асырылады
  • концентрациясы алгоритмдер және проблема емес, тілдік ерекшеліктері мен кемшіліктеріне бойынша береді.
  • кросс алаң болып табылады және кітапханалар қуатты жиынтығы бар
  • қауіпсіз – бұл динамикалық іске қосу уақыты түрі тексеруді және алаптарында тексеру шек бар
  • қуатты кіріктірме деректер түрлері – (2.4) сөздіктер, тізімдер, бірізділік, функциялары, жиынтықтар
  • қуатты кіріктірме бақылау құрылымдардың – қарапайым реттілігі астам цикл, карта, генераторлар, тізім comprehensions, тұрақты білдіру …
  • Осы мәселе бойынша код аз сызықтар талап, және одан оқуға болады – осылайша үлкен өнімділігі.

ол кейбір нақты артықшылықтары бар, алайда бірінші тілі ретінде оқыту үшін. (Елемей базалық) жоғарыда келтірілген мысалдар көріп отырғанымыздай, Python аз уақыт, код аз сызықтар, және берілген мақсатқа жету үшін тәлім аз ұғымдар талап етеді. Бұл көп уақыт маңызды нәрселерге жұмсалады мүмкіндік береді. Әрі қарай, кейбір жалпы студенттік қателер толығымен Python жылы byassed отыр:

  • жолдың соңында жолдың соңында (жоқ ұмытып нүктелі үтір) болып табылады
  • жоқ түрі декларациялар
  • әрқашан айқын шынайы блок құрылымы (жоқ хабарсыз кеткен жақшаға қате)
  • динамикалық жады бөлу және қоқыс жинау

Соңында Python бағдарламалау болып табылады көңілдіКөңілді содан кейін жақсы бағдарламасына оқуды жалғастыру орналасқан студенттің жиі табысты тұқымды сенім мен пайыздар.

Бірақ Python – сценарий тілі ғана

Python жиі (Perl және Ruby, сондай-ақ осы ақымақ ханжества зардап шегеді) «жай ғана сценарий тілі» ретінде қызметтен босатады. Бұл жай ғана дұрыс болып табылады. Ол көптеген қосымшалар үшін өте қолайлы толыққанды өте жоғары деңгейдегі тілі болып табылады – бұл «жай ғана сценарий тілі» емес,  оның ішінде қарапайым сценарийлер баж.

Python-да «жылдам және кірлеген» сценарийлерді жаза білу фактісі – бұл сценарий іс жүзінде кәсіптік бағдарламалаудың маңызды бөлігі. Егер студенттер Python (немесе Perl, Ruby немесе….) білмейтін болса, олар Java-дегі сценарийлік мәселелерді шешуге тырысады.

Бірақ Python – бұл баааааааяу

Python – интерпретирующим тілі, және бұл біршама үстемдік қосады. Динамикалық шекараны тексеру, динамикалық теру және басқа да ақылды Python әрекеттері оны одан әрі баяулатады. Python балама C кодынан баяуырақ тәртібі болуы мүмкін. Алайда

  • Көптеген өтініштер байланған есептеу емес. олар үшін жоғары өнімділігі тілін пайдалану үшін ерте оңтайландыру күнә мысал береді.
  • сондай-ақ С Python интерфейстер – үлкен пайда C сын бөлімдер кодтау арқылы жасалуы мүмкін
  • Уақыт Python кодтау, және жазбаша код әлдеқайда көп қарапайымдылығын сақталған, неғұрлым тиімді алгоритмдер эксперименттер үшін өте көп уақыт береді – жиі әлдеқайда жемісті жай өте тез нашар алгоритмі жүгіру қарағанда.

Қорытынды

C және Java маңызды тіл болып табылады – олар өздерінің тұжырымдамалары, жұмысқа орналасу перспективалары және олар шешетін мәселелер кластары үшін. Студенттер осы тілдерде мұқият жерге негізделуі керек. Бірақ олар кәсіптік бағдарламашы үшін жеткілікті арсеналды қалыптастырмайды – жақсы «сценарий тілі» міндетті болып табылады – студенттерге бағдарламалауға үйрету үшін жақсы тілдер. Олардың көп көңіл-күйі бар және басқа да студенттер мен мұғалімдердің жұмысын олардан гөрі қиынырақ етеді.

Кедергілер дискриминациялау бағдарламасының бір бөлігі болып табылатын адамдар бар – оқушылар өз ерекшеліктеріне қол жеткізуге үйренуі керек, көрсеткіштерді қолданып, барлық түрлерін жариялайды және т.б. Мүмкін, мүмкін емес – бірақ кейінірек бұл уақыт. Келіңіздер, біз бастаған кезде студенттер (мысалы, «Мен») шағын жетістіктерге қарапайым қуанышқа бөлейік. Patrick Jordan – [email protected] – 2004-12-14


PostScript (ақпан 2006)

Жоғарыда айтылған пікірлерден басқа, осы мақаладан кейін көп адам маған жазған Daily Python Python-да мұны қарапайым тәсілі бар екендігін көрсету үшін:

a = input()
b = input()
c = a + b
print c

%> python add.py

(әр түрлі линиялар сияқты ‘print input()+input()’ сондай-ақ, олар да ұсынылды және жұмыс істеді, бірақ менің ойымша, оқыту мақсаттарына пайдалы емес). Бұдан әрі input() кез-келген Python өрнегін қабылдайды, бұл бағдарлама тек кірістердің бүкіл ауқымы үшін жұмыс істейді – инцтар, флоттар, жолдар (олар оларды біріктіреді, бірақ олар айнымалы атаулар ретінде түсіндірілуге тиіс) ретінде “3.14**2”. Қосымша дәлелдемелер, қажет болғандай, Python сұлулығының.

Пікірлер

Мен осы тақырып бойынша, әсіресе айтпаған тілдерде (Ruby, C++, Smalltalk, LISP) бірнеше түсініктеме алдым…

Пікірлер оқыңыз 
Тіпті Толығырақ оқу пікірлер