Python neden giriş seviyesi programlama dili olarak öneriliyor? [kapalı]


16

Burada yeni başlayan programcıların ilk programlama dili olarak Python'u seçmeleri tavsiye edilen P.SE hakkında daha fazla soru okudum.

Beni yanlış anlamayın, Python'u seviyorum. Onu çok severim! Ancak felsefesi "Hepimiz yetişkinleri burada kabul ediyoruz" etrafında dönüyor.

Bir deneyim / bilgi açısından, yeni başlayan bir programcı bir yetişkin değildir. Bu da, yarada hayatta kalsanız bile, kendinizi ayağa vurmanın ve bazı kötü alışkanlıkları almanın daha kolay olduğu anlamına gelir.

"Daha statik" bir dilde, kendinizi daha kısıtlayıcı olacağından ayağınızı vurmanın daha zor olacağını düşünüyorum.

Soruma geri dön. Python neden giriş seviyesi programlama dili olarak öneriliyor?

Bir programlama dilini öğretmeyi iyi kılan hususlar nelerdir? Yoksa ... danışmanın kişisel tercihi mi?


17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot- Peki, C ve C ++ statik olarak yazılmıştır ve onları kullanarak ayağınızı havaya uçurabilmenin kaç farklı yolunu görmek çok kötü, çok şaşıracaksınız ...
Péter Török

@ Péter Török: Evet, tüm ayağınızı alıp götürüyor (c ++: D). "Daha statik" dedim ... alev savaşlarından kaçınmaya çalışıyorum ... Bilmiyorum ... Java?!?! ... ki herkes okulda / üniversitelerde düşünüldüğü için nefret ediyor gibi görünüyor. ondan korkutuyor ...
JohnDoDo

1
C ++ 'ın daha iyi bir başlangıç ​​dili olduğunu düşünüyorum, çünkü diğer dillerdeki şeyleri daha iyi anlamama yardımcı oldu.
systemovich

1
Onu kullanan bir ilk dönem programlama dersi TAing sonra bir başlangıç ​​dili olarak python ile sığır eti var. Öğrenciler 'türleri' anlamadılar ve boşluk bağımlılıkları onları öldürdü. Ayrıca, bu 'kendinden' referans veren kük bir OO işiyle nesneleri anlamakta zorlandılar. Onun avantajları var ama kesinlikle onun detraktörleri var.
Rig

2
@MahmoudHossam katılıyorum. Sadece deneyimlerimden yapışan noktalardan bazılarını vurguladım. Java, C #, Lisp vb. Bunlar sadece ilk kez programcılara python öğretirken karşılaştığım en önemli konulardı.
Rig

Yanıtlar:


30

Giriş düzeyinde bir dil olarak Python için konuşan en önemli noktalar şunlardır:

  • Bir sahiptir sığ bir öğrenme eğrisi "Merhaba dünya" için yoktan gidiyor diğer pek çok dilde çok daha hızlıdır -
  • öyle sezgisel sözdizimi az sürpriz prensibi takip için tasarlanmıştır ve bu (maalesef standart kütüphaneler her zaman bu tutarlılık uymayan) genel olarak çok tutarlı -
  • çok az kaynak plakası gerektirir : tipik bir "Merhaba dünya" bir kod satırıdır ve açıklanması gereken herhangi bir ek arka plan gürültüsü olmadan basit programlar yazılabilir (işlev beyanı anahtar kelimeleri, içe aktarma ifadeleri, sınıf yapıları, önişlemci yönergeleri, vb.)
  • python koduyla, özellikle interaktif yorumlayıcıyla çalışmak için mükemmel, basit araçlar vardır ; bir derleme sistemi, IDE, özel metin editörü veya python kullanmaya başlamak için başka bir şey öğrenmenize gerek yoktur - bir komut istemi, etkileşimli düzenleyici ve basit bir metin düzenleyici, ihtiyacınız olan tek şey
  • dinamik yazmayı kullanır , ancak diğer birçok dinamik olarak yazılmış dilden farklı olarak, türler saydamdır ve türle ilgili tuzaklar nadirdir

