PROGRAMLAMA DİLİ VE TÜRLERİ

Bir programlama dili, bilgisayar programları yazmak için resmi bir işaret sistemidir. Bir programlama dili, bir dizi sözdizimsel, sözdizimsel ve anlamsal kuralı tanımlar. görünüm Uygulayıcının (bilgisayarın) kendi kontrolü altında gerçekleştireceği programlar ve eylemler.

Zorluk, bilgisayarın sadece 1'ler ve 0'lar içermesidir: sadece 0'lar ve 1'ler konuşmaya çalışın, bana bazı haberler vereceksiniz. 😉. Bir bilgisayarla konuşmak için bir "tercüman" kullanmalısınız. Birçok "çevirmen" vardır ve her "çevirmenin" kendi dili vardır. Böylece bilgisayar dilinde değil, "çevirmen" dilinde yazacaksınız. Söylediklerinizi anlayan bir çevirmen, hepsini bilgisayar için tamamen anlaşılabilir olan 0'lara ve 1'lere dönüştürür.

Bilgisayarla tartışma yok, bu bir monolog. Biz lideriz ve emir veriyoruz. Ona itaat ediyor. Bu emirlere talimat denir. Bu nedenle, bir program gibi bir dizi talimattır.

  • Kullanıcının adını girebileceği alanı görüntüler.
  • Kullanıcı kapat düğmesine tıklarsa, program kapatılır.
Görüyorsunuz, talimatlar açık. Bilgisayar tam olarak ne yapacağını bilir.

Üst düzey bir programlama dili, programcı tarafından hız ve kullanım kolaylığı için tasarlanmış bir programlama dilidir. Üst düzey dillerin temel özelliği soyutlamadır, yani bu tür veri yapılarını ve üzerlerindeki işlemleri kısaca tanımlayan anlamsal yapıların tanıtılmasıdır, bu tür veri yapılarını ve bunların üzerindeki işlemleri, makine kodunda (veya başka bir düşük düzeyli programlama dilinde) açıklamaları çok uzun ve anlaşılması zor.

Yorumlanmış dil nedir?

Programlama dili, tüm bu talimatları "çevirmenin" anlayabileceği bir dilde yazmamızı sağlayacaktır. Tercüman daha sonra bunları bilgisayarın anlayabileceği ve çalıştırabileceği 0'lara ve 1'lere dönüştürür. Bu talimat dizisinin tamamı "kaynak kodu" olarak adlandırılır.


Temel olarak 2 tür "dil" vardır. İki ana çalışma modu vardır. Derlenen diller tarafından yorumlanan diller. ... Yorumlanmış dil, bir talimatın her satırının yürütülmek üzere okunduğu ve tercüme edildiği dildir. Bunun çalışması için, yorumlayıcının kaynak koduna erişimi olmalıdır.

Düşük seviyeli programlama dili (düşük seviyeli programlama dili), kullanılan gerçek veya sanal (örneğin, Java, Microsoft .NET) işlemcinin makine kodlarında doğrudan programlamaya yakın bir programlama dilidir. Anımsatıcı gösterim genellikle makine talimatlarını belirtmek için kullanılır. Bu, komutları ikili sıfırlar ve birler dizisi biçiminde değil, insan dilinde (genellikle İngilizce) kelimelerin anlamlı kısaltmaları biçiminde ezberlemenizi sağlar.

Derlenmiş dil nedir?

Bütün bunları aşağıdaki gibi hayal edebiliriz. Bu diyagramda görüyoruz. Bu nedenle bunu anlamak kolaydır. Dizeler gerektiği gibi okunur ve çevrilir, kaynak kodu bilgisayarda bulunmalı, yorumlayıcı da bilgisayarda bulunmalıdır. Derlenmiş bir dil ile durum farklı. Geliştirici yazılım derleme adı verilen bir işlem gerçekleştirecek. Derleyici adı verilen özel bir yazılımdan gerçekleştirilen bu işlem, tüm kaynak kodunu makine koduna dönüştürür.

DÜŞÜK DÜZEY PROGRAMLAMA DİLLERİ

İlk bilgisayarlar ikili makine kodlarıyla programlama yapmak zorundaydı. Ancak bu şekilde programlama oldukça zahmetli ve karmaşık bir iştir. Bu görevi basitleştirmek için, makine talimatlarını daha insan tarafından okunabilir bir biçimde ayarlamayı mümkün kılan düşük seviyeli programlama dilleri ortaya çıkmaya başladı. Bunları ikili koda dönüştürmek için özel programlar - çevirmenler oluşturuldu.

Yorumlanmış dil ve derlenmiş dil: farklar nelerdir?

Yazılımı bilgisayarınızda çalıştırmak için yalnızca bu yürütülebilir dosyaya ihtiyacınız vardır. İşte hepsini özetleyen bir şema. Yazılım geliştirici tarafından her değiştirildiğinde, program yeniden derlenmelidir. Yorumlanmış dil, derlenmiş dil: her ikisinin de avantajları ve her ikisinin de dezavantajları vardır.

Yorumlanmış bir dilin avantajı taşınabilirliği, yani farklı türler üzerinde çalışabilme yeteneğidir. Öte yandan, yorumlanmış bir dilin temel dezavantajı hızıdır. Nitekim, gördüğünüz gibi, yorumlayıcı kaynak kodunu satır satır çevirir ve bu biraz zaman alır. Yorumlanmış bir dil her zaman derlenmiş bir dilden biraz daha yavaştır. Son olarak, kaynak kodunu çalışacağı bilgisayara göndererek, yazılım kopyalamaya karşı daha az korunur ve kaynak kodu değiştirilebilir.

Şekil 1. Bir makine kodu örneği ve montajdaki gösterimi

Çevirmenler aşağıdakilere ayrılır:

    derleyiciler - program metnini kaydedilebilen ve daha sonra derleyici olmadan kullanılabilen makine koduna dönüştürür (örnek, *. exe uzantılı çalıştırılabilir dosyalardır);

    tercümanlar - bir programın bir bölümünü makine koduna çevirin, çalıştırın ve ardından bir sonraki bölüme geçin. Bu durumda, yorumlayıcı program her çalıştırıldığında kullanılır.

    Ama aynı zamanda hız ve işlevsellik açısından daha verimli hale getiriyor. Ve son olarak, tam anlamıyla "karışık" diller var. Bu diller bayt kodu ile derlenir ve bu bayt kodu şu şekilde yorumlanacaktır: uzak bilgisayar... Bu makalenin ikinci bölümüne bir göz atalım.

    Bunları Bulgaristan'da mükemmele taşıyabilir ve bir kariyer yapabilirsiniz. En çok ihtiyaç duyulan programlama dillerini mükemmelleştirmek için Amerika Birleşik Devletleri'nde olmanıza gerek yok - terimler Bulgaristan'da da mevcuttur. Programlama ve yazılım yenilikleri çağı yeni başlıyor! ABD Çalışma İstatistikleri Bürosu'na göre, BT işleri önümüzdeki yedi yıl içinde% 8'e kadar büyüyecek. Ve bu rakam şu anda binlerce işe alındığında, artış gerçekten somut olacak.

Düşük seviyeli bir dile örnek, assembly'dır. Düşük seviyeli diller belirli bir işlemci türüne odaklanır ve özelliklerini hesaba katar, bu nedenle, bir programı birleştirme dilinde başka bir donanım platformuna taşımak için neredeyse tamamen yeniden yazılmalıdır. Farklı derleyiciler için program sözdiziminde belirli farklılıklar vardır. AMD ve Intel'in bilgisayarları için gerçek, merkezi işlemciler pratik olarak uyumludur ve yalnızca bazı belirli komutlarda farklılık gösterir. Ancak diğer cihazlar için özel işlemciler, örneğin video kartları, telefonlar, önemli farklılıklar içerir.

Alandaki her uzman için bilişim Teknolojileri iyi ve uygun eğitim şarttır. Ve Amerika ve Bulgaristan'ın yadsınamaz hakimiyetine rağmen, genç ve hırslı insanların hızla büyüyen sektörde iyi bir eğitim ve kariyer almaları için harika bir yerdir. Bu, Bulgaristan'daki bilişim sektörünün dinamik ve hızlı bir genişlemesidir ve bir dizi uzmanlaşmış eğitim kurumunun oluşturulmasını gerektirir. Bu, programlamanın bir geleceğinin ve sınırları içinde olduğunun kesin bir işaretidir.

Başarıya ulaşmak için ABD'de olmanız gerekmediğini garanti ediyoruz. Bu, geliştiricilerin farklı ve çok sayıda kullanıcının ihtiyaçlarını karşılamasına olanak tanır. Ayrıca diğer programlama dillerini kullanmadan eksiksiz web uygulamaları oluşturabilir. Birisi bir programcı olarak kariyer yapmaya karar verdiyse, hizmet portföyünün her zaman güncel olması için programlamadaki mevcut eğilimleri takip etmek yalnızca onun yararınadır. Elbette diller sadece eğlence için öğretilebilir.

Faydaları

Geliştirici, işlemcinin tüm yeteneklerine erişim kazandıkça verimli ve kompakt programlar oluşturmak için düşük seviyeli diller kullanılır.

Dezavantajları

    Düşük seviyeli dillerle çalışan bir programcı son derece nitelikli olmalı ve programın kendisi için oluşturulduğu mikroişlemci sisteminin yapısını iyi anlamalıdır. Dolayısıyla, bir bilgisayar için bir program oluşturulmuşsa, bilgisayarın yapısını ve özellikle işlemcisinin cihazını ve özelliklerini bilmeniz gerekir;

    Özetle bu, belirli bir programlama dilinin popülerliğini gösteren bir değerdir. Endeks ayda bir güncellenir ve her dilin konumu, onunla dünya çapında çalışan deneyimli programcıların sayısına göre belirlenir, bu dillerde kurslar sunar ve elbette bu dilde kaç tane üçüncü şahsın piyasada çalıştığını da söyleyecektir. Kesin metodoloji burada açıklanmaktadır.

    Ama sıralamaya geçelim. Ancak uygulamalar oluşturmak için de kullanılabilir. Yıllık değişim% -0,70 oldu. Yetenekleri nedeniyle gömülü platformlarda da popülerdir. ... Her yıl bir adam sıralamada zıplar ve en çok olanı alır.

    ortaya çıkan program, farklı bir işlemci türüne sahip bir bilgisayara veya cihaza aktarılamaz;

    büyük ve karmaşık programlar için önemli geliştirme süresi.

Düşük seviyeli diller, kural olarak, küçük sistem programları, aygıt sürücüleri, standart olmayan ekipmanlarla arabirimler için modüller, özel mikroişlemcileri programlamak için kullanılır; en önemli gereksinimler kompaktlık, hız ve donanım kaynaklarına doğrudan erişme yeteneği.

