Оригиналът: A Very Quick Comparison of Popular Languages for Teaching Computer Programming

В министерството на CS, където в момента съм учила аз наскоро в дискусии за това на какъв език за програмиране трябва да се използва за обучение начинаещи. Java и C са най-често използваните езици в министерството, и за много субекти е необходимо, но не (Аз вярвам) за абсолютно начинаещи. Аз вярвам, че Python-това е много по-добре избор за начинаещи, и фирма със собствена позиция завършил съм много накратко, е много ненаучен тест, описан по-долу.

***

Тест

Аз исках да видя на това, че е участвал в писането е много проста програма в (малка) различни езика. Езици, които избрах, са BASIC, C, Java и Python. Аз използвах C и Java, защото те са били в обща употреба в отдела (и в други учебни заведения. Аз избрах Python защото аз го обичам и мисля, че това е отличен избор за обучение и Аз съм избрал основното, защото, ами, това е твърде просто…..

„Hello, world“ изглежда твърде банален, така че аз реших по отношение на лесна задача за четене два броя от потребителите, да ги добавяте заедно и печат резултат. Интереса ми е

  • Колко време ще вземе, за да пишат и отстран Java не на грешки в кода
  • Колко неща бяха застреляни трябва да разберат, за да се напишете този код

Време е да се напише код, очевидно, не са предназначени за говорителят на времето, необходимо на един студент, но аз вярвам, че те дават повече от точен показател за сравнение. Аз съм достатъчно квалифицирани (1-5 години професионален опит) във всеки език, така че аз не мисля, че съм бил неоправдано са накърнени.


BASIC

Научих се как да програмирате, още в края на 70-те, на ниво I TRS-80, и по време на обмен на системата, че моето училище е бил случаен достъп . Програмата е тривиално в добрите стари BASIC:

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

RUN

Време за запис:

15 секунди. Признавам, че нямам базови преводач е под ръка и не провери това, но аз просто знам, че това работи. (ОК, аз стрелях TRS-80 емулатор и всъщност го проверих – работи…)

Нещата за обяснения:

  • Номера на редове
  • Променливи
  • Вход
  • Печат
  • Стартиране

Плюсове и минуси

Basic-това е много лесно за начинаещи, да се започне с, но това е стари, лошо проектирани език, липсва в почти всички съвременни характеристика. В Visual Basic допринася много за „доброто старо база“, но това не подходящо (аз вярвам), за да научи едно-Платформа проприетарная език. И това все пак не е много добър език….


С

#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

Време за запис:

около три минути, включително и за отстранJavaне на грешки.

Нещата за обяснения:

  • #включване на функции (BASIC), върнати от видове, int argc, argv
  • променливи, типове (int)
  • ограничения на функцията scanf (и съвсем скоро това как да ги заобиколят)
  • e, на редове формат
  • указатели (вече!!)
  • съставяне, скоби и точки, с точка и запетая

Плюсове и минуси

C е разработена най-хакери за собствените си нужди. Той е предназначен за писането на операционни системи, компилатори и други инструменти, и в тази роля стана почти напълно доминиращата.

Той може да осигури отлична производителност (при условие, че е добър избор алгоритъм и добри умения C) и позволJava ниско ниво на достъп до хардуера, но това, разбира се, не са неща, необходими за начинаещ. Използва с указатели са източник на разочарование и объркване за начинаещи, но те са от съществено значение за още доста тривиални програми (като по-горе, макар и тривиален начин).

Нататък, работа с ред е слаб в сравнение с много други модерни езици (функцията scanf се използва по-горе, като знае, проблематично).

C-това е голям и много важен език, и всички програмисти трябва да имат значително въздействие върху него. Но това е един ужасен език обучават начинаещи. Твърде много С какво да обяснJavaш оставяйки малко време за обяснения за програмиране.


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 за две години, но в края на краищата това е интерфейс рядко ми се налага да се справят с четене от конзолата. Истинските програмисти на java, вероятно, гледат надолу към мен смес от съжаление и брезгливости. Такъв е животът.

Нещата за обяснения

  • внос, класове, скоби, точка и запетая
  • социални, статични, празнотата, ред, главните аргументи[]
  • InputStreamReader, BufferedReader, System.in
  • променливи, типове
  • опитайте се да хвана изключения, с readline, parseInt
  • На системата.от.метод println, състав, на стартиране

Плюсове и минуси

Java е полезен език за крос-платформа за разработка на графичен потребителски интерфейс, – това е надеждна платформа за развитие на GS и разполага с голям и много са се развили набор от библиотеки от класове. Може би най-важното е, че това най-популярен език, около и има много работни места за 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

Време за запис:

около една минута, включително тестване и отстранJavaне на грешки.

Нещата за обяснения

  • внос
  • променливи
  • сыс.устройството stdin
  • с readline (чете ред)
  • int (преобразува низ в цяло число)
  • печат

Плюсове и минуси

Python има много положителни моменти:

  • осигурJava добър стил на програмиране (отстъп на значими)
  • Достъпни GS но не са влезли в сила
  • Изключения се използват, но не се спазва
  • това не е играчка или учебен език – много на света реално работата се на Python
  • позволJava да се съсредоточат върху алгоритмите и проблеми, а не на езикови особености и недостатъци.
  • това е кръст-платформа и има мощен набор от библиотеки
  • безопасно е динамично по време на изпълнение на проверка на типа и проверка на границите на масиви
  • има мощни вградени типове данни – речници, списъци, последователност, функции, определя (2.4)
  • има мощен вграден структури за управление – просто обходишь последователност на картата, генератори, списък на осмысленностей, редовно изрази…
  • изисква по-малко редове код, за този или онзи проблем, и повече четене – по този начин по-висока производителност.

Въпреки това за обучението като първи език има специфични предимства. Както се вижда от горните примери (игнорирайки основна), Python изисква по-малко време, по-малко редове код, и по-малко концепции учат достигне поставената цел. Това позволJava повече време ще бъдат изразходвани за важните неща. Освен това, някои общи студентски грешки напълно byassed в Python:

  • край на ред, край на ред (не забравят точка и запетая)
  • няма реклами тип
  • вярно е структурата на блока винаги са ясни (липсват скоби грешка)
  • динамично разпределяне на паметта и събиране на боклук

Най-накрая, програмиране Python-това е забавно! Забавно и честите успехи порода доверие и интерес към ученик, който е най-добре възможности за продължаване на обучението на програмата.

Но Python-това е просто Скриптов Език

Python често уволнени като „просто скриптов език“ (Perl и Руби също страдат от този глупав фанатизъм). Това е просто погрешно. Това не е „просто скриптов език“ – това е пълен показва много високо ниво на езика, който е идеален за много приложения, включително и прости скриптове задължения.

Фактът, че можете да напишете „бързо и мръсно“ скриптове на Python е предимство, а не недостатък, тъй като сценарии всъщност неразделна част от професионално програмиране. Ако учениците не знаят Python (или Perl, или Ruby, или….), те ще прекарат много време опитвайки се да реши скрипт подобен проблем в Java.

Но Python- е много бааавен

Python е скриптов език, и добавя някои режийни разходи. Динамична проверка на границите, динамичен вид език и други умни Python неща го забави още повече. Python могат да се поръчки стойности по-бавно, отколкото еквивалентен код на c. Въпреки това

  • Много, много приложения не се изчислJava скок. За да използвате най-високо език на спектакъла за тях пример за греха началото оптимизация.
  • Python интерфейси добре в C – огромни успехи могат да бъдат направени чрез кодиране критични секции в C
  • Спестеното време и кодиране на Python, и в много по-голяма простота публикувано от код, позволJava на много повече време за експерименти по-ефективни алгоритми – често много по-ползотворно, отколкото просто да работи зле алгоритъм много бързо.

Заключение

C и Java са важни езици – понятия, които те олицетворJavaт, за перспективите за работа, така и за класовете задачи, те реши. Учениците трябва да получат изчерпателна в тези езици. Те обаче не са достатъчни за Арсенал професионален програмист – добър „скриптов език“ – това не те са добре езици учат учениците в програмирането. Те има много административни и други пречки, които заемат много удоволствие, и тъй като на ученика и работата на учителя по по-трудно, отколкото трябва да бъде.

Има хора, които твърдят, че пречките са част от дисциплина програмиране – студентите трябва да се научат да ги хване с изключения, използване на указатели, да обяви всичките им форми и така нататък. Може би, може и да няма – но има време за това по-късно. Нека учениците проста радост от малките успехи, че ние (е, „аз“ във всеки случай), когато ние бяхме като се започне. Патрик Джордан – [email protected] – 2004-12-14


Послеслов (Февруари 2006)

Освен изброените по-горе коментари, огромен брой хора са писали за мен, след тази статия се появи в Дневния Python, за да посочи, че е имало лесен начин да направите това в Python:

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

%> python add.py

(също така са били предложени различни лайнери, като печат на въвеждане()+вход ()’ и работят също толкова добре, но аз бих казал, не по-малко полезно за научения цели). Нататък, след вход() приема всяко валидно израз на Python, тази програма работи само за различни входове – инц, плувки, ред (той ще бъде присъединJavaнето им – но имайте предвид, че те трябва да бъдат затворени в кавички в противен случай те ще се тълкува като имена на променливи), или изрази, като „3.14**2“. Още едно доказателство, както ако той е бил нужен, за красота На Python.

Коментари

Имам няколко коментара по тази тема, особено на езици аз не споменах (Ruby, C++, Smalltalk, LISP)…
Прочети коментарите
Още повече