Kompyuter dasturlarini o’qitish uchun mashhur tillarni juda tez taqqoslash

Source: http://www.ariel.com.au/a/teaching-programming.html

Patrik Jordan

CS Kafedrada Men hozirda men yaqinda dasturlash tili boshlangich o’rgatish foydalanish kerak bo’lgan bir munozarada ishtirok qolibdi o’rgatish qaerda. Java va C bo’limi eng ko’p ishlatiladigan tillar va ko’p fanlardan bu tegishli emas, mutlaq yangilar uchun (I ishonaman). Men Python boshlanuvchilar uchun juda yaxshi tanlov, va men, quyidagi ta’rif juda qisqa, juda ilmiy tashqari test amalga o’z o’rnini tashkil sabotli qilish ishonaman.

***

Test

Men tillar (kichik) turli juda oddiy dasturlarni yozish ishtirok etgan, nima bilan qarash bo’ldim. Men tanlagan tillar BASIC, C, Java va Python edi. Bu bo’lim keng qo’llanilgan, chunki men C va Java ishlatiladi (va boshqa o’quv yurtlarida. Men uni yaxshi ko’raman va uni o’qitish uchun ajoyib tanlov, deb o’ylayman, chunki men Python tanladim, va yaxshi, u ham faqat edi, chunki men BASIC tanladi oson…

“Salom Dunyo” bir oz ham arzimas edi, shuning uchun men bilan birga, ularni qo’shish va natijani olib chop, foydalanuvchi ikki raqamlarini o’qish nisbatan oddiy bir vazifa ustida qaror qildi. Mening qiziqish bo’ldi

  • Qancha vaqt yozish uchun olish va kod disk raskadrovka edi
  • Bir talaba ushbu kodni yozish uchun tushunish kerak qancha narsalar

Kod yozish uchun berilgan marta aniq bir talaba tomonidan talab vaqt vakili bo’lishi kerak, lekin men ular nisbatan bir taxminan to’g’ri o’lchab berayotganimni iymon emas. Men har bir tilda (1-5 yil professional tajribasi) oqilona malakali emasman, shuning uchun men asossiz xulosa, deb o’ylamayman.


BASIC

Men bir darajada, men TRS-80, qaytib kech 70s, dastur o’rgandim, va mening oliy maktab uchun vaqti-vaqti ruxsat bor edi bir vaqt almashish tizimiga. Dastur yaxshi eski BASIC arzimas hisoblanadi:

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

RUN

Vaqt yozish uchun:

15 soniya. Men qulay bir BASIC tarjimon yo’q va bu imtihon emas edi tan, lekin men faqat bu ishlaringni bilaman. (…ishlaydi OK, men TRS-80 emulyatoringizni qadar olov va aslida uni yugurib)

Narsalarni bayon qilish uchun:

  • Line raqamlari
  • O’zgaruvchilar
  • INPUT
  • PRINT
  • RUN

Ijobiy va salbiy tomonlari

BASIC boshlanuvchilar bilan boshlash uchun juda oson, lekin u deyarli har bir zamonaviy xususiyati ham yo’q, eski, yomon mo’ljallangan tildir. Vizual BASIC ko’p uchun “yaxshi eski BASIC” qo’shadi, lekin bitta-platforma mulkiy tilini o’rgatish (I iymon) tegishli emas. Va, albatta hali yaxshi til emas…


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

Vaqt yozish uchun:

Nosozliklarni jumladan uch daqiqa.

Narsalarni bayon qilish uchun:

  • #include, (asosiy) funktsiyalari, turlari, argc, argv qaytib
  • O’zgaruvchilar, turlari (int)
  • scanf (va tez orada uning cheklashlar va qanday, ularning atrofida ishlash)
  • printf, format satr
  • (Allaqachon!!) DMOZ
  • Jamlashning qavs va nuqtali vergul

Ijobiy va salbiy tomonlari

C o’z foydalanish uchun eng yaxshi hackerlar tomonidan ishlab chiqilgan. Bu yozuv operatsion tizimlari, kompilyatorlar va boshqa tizim vositalari uchun mo’ljallangan edi, va bu vazifani u deyarli to’liq hokim bo’ldi.

Bu mukammal ishlash (algoritm va yaxshi C ko’nikmalarini yaxshi tanlov faraz) ta’minlash va past darajadagi apparat kirish imkonini beradi, lekin bu odatda boshlayotgan tomonidan talab narsalar emas mumkin. mayoqlar S ning foydalanish boshlanuvchilar uchun umidsizlik va tartibsizlik manbai, lekin ular (bir arzimas tarzda bo’lsa-da, yuqoridagi kabi), hatto juda arzimas dasturlarida muhim ahamiyatga ega.

Bundan tashqari, S ning tor muomala boshqa ko’plab zamonaviy tillarda (yuqorida ishlatiladi Munozara vazifasi notoriously muammoli) nisbatan zaif.

C yirik va juda muhim til, va barcha dasturchilar unga salmoqli ta’sir kerak. Biroq boshlangich o’rgatish uchun dahshatli tildir. Juda ko’p bor, C tushuntirib uchun kamroq vaqt qoldirib, bayon qilish kerak, dasturiy.


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

Vaqt yozish uchun:

19 daqiqa! Aslida, men, taxminan 15 daqiqa sarf olmadi, so’ngra misol uchun Google tintuv. Yuqoridagi ko’chiriladi kodi veb-sahifasi aytdi deb o’yladim, so’zlar “Bu ikki foydalanuvchi kirib butun sonlarning ham o’qiydi va ularning yig’indisi yozishga undadi bir dastur kodini oddiy parcha bo’ladi, deb o’ylagan bo’lishi mumkin” bilan boshlanadi.

Shubhasiz, bu kod, uni to’g’ri xato tekshirish qilsa, chunki, ammo Java qiyin qiladi bu erda taqdim boshqa dasturlarga mukammal teng emas, balki xato tekshirish qilish. Siz vaziyatlar qo’lga olish kerak, va siz ham ular bilan bir narsa qilish mumkin, ularni qo’lga olgan.

Men aslida bunday I, bu bilan juda ko’p muammo edi bezovta qilyapman – Men ikki yil davomida bir tijorat Java paketi ustida ish ayting, lekin GUI asosidagi chunki men kamdan-kam hollarda konsoldan o’qish bilan shug’ullanish kerak. Real Java dasturchilar ehtimol achinish va nafrat aralashmasi bilan menga pastga qarash qiladi. Bunday hayot.

Narsalarni bayon qilish uchun

  • import, sinflar, nuqta-vergul qavs
  • davlat, statik, bo’sh, string, asosiy args []
  • InputStreamReader, BufferedReader, System.in
  • o’zgaruvchilar, turlari
  • Boshqarish harakat qo’lga, readLine, parseInt
  • System.out.println, kompilyatsiya yugurib

Ijobiy va salbiy tomonlari

Java xoch-platforma GUI rivojlantirish uchun foydali tili, Assalamu: rivojlantirish uchun mustahkam platforma bo’lib hisoblanadi, va sinf kutubxonalar keng va yuksak evolyutsiya darajasida majmuini bor. Ehtimol, eng muhimi, u atrofida eng mashhur til ekan va Java dasturchilar uchun ish o’rinlari, uchastkalar bor.

keng sinf kutubxona Biroq juda qiyin bo’ladi. Bu erda deyarli har bir narsa uchun bir sinf, va “Java dasturlash” ko’p “o’ng sinf qidirib” iborat ko’rinadi ko’rinadi. Hatto ikki yil keyin, men hujjatlarni doimiy ravishda murojaat Java ko’p qila olmaydi topish.

Bu barcha (tortishuvlarga) yaxshi narsalar – Java ob’ekt asoslangan, istisno tekshirish va qattiq yozib ta’minlaydi, ular osonroq dasturchilar guruhi sog’lom katta tizimlari yaratish uchun qilish. Lekin (masalan, kirish dasturlash sinflarda duch kabi), kichik muammolar uchun bu narsalar murakkab, vaqt so’ruvchi yukini ko’proq narsa bo’lib.

yolg’iz bandligi sababi Java bir “o’rgatish kerak” lanaguage qilish uchun etarli emas, lekin bu biz ularni ko’rsatish tili bo’lsa, biz talabalarga zarar qila ishonaman.


Python

import sys

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

%> python add.py

 

Vaqt yozish uchun:

test va nosozliklarni jumladan haqida bir daqiqa.

Narsalarni bayon qilish uchun

  • import
  • o’zgaruvchilar
  • sys.stdin
  • readline (bir mag’lubiyatga o’qilmoqda)
  • int (tamsayı uchun, bir mag’lubiyatga aylantirgan)
  • chop etish

Ijobiy va salbiy tomonlari

Python yaxshi ball bir dahshatli ko’p bor:

  • yaxshi dasturlash uslubi ta’minlaydi (belgi mazmunli bo’ladi)
  • Assalamu: mavjud, lekin majburiy emas
  • Istisnolar ishlatiladi, lekin majburiy emas
  • bir o’yinchoq yoki akademik til emas – ko’p real dunyo ish Python amalga oshiriladi
  • emas, balki til xususiyatlari va kamchilik ustida algoritmlar va muammo bo’yicha konsentratsiyasi beradi.
  • o’zaro faoliyat platformalar va kutubxonalar kuchli to’siq bor
  • xavfsiz – u, tillo tekshirish faol ishga tushirish vaqti turi tekshirish va chegarasidan bor
  • kuchli ajralmas qildi ma’lumotlar turlari – lug’atlar, ro’yxatlar, tillo, funktsiyalari, silsilasini (2,4 yilda)
  • kuchli ichki nazorat tuzilmalari mavjud – ketliklar, xarita, generatorlar, ro’yxat aql-idrokiga, muntazam ifodalar ustida oddiy Loop …
  • har qanday berilgan muammo uchun kod kam liniyalari talab qiladi, va yana ukish – shunday katta unumdorligi.

birinchi til sifatida o’rgatish uchun, shu bilan birga, ayrim o’ziga xos afzalliklarga ega. (Asosiy e’tibor bermay) Yuqoridagi misollardan ko’rinib turibdiki, Python berilgan maqsadga erishish uchun ta’lim kamroq vaqt, kodi kam liniyalari va kam tushunchalarni talab qiladi. Bu ko’proq vaqt muhim narsalarga sarf qilish imkonini beradi. Bundan tashqari, ba’zi bir umumiy talaba xatolar to’liq Python byassed etiladi:

  • Xatning oxirida liniyasi oxiri (hech unutilgan nuqta-vergul)
  • hech turi deklaratsiyalari
  • haqiqiy blok tuzilishi har doim ochiq-oydin (hech yo’qolgan qavs xato)
  • dinamik xotira ajratish va axlat yig’ish

Nihoyat Python dasturlash deb qiziqarli! Keyin yaxshi dasturi o’rganish davom bayrok talaba, ham kulgili va tez-tez muvaffaqiyat zoti ishonch va qiziqish.

Lekin Python faqat bir scripting til hisoblanadi

Python ko’pincha “faqat bir buyruq fayli tili” (Perl va Ruby, shuningdek, bu ahmoqona fanatizm aziyat) lavozimidan ozod qilindi. Bu shunchaki to’g’ri emas. Bu “faqat bir kodlash tili” emas – bu oddiy scripting vazifalarini, shu jumladan, ko’p ilovalar uchun ideal to’liq xususiyatli juda yuqori darajadagi til hisoblanadi.

Scripting aslida professional dasturlash ajralmas qismi hisoblanadi, chunki siz Python “tez va iflos” skriptlar yozish mumkin, aslida, bir afzalligi, balki bir ahvolga tushgan. talabalar Python (yoki Perl yoki Ruby, yoki…). bilmasangiz, ular Java script-kabi muammolarni hal qilishga harakat juda ko’p vaqt isrof bo’ladi.

Lekin Python seeeeeekin emas

Python bir talqin til, va bu bir necha yuk kiritish qiladi. tekshirish Dinamik chegaralari, faol yozib va ​​boshqa aqlli Python narsalar yanada uni pasaytirishi. Python teng C kodi ko’ra sekinroq magnitudali farmoyishlariga bo’lishi mumkin. ammo

  • Ko’p, juda ko’p dasturlar bog’lab hisoblash emas. erta optimallashtirish gunohini yorqin tasdig’idir ular uchun baland ishlash tilini foydalanish uchun.
  • Python interfeyslarni yaxshi S – ulkan Turkcha C muhim bo’limlari kodlash bilan amalga oshirilishi mumkin
  • Vaqt Python kodlash saqlanadi, va yozma kodi juda katta soddalik, yanada samarali algoritmlarni tajriba uchun ancha vaqt beradi – shunchaki juda tez yomon algoritmi yugurib ko’ra ko’pincha ancha samarali.

Xulosa

Ular qo’shmoq tushunchalar uchun, bandlik istiqbollari uchun, va ular hal muammolar sinflar uchun – C va Java muhim tillar. O’quvchilar bu tilda batafsil topraklama berilishi kerak. yaxshi “dasturlash tili” shart – Ular bilan birga professional programcı uchun etarli Arsenal hosil emas, na ular dasturlash uchun yangi talabalarga o’rgatish yaxshi tillar mavjud. Ular ko’p o’ylashga olib yuqoridagi va boshqa to’siqlar, bir poda bor, va hosil ikkala talaba va o’qituvchining ish o’rinlari ular bo’lishi kerak ko’ra ko’proq qiyin.

To’siqlarni dasturlash intizomini qismi bo’lgan, deb da’vo edi, odamlar ham bor – o’quvchilar vaziyatlarni qo’lga olish o’rganishimiz kerak, mayoqlar, shuning uchun tashqariga ularning barcha turlari va e’lon foydalaning. Balki, balki, balki, – lekin keyinchalik buning uchun vaqt bor. Ning talabalari, biz boshlang’ich edi, biz (ham, “men” baribir) edi kichik yutuqlar oddiy quvonch bor ruxsat qilaylik. Patrik Jordan – [email protected] – 2004-12-14


PostScript (2006 Fevral)

Bu maqola Python buni oddiy yo’li bor edi, deb ishora Daily Python paydo so’ng chetga yuqorida izoh, odamlar ko’p soni menga yozgan edi:

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

%> python add.py

(various one liners like “print input()+input()” shuningdek, taklif qilingan va ishlagan, lekin men o’qitish maqsadlarida kamroq foydali deb hisoblayman). Bundan buyon shlaydi() har qanday amalni qabul qiladi Python ifoda, bu dastur faqat bir qator kirish uchun ishlaydi – ints, floats, strings (iularni birlashtirib olasiz – lekin ular o’zgaruvchan nomlar sifatida talqin qilinishi kerak bo’lgan takliflarga ega bo’lishi kerakligini eslang) yoki “3.14**2”. Boshqa go’zallik, go’yo kerak bo’lsa, go’zalligi haqida Python.

Izohlar

Men, ayniqsa, men zikr qilmadi tillarida, bu mavzu haqida fikr-mulohazalar bir qator qabul ayting (Ruby, C++, Smalltalk, LISP)…

Sharh
Hatto davomi Sharh