Hangi dili bölmek isterse istesin, kesin olan bir şey var - hevesli bir programcı yılda en az bir yeni dil öğrenmeli ve bilmelidir. Yerleştirme kolaylığı için değil, sorunlara yeniden yeni bir açıdan bakmak için.

Bir paket birkaç dosyadan oluşabilir ve dosyaların kendilerini ve bulundukları alt dizinleri adlandırırken sabit bir kurala uymak gerekli değildir. Yine kural, paket adının, paket kaynağının bulunduğu dizine dayanmasıdır.

Kütüphanelerin nasıl derlendiğine bir örnek verelim. İlke, işin tüm alt dizinlerini bulmak, bazı dosyalar içerip içermediğini kontrol etmektir ve eğer varsa, her dizindeki dosyalar bir paketten yapılmıştır. Yavaş yavaş, ayrı pencereler aracılığıyla pong paketinin uygulanmasını tartışıyoruz. bu bir dosyadır. Herhangi bir dosyada olduğu gibi, bu da bir paket bildirimi ile başlamalıdır. Ama ithalat burada farklı görünüyor, değil mi?

Assembler, günümüzde hala yaygın olarak kullanılan düşük seviyeli bir dildir.

ÜST DÜZEY PROGRAMLAMA DİLLERİ

İlk üst düzey programlama dili dikkate alınır bilgisayar dili Plankalkül, 1942-1946 döneminde Alman mühendis Konrad Zuse tarafından geliştirildi. Ancak, bunun için bir çevirmen 2000 yılına kadar yoktu. Dünyanın ilk üst düzey dil çevirmeni PP (Programlama Programı), yani PP-1, 1954'te başarıyla test edildi. PP-2 çevirmeni (1955, dünyada 4. translator) zaten optimize ediyordu ve kendi yükleyicisini ve hata ayıklayıcısını, standart prosedürler kitaplığını ve Strela-4 bilgisayarları için PP tercümanı modüllerden bir bağlayıcı içeriyordu. Bununla birlikte, yüksek seviyeli dillerin yaygın kullanımı, Fortran'ın ortaya çıkması ve bu dil için bir derleyicinin oluşturulmasıyla başlamıştır (1957).

Yalnızca bir paketi içe aktarırsak, kesilmiş formu kullanabiliriz; daha fazlasını istersek, parantez ekler ve paketleri noktalı virgüllerle ayırırız. Yazarının verdiği paket adını beğenmezsek yeniden adlandırabiliriz.

İthalat. Veya bir paketten dışa aktarılan her şeyi o dosyanın ad alanına aktarabilirsiniz. Yeni oluşturulan türün adı, tür yan tümcesinden hemen sonra belirtilir. Bu bir tanımlayıcıdır ve diğer her şey gibi, büyük harfle başlarsa, paketten ihraç edildiği doğrudur.

Üst düzey diller, yalnızca karmaşık programlama sorunlarının çözümünü kolaylaştırmakla kalmaz, aynı zamanda yazılımın taşınmasını da basitleştirir. Çeşitli çevirmenlerin ve tercümanların kullanılması, üst düzey dillerde yazılmış programların farklı kişilerle iletişim kurmasını sağlar. işletim sistemleri ve donanım, kaynak kodu ideal olarak değişmeden kalır.

Bu türün adı tanımına uyar. Yukarıdaki kodda iki tür tanımlanmıştır - blok ve pong. Arabirim, arabirimi uygulayan türlerde hangi işlevlerin çağrılabileceğini tanımlayan soyut bir türdür. Bu boş bir arayüzdür - tipte bir fonksiyon çağırmayı gerektirmez.

Bu arayüz tüm türlerle eşleşir. Yapı, diğer veri türlerini bir nesne ile ilişkilendiren bir veri türüdür. Yapılar, her biri kendi adı ve türü olan üyelerden oluşur. Pong, masa tenisi masası hakkındaki bilgileri saklayacaktır. Yöntemler, işlev anahtarı ve yöntem adı arasında, açıkça "this", yöntemin çağrılabileceği değerin adı ve türüdür. Arayüzler bu şekilde uygulanır.

Bir bilgisayarın donanım uygulamasından yüksek seviyeli dillerin bu tür bir izolasyonu, birçok avantaja ek olarak, dezavantajlara da sahiptir. Özellikle kullanılan ekipman için basit ve kesin talimatlara izin vermez. Yüksek seviyeli dillerde yazılan programları programcı için anlaması daha kolaydır, ancak düşük seviyeli dillerde yazılan muadillerine göre daha az etkilidir. Bunun sonuçlarından biri, bir dizi modern profesyonel üst düzey programlama dilinde bir veya daha fazla düşük seviyeli dil (montaj dili) desteğinin eklenmesiydi.

Burada kullanılmaz, ancak onları adlandırmak için kullanılır, ancak önerilen prosedürdür çünkü ne olduğunu belgelemektedir ve herhangi birinden daha anlamlı. Boğazlar için endişelenmeyin, her şey optimize edildi, böylece 100.000'i gözünüzü kırpmadan yaratabilirsiniz ve hiçbir şey olmaz. Kanallar, yakıtları iletmenin bir yoludur.

Şimdi ona mutlu bir şekilde değerler atayabiliriz. Operatör: \u003d bu iki adım bire sıkıştırılabilir - ifadenin dönüş türüne göre değişkenin türü operatörün sağından çıkarılır, onu "bildirir" ve değerlendirilen ifadenin değerini atar. Ancak, şimdi bir değişken oluşturulmaktadır, bu nedenle herhangi bir ek atama zaten \u003d operatörü tarafından sağlanmıştır.

Örnekler: C, C ++, C #, Java, Python, PHP, Ruby, Perl, Pascal, Delphi, Lisp... Üst düzey diller, karmaşık veri yapılarıyla çalışma yeteneğine sahiptir. Çoğunun dizi türleri, nesneler, dosya G / Ç işlemleri vb. İçin entegre desteği vardır.Yüksek düzey dillerin dezavantajı, programların düşük düzeyli dillerdeki programlardan daha büyük olmasıdır. Bu nedenle, yüksek seviyeli diller, büyük miktarda belleğe sahip bilgisayarların ve cihazların yazılım geliştirmesi için kullanılır. Program boyutunun kritik olduğu diğer cihazları programlamak için farklı montajcı alt türleri kullanılır.

İşte daha klasik bir bölüm - başlıkta noktalı virgülle ayrılmış üç bölüm var: çekim; durum; her yinelemede, bu vücutta yapılır. Sonra pongu bitiririz, böylece beklenen sıfır kanalı yerine göndeririz ve bittiğini kanala imzalarız.

Pong ambalajında \u200b\u200bbulabildiğimiz tek şey bu. Her zamanki gibi dosya, ait olduğu paketi tanımlayarak başlar. ithalat da net. Yönetilen bir programın yönetilmesi için bazı parametreleri tanımlar komut satırıbayraklar paketindeki araçları kullanarak.

Zorunlu diller, eylemlerin matematiksel formüller biçiminde temsil edilmesi, veri türü kavramı ve yapısal dönüşüm teoremi dahil olmak üzere birkaç önemli fikre dayanmaktadır.

Zorunlu dilde bir program, işlevlerden (alt yordamlar) oluşturulur. Assembly dili programları aynı zamanda alt rutinlerden oluşabilir ve bu yeni bir şey değildir, ancak yüksek seviyeli diller çağrı organizasyonu, ilk verilerin aktarımı ve sonuçların geri dönüşü gibi konuları düşünmemenize izin verir. İşlev açıklaması, bir ad, bir parametre listesi (ilk veriler), sonucun türü ve bu sonucun alınmasına yol açan eylemlerden oluşur. Programın işlevlerinden biri ana işlevdir, yürütülmesi programın çalışmasıdır.

Şef yardım etmeyi denemek isteyip istemediğimizi kontrol edecek ve öyleyse bunu bize göstereceğiz. Bir programı derleyip yayınladığımızda. Go'yu çevreleyen pek çok tartışma var. Doğru, kimse korumuyor. Sert sınıf hiyerarşileri çok önemlidir. Sadece birkaç durumda böyle bir hiyerarşinin uyacağı böyle bir şey bulacaksınız. Bununla birlikte, bugün bu taksonomide yer alan bir eğilimle, bu örnek tamamen kötü değilse de oldukça belirsizdir. Zaman zaman birkaç lider grup vardı - imparatorluklar; hayvanlar, bitkiler vb. ve bazı araştırmalar, hayvanlardan veya bitkilerden çeşitli organizmaların belirli koşullar altında yaşam biçimlerini tamamen değiştirebileceğini göstermiştir.

Basit bir örnek, bir sayının sinüsünü hesaplayan bir fonksiyondur. Günah olarak adlandırılabilir, ilk verileri bir gerçek sayıdan oluşur, sonuç aynı zamanda bilinen bir sonsuz dizinin bir parçasını toplayarak (veya matematiksel işlemcinin fsin komutunu çalıştırarak) elde edilen gerçek bir sayıdır.

Bir işlevin içinde gerçekleştirilebilecek eylemler dizisi çok sınırlıdır. Formül ifadelerinin hesaplanmasından, diğer işlevlerin çağrılarından (bu ayrı bir eylem değildir - bir işlev çağrısı genellikle bir ifadeye dahil edilir), atamalardan, dallara ayırmadan (yalnızca belirli bir koşul doğruysa yürütülen bir eylemler grubu) ve döngülerden (birden çok kez gerçekleştirilen bir eylemler grubu, sayı tekrarlar bazı koşullara bağlıdır). Eylemler birbirinin içine yerleştirilebilir. Dallar ve ilmekler kümesi çok küçük görünebilir, ancak öyle değildir. Fonksiyonel bloklardan (düşük seviyede - aritmetik komutlar ve veri aktarım komutları), koşullu ve koşulsuz geçişlerden oluşan herhangi bir algoritmanın, yalnızca yapı bloklarından - fonksiyonel bloklar, dallar ve döngülerden oluşan eşdeğer bir algoritmaya dönüştürülebileceği kanıtlanmıştır. son. Bu ifade, Corrado Bohm ve Giuseppe Jacopini'nin (Communications of ACM, Cilt 9 / Sayı 5 / Mayıs, 1965) "Akış diyagramları, turing makineleri ve yalnızca iki oluşum kuralına sahip diller" makalesinde formüle edilmiştir.

Gerekli eylemleri gerçekleştirmek için ara sonuçları bir yerde saklamanız gerekirse, işlevin içine değişkenlerin adlarını ve muhtemelen diğer bilgileri içeren özel açıklamalar yerleştirilir. RAM hücrelerinin adresleri bunlara otomatik olarak atanacaktır. Bazı diller, işlevler içinde sabit ve tür tanımları da içerebilir. Pascal benzeri dillerde, bir işlev bir program gibidir ve yalnızca sabitlerin, türlerin ve değişkenlerin değil, diğer işlevlerin de tanımlarını içerebilir.