Sadece dilin sezgiselliğini vurgulamak istiyorum . 0 programlama deneyimine sahip kişilerin Python'u hızlı bir şekilde öğrendiklerini gördüm. Bu büyük ölçüde sözdizimi / dilbilgisinin konuşulan İngilizce'ye çok yakın olmasından kaynaklanmaktadır.
Stephen Gross

12
Son noktada: insanlar dinamik yazmayı genellikle zayıf yazmayla karıştırırlar. Python dinamik olarak yazılmıştır (değişkenler yerine değerlerle ilişkilendirilmiş türler), ancak aynı zamanda güçlü bir şekilde yazılmıştır (bu nedenle programlar, dönüşüm hatalarını sessizce yutmak yerine çöküyor)
hugomg

@missingo I second - Eagle eyes you have;)
yati sagade

@missingno: Farkı biliyorum. Saydam olmayan türlere örnek olarak PHP'nin dizi anahtarları verilebilir - diziler tamsayı anahtarları için diğer türlerden farklı davranır; yeterince büyük iki tamsayı eklerseniz, bir kayan nokta ile sonuçlanabilir. Ve bu sadece bir örnek - özellikle PHP ve javascript (web geliştirmede en popüler iki dinamik dil) belirsiz yazım kenarlarıyla doludur.
tdammers

Yorumunuzdan yola çıkarak, "türler şeffaf" demekle, türlerin anlaşılması kolay kurallar mı kastedilmektedir? Tam olarak ne demek istedin?
phant0m

8

Python'daki merhaba dünya:

 print "Hi there"

Merhaba dünya Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

merhaba dünya C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

Diğer ikisi için derleme hakkında konuşmak zorunda kaldığınızda atın ve python çok daha basittir. Sadece bakmakla ilgilendiğim tek fikirden bahsetmek zorundayım, konuyu zorlaştıran tüm makineler sadece python'da kayboluyor. Modüller hakkında konuşmaya hazır olana kadar bekleyebilirim, basit programlar için stdio.h almak için acele etmeye gerek yok. İlk programları için acele etmelerine gerek kalmadan sınıf gibi konulara hazır olana kadar bekleyebilirim. Komut satırında dalga geçmesi için bir REPL vardır. Python kavramsal olarak çok azdır. Bu iyi bir şey çünkü yeni başlayanların eldeki işe odaklanmalarına yardımcı oluyor.


15
"Dönüş 0;" C uygulamanızda ifade :) Derleyici uyarısı!
Stephen Gross

2
Bu nedenle BASIC ilk etapta vardı. 10 YAZDIR "Merhaba Dünya!" 20 END Daha fazla kredi için, Python programı "Merhaba Dünya!" Mı dedi? " birim testi :-)
Ross Patterson

3
F # ile aynı: printfn "Merhaba Dünya!". Yay, F # yeni başlayanlar için iyidir!
Den

7

Bu alışılmadık bir bakış açısı.

Yetişkinlerin rızası Python'un felsefesinin çok küçük bir parçası. Kesinlikle bunun etrafında "dönmez". import thisTercümanda yaptığınız "Zen Python Zen" in bir parçası bile değil .

"Açık, örtük olmaktan daha iyidir", "Basit karmaşık olmaktan daha iyidir" ve "Okunabilirlik sayıları" Python için çok daha merkezi ve Python'un neden iyi bir ilk dil olduğunu göstermek gibi diğer şeyler.

Neyse, "rıza yetişkinler" gerçekten sadece Python özel nesnelerin eksikliği ile ilgilidir. Hangi kendisi, bence, yeni başlayanlar için neden iyi olduğuna dair başka bir gösterge: sadece başlangıçta arayüzler gibi şeyler hakkında endişelenmenize gerek yok.