Veri bildirimi, adlandırılmış nesnelerin bir listesidir. Bu nesnelere değişkenler denir. Bazı dillerde, onu yerleştirmek için gereken bellek miktarını ve katılabileceği işlemler kümesini belirleyen bir değişkenin türü ayarlanmalıdır. Ancak bu zorunlu değildir, değişkenin türünün belirtilmediği ve programın yürütülmesi sırasında değişebileceği diller vardır.

Tipik olarak, programlama dilleri oldukça sınırlı sayıda önceden tanımlanmış değişken türleri ve yeni türler yaratmanın bir yolunu sağlar. Aşağıdaki türlerden bazıları önceden tanımlanmıştır:

    çeşitli büyüklüklerde doğal ve tam sayılar;

    gerçek sayılar;

    semboller - harfler, sayılar, aritmetik işlem işaretleri vb.

    karakter dizileri;

    boole değerleri;

    işaretçiler

Veriler üzerinde eylemler, işlevler ve operatörler kullanılarak gerçekleştirilebilir.

Örneğin C dilinde, semboller, dizeler ve booleler tanımsızdır. Karakter türü aslında kısa bir tam sayıdır ve aritmetik olabilir.

Yeni türler, tek bir bütün halinde aynı türden birkaç öğenin (dizi, öğelerinin her birinin bir seri numarasına sahiptir) veya farklı türlerdeki öğelerin (yapı, öğelerinin her birinin kendi adı vardır) birleştirilmesiyle oluşturulur. Örneğin, çoğu dilde karmaşık sayılar tanımlanmaz, ancak tanımlanabilirler:

Bazı dillerde (örneğin, C ++ 'da), operatörler de oluşturulan tipler için tanımlanabilir, bu da bu tiplerin değişkenlerini önceden tanımlanmış tiplerin değişkenleriyle aynı şekilde kullanmayı mümkün kılar.

Yeni türler yaratmanın başka yolları da var. Örneğin, Pascal'da şunları oluşturmak mümkündür:

    aralık türleri (bir değer aralığı belirterek);

    numaralandırma türleri (olası değerleri sıralayarak);

    türleri ayarla

Tür kümelerinin değişkenleri, bazı nesnelerin bir dizi özelliği hakkında bilgi depolamak için kullanılabilir. Bunun gibi bir şey, bitleri karşılık gelen özelliklerin varlığını gösterecek şekilde ayarlanmış tamsayı değişkenleri kullanılarak yapılabilir. Görünüşe göre, set kullanmak programcı hatalarına karşı daha sağlamdır.

Çeşitli programlama dilleri ve uygulama alanları. Yandex'de ders

Bu yılki ilk gönderimizi, Small SHAD'de anlatılan çok temel bir konuya ayırmaya karar verdik. Teknolojiye ilgi duyan lise öğrencileri, bu nedenle sunumun özgüllüğü ile ilgilenmektedir - ders, programlamaya yeni başlayan ve gelişmenin yönü hakkında düşünenler için özellikle ilginç olacaktır. Onlar için Yandex'in Stepic.org platformunda alınabilecek "Programlamaya Giriş (C ++)" kursu vardır.

Öğretim Görevlisi Mikhail Gustokashin - Yandex'de akademik programların küratörü, Öğrenci Olimpiyatları Merkezi'nin yöneticisi, Bilgisayar Bilimleri Fakültesi, HSE. Mikhail, Tüm Rusya Programlama Olimpiyatlarının düzinelerce kazananını ve ödülünü kazananları eğitti.

Ders kapsamında programlama dillerinin ne olduğu, nasıl farklılaştıkları, nasıl ortaya çıktıkları ve hangilerinin daha iyi hangilerinin daha kötü olduğu anlatılır. Başlangıçta dillerin tarihi hakkında biraz konuşacağız - nasıl ortaya çıktıkları, insanların nasıl programlamaya başladıkları, her şeyin nasıl geliştiği, şimdi neler olduğu. İkinci bölümde, hangi dilin hangi görevler için uygun olduğu, “en sevdiğiniz dili nasıl seçeceğiniz ve hayattan nasıl keyif alacağınız” konuları ele alınacaktır. Öğretim görevlisi, kendi görüşüne göre tüm bunları nasıl öğreneceği ve sonra bir iş bulacağı hakkında da biraz konuşacak.

Her zaman olduğu gibi, kesimin altında, içeriğinde gezinebilmeniz için dersin ayrıntılı bir metni bulunur.

Programlama dillerinin tarihi

Hadi baştan başlayalım. Başlangıçta bilgisayarların klavyesi bile yoktu! Yani, her şey çok kötüydü - klavyeleri veya ekranı yoktu, kartları deldiler (bunlar delikli veya deliksiz şeylerdir). Buna göre, ya iğneler oraya itildi ya da orada ışıkla parladılar. Bir delik varsa (veya tam tersi yoksa) - sıfır veya bir anlamına geliyordu. Ve o zamanki programlar makine kodları kullanılarak yazılıyordu - bilgisayardaki her işlem (toplama, çıkarma, bazı daha karmaşık işlemler) bir tür makine koduna sahipti. İnsanlar etiketin üzerinde bu kodu seçtiler, hafızadaki her türden adres, hepsini elleriyle kaldırıp okuyucuya ittiler - ve hepsi sayıldı. Tabii ki, bir programcının işi o zamanlar muhtemelen çok ilginç değildi - delikler açmak - ve bilim ve teknolojinin gelişmesiyle, elbette, her türden daha "ilginç" şeyler ortaya çıkarmaya başladılar. Örneğin, hayatı biraz daha kolaylaştıran assembler (Assembler).

Peki hayatı nasıl kolaylaştırdı? Komut için bir tür "sihirli" kod olduğunu hatırlamak yerine, "insan" İngilizcesine benzer her tür kelime kullanıldı - bazıları add veya mov - ve daha sonra yazmaçlar veya bellek alanları, bunların birlikte kullanıldığı değişkenler işlemleri gerçekleştirmek için. Ancak bunun genel olarak, hangi kayıtta neyin yalan olduğunu, hangi değişkenlerin nerede olduğunu ve genel olarak neler olduğunu akılda tutmak için yeterince büyük miktarda zihinsel zorlanma gerektirdiği açıktır. Bu neden oldu? Çünkü bilgisayarlar "aptaldı" ve daha "akıllı" bir şey anlayamıyorlardı. Aslında, assembler'dan makine kodunu derlemek de zaman alıyor, hafıza (o zamanlar elbette yeterli değildi).

Yavaş yavaş, bu kadar büyük karmaşık programları geliştirmenin çok zor olduğu anlaşıldı. Programcının bu komutlardaki üretkenliği son derece düşüktü - yani, günde birkaç satır yazdı (anlamlı) ve her satır özel bir şey yapmadı - bazı basit aritmetik işlemler. İnsanlar, program yazmayı daha kolay ve daha rahat hale getirmek için dilleri insan diline, özellikle de İngilizceye çok daha benzer hale getirmek istediler. Ve gidiyoruz!

Eski ve ölü diller

Fortran ilk dillerden biri oldu. Bu arada, delikli kartlarda da bayıldı - Fortran programlarını devre dışı bırakmak için özel delikli kartlar vardı. Ama şimdi bu Fortran'ı alırsanız - bence 50-60 arasında bir yerde. ortaya çıktı - ve üzerine bir şeyler yazmaya çalışın, o zaman çok nahoş olacaksınız, size garanti ederim! Modern Fortran bugün hala yaşıyor, ancak eskisinden oldukça farklı.

Diğer diller - şimdi muhtemelen duymuş olduğunuz bir şeyi yazacağım, o zaman sadece programlama tarihini anlattıkları herhangi bir olayda - bu COBOL. İş uygulamaları yazmak için kullanılan bir dildi. İş uygulamaları nelerdir? Bankalardaki herhangi bir işlem, başka bir şey, bunların hepsi Kobol'da yazılmıştır. Elbette bizim için pek popüler değil. Moskova'da Kobol'da bir programcı bulamayacağınızı düşünüyorum. Ve Moskova'da olmayan bir yerde - daha büyük zorluklarla. Ancak, şaşırtıcı bir şekilde, 10 yıl önce, insanlığın yazdığı tüm kodların yarısından fazlası Cobol'da yazılmıştır. Şimdiye kadar, tüm bankacılık işlemlerinin önemli bir kısmı, içinde yazılan programlar (COBOL) kullanılarak gerçekleştiriliyor ve insanlar hala üzerine bir şeyler yazıyor.

Bir de "komik" bir dil var, buna Algol (yaratılış yılını karakterize eden 68. versiyon) deniyordu. Algoritmik bir dildir. Genelde orada bir şeyler yapabildiler ama şimdi ne yapabilecekleriyle pek ilgilenmiyoruz. Ve bunun üzerine antik çağa ve nispeten kullanılmayan dillere yolculuğumuz tamamlanabilir ve hala hayatta olan (ve aktif olarak yaşayan) şeye devam edebilir.

Eski ama yaşayan diller

Algol Avrupa'da icat edildi ve Fortran esas olarak Amerika'da kullanıldı - büyük farklar yok. Hangi eğilim görülebilir? İlk başta, her şey zordu ve yazmak için neredeyse bir mühendis, elektrik mühendisi olmanız, hangi kontakların nerede kapalı olduğunu ve programlama için başka bir şey yapmanız gerekiyordu. Sonra da yapraklarla oturup anıyı saymak, ona bakmak gerekiyordu. Ve yavaş yavaş her şey programcı için daha basit, daha basit, daha basit ve sonra daha da kolay hale geldi - bir kişi için olabildiğince az düşünmek, olabildiğince çok şeyi otomatik olarak yapmak. Bu dönemin sonlarına doğru (öğretim üyesi Algol ve Kobol'u işaret eder), diller bir anlamda bugüne kadar “ayakta kalmış” görünmeye başlar.

TEMEL. Belki bazı insanlar hala üzerine bir şeyler yazıyorlar, en azından bazı kurumlarda QBasic üzerinde ders verdiklerini gördüm - öyle mavi bir pencere ki "1989" yazıyor. Genel olarak, "kudret ve ana" ile yaşar! Programcı olmayanlar için bir dil olarak icat edildi. O zamanlar programcı çok özel bir meslekti. Ve burada size diyorlar: "Burada harika bir Temel dilimiz var ve mantıklı herhangi bir kişi ona bir program alıp yazabilir - kolayca". Yine, bu BASIC ve modern BASIC büyük bir farktır. Her 10'da bir numaralandırılmış tüm bu satırlar, her tür GOTO ve diğer korku - bunların modern BASIC ile hiçbir ilgisi yoktur ve hatta 89'un BASIC ile çok az ilgisi vardır.

Bir başka komik hikaye de, üniversite çevrelerinde, özellikle Rusya'da ve eski Sovyetler Birliği ülkelerinde yaygın olarak bilinen Pascal dilidir. Şaşırtıcı bir şekilde kullanıldı ve kullanılmaya devam ediyor dil öğretmek... Dünyanın geri kalanında daha az yaygındır, ancak aynı zamanda canlı ve iyidir. Böyle bir kişi var Wirth - işte o bir bilim adamı, bir teorisyen. Algol tartışmasına katıldı, olanlardan hoşlanmadı ve kendi dili olan Pascal'ı buldu. Ve sonra Borland firması (ve ondan önce diğer birçok firma - özellikle Apple dahil oldu) her şeyi aldı ve mahvetti. Güzel bir teorisi vardı, ince - "her şey yoluna girecek" - ve orada insanların çalışmak için ihtiyaç duydukları şeyi alıp doldurdular. Şey, onun istediği kadar iyi gitmedi.

Ve sonunda,. Xi mühendisler tarafından icat edildi. Pascal bir bilim adamı tarafından icat edildiyse, C Kernighan ve Ritchie tarafından icat edildi, Bell'de mühendis olarak çalıştılar. Bu nasıl oldu? O zamanlar bu dillerde sistematik bir şey yazmak imkansızdı (hoca, Fortran, COBOL, Algol'a işaret ediyor). "Sistemik" nedir? Örneğin, bir işletim sistemi, bazı sürücüler, başka bir şey. Bu diller matematiksel hesaplamalar, iş hesaplamaları ve bunların hepsi içindi. Ve diğer her şey Assembler'da yazılmıştır. Bazı diller vardı, artık öldüler, yani C dili Assembler'dan hemen değil, bazı ara şeyler aracılığıyla ortaya çıktı.

Öz nedir? Kernighan ve Ritchie oyuncak Asteroids oynamayı severlerdi - bir uzay gemisi uçar ve asteroitler vardır, onlara ateş eder ve dağılırlar. Oynadıkları bir sunucuları vardı, ama orada çok insan vardı ve oyuncak yavaştı. Ve ofislerinde, kimsenin kullanmadığı bir bilgisayarları olduğunu buldular. Ancak bir sorun vardı - farklı bir mimariye sahipti ve oyun Assembler'da yazılmıştı.

Elbette yeniden yazdılar, hatta oynamak için bazı özellikleri kestiler. Ancak bu, her seferinde yeni bir mimari için yeniden yazmanın pek akıllıca olmadığını düşünmelerine neden oldu. Ve sistem programlamaya uygun, yani hafızayı yönetmenin mümkün olacağı, bir şeyin nerede olduğunu ve bu hafıza parçalarına nasıl erişileceğini anlamanın mümkün olacağı yüksek seviyeli bir dil yazmaya karar verdiler. Ve böylece daha sonra her şey üzerinde büyük bir etkisi olan C dili ortaya çıktı. Hepsi (öğretim görevlisi Algol, Fortran ve diğer belirtilen dilleri işaret ediyor) büyük bir etkiye sahipti, ama C - evet ...

Buna göre, o zamanlar şimdi olduğundan daha popüler olan bir işletim sistemi olan Unix'in ana diliydi. Ve yaklaşık 80'lerde durum böyle bir şeydi (öğretim görevlisi Temel, C ve bahsedilen diğer dillerde gösterir). Diyelim ki tüm bunlar kurnazlıktan öldü (öğretim görevlisi Assembler, Fortran ve Algol'a yapılan atıfları siliyor) ... Ve 80'lerde bilgisayarlar küçüldü, daha akıllı, daha ucuz hale geldi ve insanlar daha iyi yaşamak, yaşamak için her türlü tuhaflığı istedi daha da eğlenceli.

80'lere özgü diller

İlk tuhaflıklardan biri C ++ diliydi. C dilinin çok sayıda kusuru vardır (aslında, gerçekten çok büyüktür) - bacağınıza ateş etmek, kurgu ile bacağınıza kendinizi vurmak, diğer bacağınıza bir ayağınızla diğer bacağınıza ateş etmek dahil olmak üzere her şeyi yapabilirsiniz. yapmak istiyorsun. Ama aynı zamanda, bazı mimari şeyler yapmak oldukça zor - yine, Assembler'da olduğu gibi, nerede olduğumuzu, neyi ve hangi belleği ayırdığımızı takip etmeliyiz; bu anı her zaman bir yere "akar" - yani, biz seçtik, silmeyi unuttuk, yanlış şeyi sildik, hafızamızdan çıktık, genel olarak - birçok sorunumuz var.

C ++ başlangıçta C diline geliştirmeyi kolaylaştıracak bir dizi ekleme olarak oluşturuldu. O zamanlar, nesne odaklı programlama moda oldu ve insanlar her şeyin bir hiyerarşi şeklinde tanımlanabileceğine karar verdi, yani bir topunuz var (soyut), ondan bir futbol topu, bir voleybol, başka bir soyut top miras kalıyor. O zamanlar moda idi "şimdi her şeyi bir tür hiyerarşi şeklinde yazıyoruz ve her şey yoluna girecek, hayat gelişecek, her şey yoluna girecek ve her şey." Bir anlamda, C ++ bu nesne yaklaşımını uyguladı - ilk nesne yönelimli programlama dili değildi, ancak oldukça popüler hale geldi ve içinde her türlü özellik görünmeye başladı. Aynı zamanda, C ++, C dili ile neredeyse tam uyumluluğu (o sırada) korudu, vakaların% 99'unda C ile yazılmış bir program C ++ olarak başarıyla derlendi ve hatta aynı şekilde çalıştı. Bunun amacı C'den C ++ 'ya geçişi kolaylaştırmaktı.

Nesne yaklaşımına ek olarak (C ++ 'da), Standart Şablon Kitaplığı (STL) hızla ortaya çıktı. Bence, okulda hala Pascal'ı öğretenler, her şeyden önce orada yerleşik sıralamanın olmadığını keşfetti (eski, mavi Borland Pascal'da, şimdi zaten var modern versiyonlar) - bir sıralama örneği (kaynak) var, kopyalayıp yapıştırabilirsiniz. Ama burada tam sayıları sıralamak istiyorsanız, burada gerçek sayılar istiyorsunuz ve işte birbirleriyle karşılaştırılabilecek dizeler var, tam olarak aynı şeyi yapan üç farklı tür yazmanız gerekiyor, sadece farklı veri türlerine sahipler. Bu çok iyi değil ve C ++ 'da hemen görünmeyen şablonlar bu sorunu çok daha kolaylaştırdı. Yani, birbiriyle karşılaştırılabilecek bir şeyi başarıyla sıralayan soyut bir programınız vardı.

90'ların komut dosyası dilleri

Ancak zaman durmadı, 80'lerde pek çok ilginç şey oldu. Ancak 80'lerin ve 90'ların başında bilgisayarlar o kadar iyi hale geldi ki çok tuhaf ve çok verimsiz şeyler yapmak zaten mümkündü. Özellikle, bunlar makine kodunda derlenmeyen, ancak yorumlanan komut dosyası dilleriydi. BASIC de bir ara yorumlandı, ancak bu komut dosyası dilleri esas olarak metin işleme için tasarlandı - örneğin, Perl, Python (o zamanlar pek ünlü değildi), PHP, Ruby - bunlar bir veya farklı bir dereceye kadar hala yaşıyorlar (hepsi 2000'den önce, hatta daha önce ortaya çıkmayı başardılar).

Biraz gözden geçirelim, çünkü bunlar belirli şeyler ve şimdi birçok yerde kullanılıyorlar. Fikir nedir? Derlemezsek, çok daha fazlasına izin verilebilir. Örneğin, bir program koduna bakabilir ve onu bir şekilde kullanabilir; içinde neler olduğunu biliyor ve bu sayede birçok ilginç şey yapabiliyor.

Perl metin işleme için tasarlandı - o günlerde bilgisayarlarda o kadar çok bellek vardı ki, orada bir miktar metin doldurmak ve bu metinle yararlı bir şeyler yapmak (örneğin, kelimeleri saymak, bazılarını aramak) mümkündü. Ama bana göre biraz akıllarından çıkmış insanlar tarafından tasarlandı, çünkü onun hakkında öyle bir şaka var: "Yazılan her karakter dizisi Pearl'de doğru bir programdır." Bence üzerine sadece yazabilirsin, okuyamazsın. Perl'deki koda baktığımda ve bir şeyi anlamaya çalıştığımda, hiçbir şey anlamıyorum. Belki onu daha iyi tanıyor olsaydım, bir şeyi anlardım ama nasıl olduğunu hala bilen insanlardan duyduğum gibi, yeniden yazmanın daha kolay olduğunu söylüyorlar. Yani programlar kısadır ve orada ne olduğunu bulup düzeltmekten çok daha kolay yeniden yazılabilir.

O sıralarda, 90'ların ortasında İnternet ortaya çıktı. Başlangıçta posta, statik HTML içeren sitelerdi, ancak insanlar oraya bir tür dinamik eklemek istediler, böylece her şey bizim için dinamik bir şekilde gerçekleşecek, bazı formlar doldurulabilecekti, konuk defterleri yapılabilecekti ve başka bir şey. Buna göre, bu bir tür etkileşim gerektirdi, bir protokol, nasıl etkileşime girdiğini ve en önemlisi, isteğine yanıt olarak kullanıcıya "tükenecek" bu statik (koşullu) sayfaların üretilmesini sağladılar.

Genel olarak, o zamanlar Pearl'den başka hiçbir şey uygun değildi. Saf C veya C ++ ile bir işleyici yazmak kötü bir fikirdi. O zamanlar (ve yeterince uzun) daha iyi bir dil olmadığı için Pearl, web geliştirme için popüler bir dildi. Elbette, ölçek şu anda olanlarla karşılaştırılamaz.

PHP ... tesadüfen ortaya çıktı. Bir kişi bunu yapmayı çabucak bıraktı - bir tür kendi sayfasını yaptı, ziyaretçi defteri biraz, başka bir şey, bazı şeyler. Ve Pearl için bir tür makro yazdı, C'ye benziyordu, çünkü C'yi nasıl kullanacağını biliyordu, çünkü çok rahattı. Ve ben buna Kişisel Ana Sayfa adını verdim. Paylaşıldı ve şöyle dedi: "İnsanlar, yazdığım parçaya bakın, burada her şey Pearl'den çok daha net ve düzenlenebilir." Ve insanlar bunu beğendi.

Sonra davayı düşürdü. Genel olarak, sonuç olarak, bu PHP hayat buldu ve zamanla Perl'den çok daha popüler hale geldi. Ama bu "doğum travması" (Pearl için bir dizi makro olarak bir fikir) ona oldukça acımasız bir şaka yaptı. Dil tuhaf çıktı. Yani kendi kendine geliştirdi, kimse tasarlamadı, kimse geliştirme sürecini yönetmedi (ne şirket ne de herhangi bir kişi), ancak her biri beğendiğini gören birçok grup vardı. Sonuç olarak oradaki işlevler farklı adlandırılıyor, bir stil bile yok, her şeyin altını çiziyor, genel olarak ayarlar burada burada ve nasıl çalışacağı çok net değil. Ama oturup iki saat içinde PHP'de yazabilirsiniz, çünkü onun niyet ettiği bu.

Python ve Ruby: Ruby artık daha az popüler, Python bir şekilde daha iyi "kesilmiş", bundan sonra konuşalım. O günlerde bunların (öğretim görevlisi Perl, Python, Ruby, PHP'yi gösterir) oldukça özel amaçlar için oldukça özelleşmiş diller olduğu açıktır. Genel olarak, o zamanlar sistem programlaması yok, iş mantığı yazılmıyordu ve şimdi pek bir şey yapmıyorlar.

90'lardan derlenen diller

Yaklaşık aynı saatte gideceğiz, ama diğer yönde. O zamanlar, web için değil, metin işleme için değil, basit uygulamalar için, işletim sistemleri için, oyuncaklar için - genel olarak herhangi bir şey için yazılması gereken hemen hemen her şey için C ++ kullandık. Ama C ++ aslında ürkütücü bir dil. Neden? Çünkü öncelikle geriye dönük uyumluluktan dolayı tüm C problemlerini miras almıştır. C'deki gibi (tabii ki, C ++ 'ya yeni yollar eklendi), milyonlarca farklı şekilde bir kişi öldürülebilir. Aynı zamanda, her şeyi C ++ yazarlarının tasarladığı gibi iyi ve doğru yazarsanız, o zaman elbette eski yöntemlerle kendinizi öldürmek imkansızdı ve daha azı varmış gibi görünüyor. Ancak çok garip bir obje modeline sahipti. Programın modüllere, bir tür parçaya bölünmesi genellikle C'den geldi (eğer C veya C ++ 'da dahil yazabiliyorsanız - aslında, sadece kitaplık metnini programınıza eklemek olarak düşünülmüştür, sonunda, bir sürü ekleme yazarken, her şeye sahip olursunuz. - eğer başlangıçta olduğu gibi "ilkel" ise - her şey tek bir dosyaya yerleştirilir ve sonra derlenmesi çok uzun sürer, çünkü birkaç kez çalışır.Aynı Pascal, Virtovsky bu açıdan çok daha düşünceliydi, daha sonra versiyonlar daha da iyi.

Genel olarak, C ++ birçok dezavantaja sahiptir. Bir programcının C ++ dilinde yazabilmesi için niteliklerinin yüksek olması gerekiyordu ve bu tür programcılar pahalıydı (hem hazırlık hem de başka bir şey, yani piyasada programcı bulmak zor, çok para ödemeleri gerekiyor, genel olarak, durum böyle değil ... ). Bilgisayarlarımız daha hızlı ve daha hızlı sayıyor, daha ucuz hale geliyor, insanlar yeni bilgisayar alıyor ve daha fazla uygulama, telefon için daha fazla oyuncak, genel olarak daha fazla neşe istiyor.

Java (Java) böyle ortaya çıktı. Orada da, adın bu dilde nasıl göründüğü oldukça komik bir hikaye ile bağlantılı. Programcılar var, her zaman kahve içiyorlar ve o zamanlar Java adasında büyüyen kahve içmek modaydı. Dil, ankastre cihazlar için, özellikle bir kahve makinesi için bir dil olarak tasarlandı. İsim böyle ortaya çıktı ...
Onunla ne başladı, onun hakkında iyi olan ne ve neden bu kadar popülerlik kazandı? İlk olarak, Sishny'nin mirasından tamamen kurtuldular. İşaret yok, vücudun bir kısmını vurmanın ve her şeyi kırmanın çok daha az yolu. İkincisi, nesne modeli açısından çok daha yeni fikirler ortaya attılar - yani, C ++ Java'dan çok daha önce ortaya çıktı ve daha arkaik, "vahşi" bir nesne modeli kullandı. Pekala, burada (öğretim üyesi Java'yı işaret ediyor) o zamanlar daha çok düşünülmüştü ve teoride insanlar düşündü ve pratikte her şeyi çok daha iyi uyguladılar ve yaptılar.

Ve son olarak, üçüncü. Java programlarımız makine kodunda değil, sanal makinenin kodunda toplandı. Yani, bir JVM sanal makineniz (VM) - Javovsky vardı. Programlarınız bir çeşit ara temsilde toplandı ve sonra bu makinenin yardımıyla çoktan çalıştırıldılar. Ne yaptı Birincisi, yavaşladı ve ikincisi, korkunç bir güçle hafızayı yedi, üçüncüsü her yere taşınabilirdi (teorik olarak) - bir kahve makinesine, hatta bir kahve makinesine, hatta bir bilgisayara, hatta bir cep telefonuna bile. Bir yandan bu iyi, yani bir sanal makinenin uygulamasını yazdınız, ardından Java programlarınızı her yerde çalıştırıyorsunuz. Ama öte yandan, aynı telefonun o zamanlar hafızasının az olması kötü, performans düşüktü ve tüm bunlar da donuklaşmaya ve yavaşlamaya başladı.

Ancak dilin genel olarak icat edilmesinin ana nedeni bu bile değildir. Java dili, programcıların niteliklerine yönelik gereksinimleri azaltmak için icat edildi. Yani, daha zayıf programcılar yazabilir iyi programlar Java'da yazmanıza izin vermediği için kötü programlar - kötü programlar yazmanın bir yolu yok. Orada sadece iyi programlar yazabilirsiniz. Güzel, dilin yaratıcılarının anlayışına göre.

Yani, eğer C, C ++, Python, herhangi bir şey üzerinde, her şeyi karıştırdığımız, saatlerce topladığımız ve orada başka bir şey topladığımız projemizdeki bazı tüyler ürpertici çöpleri çözebiliriz. Java'da çöp kutusunu da çözebilirsiniz, ancak bunun için zaten biraz çaba sarf etmeniz gerekiyor. Yani, varsayılan olarak, bir "çöp yığını" olarak ortaya çıkmaz, başka sorunlar ortaya çıkar, orada bir şey miras alınır veya miras alınır - genel olarak, bir anlamlı satır için on çok anlamlı olmayan satır elde edilir. Öte yandan, belki bu kadar orta becerili bir programcı oldukça yüksek kaliteli bir kod yazabilir.
Neredeyse sondayız. Bizimle birlikte, ortaya çıkan bir sonraki şey .Net (ulaşacak) ve özellikle C # ile ilgileniyoruz (neredeyse aynı [öğretim üyesi Java'yı işaret ediyor], yani, aralarında seçim yaparsanız ayrıntılarda farklılıklar var - nerede olduğunu görün daha fazla para öde).

Ve bir şey daha JavaScript. Ilgisi yok java dili, aynı yıl ortaya çıktı - kelime modaydı, lisans verdiler markakullanmak.

Dikkat edilmesi gereken en önemli şey nedir? (Öğretim üyesi C ++ 'dan Java, .Net, C #, JavaScript ve PHP'ye oklar çizer). Bu dillerden birinde ve diğer pek çok yerde basit bir program yazmak için - C ++ 'yı biliyorsanız, genellikle başka bir şey bilmenize gerek yoktur - C ++' da alıp yazarsınız ve sonra başında dolar eklersiniz, başka bir şey küçük şeyler yapın ve sizin için herhangi bir şey üzerinde çalışmaya başlar (öğretim görevlisi C ++ 'dan okların atandığı dilleri gösterir). Yani, bazı basit şeylerde son derece benzerler. Bazı okul problemlerini, eğitim görevlerini veya başka bir şeyi çözüyorsanız (büyük bir proje tasarlamıyorsanız - sayıları okuyan, konsolda sayıları görüntüleyen, başka bir şey yapan bir dosyanız var), o zaman bunlar arasında neredeyse hiç fark yoktur Diller. JavaScript ve PHP'nin uzmanlaştığı açıktır, her şeye biraz farklıdırlar. Ve burada (öğretim üyesi Java ve C # 'yi gösterir) genel olarak çok az fark vardır.

O zamandan beri, her türden ilginç şeyler ortaya çıktı, ancak başarılı bir şekilde yaşayıp yaşamayacakları net değil. Şimdi ne kullanıyorlar, hangi görevler için?

Göreve bağlı olarak dil seçimi

Diyelim ki bir ekran kartı için bir sürücü yazma görevi ile karşı karşıyasınız. Bugün hangi dili kullanacaksınız? (Seyircilerden seslenin: Java!) Neden ... Java harika ama neden Ruby veya PHP değil? (Öğretim üyesi alaycı bir şekilde konuşuyor.)

Düşük seviyeli programlama

Düşük seviyeli bir şey yazıyorsanız o zaman en iyi seçim - bu C, ama aslında bunun için C ++ 'nın kullanıldığını duydum (ama görmedim). Ama buna pek inanmıyorum, çünkü C'de açıkça kontrol edebilirsiniz - çok fazla bayt hafıza vermiş olduğunuza göre, o zaman öyle olacak. Ve C ++ (STL) 'de bir dizge nasıl uygulanır? Peki, bir şekilde uygulandı. Ve sonunda orada nasıl ve ne olduğunu bilmiyoruz, belki ekran kartımızın hafızası bitecek veya başka bir şey olacak. Bu nedenle, C hala yaşıyor ve ölmüyor, bu tür sistem programlama görevleri hala var - bir işletim sistemi yazın, sürücüler yazın, başka bir şey yazın - C bunun için harika. Ek olarak, şimdi pillerle çalışan (ve doğal olarak milyonlarca olacak, her şey bu Nesnelerin İnterneti ile asılacak) her türlü cihaz (Nesnelerin İnterneti gelmek üzere olduğunu vaat ediyor) var, bunlar çok ucuz ve çok az elektrik olmalı tüketmek. Buna göre 2 KB bellek, 5 kHz işlemci olacak, tabii ki bazılarında neleri vidalayacağız sanal makine veya komut dosyası dili yakın gelecekte çalışmayacaktır, bu da C dilinde bir şeyler yazmanız gerektiği anlamına gelir. Ve şimdi bile, örneğin, bir video kartındaki (OpenCL veya başka bir teknoloji) hesaplamalar - onlar için program yazmak için yeni bir dil bulmazlar - orada bazı büyük kısıtlamalarla C yaparlar. Sırf insanlar nasıl olduğunu zaten bildiği için neden yeni bir şey öğrenelim? Resmi olarak, bu muhtemelen bir anlamda C'dir.

Web programlama

Diyelim ki yeni bir Facebook (sosyal ağ) yazmak istiyorsunuz. Bunu neye yazacaksın? (İzleyicilerden HTML ve CSS hakkında konuşuyorlar.) HTML, CSS tasarımdır ve oraya fotoğraf, arkadaş ve yorum ekleyebilmek istiyoruz.

Komut dosyası oluşturma kısmı için - yani, istemci tarafında olacak olan - JavaScript. Ve bazen JavaScript başka bir dilde oluşturulur ve gönderilir (öyle olur ki komut dosyası oluşturulur ... çünkü bazen mantıktaki bazı değişiklikleri bu şekilde ele almak daha kolaydır).

Şaşırtıcı bir şekilde, PHP - ve Facebook ve diğer birçok büyük projede yazılmıştır. Tabii ki, yine de düzgün çalışması için kendi şeylerimi yazmam gerekiyordu ve "işkence" gibi değil, ama onlar yaptılar. Temelde ne yazdığınızın bir önemi yok ama Perl'i önermiyorum. Elbette burada ve şimdi, kimse web için sıfırdan bir şey yazmıyor. Herkes bir tür çerçeve veya başka bir şey yazıyor. Online mağaza? Bir çevrimiçi mağaza için bir çerçeve indirdik - işte bu, bir çevrimiçi mağaza yazdık.

İş programlama

Ardından, sıkıcı bir banka başvurusu yazmak istiyorsunuz. Veya örneğin, sim kart satan biri var mı? Belki daha önce bir telefon veya başka bir şey satın aldınız ve size dediler: "Sistem kilitleniyor, hiçbir şey yapamayız." Böyle bir uygulamayı neye yazacaksınız? (İzleyicilerden Python hakkında bir çığlık) Bunu Python'da yazamazsın, nesin sen? Python'da iş için hiçbir şey yazmaya değmez. Neden? Çünkü Python'da bir şey yazdığınızda, yazma sürecinde önemli sayıda hata bulamazsınız. Python, mümkün olan her şekilde dinamik olarak yazılır ve genel olarak orada bir hatayı gizleyebilirsiniz, öyle bir durumda ortaya çıksın ki, bu çarpık kullanıcıların orada ne yaptığını, her şeyin sizin için bozulduğunu bile anlayamazsınız. Yani, Python'da kendiniz için küçük komut dosyaları yazmak daha iyidir - orada ne olduğunu ve ne yapıldığını anlarsınız. Peki, ya da atılması üzücü olmayan bir şey: rakiplerinizden önce bir şeyler yaymak istiyorsunuz, o zaman ya her seferinde kırılırsa. Python'da yazdın ve işte bu - pazarı ele geçirdin. Ve uzun süre bir şey yazarsanız, örneğin, bir tür bankacılık uygulaması (böylece kredileri onaylaması için, başka bir şey) - bunu Java'da yazarsınız. Çünkü ciddi bir mesele var, evrak işi, para, belgeler, başka bir şey var, ama içinde her şey bozulacak kadar batıramazsınız, aksi takdirde insanlar gücenecek - paraları gitti ve hiçbir yere ulaşmadı, çünkü sende var dizenin bir sayıya dönüştüğü an veya tam tersi. Yani, metodik olarak Java'yı alıp yazmanız, yazmanız anlamına gelir ... Peki ya da .Net üzerinde bu tür durumlar da prensipte olur. Orada tabii ki sorunlarla da karşılaşabilirsiniz, ancak yine de bunun olasılığı biraz daha düşüktür.

Ordu, havacılık için programlama

Şimdi sizi bir roketle aya göndermeye karar verdiklerini hayal edin. Roket motorlarını kontrol eden kodu yazmak için ne kullanmayı tercih edersiniz? Hadi bir bakalım. Bu, muhtemelen (öğretim görevlisi Perl, Python, PHP, Ruby'de gösterilir) buna değmez - yavaşlıyor, başka bir şey oluyor ve genel olarak böyle bir roket üzerinde uçmayı kabul etmem. C ++ ile mi? Dürüst olmak gerekirse, ben de güvenmem çünkü C ++ 'da kendini öldürmenin çok fazla yolu var. Uzayda bir yerlerde olduğunuzda, bu pek iyi değil.

Belki Java? Görünüşe göre orada her şey oldukça güvenilir ve mimari iyi, vahşi tipler yok, fazla hafıza yok. Diyelim ki en önemli an geldi ve Java'mız bizim için çöp toplamaya karar verdi. İniş yapmalıyız, yavaşlamalıyız ve o "Hayır, çöp gidiyor" dedi. Genel olarak da pek iyi değil.

Dürüst olmak gerekirse, bu programın Pascal dilinde yazılmasını tercih ederim. Elbette Pascal'ı pek sevmiyorum ama bir şekilde bu tür konularda çok havalı olurdu.

Yazılım geliştirme için aynı anda birkaç dil kullanmak

Peki, genel olarak modern diller hakkında ne söylenmeli? Günümüzde pek çok proje tek bir dilde yaşamıyor, yani bazıları bir dilde, bazıları başka bir diğeri üçte birinde yaşıyor. Örneğin, vahşi miktarda bilgiyi işleyen bir tür web uygulamanız varsa, disklere erişim (veritabanlarına bile değil, o kadar büyüktür ki bir veritabanı bile önceden yazılmış olanı desteklemiyor) muhtemelen bazılarında yazılmıştır. sonra düşük seviyeli C diske çılgınca hızlı yazmak için falan. Doğal olarak, tüm projeyi C'de yazmak buna değmez. Belki Java'da yazılmış, hızlı aramalar için Cis işlevlerini çağıran bir tür ara mantık vardır. Elbette, ön uç (kullanıcının baktığı şey) zaten bir şeye, bazı betiklere, tarayıcı tarafından doğrudan yürütülenlere (JavaScript) yazılmıştır. Ve tüm bunlar birlikte yaşıyor ve başarılı bir şekilde etkileşime giriyor.

Bazı uygulamaların geliştirilmesinde, büyük bile olsa, bazen insanlar ne yapar? Python'da bir prototip alıp yazıyorlar (her şey nasıl çalışacak), çiziyorlar, bir tür mimari üzerinde düşünüyorlar. Üzerine yazmak gerçekten çok hızlı - bir prototip fırlattılar, üzerinde deneyler yaptılar ve “Wo! Bu çok havalı! " Ve tamamen yeniden yazıldı. Görünüşe göre işi iki kez yaptılar, iki kat daha uzun sürdü (bir buçuk). Ama hayır! Genellikle bu yöntemin kötü olmadığı ortaya çıkar, çünkü hemen bir şeye yazarsanız, örneğin Java'da yazarsanız ve sonra "Hayır, yeniden düzenleme yapalım, mimariyi tamamen değiştirelim ve tüm bunları" yaparsanız, 10 kat daha fazla zaman harcarsınız. ... Bu tür şeyler de var ve yaşıyor.

Herhangi bir programlama dilinin başarısı için koşullar

Şimdi bazı güzel dillerin neden hayatta kalamadığını veya çok sınırlı bir alanda yaşamadığını konuşalım. Wirth, Apple'ın, Borland'ın ve Pascal'ına yaptıklarının kötü şirketlerini görünce daha da iyi bir dil buldu: Oberon. Çok minimalistti - yani çok az komut vardı (Dizeler? Neden dizelere ihtiyacımız var? Bir dizi karakter yapacağız!). Pekala, bir şey onun için yapabileceği ölçüde işe yaramadı.

Bir şey daha. ABD ordusu onlardan da her şeyin çalıştığı ve her şeyin yazılabileceği havalı bir dil geliştirmelerini istedi. Sonuç, Ada adlı oldukça canavarca bir dildir, ancak yine de bir şeyler yazarlar, ancak yine de - yalnızca ordu için.

Sorun nedir? Neden ilk başta hiçbir şirketin desteklemediği Python gibi bazı diller pazarı ele geçirdi. Yine zayıf bir şekilde tasarlanmış olan PHP, piyasayı (çoğunu) kendi başına ele geçirmiştir. Ve her türlü milyarlarca dolar yatırıldı (öğretim üyesi Ada'yı işaret ediyor) ve hiçbir yere gitmedi, hiçbir şey olmadı. Bunun sebebi nedir? Bunun nedeni, bu diller etrafında altyapı bulunmamasıdır. Yani, dil mükemmel olabilir, ancak dokümantasyon olmadığı sürece, soruları yanıtlayabilecek bir topluluk olmadığı sürece (Stack Overflow'da) ve son olarak, en önemlisi, çok sayıda kütüphane olmadığı sürece dil ateşlenmez. Yani, örneğin, Oberon'da bir web sitesi yazmak istediniz. Nedir o, neden olmasın? Ve kafa karışıklığı başlıyor ... Web sunucunuzu Oberon'da hafifçe test etmek için kuramazsınız, Oberon'da olmadıkları için herhangi bir kitaplığa bağlanamazsınız. Ve tüm bunlar bir tür koltuk değnekleriyle yapılır, kuvvetler uzaklaşır ve genel olarak sitenizi Oberon yerine saf C ile yazarsınız. Ve diğer dillerdeki kütüphaneleri kullanabilen diller iyi yaşıyor. Yavaşladığı yerlerde aynı Python. Genel olarak, sıralama ve başka şeyler gibi her tür standart şey C'de yazılmıştır ve o (Python) onlarla nasıl etkileşim kuracağını bilir.

Java ayrıca bir Java Yerel Arayüzüne sahiptir. Bu aslında C'dir, yani orada (bence her zaman yasaklamak istiyorlar, ancak henüz yasaklamamışlar gibi görünüyor) bu diller mevcut kütüphanelerle (çoğunlukla Sishny olanlarla) etkileşime girebilir. Ve bundan dolayı alırlar ve çalışırlar. Size aktarmaya çalıştığım fikri anlayın, değil mi? C kütüphanesini nasıl bağlayacağınızı bilmeyen dillerde yazmayın. Peki, havalı bir şeyin tadını çıkarmak istiyorsanız. Eh, ve yavaş yavaş (diller) kendi altyapılarını edinirler. Ve bir şekilde iyi yaşıyorlar.

Programlama dili ve kariyer rehberliği

Şimdi hayatta ne istediğini nasıl anlayacağından bahsedelim. Harika şeyler neler? Bir çeşit sistem programlaması yapabilirsiniz, değil mi? Bu bisikletleri orada saymanız harika, quadcopter'lar, birkaç kamera fırlatmak ve başka bir şey yapmak istiyorsunuz. O zaman C muhtemelen sizin seçiminizdir.

Yazmak istiyorsan, belki hayattaki en ilginç uygulamalar değil, ama onları tasarlamak, hepsini düşünmek ve oturmak için çok para kazanmak ve çoğu zaman sıkılmak (eğer öyleyse bunun için para ödemek zorundasın) bayan), işte buradalar - Java, .Net. Bir bankada çalışmaya gidiyorsun, yazıyorsun, dokuzda beyaz gömlekle çalışmaya gidiyorsun, iyi bir maaş alıyorsun ve en iyi Java kaynaklarının tavsiyelerine göre yazıyorsun,.

Herhangi bir uygulama, bir tarayıcı, bazı oyuncaklar, başka bir şey yazmak istiyorsanız, C ++ harika. Web siteleri yazmak istiyorsanız, işte bunlar, seçtiğiniz diller (öğretim görevlisi Perl, Python, PHP, Ruby'de gösterilir), çok fazla fark yoktur. Tek şey, PHP'nin Python'dan önce ölmesidir, bu yüzden yeni şeyler öğrenmek için tembelseniz, Python öğrenin. Büyük bir fark görmeyeceksiniz ama daha uzun süre dayanacaksınız.

Ruby'de olup bitenler de belirsizdir. Zaten öğrendiyseniz, PHP'yi de kullanabilirsiniz, çünkü çok basitler ki orada yeniden öğrenmek o kadar uzun sürmez.

Ve son olarak, programlama dillerinin başka bir uygulama alanı vardır - bu, programcı olmayanların bunları kullandığı zamandır. Diyelim ki bir matematikçi, fizikçi, kimyager, analist, herhangi biri ve bir şeyi hızlı bir şekilde hesaplamanız, bazı verileri analiz etmeniz gerekiyor (örneğin, biyologlar için, Komutan Adaları'nda kaç Kutup tilkisi yaşıyor). Tüm bunları Excel'de bir tabloya aktarabilir veya bir şeyle analiz edebilirsiniz. Python da buna çok uygundur, metinle nasıl çalışılacağını bilir ve kitaplıklar her türden, istatistiksel ve tüm bunlarla doludur. Bir tür Makine Öğrenimi yapmak istiyorsanız, bazı verileri işleyin, tahmin edin, o zaman bu şimdi Python'da en hızlı şekilde yapılır. Ancak görevlerin çok farklı olduğu unutulmamalıdır. Örneğin, fiyat tekliflerinin sürekli değiştiği koşullarda anında bir borsada işlem yapmak istiyorsanız, Python'da ne kadar havalı Makine Öğrenimi yazarsanız yazın, onu daha hızlı bir şekilde yazanlar her şeyi daha önce satın almak için zamana sahip olacaklardır. algoritmaları daha kötü olsa bile sayılacaksınız. Dolayısıyla, bu makine öğrenimi görevleri (bazıları) bile gerektirir yüksek performans (ve son derece yüksek) ve buna göre diğer diller.

Ne istediğini bilmenin tek yolu her şeyi denemektir. Şimdi her şeyi nasıl deneyebileceğinize dair vizyonlardan biri olarak söyleyeceğim. Nasıl programcı ve mutlu olunur? Yani. Sıfırdan başlıyoruz. Burada okulda matematik, Rusça ve diğer zorunlu ve seçmeli konular üzerinde çalışıyorsunuz ve şu anda programlama alanındaki bilginiz tahtaya yansıtılıyor (öğretim görevlisi boş bir tahtayı işaret ediyor). Ve mutlu bir insan olmak, sevdiğin şeyi yapmak, çok para kazanmak, hiçbir şeyi inkar etmemek ve mutlu olmak istiyorsun.

Bunu yapmanın bir yolu. Elbette, üniversiteye hiç gitmemiş ya da onlardan ayrılıp milyarder, şirket sahibi vb. Olan insanlarla ilgili pek çok ilham verici hikaye var. Ancak, milyarder olmayan ancak aynı zamanda iyi yaşayan çoğu insanın bir noktada hala üniversiteden mezun olduğu unutulmamalıdır.

Üniversiteye kabulle ilgili durumumuz nedir (şimdi okulda okuyorsunuz)? Okuldayken, bir sonraki adımın kaydolmak ve onunla ilgilenmek olduğunu anlamalısın. Sınavı geçin veya Olimpiyatı kazanın. Sınavda Pascal, C ++ (saf C dahil), Python (daha fazla bahsetmeyeceğim) kullanabilirsiniz. Olimpiyatta - aynı Pascal, aynı C ++, aynı Python (şimdi onun sorunları hakkında konuşacağız) ve çoğu zaman Java var. Olimpiyata bağlı olarak hala her şey olabilir, ancak özüne bağlı değildir.

Bilişimde Tüm Rusya Olimpiyatları'nda dillerin dağılımının grafiği nedir? En havalı Olimpiyat olan All-Russian'a katılanlar, ne hakkında yazıyorlar? Şöyle görünüyor (burada Pascal anlamına geliyor ve burada yaklaşık 2000 ve burada yaklaşık sıfır, işte C ++ ve işte 2015).

2000'de neredeyse hiç kimse C ++ dilinde yazmadı. On beş yıl geçti ve Pascal'ın modern olmasına rağmen neredeyse hiç kimse Pascal'da yazmıyor. Bu, neredeyse her şeyi aynı şekilde yapabilen bir dildir. Herkes bunu öğrenemeyecek kadar tembelleşti, her yeni trend ve herkes Borland Pascal'da yazmaya devam ediyor, ki elbette hiçbir şey yapamıyor. C ++ 'da insanlar bazı sıralama algoritmaları (STL) yazarlar - harika, sort () yazdılar ve hepsi bu. Pascal'da, düzenli olarak, eskiden - bu bir problemdir. Bazı setler yazdılar (gerekli) - harika, C ++ ile yazdılar, yine Pascal'da işkence süreklidir. Yeni Pascallarda elbette bunu yapabilirsiniz, ancak aslında paraya mal olurlar. Bunu fark etmemiş olabilirsiniz, ama öyle.

Java da var ama Java'da çok fazla harf var. Büyük projeler içindir, ancak tek seferlik küçük programlar için tamamen kötü olduğu ortaya çıkıyor, çünkü çok fazla ekstra harf var. Ama bazı insanlar da yazıyor, üzerine yazmayı öğrenebilirsiniz. Ancak sınavda, öyle değil ve yine de çoğunlukla sınavın girilmesi gerekecek.

Sınav için en iyisi nedir? Sınav için en iyisi (eğer hiçbir şey bilmiyorsan ve okulda sana hiçbir şey öğretmiyorlarsa) Python öğrenmek. Sınavın bazı görevleri mükemmel bir şekilde çözüldü. Olimpiyatta, genel olarak, C ++ 'nın kullanıldığı (kullanıldığı) ortaya çıkıyor, çünkü Python çok yavaş, orada her şey çözülmüyor.

Böylece, dilin bazı küçük alt kümelerini ve bazı algoritmaları (muhtemelen) incelediniz ve Olimpiyatınızın diplomasını almak ve yüksek öğrenim için üniversiteye gitmek için birçok sorunu çözdünüz.

Şimdi size HSE'de kursu nasıl oluşturduğumuzu, dillerin hangi sırayla olduğunu, Yandex ve benim yaptığımız Uygulamalı Bilimler Fakültesi'nde uygulamalı matematik ve bilgisayar bilimlerinde nasıl öğretildiğini anlatacağım. İlk dönem - Python (okulda nasıl öğrenmeniz gerektiği konusunda tam olarak değil) ve C ++ (genellikle okullarda öğretildiğinden daha geniş, çok daha geniş). Hemen söyleyeyim ki korkmuyorsun, eğer aniden yapmak istiyorsan, şunu söyle: “Neden, tüm bunları zaten biliyorum, neden bir yerde okuyacağım? Başka bir yere gitmeyi tercih ederim. " Nasıl programlanacağını iyi bilenler için, doğrudan algoritma çalışmasına ve oldukça teorik bir eğitime gitme fırsatı vardır. Şimdi onlara bakmıyoruz, bu (tahtayı işaret ediyor) orta program yapanlar veya hiç yapmayanlar içindir.

İlk yarıyılda, insanların programlamayı öğrenebilmesi ve hiç kimsenin özellikle gücenmemesi için Python'un temellerini incelerler. Python okullarda nadiren öğretilir, çoğunlukla insanlar Pascal veya C ++ bilgisiyle gelir. Temelde Pascal bile, eğer bir kitle okulu ise. Öyleyse kimse gücenmesin, herkes yeni bir dil öğrenir (sanki eşit şartlardaymış gibi). Ve C ++, çünkü daha sonra C ++ 'dan istediğiniz yere gidebilirsiniz.

Ardından "Algoritmalar" dersi ve ayrı bir ders projesi gelir. Uygulamalı klasik algoritmalar. Teoride bir şey aldık, karmaşıklığı hesapladık. Konferansta bunu aldık, karmaşıklığı hesapladık, seminerde - aldık, algoritmayı uyguladık. Proje, bitmiş bir şeyi yapan öğrencidir. Örneğin, projelerden biri şöyleydi: saymak ... Diyelim ki Moskova'da bir sürü daireniz var ve anlıyorsunuz: “Ah, bir sürü gereksiz şeyim var, bazılarını kiralayacağım. Ve bir fiyat belirlerler ve kimse sizden bir şey için bir daire kiralamak istemez - muhtemelen çok pahalı. Ya da bir tür fiyat koyarlar, hemen kaldırırlar ve şöyle düşünürsünüz: "Ah, muhtemelen ucuza sattım" ve siz de üzülürsünüz. Yani, bir daire kiralamanın ne kadara mal olduğunu hesaplamak gerekliydi? Verileri kullanırsınız - sizin için bir tahmin oluşturur. Birkaç şeyden oluşan böyle bir site: önerileri alın, ayrıştırın, bir tür makine öğrenimi algoritması uygulayın (muhtemelen) iddiasız ve bir şeyler seçebileceğiniz, bir şeyler sürebileceğiniz, birkaç metre sürebileceğiniz güzel bir web yüzü yapın, herhangi bir sayıda oda, sauna sayısı, dairenizdeki jakuzi sayısı ve yaklaşık maliyeti tahmin edin. Yani, bir tür bitmiş, çok karmaşık olmayan bir şey. Burada (öğretim görevlisi algoritmalarla ilgili dersi işaret eder) konsol I / O ile böylesine güçlü bir C ++ anlamına gelir. Pekala, burada (öğretim görevlisi "proje" yazıtına işaret eder) bir akıl hocasının rehberliğinde, muhtemelen veri tabanlarıyla, belki metinlerin ayrıştırılmasıyla ve başka bir şeyle.
Ardından üçüncü dönem gelir - bu "Bilgisayar Sistemleri" adlı bir derstir. Anlamak için epey bir derleyici var (çok az) ve sonra, saf C'ye ve işletim sistemleriyle etkileşim, özünde sistem programlamaya benzer bir şey var. Ve bir seminer projesi aynı zamanda tüm ağ etkileşimleri konusuyla ilgili bir şeydir, oldukça düşük seviyeli: bir yardımcı program geliştirin, örneğin rsync (senkronizasyon, belki biliyorsunuzdur. Saf C'de, aşağı yukarı, ağ üzerinden sahip olacağınız bir rsync analogu yazın. klasörleri tüm dosya erişimleriyle senkronize edin ve benzeri).

Ve son olarak, dördüncü. Ona ne isim vereceğimi bile bilmiyorum, bu gerçek geliştirme için gerekli, örneğin web geliştirme için gerekli olan bir teknoloji harcı. Yani, bu, veritabanlarının pratik bir uygulamasıdır, yine projede yapılana benzer bir şeydir (öğretim üyesi 2. ders projesine işaret eder), ancak daha derinlemesine. Yani, bu tür aşağı yukarı somut şeyler zaten pratik programlamadır. Buna paralel olarak herhangi bir teori var, işte burada bilimle de uğraşıyorlar.

Ve iki kurstan sonra, insanlar ilgilendikleri şeyi yapmak için dağılıyorlar, çünkü bu şey, bu tür programlama temellerini oldukça geniş bir şekilde kapsıyor ve bu ana kadar insanlar zaten yapmak istemediklerini anlıyorlar. bilgisayar sistemleri hiçbir durumda (örneğin, sistem programlamayı sevmediler), ancak bazı teorik algoritmalarla, saymanın zorluğu, yeni şeyler ortaya çıkarmak, dağıtmak veya başka bir şeyle uğraşmak istiyorlar. Ya da tam tersine burada pek bir şeye sahip olmadıklarını düşünüyorlar ( öğretim görevlisi Python ve C ++ ile ilk ders satırını gösterir) o zaman git ( öğretim görevlisi, sistem programlama ile üçüncü bir ders hattını gösterir) - beğenmediğiniz gibi, baytları sayın ve okuma-yazma, akışlar, diziler ve başka bir şey üzerinde her türlü kısıtlamayı ayarlayın. Ve buna göre insanlar bir yön seçip öğreniyorlar. Yani prensipte "ördek yavrusu sendromu" geliştirmemek için - önce Pascal'ınızı gördünüz ve şimdi "Pascal güçtür" diyorsunuz; veya daha gelişmiş - C ++ 'yı gördünüz ve herkes hakkında C ++' nın güçlü olduğunu ve diğer her şeyin pek iyi olmadığını söylemeye başladınız.

Burada buna (öğretim görevlisi tahtadaki derslerin listesini işaret eder) daha geniş bir şekilde bakmamız gerekir - bu, özellikle EYO'da seçilen yöntemlerden biridir (son zamanlarda ortaya çıkmıştır, bu nedenle oldukça moderndir). Buluşmanın başka yolları da var. Diğer iyi üniversitelerde biraz farklı bir sırayla ve diğer aksanlar yerleştirilir. Ama aynı zamanda insanları sahip oldukları her şey hakkında bilgilendirmeye çalışırlar.

Bir programcı nasıl bir iş arıyor?

Sen o ( öğretim görevlisi derslerin listesine işaret eder) her şeyi yaptı, üniversitede okudu, iki yıl daha verimli çalıştı ve işe gitmen gerekiyor. Çalışmak için bir şeyi nasıl seçersiniz? Önce, her şeyi bilmeli, bir şeye dalmalı ve neyi sevdiğinizi zaten bilmelisiniz. Doğal olarak sevdiğin şeyi seçmelisin. Çünkü severseniz enerji yatırımı yapacak, motivasyonunuz olacak ve genel olarak her şey yoluna girecek. Çünkü konu sadece parayla ilgili değil, onu sizin için ilginç ve keyifli hale getirmekle de ilgili. Güzel bir şirkete girmek istiyorsan bir iş bul. Şahsen ne tür bir insan görmek isterdim? Örneğin, yüz öğrenci bana geliyor - çalışmak için iki veya bir tane almam gerekiyor. Neden geliyorlar, kim olduklarını hiç anlamıyorum, ne onlar, nasıllar? En iyi ihtimalle bana üniversitede aldıkları diplomayı gösterecekler ve ben de “Wo! Bu harika bir diploma, ama o kadar da havalı değil! " Ve bu arada yanılıyor olabilirim. Belki kişinin çok boş zamanı vardı ve çok daha iyi öğrendi.

Ne harika olurdu? Birincisi, baştan sona yazdığınız bazı açık kaynaklı projeler. Verilerin hızlı bir şekilde okunabilmesi için bir tür altyapı yapıyorsam ya da başka bir şey yapıyorsam, o zaman elbette bana açık kaynak kodlu bir şey yazılmasını isterim. Bir web sitesi değil, konuyla ilgili bir şey. Bununla neden ilgileniyorum? Kodunuza bakabilirim, ne sıklıkta taahhüt verdiğinizi görebiliyorum, kullanıcılardan gelen hatalara, onu kullanan geliştiricilerin hatalarına nasıl tepki verdiğinizi görebiliyorum - her şey yazılı, bakıyorum ve düşünüyorum: "Vay canına, bu hata iki yıldır burada değil kapalı, burada kullanıcıyı kaba bir şekilde yanıtladınız, işte başka bir şey - almadım ”. Yani, bu senin kişisel projen.

Sonra, başka ne harika olurdu? Nasıl yaptığını görmek isterim takım çalışması... Yani, bir röportaj için bana geliyorsunuz ve diyorsunuz: “Üniversiteden çocuklar ve ben bazı iyi başvurular yaptık. Orada bir veritabanı yaptım, bir çeşit mobil uygulamave ayrıca orada bizim için çalışan bir adam, bir kız-tasarımcı ve teknik destek alan bir erkek. Beş kişiydik ve harika bir proje yaptık. " Pekala, projenizin gerçekte ne olduğunu anlıyorum, diyorum: "Seninki nedir?" Koda tekrar bakıyorum ve insanlarla bir takımda nasıl çalışılacağını bildiğinizi anlıyorum.

Bir programcı, garajda tek başına oturan (böyle indie), ışıkları kapalı bir yerde, kimseyle konuşmayan, sakal bırakan ve yazan kişi değildir. Yine de, insanlarla bir tür etkileşim var. Örneğin, bazen size küfür edebilen bir patronla (patronlar, öyledir, her zaman nazik değildirler). Ve insanlarla nasıl çalışılacağını bildiğini görüyorum ve bir tür iyi ekibin olması beni mutlu ediyor. İyi olmasa bile, sahip olmamaktan iyidir.

Şahsen başka ne isterdim? Kendinizi büyük projelerde gösterdiyseniz. Örneğin, Linux çekirdeğine bir şey taahhüt ettiniz, sistem programlaması yapıyorsanız, bazı hataları düzelttiniz. Yani, başka birinin kodunu okuyabileceğinizi ve üzerinde bazı değişiklikler yapabileceğinizi gösterdiler. Bakıyorum: "Ah, gerçekten, karmaşık bir şey buldunuz ve bazı hataları düzelttiniz!" Ve bundan çok mutlu olmaya başlıyorum. Çünkü ben… şey, bilmiyorum… bu yüzden programcım istifa etti çünkü rakipler ona daha yüksek bir maaş teklif etti ve acilen birini - sizi susturmam gerekiyor. Görünüşe göre sadece sıfırdan yazmışsın, ama sen başka birinin kodunu nasıl okuyacağını ve düzenleyeceğini bilmiyorsun ve ben üzülüyorum.

Ve son olarak, belirli konuma bağlı olarak, çeşitli başka şeyler de vardır. İş analistiyseniz, Kaggle'da veri analizi görevlerini yapmanızı isterim. Bazı algoritmik konularda bir iş bulursanız, spor programlamasında bazı algoritmalar yapmanızı isterim. Ve son olarak, mesleği düşündüyseniz, röportajların nasıl yapıldığını okuyun, orada bazı insanların büyük bir memnuniyetsizlik ifade ettiğini gördünüz: “Geldim ve bana hobimin ne olduğunu soruyorlar. Bir baykuş gibi oturuyorum ve hobim olmadığı için cevap vermiyorum ”ve İK’ların bunu yaptığını düşünüyorlar. Aslında, ne kadar arkadaş canlısı ve uygun olduğunuzu anlamaya çalışıyorlar. Düşmanca ve yetersizseniz, ne kadar dahi ve işkolik olursanız olun, çok bilgili, sağlam bir uzman, ekibin sizinle çalışması zor olacak ve projeyi tek başınıza çekmeyeceksiniz. Ayrıca esnetseniz bile şirket için ne kadar yük olduğunu tahmin edebilirsiniz. Ve yarın gelip: "Maaşımı 10 kat artır, yoksa seni terk ederim" diyeceksin. Açıkçası, şirketler bu duruma girmek istemiyor. Bu nedenle, kişinin kendi içinde yeterlilik ve iyi niyet eğitimi, (en azından) bazı mesleki becerilerin gelişimi kadar önemlidir.

Özetlemek gerekirse ne diyebilirsiniz? Hangi diller iyi hangileri kötü? Örneğin Ruby, Python ve PHP arasındaki bir grup dil \u200b\u200biçinde hangisini seçmeli? Elbette doğru cevap Python'dur, ancak aslında aralarındaki fark, izin verilen böcek sayısında, başka bir şeyin miktarında -% 5, belki de% 10'dur. Yani, zaten PHP ile yazılmış bitmiş bir projeniz varsa, aklı başında hiç kimse "Her şeyi Python'da yeniden yazalım" demeyecektir. "Hadi daha fazla PHP geliştiricisi tutalım ve PHP'de yazmaya devam edelim" diyecekler. Harika, bu kötü bir seçim değil. Açıktır ki, aniden bir proje yazmaya başlarsanız, o zaman şimdi Python'u seçmeniz akıllıca olabilir. Yine de değişir. Belki piyasada bir sürü ucuz PHP geliştiriciniz var, ancak python geliştiricileri pahalıdır ve şöyle düşünüyorsunuz: "Evet, teknoloji daha havalı, ancak hazır geliştiricilerden tasarruf edeceğim." Ve hepsi bu, harika, zaten gelip orada çalışıyorsun.
Java ve C ++ arasında nasıl seçim yaparım? Evet, aynı şey olur. Yeni bir büyük projeye hangi dilde başlayacağınıza karar verdiğinizde profesyonel alanınızda bilgi sahibi olacak ve doğru seçimi yapabileceksiniz diye düşünüyorum. Şu anda, henüz bu seçimi yapmak zorunda değilsin ve bu yüzden sana istediğini yapmanı tavsiye ederim.

Temel bilgiler, daha önce de söylediğim gibi, programlamanın çok, çok temelleri (bir fonksiyon nedir, ne ise, for's, diziler, başka bir şey) herhangi bir dilde aşağı yukarı öğrenilebilir. Örneğin, C ++ 'da, pek çok şeye benzediği için ve içindeki ayrıntılar (bu düzeyde) en az olanıdır ve harfler yazmak için en az gereksiz olanıdır. Öyleyse, bazı karmaşık mimari şeyler öğrendiğinizde, bunun hakkında çok fazla şey öğrenin ve endişelenin. Yani, asıl mesele - deneyin, neyi sevdiğinizi arayın ve saatin zaten sabahın 4'ü olduğunu fark ettiğinizde ve hoşunuza gittiği için eğlenmek ve yazmak için oturuyorsunuz - muhtemelen şu anda bulduğunuz açıktır. ...