1
Evet, ancak bu "özel" parçalar hakkında, bunlara erişebildiğiniz için, etraflarında daha iyi bilmeyen bazı geçici çözümleri / kısayolları hacklemek cazip gelebilir.
JohnDoDo

@JohnDoDo C # veya Java'da privatealanları publickesmek için dönüştürmeye karar verirsem ne fark eder ? BTW, Python'da, özel yapmak için özelliğe bir alt çizgi ile ön ek ekleyebilirsiniz (gerçekten gizli olmasa da)
OnesimusUnbound

4

İki farklı birkaç nokta vardır. Bir çocuğu yetiştirirken, içinde sadece güvenli şeyler olan bir baloncuğa mı koymalı ya da yolculuk edip düşebilecekleri bahçede oynamasına izin vermeli misiniz?

Baloncuğun içinde olmak çok kısıtlayıcı. Çalışması için kodunuzu çok özel bir şekilde yazmanız gerekir. İnsanlar ilk başladığında, kişinin istediği şeyi yapmak için orada olmayan her şey savurgan olarak görülür. Bu da "Neden orada olduğunu bilmiyorum, ama birisi bana bunun gerekli olduğunu söyledi."

Python'da bu mevcut değil. "Merhaba Dünya" demek istiyorsanız, sadece print "Hello World". Python'u bir giriş noktası olarak kullanmak, birinin yere koşmasına ve sadece istediklerini yapmak için ihtiyaç duyduğu kodu yazmasına izin verir. İlk kez programlayıcı, programlamanın temellerini anlamadan önce kapsüllemenin değerini anlayamaz.

Ayrıca, küçük programlarda, tip güvenliği büyük bir sorun değildir. Yeni bir geliştiricinin yazdığı kod küçük ve içerilecek. Daha büyük bir kod tabanına sahip olana kadar, soyutlama katmanları olarak kullandığınız ve aktif olarak düşünmediğiniz birçok bölüme sahip değildir, tip güvenliği, ihtiyacınız olan şeyi yapmanızı sağlamanın faydalarını gösterdiğinde. Tüm kod aynı dosyadayken, sadece işleve bakıp neyi yanlış yaptığınızı görmek daha kolaydır.

Diğer avantajlar:

  • Birçok şey yapan çok sayıda kütüphane
  • Hem Nesne Odaklı hem de Fonksiyonel programlama tekniklerini biri diğerini yapmak için tasarlanmış bir dile sığmaya zorlanmış gibi göstermeden öğretme esnekliği.

3
Karşı benzetme: Çocuğunuza ateşle oynamamayı öğretin. 1) Onunla konuşabilir, yangının ne olduğunu ve yangının ne yaptığını açıklayabilir, PowerPoint slaytlarını ne olursa olsun gösterebilirsiniz .. veya 2) ateşle oynamasına ve yanmasına izin verin. İkinci yöntem gerçekten çok daha verimlidir. İlgilendiğim şey, evi ateşe verebileceği veya hatta beğenebileceği ve piromanyak olabileceği olasılığıdır, çünkü hiçbir güvenlik önlemi alınmamıştır. Çok aşırı bir durum ama gerçekten kelimelerle ifade edemiyorum.
JohnDoDo

1
@JohnDoDo - Öyleyse yakılmasına izin ver ... bu en iyi okul ve kim çocukken bir maçta yakılmadı? Onu öldürmeyecek ...
Rook

1
@JohnDoDo: Dilin ateşle oynamanıza izin vermesi, öğretmenin ateşin çok tehlikeli olduğuna işaret etmediği ve bundan kaçınmanın bir yolunu açıkladığı anlamına gelmez. Sanırım eksik olan bir diğer şey de birinin bir dile bağlı olmaması. Programlamayla temel bir anlayışa kazandıktan sonra, onlar olabilir (binayı yakıp değil gibi) daha büyük kavramları öğrenmek için farklı bir dil kullanırlar.
unholysampler

3

Python yeni başlayanlar için harika bir dildir çünkü basit şeyleri basitleştirirken, gereksiz bir oyuncak dili olarak görülmemesi ve hatta gelişmiş programcılar bile bazı işler için doğru araç olduğunu bulmayı mümkün kılar. Özellikle, basit şeyler şunları içerir:

  • Basit programlar için mutlak minimum kazan plakası kodu.

  • Çöp toplama.

  • Dinamik yazma.

  • Temiz, basit sözdizimi.

Örneğin, Java veya C ++ ve "Merhaba dünya" programında yer alan tüm kavramları açıklama zorluğu ile karşılaştırın. Karmaşık şeyler şunları içerir:

  • İçgözlem (Python yansımayla eşdeğerdir).

  • Maymun yama.

  • Büyük standart kütüphane ile yapılabilecekler.

Bununla birlikte, sadece Python'u bilen kimse iyi bir programcı değildir, çünkü sadece herhangi bir dili veya bir dil stilini bilen kimse iyi bir programcı değildir. Programlama konusunda ciddi olan herkes sonunda akış kontrolü, özyineleme ve diğer temel bilgileri almaya çalışırken değil, daha düşük bir şey öğrenmelidir.


2

Python'u iyi bir seçim olarak görüyorum. Genellikle "giriş" seviye programlama için basit ama üretken bir şey istersiniz. Hızlı geri bildirim almak hem motivasyonu hem de öğrenme hızını destekler. Bunun "doğru yolu" öğrenmek değil, "yaşam için programlamaya bağımlı olmak ve aşık olmak" olduğunu söylemeye cesaret ediyorum. Gerisi daha sonra deneyim, orta öğretim, her neyse güzel bir şekilde ortaya çıkacak.


1

IMHO, insanlara "güvenli" dillerde kod yazmayı öğretmek çok kötü bir fikir. İnsanlar her şeyin kolay olduğunu varsayarlar ve sadece kod katmanları ve katmanları eklemeyi düşünürler. Ve ortaya çıktıklarında problemleri hata ayıklama / çözme şansını kaybederler.

İyi programcılar kesinlikle C / C ++ ve hatta montajı bilmelidir. Zihniyetleri de o taraftan gelmek zorunda. Ve değil - "Ah, GC, sihir yapıyoruz (tm) biz iyiyiz ve C ++ 'da neden GC yok, aptalca." tutum.


1

Yeni başlayan bir programcı için statik türlerin olmaması bir özelliktir, bir hata değildir!

Programlamayı öğrenirken en bariz şeyleri bile anlamak zor olabilir. Dinamik tip sistemler çok basittir ve giriş dersindeki modülerleştirme, kontrol akışı vb. Gibi daha acil konuların dışına çıkmaktadır.

Bir eğitim ortamında dinamik yazmanın bazı kavramsal avantajları da vardır:

  1. Türler, değişkenlerle değil değerlerle ilişkilidir. Bu, programların gerçekten çökmesinin nedenini yansıttığı için tartışmasız daha sezgiseldir.

  2. Hata mesajları çok daha acil ve somuttur. Python'da güzel bir yığın izlemesi ve aslında neyin yanlış gittiğini belirten bir mesaj alırsınız. Statik olarak yazılan dilinde ne diyerek bir derleyici uyarı almak istiyorum yanlış.

    Bir derleyici ile çalışan öğrenciler, tam olarak anladıkları programlar üzerinde çalışabilirler, çözemedikleri bir derleme hatasıyla karşılaşmazlar.

  3. Çalışma zamanı hata denetimi, eksik programları çalıştırmanıza izin verir. Bu, öğrencinin ilk olarak programın başlangıcını doğru yapma konusunda endişelenebileceği ve ancak ne olduğunu göreceği daha artımlı programlara izin verir.

  4. Parametrik polimorfizm ve ördek tipleme gibi bazı önemli kavramlar dinamik bir dilde ücretsiz olarak sunulur, ancak statik bir dilde daha karmaşık tip sistemler gerektirir.

Son olarak, yine de aynı karmaşıklığı ele almanız gerekirken, programlamaya başlarken statik yazmanın tüm avantajlarından yararlanamazsınız:

  • Başlangıç ​​programları küçüktür ve çok fazla kod yoluna sahip değildir (bu nedenle, nadiren erişilen kod parçalarındaki tür hataları hakkında endişelenmenize gerek yoktur)

  • Yeni başlayanlar, üst düzey arayüzler ve fonksiyonlar kullanmazlar, bu nedenle "programı tasarlamak için tip sistemini kullanın" bölümünde kazanacak çok fazla şey yoktur.


1

Bir tane var, çok , çok ,Herkesin göz ardı ettiği programcılara başlamak için Python hakkında çok önemli bir şey var: Geçerli girintiyi zorlamak.

Diğer yorumcular gibi ben de yeni başlayanlara birkaç yıl öğrettim. Bunun gibi şeyleri görmek inanılmaz derecede yaygındı:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

Şimdi bu korkunç tutarsızlığın yaklaşık yüz satırlık kod üzerinde olduğunu düşünün. Bazı öğrenciler için tüm projelerinin tamamı böyle görünüyordu.

Bunu nasıl başardıklarına dair hiçbir fikrim yok ve onları hiç rahatsız etmedi. Her sorduğumda, yanıtları "Önemli değil, çünkü derleyici bunu çözecek." Girintiyi düzelterek onlara açık bir hata göstersem bile, hala bir ipucu asla.

Python'da bu tür girinti sadece geçersizdir. Biraz tutarsız olsa bile en azından okunabilir bir şey kullanmaya zorlanıyorlar. Onlara, başka bir dil öğrendiklerinde umarım devam edecek bir alışkanlık verir.


0

Python, yukarıda belirtilen nedenlerin çoğu için mükemmel bir ilk dildir. Özellikle, birinci dilin bir gereksinimi Python'un sahip olduğu nazik bir öğrenme eğrisidir. Başlamak için sınıflarla ilgili her şeyi bilmek zorunda değilsiniz. Bu bakımdan, çoğumuzun başlattığı Temel gibi biraz.

Bir şey olmamıştır şimdiye kadar vurgulanmıştır birçok dil nazik öğrenme eğrisi vardır, ancak daha gelişmiş şeyler yapmak çalışırken hızlı bir tuğla duvar çalıştırmak olmasıdır. Old-Basic Basic bunun iyi bir örneğidir. Python ile, başka bir dilin daha iyi bir seçim olabileceğini hissetmeden önce çok gelişmiş şeylere girebilirsiniz.

O zamana kadar yeni başlayanlar seçimler ve ödünleşimler hakkında daha fazla şey anlayabilir ve C / C ++, Java, Assembler, Prolog, Lisp, vb. İçin hazırdır. Aslında, Lisp de oldukça sade olmasına rağmen iyi bir ilk dil olabilir !


-1

İlk dil olarak Python ile ilgili en önemli sorun, dinamik yazım ve değişken bildirim eksikliğidir. IMHO onlar dil ile ilgili tek büyük sorun.

Değişken foo'da bir dize saklayacağımı söyleyen bir satırın basit bir şekilde eklenmesi, programcıya, geliştirme ortamına, dile (ve "profesyonel kod" için soğuk algınlığı ve daha sonra desteklemesi gereken fakir aptalı izin verir) birlikte çalışmak. Normal geliştiriciler ve yeni başlayanlar için, özellikle birden fazla tip için bir değişken kullanmak mantıklı değildir. Dinamik yazmaya izin veren açık bir var / object türünü kullanmak mantıklı olduğunda nadiren de olsa sorun olmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.