Ne için hangi programlama dillerine ihtiyaç var? Çeşitli programlama dilleri ve uygulama alanları. Yandex'de ders

  • 07.09.2019

Programcıların dünyanın en yüksek ücretli profesyonellerinden biri olduğu bir sır değil. Rusya bir istisna değildir. İyi programcılar burada da takdir edilmektedir. Ve hızlı büyüyen ve kazançlı bir kariyerle ilgileniyorsanız, öğrenmek ve programcı olmak isteyebilirsiniz.

Bu seçimde size yardımcı olmak için çeşitli iş arama sitelerinden veri topladım. Bu tam bir liste olmasa da, en çok talep gören programlama dilleri (işverenler tarafından aranan) hakkında fikir veriyor.

2016'nın en çok talep edilen 9 programlama dili

Hemen hemen her yerde ve geniş bir yelpazede kullanıldığı için SQL'in listenin başında olması şaşırtıcı değil. MySQL, PostgreSQL ve Microsoft SQL gibi veritabanı teknolojileri, büyük ve küçük işletmeler, hastaneler, bankalar, üniversiteler vb. sunucularda kullanılmaktadır. Gerçekten de, veritabanı erişimi olan hemen hemen her bilgisayar ve kişi nihayetinde SQL ile ilgilidir. Örneğin, tüm Android telefonlar ve iPhone'ların SQLite adlı bir SQL veritabanına erişimi vardır ve Google, Skype ve Dropbox tarafından geliştirilen birçok mobil uygulama bunu doğrudan kullanır.

  1. Java

Teknoloji topluluğu kısa süre önce Java'nın 20. yılını kutladı. Yaklaşık 9 milyon geliştirici tarafından kullanılan en yaygın olarak benimsenen programlama dillerinden biridir ve dünya çapında 7 milyar cihazda çalışır. Tüm yerel Android uygulamalarını geliştirmek için kullanılan bir programlama dilidir. Java geliştiricilerinin popülaritesi, bu dilin eski uygulamaların şimdi ve gelecekte çalışmaya devam etmesini sağlayan uzun vadeli uyumluluğa sahip olmasından kaynaklanmaktadır. Tek zorluk, bu dili öğrenmenin özellikle yeni başlayanlar için oldukça zor olmasıdır.

JavaScript, en popüler ve güçlü programlama dillerinden bir diğeridir ve web sayfalarını hayata geçirerek onları etkileşimli hale getirmek için kullanılır. Örneğin JavaScript, web sayfalarına efektler eklemek, açılır mesajları görüntülemek veya temel işlevlere sahip oyunlar oluşturmak için kullanılabilir. JavaScript'in, Internet Explorer, FireFox ve Safari de dahil olmak üzere varsayılan olarak tüm büyük web tarayıcılarında yerleşik olarak bulunan World Wide Web'in komut dosyası dili olduğunu da belirtmekte fayda var. Hemen hemen her site, JavaScript geliştiricilerine olan talebi artıran bazı JavaScript öğeleri içerir. Son yıllarda JavaScript, diğer şeylerin yanı sıra gerçek zamanlı iletişim sağlayan sunucu taraflı bir teknoloji olan Node.js'nin temeli olarak da kullanılmaya başlandı.

C# (telaffuz edilen C-Sharp), Microsoft tarafından .NET Framework üzerinde çalışan çok çeşitli kurumsal uygulamalar için geliştirilmiş nispeten yeni bir programlama dilidir. C ve C++'ın evrimi, C# basit, modern, güvenli ve nesne yönelimlidir.

C ++ (telaffuz edilen C-plus-plus), "C" diline dayanan genel amaçlı bir nesne yönelimli programlama dilidir. Bjarne Stroustrup tarafından Bell Laboratuarlarında geliştirilen C++ ilk olarak 1983 yılında piyasaya sürüldü. Stroustrup, C ++ uygulamalarının kapsamlı bir listesini tutar. Liste, Adobe ve Microsoft uygulamalarını, MongoDB veritabanlarını, çoğu Mac OS/X'i içerir ve "twitch" oyun geliştirme veya ses/video işleme gibi görev açısından kritik uygulamaların performansını öğrenmek için en iyi dildir.

Python, adını "Monty Python"dan alan genel amaçlı bir programlama dilidir. Python basit ve okunması kolaydır (İngilizce bilenler için). Yeni başlayanlar ve deneyimli profesyoneller için harika bir dildir. Python için birçok programlama kursu vardır, 10 bilgisayar bilimi bölümünden 8'i Python ile kodlamayı öğretir. Python dilinin eğitimde kullanılması nedeniyle matematik, fizik, doğal işleme vb. ile ilgili Python için oluşturulmuş birçok kütüphane bulunmaktadır.

Danimarkalı-Kanadalı programcı Rasmus Lerdorf tarafından 1994 yılında oluşturulan PHP, yeni bir programlama dili olarak tasarlanmamıştı. Bunun yerine, yaratıcısının kişisel sayfasını İnternet'te (PHP'de) sürdürmesine yardımcı olacak bir dizi araç olarak hizmet etmek için yaratılmıştır. Bugün PHP, HTML biçiminde yazılmış web sayfaları oluşturmak için kullanılabilen sunucu taraflı bir betik programlama dilidir. PHP, acemi programcılar için kullanımı kolay olduğu için çok popüler bir dildir, ancak aynı zamanda daha deneyimli olanlar için birçok gelişmiş özellik sunar.

Java veya C gibi, Ruby de genel amaçlı bir programlama dilidir. Ruby on Rails, web uygulamaları yazmak için kullanılır ve ayrıca web sunucusu ve veritabanı ile entegrasyon sağlar. Ruby on Rails, hızlı geliştirme ve çok çeşitli kitaplıklar dahil olmak üzere birçok olumlu niteliğe sahiptir. Küçük girişimlerden büyük işletmelere kadar birçok şirket tarafından kullanılmaktadır. Hulu, Twitter, Github ve Living Social, web uygulamalarından en az biri için Ruby on Rails kullanıyor.

2014 yılında Apple kendi programlama dilini icat etmeye karar verdi. Sonuç, geliştiriciler için iOS ve OS X için yeni bir programlama dili olan Swift. Geliştiriciler, Swift'in birçok bölümünün kendilerine C++ ve Objective-C deneyiminden aşina olduğunu iddia ediyor. American Airlines, LinkedIn ve Duolingo dahil olmak üzere batıdaki birçok şirket Swift'e geçti ve önümüzdeki yıllarda dilin popülaritesi artmaya devam edecek.

Herhangi bir ustanın, her biri belirli bir görev için uygun olan eksiksiz bir araç seti vardır. Programlamada olduğu gibi, asla tek bir dil olmayacak ve her dil, yeniliklere ayak uydurmak için zaman içinde gelişecek ve gelişecektir.

Bu nedenle, bir geliştirici olmakla ilgileniyorsanız, çok yönlü ve uyarlanabilir olabilmeniz ve kariyeriniz boyunca dil öğrenmeye devam edebilmeniz için çeşitli programlama dillerinde bilgili olmak önemlidir.

Gerçekten yeni programlama dillerine ihtiyacımız var mı? Tabii ki, şu anda oldukça yeterliler. Zorunlu, işlevsel, nesne yönelimli, dinamik, derlenmiş, yorumlanmış ve betik dillerinin çeşitliliği arasında hiçbir geliştirici bugün mevcut olan tüm olasılıkları kavrayamaz.

Ve yine de, yeni dillerin ortaya çıkması oldukça sık görülen bir olgudur. Bazıları öğrenciler veya hobiler tarafından bireysel projeler olarak oluşturulur, diğerleri ise büyük yazılım üreticilerinin ürünleridir. Küçük ve orta ölçekli şirketler bile bu sürece katılarak sektörlerinin ihtiyaçlarına yönelik diller oluşturuyor. Öyleyse neden insanlar tekerleği tekrar tekrar icat etmeye devam ediyor?

Gerçek şu ki, şu anda popüler olan dillerin gücüne ve çok yönlülüğüne rağmen, hiçbir sözdizimi ideal olarak evrensel değildir. Ayrıca, programlamanın kendisi sürekli olarak gelişmektedir. Çok çekirdekli işlemcilerin çoğalması, bulut programlama, taşınabilirlik ve dağıtılmış mimariler, geliştiriciler için yeni zorluklar yarattı. Mevcut dillere, özellikle de daha popüler olanlara en son özellikler, paradigmalar ve kalıplar için destek eklemek bunaltıcı olabilir. Bazen en iyi çözüm sıfırdan başlamaktır.

Bu nedenle, burada her biri yazılım geliştirme sanatına yeni bir bakış açısıyla bakan, belirli bir sorunu veya günümüzde en popüler olan belirli bir dil eksikliğini çözen 10 gelişmiş programlama dili sunulmaktadır. Bazıları halihazırda tamamlanmış projeler, bazıları ise henüz gelişimlerinin ilk aşamalarında. Bazıları muhtemelen asla popülerlik kazanmayacak, ancak bunlardan herhangi biri, en azından yeni diller oluşturulana kadar, programlamayı tamamen değiştirecek devrim niteliğinde bir başarı olabilir.

JavaScript, web sayfalarına temel etkileşim eklemek için iyidir, ancak web uygulama kodunuz binlerce satır kod olduğunda, zayıflıkları ortaya çıkar. Bu nedenle Google, şirketin web programlama için yeni ana dil olacağına inandığı dil olan Dart'ı yarattı.

JavaScript gibi Dart da C dilinde kullanılanlara benzer sözdizimleri ve anahtar kelimeler kullanır.Ancak önemli bir fark, JavaScript prototiplere dayalıyken Dart'taki nesnelerin C++ veya Java'da olduğu gibi sınıflar ve arayüzler kullanılarak tanımlanmasıdır. Dart ayrıca programcıların değişkenleri statik tiplerle tanımlamasına da izin verir. Buradaki fikir, Dart'ı JavaScript kadar tanıdık, dinamik ve esnek hale getirirken aynı zamanda geliştiricilerin hızlı ve yürütmesi kolay ve bulunması zor hatalar yapması zor kodlar yazmasına izin vermektir.

Dart'ı kullanabileceğiniz birkaç yer var. İstemcide veya sunucuda (bir Node.js) çalışacak şekilde tasarlanmıştır, ancak istemci tarafı Dart kodunu çalıştırmanın tek yolu onu JavaScript'e çapraz derlemektir. Ancak bundan sonra bile tüm tarayıcılarda çalışmayacaktır. Ancak Dart ücretsiz bir BSD lisansı altında yayınlandığından, Google'ın şartlarını kabul eden herhangi bir satıcı, ürünlerinde bu dili kullanmakta serbesttir. Google'ın yapması gereken tek şey tüm sektörü ikna etmek.

F # kodu, OCaml koduna biraz benzer, ancak kendi ilginç sözdizimini içerir. Örneğin bilimsel hesaplamaları kolaylaştırmak için F# içindeki sayısal veri türleri birim olabilir. F # ayrıca asenkron G / Ç'yi kolaylaştırmak, CPU'yu paralelleştirmek ve GPU'ya çıkış işlemlerini kolaylaştırmak için yapılar sağlar.

Microsoft Research'te uzun bir olgunlaşma döneminden sonra, F# şimdi Visual Studio 2010 ile birlikte geliyor. Daha da iyisi, ancak şirket genelinde değil, Microsoft, Apache açık kaynak lisansı altında bir F # derleyicisi ve kök kitaplığı yaptı. Ücretsiz olarak kullanmaya başlayabilir ve hatta Mac ve Linux sistemlerinde (Mono çalışma zamanını kullanarak) kullanabilirsiniz.

Doğal olarak, bu tür bir entegre sistemle, sonunda büyülü bir şey olmalı. Opa çalışma zamanı, bağımsız alternatiflerle değiştirilemeyen kendi web sunucusunu ve veritabanı yönetim sistemini entegre eder. Ancak, yalnızca birkaç düzine kod satırıyla modern veriye dayalı web uygulamaları geliştirme yeteneği göz önüne alındığında, bu o kadar önemli olmayabilir. Opa ücretsizdir ve şu anda 64 bit Linux ve Mac OS X platformları için kullanılabilir, diğer bağlantı noktaları ise geliştirme aşamasındadır.

Fantom, Academic Free License 3.0 kapsamında ücretsiz olarak dağıtılır ve Windows ve Unix benzeri platformlar (Mac OS X dahil) için kullanılabilir.

Öğrenilen programlama dili # 7: Zimbu

Karışık doğası nedeniyle, Zimbu'nun sözdizimi benzersiz ve spesifiktir, ancak aynı zamanda birçok özelliğe sahiptir. C'de kullanılanlara benzer ifadeler ve operatörler kullanır, ancak kendi anahtar sözcükleri, veri türleri ve blok yapıları vardır. Bellek yönetimini, iş parçacıklarını ve işlem hatlarını destekler.

Tek sorun taşınabilirlik. Zimbu derlenmiş bir dil olmasına rağmen, derleyicisi ANSI C kodu üretir ve ikili dosyalar yalnızca yerleşik bir C derleyicisi olan platformlarda oluşturulabilir.

Ne yazık ki, Zimbu projesi hala geliştirme aşamasındadır. Derleyici ve bazı örnek programlar kendi başınıza oluşturulabilir, ancak geçerli Zimbu kodlarının tümü beklendiği gibi derlenip çalışmayacaktır. Bildirilen işlevlerin tümü henüz geliştirilmemiştir ve halihazırda sunulanlardan bazıları düzgün çalışmıyor. Dil belirtiminin de, gerektiğinde anahtar sözcükler, türler ve sözdizimi ekleyerek zaman içinde değişmesi muhtemeldir. Sonuç olarak, belgeler de eksik. Ancak, denemek isterseniz, önkoşul olan yardımcı programlar Apache lisansı altında zaten mevcuttur.

Çalışılan programlama dili # 8: X10

Paralel işleme bir zamanlar yazılım geliştirmenin özel bir alanıydı, ancak çok çekirdekli işlemcilerin ve dağıtılmış hesaplamanın yaygınlaşmasıyla paralellik popülerlik kazandı. Ne yazık ki mevcut programlama dilleri bu trende ayak uyduramıyor. Bu nedenle IBM Research, geliştirici üretkenliğini "on katına çıkarmayı" hedefleyen modern paralel mimariler için özel olarak tasarlanmış bir dil olan X10'u yaratıyor.

PGAS programlama modeli (paylaşılan global adres alanı modeli) sayesinde X10'da paralellik mümkündür. Kod ve veriler bloklar halinde tahsis edilir ve farklı "boşluklara" dağıtılır, böylece bir programın tek iş parçacıklı bir prototipten (tek boşluk) bir veya daha fazla çok çekirdekli işlemci üzerinde çalışan çok iş parçacıklı bir programa (birden fazla boşluk) ölçeklendirilmesini kolaylaştırır. ) yüksek performanslı bir kümede.

X10 kodu en çok Java'ya benzer. Esasen, X10 çalışma zamanı, JVM için hem gömülü yürütülebilir dosyalar hem de sınıf dosyaları olarak mevcuttur. X10 derleyicisi, C++ veya Java kaynak kodunun çıktısını alabilir. Gelecekte Java ile ileriye dönük uyumluluk geliştirme planları var.

Bu arada, dil zaten oldukça gelişmiş olmasına rağmen gelişiyor. Derleyici ve çalışma zamanı, Linux, Mac OS X ve Windows dahil olmak üzere çeşitli platformlar için mevcuttur. Ek yardımcı programlar, Eclipse Kamu Lisansı kapsamında lisanslanan Eclipse tabanlı etkileşimli geliştirme ortamı (IDE) ve hata ayıklayıcıdır.

Çalışılan programlama dili # 9: haXe

Taşınabilir kod yazmak için birçok dil kullanılabilir. Neredeyse tüm CPU mimarileri için C derleyicileri mevcuttur ve Java bayt kodu, JVM'nin olduğu her yerde çalışır. Ancak haXe ("hex" olarak telaffuz edilir) taşınabilir olmaktan daha fazlasıdır. Yerleşikten çeşitli işletim ortamlarında kullanılabilen çok platformlu bir dildir.

Bilgisayar programları genellikle "talimat kümeleri" olarak tanımlanır ve bilgisayar dilleri birçok kişi tarafından yalnızca bu talimatları sağlamanın kelime dağarcığı ve sözdizimsel yolu olarak algılanır.

Bu açıdan bakıldığında farklı programlama dilleri farklı gramerlere veya farklı kelime dağarcığına sahip olabilir. Her dil, noktalı virgülleri farklı şekilde ele alabilir veya yazılı olarak büyük harfler gerektirebilir, ancak genel olarak tüm diller aynı ilkeye dayanmaktadır.

Ancak programlamanın gerçekliği çok daha karmaşıktır.

Bugün programlama

İşin garibi, bilgisayar programcılığındaki gerçek "küresel" fikirlerin çoğu 1950'lerde ve 60'larda geliştirildi. O zamandan beri birçok yeni dil ortaya çıktı, ancak hiçbiri mantık ve hesaplamaya gerçekten yeni bir yaklaşım uygulamadı.

Son birkaç on yılda yeni programlama dillerinin geliştirilmesi, geliştiricilerin deneyimlerine dayanmaktadır. Bu, yazılması daha kolay (Ruby'nin arkasındaki itici güç) ve okunması daha kolay (Python) ve belirli mantıksal yapı türlerini ve problem çözme yöntemlerini daha sezgisel hale getiren bir kod olduğu anlamına gelir.

Belirli programlama sorunlarını (PHP ve SASS gibi) çözmek, belirli sistem türlerinde () çalışmak veya belirli bir ortamda veya platformda (Java ve JavaScript) çalıştırmak için birkaç dil tasarlanmıştır. Yeni başlayanların programlamayı öğrenmelerine yardımcı olmak için özel olarak birkaç dil tasarlanmıştır (klasik örnekler BASIC ve Scratch'tir).

Dil tasarımına ilişkin teoriler ve uygulamalar (çoğunlukla) geniş çapta kabul gören ortodoksiye dönüştüğünden, programlama pratiği geliştirmedeki yeni ve ilginç çalışmaların çoğu artık sistem mimarisi etrafında toplanmıştır.

Nispeten yeni gelişmeler, SOA (Servis Odaklı Mimari- Servis Odaklı Mimari) ve MVC (Model-View-Controller) gibi çerçevelerin yanı sıra programcıların bu paradigmalar içinde kolayca çalışmasına izin verir.

programlama dilleri listesi

Büyüyen bir popüler programlama dilleri, biçimlendirme ve protokoller listesi. Her birinin açıklamasına bağlantılar:

ASCII kodlaması

  • Karakter kodlaması, ana bilgisayar ve İnternet yönlerinden biridir. ASCII, yaygın olarak kullanılan ilk karakter kodlama sistemidir. UTF-8'in yerini aldı, ancak ASCII bugün hala İnternet'teki karakterlerin büyük çoğunluğunun temeli. Bunu anlamak programcılar için çok önemlidir. Daha fazlasını buradan okuyun:

ASP / ASP.NET

  • ASP, Aktif Sunucu Sayfaları anlamına gelir. Microsoft IIS web sunucusu için ilk sunucu tarafı komut dosyası dilidir. ASP, açık kaynaklı bir sunucu tarafı çerçevesi olan ASP.NET ile değiştirildi. Daha fazla ayrıntı (tur):

AutoLISP

  • AutoLISP, özellikle bilgisayar destekli yazılım tasarımı için oluşturulmuş basit, hafif, yorumlanabilir bir programlama dilidir. Bunun hakkında oku:

awk

  • Awk, bir dosyadan veya başka bir kaynaktan veri çıkarmanıza ve istediğiniz formatta çıktı almanıza izin veren son derece güçlü bir kelime işlemci dilidir. Zaten eski bir araçtır, ancak yine de eskisi kadar kullanışlıdır. Daha fazla bilgi edinin (tur):.

BASH

  • Bash, Unix dünyasında en çok kullanılan komut satırı arabirimidir. Hem Linux hem de Mac OS X için varsayılan metin tabanlı arabirimdir. Daha fazlasını okuyun:

Ortak Lisp

  • Lisp oldukça benzersiz bir programlama dilidir, tartışmasız en eski ve bugün hala kullanımdadır. Bu özellikle yapay zeka alanında önemlidir. Daha fazla ayrıntı (tur):

C

  • Buraya bu dilin iki türevini eklersek, o zaman hiçbir dilin C'den daha fazla fayda ve etki getirmediğini güvenle söyleyebiliriz. Bu, özellikle işletim sistemlerinin ve diğer yazılımların geliştirilmesi için önemlidir. Diğer diller için birçok derleyici ve yorumlayıcı C ile yazılmıştır. Daha fazla ayrıntı:

C++

  • Başlangıçta “Sınıflı C” olarak adlandırılan C ++, birçok yönden C'nin daha gelişmiş bir halefidir (genel durum daha karmaşık olsa da). C ++, düşük düzeyde donanım işleme yeteneklerini korurken yüksek düzeyde bir C programlama paradigması eklemek için tasarlanmıştır. Bu eklemelerin birçoğu yıllar içinde C'ye eklenmiştir ve diller daha çok aynı dilin iki lehçesi gibidir. Daha fazla ayrıntı (tur):

C #

  • C ++'a benzer şekilde .NET programlama için ana dil olarak kullanılır, C programlama dilinin bir uzantısıdır, ancak nesne yönelimli yetenekler biçiminde önemli bir ekleme ile. Daha fazla ayrıntı (tur):

CSS / CSS3

  • CSS veya Basamaklı Stil Sayfaları da bir programlama dili değildir, ancak sayfa stili dili, belgeler ve uygulamalar için stil ve düzen kuralları sağlayan bir dildir. İnternette kullanılan ana stil dilidir. Daha fazla detay:

Emacs Lisp

  • Emacs uzun zamandır popüler ve güçlü bir metin editörü olarak biliniyor. Ancak buna Emacs Lisp'i eklemek, onu neredeyse tüm programlama dilleri için entegre bir geliştirme ortamına dönüştürür. Daha fazla ayrıntı (tur):.

F #

  • F# genel amaçlı bir programlama dilidir. Son derece etkili olacak şekilde tasarlanmıştır. Başlangıçta yalnızca bir Microsoft dili, şimdi açık kaynak kodlu ve tüm platformlarda kullanılıyor. Daha fazla ayrıntı (tur):.

FORTAN

  • Fortran ilk olarak 1957'de ortaya çıktı ve bugün hala modern bilim ve teknolojideki en zor problemlerden bazılarını çözmek için kullanılıyor. Daha fazla ayrıntı (tur):

İLERİ

  • Forth üzerinde çalışmalar 1968'de başladı ve bu dil genellikle geleneksel bir işletim sistemine sahip olmayan donanımlarda kullanılıyor. Ayrıca takım tezgahı kontrolü için yaygın olarak kullanılmaktadır. Daha fazla ayrıntı (tur):

Haskell

  • Haskell, bir düzine başka dilin prototipi olmasının yanı sıra, daha popüler işlevsel programlama dillerinden biridir. İş dünyasında ve akademide yaygın olarak kullanılmaktadır ve işlevsel programlamaya başlamak için harika bir dildir. Daha fazla ayrıntı (tur):

HTML

  • HTML bir programlama dili değildir. Bu bir biçimlendirme dilidir - içeriğe anlamsal ve biçimsel ek açıklamalar eklemek için kullanılan bir dildir. Web içeriği için birincil dildir. Bunun bilgisi, tüm web tasarımcıları ve web geliştiricileri ile İnternet içeriği üreten herkes (yazarlar, editörler) için gerekli ve zorunludur. Daha fazla (tur): ve

IDL

  • IDL veya Etkileşimli Veri Dili, öncelikle veri analizi ve görselleştirme için kullanılan bir programlama dilidir. Hala havacılık ve astronomi endüstrilerinde yaygın olarak kullanılmaktadır. Daha fazla ayrıntı (tur):

İNTERKAL

  • INTERCAL, 1970'lerin başında geliştirilen bir parodi bilgisayar dilidir. Teknik olarak dillerin ne kadar karmaşık olduğunu ve okunmasının ne kadar zor olduğunu göstermek için bir şaka olarak oluşturuldu. İndirilebilen ve hatta bir şeyler yapabileceğiniz gerçek bir dildir. Bunun için ona çok aşina olmanız gerektiği anlaşılıyor - ama yine de çok iyi değil, çünkü INTERCAL'in kendisi bundan hoşlanmayacaktır. Daha fazla ayrıntı (tur):

Java

  • Java, Java Sanal Makinesinde kullanılmak üzere tasarlanmış üst düzey bir dildir. Çok az dış bağımlılığa sahiptir ve herhangi bir fiziksel makinede çalışacak şekilde tasarlanmıştır. Ağ mimarisinde, gömülü cihazlarda ve diğer bilgi işlem uygulamalarında yaygın olarak kullanılmaktadır. Daha fazla ayrıntı (tur):.

Javascript

  • JavaScript (aslında Java ile ilgili değildir), orijinal olarak web tarayıcılarında kullanılmak üzere geliştirilmiş bir betik dilidir. Bu nedenle, web sayfalarının bellek içi içeriğini görüntüleyen Belge Nesne Modeli (DOM) ile çalışmak için yerleşik bir yeteneği vardır. Ön uç web geliştirme için birincil programlama dilidir. Çoğunlukla olay odaklıdır ve son zamanlarda Node.JS sayesinde sunucu taraflı bir dil olarak kabul görmüştür. Daha fazla ayrıntı (tur): ve. Ve burada:

Ksh

  • Korn Shell (ksh), Unix'te kullanılan bir komut satırı arabirimidir. Standart Bourne kabuğuyla uyumlu, ancak C kabuğunun tüm harika etkileşimli özelliklerine sahip erken bir kabuktu.

Linux Programlama

  • Linux programlama, kabuk komut dosyası oluşturmadan uygulama geliştirmeye ve çekirdek geliştirmeye kadar her şeyi içerir. Daha fazla ayrıntı (tur):

Logo

  • Logo, programlama öğretimi için en eski dillerden biridir ve muhtemelen hala en ünlüsüdür. Çocukların bilgisayar komutlarıyla hareket ettirdikleri kaplumbağasıyla ünlüdür. Eğlenceli öğretim programlama. Daha fazla ayrıntı (tur):

makine öğrenimi

  • ML başlangıçta bir meta programlama dili olarak tasarlandı: başka diller oluşturmak için bir dil. Ancak zamanla, eğitimde, matematikte, bilimde ve hatta finansta yaygın olarak kullanılan genel amaçlı bir dil haline geldi. Daha fazla ayrıntı (tur):.

MPI

  • Mesaj Geçiş Arayüzü, işlemler veya programlar arasında mesaj göndermek için standart bir protokoldür. C, C ++, Java ve Python dahil olmak üzere bir dizi programlama dilinde uygulanmıştır. MPI sayesinde paralel hesaplama mümkün hale geldi. Daha fazla ayrıntı (tur):

İnternet prizleri ile ağ programlama

Amaç-C

  • C'nin tamamen nesne yönelimli bir uygulamasını sağlamak için 1980'lerde oluşturulan C'nin başka bir sürümü. Bu dil artık öncelikle Mac OSX ve iOS işletim sistemlerinde kullanılmaktadır. Yakın zamana kadar, iOS uygulamalarının Objective-C'de yazılması gerekiyordu, ancak şimdi Swift'de de yazabilirsiniz. Daha fazla ayrıntı (tur):

OCaml

  • OCaml, nesne yönelimli işlevsel bir bilgisayar dilidir. ML geleneğine göre diğer programlama dillerini ve çerçevelerini yazmak için çokça kullanılmaktadır. Daha fazla ayrıntı (tur):.

İşletim sistemi geliştirme

  • Programlamanın Everest'i, işletim sisteminin geliştirilmesidir. Kendinize istediğiniz her şeyi yazabileceğinizi kanıtlamak istiyorsanız, kendi işletim sistemi çekirdeğinizi ve ilgili araçları yazmaktan daha iyi bir şey yoktur, ancak dikkatli olun, bu yolculuğa yalnızca cesur ve gerçek programcılar çıkabilir! Daha fazla ayrıntı (tur):.

Perl

  • Hemen hemen her programcı için çok kullanışlı bir araç. Yorumlanmış bir dil olarak, derlenmesi gerekmez, bazen betik dillerinin “İsviçre çakısı” olarak adlandırılır. Daha fazla ayrıntı (tur):

PROLOG

  • Prolog, doğal dil işleme için tasarlanmış mantıksal bir programlama dilidir. Daha fazla ayrıntı (tur):

Saf Veri

  • Pure Data, benzersiz bir görsel programlama dilidir. Kullanıcıların video, ses ve grafik çizimleri oluşturmasına izin vermek için özel olarak oluşturuldu. Daha fazla ayrıntı (tur):.

piton

  • Python üst düzey bir programlama dilidir. "Komut dosyası dili" olarak da bilinen yorumlanmış (derlenmemiş) bir dil. Esas olarak otomasyon ve veri analizi görevleri gibi özel programlama görevlerini gerçekleştirmek için bir araç olarak kullanılır. Genellikle araştırmacılar tarafından kullanılan, matematiksel ve bilimsel hesaplamalar için güçlü bir araç setine sahiptir. Daha fazla ayrıntı (tur):

raylar üzerinde yakut

  • Ruby on Rails, Ruby programlama dili için bir web geliştirme çerçevesidir. Web uygulaması programlama sürecini hızlandırmak için bir MVC (Model View Controller) mimarisi, bir veritabanı soyutlama katmanı ve birçok araç sağlar. Hızlı web geliştirme için çok popüler. Daha fazla ayrıntı (tur):

SAS

  • SAS, istatistiksel verileri analiz etmek için özel bir dildir. Devlet, akademi ve iş dünyasında yaygın olarak kullanılmaktadır. Çok fazla veriye sahip kişiler için SAS bariz bir seçimdir. Daha fazla ayrıntı (tur):.

Skala

  • Scala nispeten yeni bir dildir - az çok yeni ve daha iyi Java. Daha verimli olmak isteyen Java programcıları veya programlama öğrenmeye yeni başlayan ve gelecekte kendilerini sınırlamayacak güçlü bir dil öğrenmek isteyen kişiler için harika bir dildir. Daha fazla ayrıntı (tur):.

Şema

  • Scheme eski bir dildir, ancak yine de bilgisayar bilimlerinde programlama ve daha karmaşık konuları öğretmek için kullanılmaktadır. Öncelikle Lisp'e ve kısmen ALGOL'a dayanmaktadır. Daha fazla ayrıntı (tur):.

Kaşımak

  • Scratch programlama dili, 8-16 yaş arası çocuklara programlama öğretmek için özel olarak oluşturuldu. Scratch kolaydır ve bununla birlikte çocuklar programlama mantığının temellerini eğlenceli bir şekilde öğrenebilirler. Daha fazla ayrıntı (tur):

simülasyon

  • Simula, nesne yönelimli programlamanın temeli haline gelen kavramları tanıtan ilk dil olduğu için tarihsel olarak önemli bir dildir. Daha fazla ayrıntı (tur):.

gülümseme

  • SMIL (Senkronize Multimedya Entegrasyon Dili), sunum oluşturmak ve dağıtmak isteyenler için bir araçtır. Özellikle zaman zaman güncellenmesi gereken sunumlar oluşturmak istiyorsanız kullanışlıdır. Daha fazla ayrıntı (tur):

SQL

  • SQL (Yapılandırılmış Sorgu Dili), İlişkisel Veritabanı Yönetim Sistemleri (RDBMS'ler) ile iletişim kurmak için kullanılan dildir. SQL, programcının veri yapıları oluşturmasına, veri eklemesine ve düzenlemesine ve bunları sorgulamasına olanak tanır. Daha fazla ayrıntı (tur):

durum

  • Stata, ciddi istatistiksel sorunları çözmek için bir geliştirme ortamı ve programlama dilidir. Ve uzun zaman önce yaratılmış olmasına rağmen, hala yaygın olarak kullanılmaktadır. İstatistik çalışmalarıyla ilgileniyorsanız, Stata harika bir araçtır. Daha fazla ayrıntı (tur):

Süratli

  • Swift, Apple tarafından iOS, OS X, watchOS, tvOS ve Linux için geliştirilen yeni bir programlama dilidir. Apple cihazları için program ve uygulama geliştiricileri için geleceğin dilidir. Daha fazla ayrıntı (tur):

S-PLUS

  • S-PLUS, istatistiksel analiz yapmak için tasarlanmış güçlü S programlama dilinin ticari bir versiyonudur. GNU Projesi, R olarak adlandırılan kendi S versiyonuna sahiptir. S-PLUS üzerinde durularak S hakkında gerekli tüm kaynaklar:

UNIX Programlama

  • Unix programlamanın genişliği harika. Yönetimsel komut dosyalarından metin tabanlı koda ve X Pencere geliştirmeye kadar uzanır. Daha fazla ayrıntı (tur):

XML

  • XML, hem insan hem de makine tarafından okunabilen, iyi yapılandırılmış bir biçimlendirme dilidir. Daha fazla ayrıntı (tur):

Dersi hazırlayan: Akulov Ivan

Programlama dillerinin sınıflandırılması

Bilgisayar çağının başlangıcında, insan-bilgisayar iletişiminin tek yolu makine koduydu. Programlama dillerinin yaratıcılarının büyük başarısı, bilgisayarın kendisini bu dillerden makine koduna çevirmen olarak çalıştırmayı başarmalarıydı.

Mevcut programlama dilleri iki gruba ayrılabilir: prosedürel ve prosedürel olmayan (bkz. Şekil 4.1).

Prosedürel (veya algoritmik) programlar, belirli bir sorunu çözmek için bir reçete sistemidir. Bilgisayarın rolü, bu talimatların mekanik olarak uygulanmasına indirgenmiştir.

Prosedürel diller, düşük ve yüksek seviyeli dillere ayrılmıştır.

Farklı işlemci türlerinin farklı komut kümeleri vardır. Bir programlama dili belirli bir işlemci türüne odaklanıyor ve özelliklerini dikkate alıyorsa, buna denir. düşük seviyeli bir programlama dili.
Bu, dil operatörlerinin makine koduna yakın olduğu ve belirli işlemci talimatlarına odaklandığı anlamına gelir.

Pirinç. 4.1. Programlama dillerinin genel sınıflandırması

Düşük seviyeli (makine odaklı) diller, genellikle onaltılık biçimde makine kodlarından programlar oluşturmanıza olanak tanır. Onlarla çalışmak zordur, ancak çok yetenekli bir programcı tarafından onların yardımıyla oluşturulan programlar daha az bellek alanı kaplar ve daha hızlı çalışır. Bu dilleri kullanarak, sistem programları, sürücüler (bilgisayar aygıtlarını kontrol etmek için programlar) ve diğer bazı program türleri geliştirmek daha uygundur.

Düşük seviyeli dil (makine odaklı) montajcı her bir makine kodu talimatını basitçe temsil eden, sayı olarak değil, adı verilen geleneksel sembolik gösterimleri kullanarak
anımsatıcılar.

Düşük seviyeli dillerin yardımıyla, geliştiricinin işlemcinin tüm özelliklerine erişimi olduğu için çok verimli ve kompakt programlar oluşturulur.

Üst düzey programlama dilleri bir insana bilgisayardan çok daha yakın ve anlaşılır. Bunlarda belirli bilgisayar mimarilerinin özellikleri dikkate alınmaz, bu nedenle kaynak kod düzeyinde oluşturulan programlar, bu dilin tercümanının oluşturulduğu diğer platformlara kolayca taşınabilir. Net ve güçlü komutlarla üst düzey dillerde program geliştirmek çok daha kolay ve program oluştururken çok daha az hata yapılıyor.

Üst düzey algoritmik dillerin temel avantajı, sorunları çözmek için programları insan algısı için en uygun biçimde tanımlama yeteneğidir. Ancak her bilgisayar ailesinin kendine özgü bir iç (makine) dili olduğundan ve yalnızca bu dilde yazılmış talimatları yürütebildiğinden, kaynak programları makine diline çevirmek için özel çevirmen programları kullanılır.

Tüm çevirmenler iki ilkeden birine göre çalışır: yorumlama veya derleme.

Tercüme operatörden operatöre bir çeviri ve orijinal programın çevrilen operatörünün daha sonra yürütülmesi anlamına gelir. Bu bağlamda, yorumlama yönteminin iki dezavantajı not edilebilir: ilk olarak, yorumlama programı, orijinal programı yürütme sürecinin tamamı boyunca bilgisayarın belleğinde olmalıdır, yani belirli bir miktarda bellek işgal etmelidir; ikinci olarak, aynı operatörün çevrilmesi işlemi, bu komutun programda yürütülmesi gerektiği kadar tekrarlanır, bu da programın performansını önemli ölçüde azaltır.

Belirtilen dezavantajlara rağmen, tercüman tercümanlar kaynak programların geliştirilmesi ve hata ayıklanması için uygun oldukları için yeterli dağıtım aldı.

NS derlemeçeviri ve yürütme süreçleri zaman içinde ayrılır: ilk olarak, orijinal program tamamen makine diline çevrilir (bundan sonra RAM'de bir çevirmenin varlığı gereksiz hale gelir) ve daha sonra çevrilen program birçok kez çalıştırılabilir. Sonuç olarak, aynı program için, derleme yöntemiyle çeviri, gerekli RAM'i azaltırken bilgi işlem sisteminin daha yüksek performansını sağlar.

Aynı dilden bir tercümanla karşılaştırıldığında bir derleyici geliştirmenin büyük zorluğu, bir programı derlemenin iki adımı içermesiyle açıklanır: analiz, yani kaynak programın dil yapılarını oluşturma kurallarına uygun olarak yazılmasının doğruluğunu belirlemek. giriş dili ve sentez - makine kodlarında eşdeğer programlar oluşturma. Derleme çevirisi, yayın programının birden çok "görüntülenmesini" gerektirir, yani, derleyiciler-derleyicilerçok geçişlidir: ilk geçişte, bireysel operatörlerin dil yapılarının sözdiziminin doğruluğunu birbirinden bağımsız olarak kontrol ederler; bir sonraki geçişte, operatörler arasındaki sözdizimsel ilişkilerin doğruluğunu kontrol ederler, vb.

Ortaya çıkan derlenmiş program denir nesne modülü, makine kodlarında eşdeğer bir programdır, ancak belirli RAM adreslerine "bağlı" değildir. Bu nedenle, çalıştırmadan önce nesne modülü, işletim sisteminin özel bir programı (bağlantı düzenleyici) tarafından işlenmeli ve dönüştürülmelidir. yükleme modülü.

Yukarıda bahsedilen tercüman-tercüman ve tercüman-derleyicilerin yanı sıra pratikte tercümanlar da kullanılmaktadır. yorumlayıcılar-derleyiciler, Her iki çeviri ilkesinin avantajlarını birleştiren: programların geliştirilmesi ve hata ayıklama aşamasında, çevirmen yorumlayıcı modunda çalışır ve hata ayıklama işlemi tamamlandıktan sonra kaynak program nesne modülüne yeniden çevrilir (yani , derleme yöntemiyle). Bu, program oluşturma ve hata ayıklama sürecini önemli ölçüde basitleştirmeyi ve hızlandırmayı ve daha sonra nesne modülünün alınması nedeniyle daha verimli program yürütülmesini sağlamayı mümkün kılar.

Klasik prosedürel programlama, programcının bir problemin nasıl çözüleceğini ayrıntılı olarak açıklamasını, yani bir algoritma formüle etmesini ve özel bir şekilde yazmasını gerektirir. Ancak, sonucun beklenen özellikleri genellikle belirtilmez. Bu grupların dillerinin temel kavramları operatör ve veridir.
Prosedürel bir yaklaşımda, operatörler gruplar - prosedürler halinde birleştirilir. Bir bütün olarak yapılandırılmış programlama bu yönün kapsamının ötesine geçmez, yalnızca bazı yararlı teknikleri ek olarak düzeltir.
programlama teknolojileri.

Programlamada temelde farklı bir yön, prosedürel olmayan programlamanın metodolojileriyle (bazen "paradigmalar" olarak adlandırılır) ilişkilidir. Bunlar nesne yönelimli ve bildirimsel programlamayı içerir. Nesne yönelimli bir dil, birçok bağımsız nesne biçiminde bir ortam yaratır. Her nesne ayrı bir bilgisayar gibi davranır, işlevlerinin iç mekanizmalarına girmeden sorunları "kara kutular" olarak çözmek için kullanılabilirler. Profesyoneller arasında popüler olan nesne programlama dillerinden öncelikle C++'dan bahsetmek gerekir; daha geniş bir programcı çemberi için Delphi ve Visual Basic gibi ortamlar tercih edilir.



Bir bildirim dili kullanırken, programcı ilk bilgi yapılarını, bunlar arasındaki ilişkileri ve sonucun hangi özelliklere sahip olması gerektiğini belirtir. Aynı zamanda, programcı onu elde etmek için bir prosedür ("algoritma") oluşturmaz (en azından ideal olarak). Bu dillerde "operatör" ("komut") kavramı yoktur. Bildirim dilleri iki aileye ayrılabilir - mantıksal (tipik temsilci Prolog'dur) ve işlevsel (Lisp).

En ünlü programlama dillerini karakterize edelim.

1.Fortran(FORMÜL ÇEVİRİ sistemi - formül çeviri sistemi); matematiksel yönelim problemlerinin çözümünde bu güne kadar aktif olarak kullanılan en eski dil. Matematik ve mühendislik problemlerinin bilgisayar programlaması için klasik bir dildir.

2.TEMEL(Yeni Başlayanlar İçin Çok Amaçlı Sembolik Talimat Kodu - yeni başlayanlar için evrensel bir sembolik talimat kodu); birçok eksikliğe ve çok sayıda zayıf uyumlu versiyona rağmen - kullanıcı sayısı açısından en popüler olanıdır. Basit programlar yazarken yaygın olarak kullanılır.

3.Algol(ALGOritmik Dil - algoritmik dil); teoride büyük bir rol oynamıştır, ancak şimdi pratik programlama için neredeyse hiç kullanılmamaktadır.

4.ÜÇ / 1(PL / 1 Programlama Dili ilk programlama dilidir); çok amaçlı dil; şimdi neredeyse hiç kullanılmadı.

5.paskal(Pascal - bilim adamı Blaise Pascal'ın adını almıştır); hem programlama öğrenirken hem de profesyoneller arasında son derece popüler. 70'lerin başında İsviçreli bilim adamı Niklaus Wirth tarafından yaratıldı. Pascal başlangıçta bir eğitim dili olarak geliştirildi ve gerçekten de şimdi okullarda ve üniversitelerde programlama öğretimi için ana dillerden biri. Bununla birlikte, toplamdaki nitelikleri o kadar yüksek olduğu ortaya çıktı ki, profesyonel programcılar da isteyerek kullanıyor. Turbo-Pascal sistemini geliştiren Fransız Philippe Kahn, finansal başarı da dahil olmak üzere daha az etkileyici bir başarı elde etmedi. Onun fikrinin özü, program işlemenin sıralı aşamalarını - derleme, bağlantıları düzenleme, hata ayıklama ve hataları teşhis etme - tek bir arayüzde birleştirmekti. Turbo-Pascal sürümleri neredeyse tüm eğitim kurumlarını, programlama merkezlerini ve özel firmaları sular altında bıraktı. Pascal diline dayanarak, birkaç daha güçlü dil oluşturuldu (Modula, Ada, Delphi).

6.COBOL(Ortak İş Odaklı Dil - genel iş odaklı dil); büyük ölçüde kullanım dışı kaldı. Yönetim alanlarında toplu veri işleme için birincil dil olarak tasarlandı
ve iş.

7.ADA; 1975'ten beri Pentagon'un Evrensel Dil Yarışması'nda kazanan dildir (Mayıs 1979). Geliştiriciler, Jean Ihbia liderliğindeki bir grup bilim insanıdır. Kazanan dil, Augusta Ada Lovelace'den sonra ADA olarak adlandırıldı. ADA dili, dilin doğrudan mirasçısıdır
Pascal. Bu dil, büyük yazılım sistemlerinin oluşturulması ve uzun vadeli (uzun vadeli) bakımı için tasarlanmıştır, paralel işleme, gerçek zamanlı süreç kontrolü ve çok daha fazlasına olanak tanır; daha basit diller

8.Si(C - "si"); sistem yazılımı geliştirmede yaygın olarak kullanılır. Modern programlama üzerinde büyük bir iz bıraktı (ilk sürüm - 1972), yazılım sistemlerinin geliştiricileri (işletim sistemleri dahil) arasında çok popüler. C, hem üst düzey bir dilin hem de makine yönelimli bir dilin özelliklerini bir araya getirerek programcının BASIC ve Pascal gibi dillerin sağlamadığı tüm makine kaynaklarına erişmesini sağlar.

9.C++(C++); 1980 yılında Bjarne Stroustrup tarafından yaratılan, C dilinin nesne yönelimli bir uzantısı. Programcı üretkenliğini önemli ölçüde artıran birçok güçlü yeni özellik, C dilinden devralınan belirli bir düşük düzeyde üst üste bindirildi.

10.Delfi(Delfi); nesne yönelimli "görsel" programlama dili; şu sıralar son derece popüler. Borland uzmanları tarafından Pascal dili temelinde oluşturulan, C ve C++ dillerinin gücüne ve esnekliğine sahip olan Delphi dili, veritabanları ile etkileşimi sağlayan ve çeşitli desteği destekleyen uygulamalar geliştirirken arayüzün rahatlığı ve basitliği ile onları geride bırakıyor. kurumsal ağlar ve İnternet içindeki çalışma türleri ...

11.Java(Java); etkileşimli web sayfaları oluşturmak için son derece verimli, platformdan bağımsız nesne yönelimli programlama dili. Bu dil, Sun tarafından 90'ların başında C++ temel alınarak oluşturulmuştur. Tüm düşük seviyeli özellikleri ondan hariç tutarak C ++ tabanlı uygulamaların geliştirilmesini basitleştirmek için tasarlanmıştır.

12.Lisp(LISP) işlevsel bir programlama dilidir. Liste biçimindeki veri yapısına odaklanır ve büyük miktarda metin bilgisinin verimli işlenmesini organize etmenize olanak tanır.

13.önsöz(LOGic'te programlama - mantıksal programlama). Dilin temel amacı, akıllı programların ve sistemlerin geliştirilmesidir. Prolog, gerçeklere ve kurallara (yapay zeka sistemlerinin unsurlarından biri) dayalı bilgi tabanlarıyla çalışmak için özel olarak oluşturulmuş bir programlama dilidir. Dil, bazı sonuçların veya sonuçların doğru olduğunun varsayıldığı bir ters akıl yürütme zinciri gerçekleştirmek için bir geri izleme mekanizması uygular ve daha sonra bu varsayımlar, gerçekleri ve çıkarım kurallarını içeren bir bilgi tabanında test edilir.
Tahmin onaylanmazsa, geri dönüş yapılır ve yeni bir tahmin ilerletilir. Dil, yüklem hesabı teorisinin matematiksel bir modeline dayanmaktadır.

İnternet için programlama dilleri:

1. HTML. Evrak işleri için iyi bilinen bir dil. Çok basittir ve metni biçimlendirmek, resim eklemek, yazı tiplerini ve renkleri ayarlamak, bağlantıları ve tabloları düzenlemek için temel komutları içerir.

2. PERL. Büyük metin dosyalarını verimli bir şekilde işlemek, metin raporları oluşturmak ve görevleri yönetmek için bir araç olarak tasarlandı.
Perl, C gibi dillerden çok daha güçlüdür. Dizilerle, dizilerle çalışmak, işlemcileri yönetmek, sistem bilgileriyle çalışmak için yaygın olarak kullanılan birçok işlevi tanıtır.

3. Tcl / Tk. Bu dil, rutin süreçleri otomatikleştirmeye odaklanmıştır ve güçlü komutlardan oluşur. Sistemden bağımsızdır ve aynı zamanda grafik arayüzlü programlar oluşturmanıza olanak sağlar.

4. VRML.İnternette sanal 3B arayüzleri düzenlemek için oluşturuldu. Çeşitli üç boyutlu sahneleri, aydınlatma ve gölgeleri, dokuları metin biçiminde tanımlamanıza olanak tanır.

Bir programlama dilinin seçimi birçok faktöre bağlıdır: amaç, kaynak program yazma kolaylığı, sonuçta ortaya çıkan nesne programlarının verimliliği, vb. Bir bilgisayar tarafından çözülen görevlerin çeşitliliği, programlama dillerinin çeşitliliğini belirler.

Kontrol soruları

1. Programlama sistemleri nelerdir ve hangi program sınıfına aittirler?

2. Programlama sistemlerine neler dahildir?

3. İlk programlar hangi programlama dilinde oluşturuldu?

4. Prosedürel diller hangi dillere ayrılır?

5. Düşük seviyeli dilleri tanımlayın.

6. Hangi dil düşük seviyeli bir dildir?

7. Düşük seviyeli dillerin avantajları.

8. Üst düzey dilleri tanımlayın.

9. Üst düzey dillerin avantajları.

10. Üst düzey dillere örnekler verin.

11. Çevirmenler ne işe yarar?

12. Derleyici ve yorumlayıcı arasındaki fark nedir?

13. Yorum eksiklikleri (bir tür çevirmen olarak).

14. Bir programı derleme süreci nedir?

15. Derleme sırasında hangi işlemler yapılır?

16. Yük modülü ile nesne modülü arasındaki fark nedir?

17. Prosedürel programlama ile prosedürel olmayan programlama arasındaki fark nedir?

18. Ne tür programlama prosedürel değildir?
programlama?

19. Bildirimsel dillerin özelliği.

20. Programlama dillerini kısaca tanımlayın: Fortran, BASIC, Pascal, Cobol.

21. Programlama dillerini kısaca tanımlayın: Ada, C, C ++, Delphi, Java.

22. Nesne yönelimli dillere örnekler verin.

23. Lisp dili hangi dil sınıfına aittir?

24. Prolog dili hangi dil sınıfına aittir?

Zalina 13 Ocak 2016, 15:42

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

  • Yandex şirket blogu,
  • Web sitesi geliştirme,
  • Programlama,
  • endüstriyel programlama

Bu yılki ilk yazımızı, Small SHAD'da verilen bir ders olan çok temel bir konuya ayırmaya karar verdik. Teknolojiyle ilgilenen lise öğrencileri bununla meşguller, bu nedenle sunumun özgünlüğü - ders özellikle programlamaya yeni başlayanlar ve gelişme yönünü düşünenler için ilginç olacak. Onlar için Yandex'in Stepic.org platformunda alınabilecek bir "Programlamaya Giriş (C ++)" kursu var.

Öğretim Görevlisi Mikhail Gustokashin - Yandex'de Akademik Programlar Küratörü, HSE, Bilgisayar Bilimleri Fakültesi Öğrenci Olimpiyatları Merkezi Direktörü. Mikhail, Tüm Rusya Programlama Olimpiyatlarının düzinelerce kazananını ve ödül kazananını hazırladı.

Ders kapsamında programlama dillerinin neler olduğu, nasıl farklı oldukları, nasıl ortaya çıktıkları ve hangilerinin daha iyi ve hangilerinin daha kötü olduğu anlatılır. Başlangıçta, dillerin tarihi hakkında biraz konuşacağız - nasıl ortaya çıktılar, insanlar nasıl programlamaya başladı, her şey nasıl gelişti, şimdi neler oluyor. İkinci bölümde, hangi dilin ne tür görevler için uygun olduğu, “en sevdiğiniz dili nasıl seçeceğiniz ve hayattan zevk alacağınız” konularına değinilecektir. Öğretim görevlisi ayrıca, kendi görüşüne göre, tüm bunları nasıl öğreneceği ve ardından bir iş bulacağı hakkında biraz konuşacaktır.

Her zaman olduğu gibi, içeriğin altında gezinebilmeniz için dersin ayrıntılı bir dökümü var.

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 ekranları yoktu, delikli kartları vardı (bunlar delikli veya deliksiz şeyler). Buna göre, pimler ya oraya itildi ya da orada ışıkla parladılar. Bir delik varsa (veya tam tersi), sıfır veya bir anlamına geliyordu. Ve o zamanlar programlar makine kodları kullanılarak yazıldı - bilgisayardaki her işlem (toplama, çıkarma, bazı daha karmaşık işlemler) bir tür makine koduna sahipti. İnsanlar etikette bu kodu seçtiler, hafızadaki her türlü adres, hepsini elleriyle nakavt ettiler ve okuyucuya ittiler - ve hepsi sayıldı. Tabii ki, bir programcının işi o zamanlar muhtemelen pek ilginç değildi - delikler açmak - ve bilim ve teknolojinin gelişmesiyle elbette, her türlü daha "ilginç" şeyle ortaya çıkmaya başladılar. Örneğin, zaten 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ürlü kelime kullanıldı - bazıları ekleme veya taşıma - ve ardından bunların gerçekleştirileceği değişkenler olan kayıtlar veya bellek alanları listelendi. operasyonlar. Ancak bunun, genel olarak, hangi kayıtta neyin yattığını, hangi değişkenlerin nerede olduğunu ve genel olarak ne olduğunu akılda tutmak için yeterince büyük miktarda zihinsel zorlama gerektirdiği açıktır. Bu neden oldu? Çünkü bilgisayarlar "aptal"dı ve bundan daha "akıllı" bir şey anlayamadılar. Aslında, makine kodunu assembler'dan derlemek de zaman alır, hafıza alır (o zamanlar elbette yeterli değildi).

Yavaş yavaş, bu kadar büyük karmaşık programlar geliştirmenin çok zor olduğu ortaya çıktı. Programcının bu komutlardaki verimliliğ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. Ve insanlar, program yazmayı daha kolay ve daha uygun hale getirmek için dilleri insan diline, özellikle İngilizce'ye çok daha benzer hale getirmek istediler. Ve gidiyoruz!

Eski ve ölü diller

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

Diğer diller - şimdi muhtemelen duymuş olduğunuz bir şey yazacağım, ancak yalnızca programlama tarihini anlattıkları herhangi bir olayda - bu COBOL. İş uygulamaları yazmak için bir dildi. İş uygulamaları nelerdir? Bankalarda herhangi bir işlem, başka bir şey, bunların hepsi Kobol'da yazılmıştı. Tabii ki, bizde çok popüler değil. Moskova'da Kobol'da bir programcı bulmanız zor. Ve Moskova'da olmayan bir yerde - daha da zor. Ancak şaşırtıcı bir şekilde, 10 yıl önce bile, insanlığın yazdığı tüm kodların yarısından fazlası Cobol'da yazılmıştı. Ve ş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 hala insanlar üzerine bir şeyler yazıyor.

Ayrıca "komik" bir dil var, buna Algol adı verildi (yaratılışını karakterize eden sürüm 68). Algoritmik bir dildir. Genelde orada bir şeyler yapabildiler, ama şimdi yapabilecekleriyle pek ilgilenmiyoruz. Ve bunun üzerine antik çağa ve nispeten kullanılmayan dillere yaptığımız gezi tamamlanabilir ve hala hayatta olana (ve aktif olarak yaşayana) geçilebilir.

Eski ama yaşayan diller

Algol Avrupa'da icat edildi ve Fortran esas olarak Amerika'da kullanıldı - büyük bir fark yok. Hangi eğilim görülüyor? İ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 anlamanız gerekiyordu. O zaman da yapraklarla oturmak ve hatırayı saymak, ona bakmak gerekiyordu. Ve yavaş yavaş her şey daha basit, daha basit, daha basit ve daha sonra programcı için daha da kolaylaştı - bir insan için mümkün olduğunca az düşünmek, otomatik olarak mümkün olduğunca çok şey yapmak. Bu dönemin sonlarında (öğretim görevlisi Algol ve Kobol'u işaret eder), bir anlamda bu güne kadar "hayatta kalan" diller ortaya çıkmaya başlar.

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

Bir başka komik hikaye, üniversite çevrelerinde, özellikle Rusya'da ve eski Sovyetler Birliği ülkelerinde yaygın olarak bilinen Pascal dilidir. Şaşırtıcı bir şekilde bir öğretim dili olarak kullanıldı ve kullanılmaya devam ediyor. Dünyanın geri kalanında daha az yaygındır, ancak aynı zamanda canlı ve iyi durumdadır. 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 dilini buldu - Pascal. Ve sonra Borland firması (ve ondan önce diğer birçok firma - özellikle Apple meşguldü) her şeyi aldı ve mahvetti. Güzel, ince bir teorisi vardı - "her şey yoluna girecek" - ve insanların iş için ihtiyaç duyduğu şeyleri alıp oraya doldurdular. Şey, istediği kadar güzel sonuçlanmadı.

Ve sonunda,. Xi, mühendisler tarafından icat edildi. Pascal bir bilim adamı tarafından icat edildiyse, o zaman C, Kernighan ve Ritchie tarafından icat edildi, Bell'de mühendis olarak çalıştılar. Bu nasıl oldu? O zaman, bu dillerde sistemik bir şey yazmak imkansızdı (öğretim görevlisi 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 matematik, iş ve tüm bu şeyler içindi. Ve diğer her şey Assembler'da yazılmıştır. Bazı diller vardı, şimdi öldüler, yani C dili Assembler'dan hemen değil, bazı ara şeyler aracılığıyla ortaya çıktı.

özü nedir? Kernighan ve Ritchie oyuncak Asteroitler oynamayı severdi - bir uzay gemisi uçar ve asteroitler vardır, onlara ateş eder ve parçalanırlar. Oynadıkları bir sunucuları vardı ama orada çok insan vardı ve oyuncak yavaşladı. Ve ofislerinde bir yerde, kimsenin kullanmadığı bir tür bilgisayarları olduğunu öğrendiler. Ama bir sorun vardı - farklı bir mimariydi ve oyun Assembler'da yazılmıştı.

Yeniden yazdılar, elbette üzerinde 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 parçalara nasıl erişileceğini anlamanın mümkün olacağı yüksek seviyeli bir dil yazmaya karar verdiler. hafıza. Ve böylece daha sonra her şey üzerinde büyük etkisi olan C dili ortaya çıktı. Hepsinin (öğretim görevlisi Algol, Fortran ve diğer belirtilen dilleri işaret eder) büyük bir etkisi oldu, ancak 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 şöyle bir şeydi (öğretim görevlisi Basic, C ve belirtilen diğer dillerde gösteriyor). Diyelim ki bunların hepsi sinsice öldü (öğretim görevlisi Assembler, Fortran ve Algol'a yapılan referansları siler) ... Ve 80'lerde bilgisayarlar daha küçük, daha akıllı, daha ucuz hale geldi ve insanlar sırayla her türlü tuhaflığı istediler. daha da iyi yaşamak, daha da eğlenceli yaşamak.

80'lere özgü diller

İlk tuhaflıklardan biri C++ diliydi. C dilinin çok sayıda eksikliği var (peki, sadece çok büyük bir tane) - kendinizi bacağınızdan vurmak, kendinizi bir kurgu ile bacağınızdan vurmak, diğer bacağınızla ateş etmek de dahil olmak üzere üzerinde her şeyi yapabilirsiniz. genel olarak bir ayak diğer bacakta - yapmak istediğiniz. Ama aynı zamanda, orada bazı mimari şeyler oldukça zor yapılır - yine, Assembler'da olduğu gibi, nerede olduğumuzu, neye ve hangi hafızanın tahsis edildiğini takip etmeliyiz; bu hafıza her zaman bir yerde "akıyor" - yani, seçtik, silmeyi unuttuk, yanlış şeyi sildik, hafızamız doldu, genel olarak - birçok sorunumuz var.

C ++, başlangıçta, geliştirmeyi kolaylaştıracak C diline bir dizi ekleme olarak oluşturuldu. O zaman, nesne yönelimli programlama moda oldu ve insanlar her şeyin bir hiyerarşi şeklinde tanımlanabileceğine, yani bir topun (soyut) olduğuna, ondan bir futbol topu, bir voleybol, başka bir soyut topun miras alındığına karar verdi. . O zamanlar modaydı "şimdi her şeyi bir tür hiyerarşi şeklinde yazıyoruz ve her şey iyi olacak, hayat düzelecek, her şey iyi olacak 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 oldu ve her türlü özellik içinde görünmeye başladı. Aynı zamanda, C ++, C dili ile (o sırada) neredeyse tam uyumluluğu korudu, vakaların% 99'unda C ile yazılmış bir program başarıyla C ++ olarak derlendi ve hatta aynı şekilde çalıştı. Bu, C'den C++'a geçişi kolaylaştırmak için tasarlandı.

Nesne yaklaşımına (C++ dilinde) ek olarak, Standart Şablon Kitaplığı (STL) hızla ortaya çıktı. Sanırım okulda, hala Pascal öğretenler, ilk olarak, orada yerleşik sıralamaya sahip olmadığınızı keşfettiler (eski, mavi Borland Pascal'da, şimdi zaten modern versiyonlarda) - bir örnek var (kaynak) sırala, kopyalayıp yapıştırabilirsiniz. Ama burada tamsayıları sıralamak istiyorsanız, burada gerçek sayılar istiyorsunuz ve burada birbiriyle karşılaştırılabilecek dizeler var, tam olarak aynı şeyi yapan üç farklı sıralama yazmanız gerekiyordu, sadece farklı veri türleri var. 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'lardan betik dilleri

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

Bunların üzerinden biraz geçelim çünkü bunlar belirli şeyler ve artık birçok yerde kullanılıyorlar. Fikir nedir? Derleme yapmazsak, çok daha fazlasına izin verilebilir. Örneğin, bir program koduna bakıp onu bir şekilde kullanabilir; içinde neler olup bittiğini biliyor ve bu sayede birçok ilginç şey yapabiliyor.

Perl kelime işleme için tasarlandı - o günlerde, bilgisayarlarda zaten o kadar çok bellek vardı ki, oraya bir metin doldurmak ve bu metinle faydalı bir şeyler yapmak mümkündü (örneğin, kelimeleri saymak, bir tür aramak). Ama bence biraz aklını kaçırmış insanlar tarafından tasarlandı, çünkü onun hakkında şöyle bir fıkra var: "Yazılan her karakter dizisi Pearl'de doğru bir programdır." Bence sadece üzerine yazabilirsin, okuyamazsın. Perl'deki koda bakıp bir şey anlamaya çalıştığımda hiçbir şey anlamıyorum. Belki onu daha iyi tanısaydım bir şeyler anlardım ama hala bilenlerden duyduğum kadarıyla yeniden yazmanın daha kolay olduğunu söylüyorlar. Yani, programlar kısadır ve yeniden yazmak, orada ne olduğunu bulmak ve düzeltmekten gerçekten daha kolaydır.

Bu süre zarfında, 90'ların ortalarında İnternet ortaya çıktı. İlk başta, postaydı, statik HTML'li siteler, ancak insanlar oraya bir tür dinamik eklemek istediler, böylece her şey bizim için dinamik olarak gerçekleşsin, bazı formlar doldurulabilir, yapılacak konuk defterleri ve başka bir şey. Buna göre, bu bir tür etkileşim gerektiriyordu, bir protokol, nasıl etkileşime girdiği ve en önemlisi, isteğine yanıt olarak kullanıcıya "tükürülecek" bu statik (koşullu) sayfaların oluşturulması ile geldiler.

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

PHP tesadüfen ortaya çıktı. Bir kişi bunu yapmayı çabucak durdurdu - bir tür kendi sayfasını yaptı, bir tür ziyaretçi defteri vardı, başka bir şey, bazı şeyler. Ve Pearl için C'ye benzeyen bir tür makro yazdı, çünkü C'nin nasıl kullanılacağını biliyordu, çünkü onun için çok uygundu. Ve buna Kişisel Ana Sayfa adını verdim. Bunu paylaştı ve şöyle dedi: "Millet, bakın ne yazmışım, burada her şey Pearl'den çok daha net ve onu düzenleyebilirsiniz." Ve insanlar bundan hoşlandı.

Sonra davayı düşürdü. Genel olarak sonuç olarak bu PHP yaşamaya başladı ve zamanla Perl'den çok daha popüler oldu. Ama onun bu "doğum travması" (Pearl için bir dizi makro fikri) ona oldukça acımasız bir şaka yaptı. Dil garip geldi. Yani kendisi geliştirdi, kimse tasarlamadı, kimse geliştirme sürecini yönetmedi (ne şirket ne de herhangi bir kişi), ama her biri beğendiğini gören birçok grup vardı. Sonuç olarak, oradaki işlevler farklı çağrılıyor, bir stil bile yok, her şey altı çizili, genel olarak, her nasılsa, ayarlar burada ve orada ve tüm bunların nasıl çalışacağı çok net değil. Ama oturup iki saat içinde PHP'de yazabilirsiniz, çünkü o bunu amaçlamıştı.

Python ve Ruby: Ruby artık daha az popüler, Python bir şekilde daha iyi "kesilmiş", daha sonra konuşalım. O günlerde bunların (öğretim görevlisi Perl, Python, Ruby, PHP'ye işaret ediyor) son derece özel amaçlar için son derece uzmanlaşmış diller olduğu açıktır. Genel olarak, o zamanlar hiçbir sistem programlaması, hiçbir iş mantığı yazılmamıştı ve şimdi pek bir şey yapmıyorlar.

90'lardan derlenmiş diller

Aynı zamanda 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, her şey için yazılması gereken hemen hemen her şey için C ++ kullandık. Ancak C++ aslında ürkütücü bir dildir. Niye ya? Çünkü öncelikle geriye dönük uyumluluk nedeniyle tüm C problemlerini miras almıştır. Orada hala milyonlarca farklı şekilde öldürülebilirdi, C'dekiyle aynı olanlar (elbette, C++'da yeni yollar eklendi). Aynı zamanda, C ++ yazarlarının tasarladığı gibi her şeyi iyi ve doğru yazarsanız, elbette, eski yöntemlerle kendinizi öldürmek imkansızdı ve görünüşe göre daha azı vardı. Ancak, kendine özgü çok garip bir nesne modeli vardı. Programın modüllere, bir tür parçalara bölünmesi genellikle C'den gelir (eğer C veya C++'da include yazabiliyorsanız - aslında, kütüphanenin metnini programınıza, sonunda, bir sürü inklüzyon yazdığınızda, her şeye sahip olursunuz - en başta olduğu gibi “ilkel” ise - her şey tek bir dosyaya eklenir ve sonra bunların derlenmesi çok uzun zaman alır, çünkü gider yaklaşık birkaç kez. versiyonlar daha da iyi.

Genel olarak, C++ bir çok dezavantaja sahiptir. Bir programcının C++'da yazabilmesi için niteliklerinin yüksek olması gerekiyordu ve bu tür programcılar pahalıydı (hem eğitim hem de başka bir şey, yani piyasada programcı bulmak zor, çok para ödemeleri gerekiyor, peki, genel olarak, durum böyle değil ...). Ve bilgisayarlarımız gitgide daha hızlı sayılıyor, ucuzluyorlar, insanlar yeni bilgisayarlar alıyor ve daha fazla uygulama, telefon için daha fazla oyuncak, genel olarak daha fazla keyif istiyorlar.

Java (Java) bu şekilde ortaya çıktı. Orada da, ismin bu dilde nasıl göründüğüne dair oldukça komik bir hikaye var. Orada programcılar var, her zaman kahve içerler ve o zamanlar Java adasında yetişen 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 ne iyiydi ve neden bu kadar popülerlik kazandı? Önce Sishny'nin mirasından tamamen kurtuldular. İşaret yok, vücudunuzun herhangi bir bölümünü vurup her şeyi kırmanın çok daha az yolu. İkincisi, nesne modeli açısından çok daha yeni fikirleri uyguladılar - yani, C ++ Java'dan çok daha önce ortaya çıktı ve daha eski, "vahşi" bir nesne modeli kullandı. Pekala, burada (öğretim görevlisi Java'yı işaret ediyor) o zaman zaten daha fazla düşünülmüştü ve teoride insanlar düşündü ve pratikte her şeyi çok daha havalı uyguladılar ve yaptılar.

Ve son olarak, üçüncü. Java programlarımız makine kodunda değil, sanal bir makine kodunda birleştirildi. Yani, bir JVM sanal makineniz (VM) - Javovsky'niz vardı. Programlarınız bir tür ara temsilde toplandı ve daha sonra bu makinenin yardımıyla zaten yürütüldüler. Ne yaptı? Birincisi, yavaşladı ve ikincisi, hafızayı korkunç bir güçle yedi ve üçüncüsü (teorik olarak) her yere taşınabilirdi - bir kahve makinesine, hatta bir kahve değirmenine, hatta bir bilgisayara, hatta bir cep telefonuna bile. Bir yandan, bu iyi, yani sanal bir makinenin uygulamasını yeni yazdınız, sonra Java programlarınızı her yerde çalıştırıyorsunuz. Ancak öte yandan, aynı telefonun o sırada çok az hafızaya sahip olması kötü, performans düşüktü ve tüm bunlar ek olarak donuklaşmaya ve yavaşlamaya başladı.

Ancak dilin genel olarak icat edilmesinin ana nedeni bu bile değildir. Java dili, programcıların niteliklerinin gereksinimlerini azaltmak için icat edildi. Yani, daha fakir programcılar Java'da iyi programlar yazabilir, çünkü kötü programlar yazmaya izin vermez - orada kötü programlar yazmanın hiçbir yolu yoktur. Orada sadece iyi programlar yazabilirsiniz. Peki, dilin yaratıcılarının anlayışında.

Yani, C'de, C++'da, Python'da herhangi bir şeyde, her şeyi karıştırdığımız, saatlerce topladığımız ve orada başka bir şeyin olduğu projemizden bazı ürkütücü çö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ı" olduğu ortaya çıkmaz, başka sorunlar ortaya çıkar, orada bir şey miras alınır ve miras alınır - genel olarak, anlamlı bir satır için on çok anlamlı olmayan satır elde edilir. Öte yandan, belki böyle orta vasıflı bir programcı oldukça yüksek kaliteli bir kod yazabilir.
Neredeyse sona geldik. Bizde, ortaya çıkan bir sonraki şey .Net (ulaşacak), peki ve özellikle C # ile ilgileniyoruz (neredeyse aynı [öğretim görevlisi Java'yı işaret ediyor], yani ayrıntılarda farklılıklar var, eğer aralarından seçim yapın - nerede daha fazla para ödediğinizi görün).

Ve bir şey daha JavaScript. Aynı yıl ortaya çıkan Java diliyle hiçbir ilgisi yok - kelime modaydı, ticari markayı kullanmak için lisans verdiler.

Dikkat etmeniz gereken ana şey nedir? (Öğretim görevlisi C++'dan Java, .Net, C#, JavaScript ve PHP'ye oklar çizer). Bu dillerden birinde ve diğer birçok dilde basit bir program yazmak için - C ++ biliyorsanız, genellikle başka bir şey bilmenize gerek yoktur - C ++ ile alıp yazarsınız ve ardından başlangıçta dolar eklersiniz. , başka bir şey küçük şeyleri yapar ve sizin için herhangi bir şey üzerinde çalışmaya başlar (öğretim görevlisi C++ oklarının atandığı dilleri gösterir). Yani, bazı basit şeylerde son derece benzerler. Bazı okul problemlerini, eğitim görevlerini, başka bir şeyi çözerseniz (büyük bir proje tasarlamıyorsunuz - sayıları okuyan, konsolda sayıları görüntüleyen, başka bir şey yapan bir dosyanız var), o zaman bu diller arasında neredeyse hiçbir fark yoktur. JavaScript ve PHP'nin uzmanlaşmış olduğu açıktır, her şeye biraz farklı sahiptirler. Ve burada (öğretim görevlisi Java ve C#'yi işaret ediyor) genel olarak çok az fark var.

O zamandan beri, her türlü başka ilginç şey ortaya çıktı, ancak başarılı bir şekilde yaşayacaklar mı yoksa ölecekler mi belli 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öreviyle karşı karşıyasınız. Bugün hangi dili kullanacaksınız? (Seyircilerden haykırış: Java!) Neden ... Java harika, ama neden Ruby veya PHP olmasın? (Hoca alaycı bir şekilde konuşur.)

Düşük seviyeli programlama

Düşük seviyeli bir şey yazıyorsanız, o zaman en iyi seçim C'dir, ancak aslında bunun için C++ kullanıldığını duydum (ama görmedim). Ancak buna pek inanmıyorum, çünkü C'de açıkça kontrol edebilirsiniz - bu kadar çok bayt bellek verdiğiniz için, bunun böyle olacağı anlamına gelir. Ve C++'da (STL), bir dize nasıl uygulanır? Eh, bir şekilde uygulandı. Ve sonunda orada nasıl ve ne olduğunu bilmiyoruz, belki ekran kartımızın hafızası tükenecek 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, sürücüler yaz, başka bir şey yaz - C bunun için harika. Ek olarak, artık pillerle çalışan her türlü cihaz var (Nesnelerin İnterneti gelmek üzere olduğunu vaat ediyor) (ve elbette milyonlarca olacak, her şey bu Nesnelerin İnterneti ile asılacak) , çok ucuz olmalı ve çok az elektrik tüketmelidirler. Buna göre 2 KB bellek, 5 kHz işlemci olacak ve elbette yakın gelecekte bir tür sanal makine veya betik dili vidalamak işe yaramayacak, yani bir şeyler yazmanız gerekecek. C. Ve şimdi bile, örneğin, bir video kartındaki hesaplamalar (OpenCL veya başka bir teknoloji) - onlar için program yazmak için yeni bir dil bulamıyorlar - orada C'yi bazı büyük kısıtlamalarla yapıyorlar. İnsanlar nasıl yapılacağını zaten biliyor diye, neden yeni bir şey öğrenelim? Resmi olarak, bu muhtemelen aynı zamanda bir anlamda C'dir.

Web programlama

Diyelim ki yeni bir Facebook (sosyal ağ) yazmak istiyorsunuz. Bunu neye yazacaksınız? (İzleyicilerden HTML ve CSS'den bahsediyorlar.) HTML, CSS tasarımdır ve biz fotoğraf eklemek, arkadaşlar, yorum bırakmak istiyoruz.

Komut dosyası oluşturma kısmı için - yani, istemci tarafında ne olacak - bu JavaScript'tir. Ayrıca, bazen JavaScript başka bir dilde oluşturulur ve gönderilir (böylece 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'de ve Facebook'ta ve diğer birçok büyük projede yazılmıştır. Tabii ki, hala iyi çalışabilmesi için kendi işlerimi yazmam gerekiyordu ve "tyap-blooper" yapıldığı gibi değil, ama yaptılar. Temel olarak, ne yazdığınızın pek bir önemi yok ama Perl'i tavsiye etmiyorum. Burada ve şimdi, elbette, hiç kimse web için sıfırdan bir şey yazmıyor. Herkes bir çeşit çerçeve falan 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 uygulaması yazmak istiyorsunuz. Veya örneğin sim kart satan biri var mı? Belki bir telefon ya da başka bir şey aldınız ve size dediler ki: "Burada sistem kilitleniyor, hiçbir şey yapamayız." Böyle bir uygulamayı neye yazacaksınız? (İzleyicilerden Python hakkında bir çığlık) Python'da bunu yazamazsınız, nesiniz?! Python'da iş için hiçbir şey yazmaya değmez. Niye ya? Çünkü Python'da bir şey yazdığınızda, yazma sürecinde önemli sayıda bug bulamazsınız. Python mümkün olan her şekilde dinamik olarak yazılmıştır ve genel olarak orada bir hatayı gizleyebilirsiniz, böylece öyle bir durumda ortaya çıkar ki, bu çarpık kullanıcıların orada ne yaptığını bile anlayamazsınız, her şey sizin için bozulur. Yani, Python'da kendiniz için küçük komut dosyaları yazmak daha iyidir - orada neler olduğunu ve ne yapıldığını anlıyorsunuz. Pekala, ya da atmak üzücü olmayan bir şey: Rakiplerinizden önce bir şey ortaya çıkarmak istiyorsunuz, peki ya her seferinde bozulacaksa. Python'da yazdınız ve hepsi bu - piyasayı devraldınız. Ve uzun süre bir şey yazarsanız, örneğin, bir tür bankacılık uygulaması (böylece kredileri onaylar, başka bir şey) - Java'da yazarsınız. Çünkü ciddi bir mesele var, kağıtlar, para, belgeler, başka bir şey, ama o kadar çok karıştıramazsınız ki her şey kırılacak, aksi takdirde insanlar rahatsız olacak - paraları gitti ve hiçbir yere ulaşmadı, çünkü şu an sen dize bir sayıya dönüştü veya tam tersi. Yani, metodik olarak Java'yı alıp yazmanız, yazmanız anlamına gelir ... Peki ya da .Net'te, bu tür durumlar prensipte de olur. Elbette orada da sorunlarla 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 edersin? Görelim. Bu, muhtemelen (öğretim görevlisi Perl, Python, PHP, Ruby'de gösterir), buna değmez - yavaşlar, başka bir şey oluyor, genel olarak, böyle bir roket üzerinde uçmayı kabul etmem. C++'da mı? Dürüst olmak gerekirse, ben de bana güvenmezdim çünkü C++'da kendinizi öldürmenin çok fazla yolu var. Uzayda bir yerdeyken, 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 bellek yok. Diyelim ki en kritik an geldi ve Java'mız bizim için çöp toplamaya karar verdi. İnmemiz gerekiyor, yavaşlıyoruz ve o "Hayır, çöp gidiyor" diyor. Genel olarak da çok iyi değil.

Dürüst olmak gerekirse, bu programın Pascal ile yazılmasını tercih ederim. Tabii ki, Pascal'ı gerçekten sevmiyorum, ama bir şekilde bu tür konularda çok havalı olurdu.

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

Peki, modern diller hakkında genel olarak söylenmesi gerekenler. Günümüzde pek çok proje herhangi bir dilde yaşamıyor, yani bazıları bir dilde, bazıları başka bir dilde, bazıları da üçüncü bir dilde yaşıyor. Örneğin, büyük hacimli bilgileri 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 daha sonra düşük olarak yazılmıştır. -level C, diske çılgınca hızlı yazmak ve tüm bunlar. Doğal olarak, tüm projeyi C ile yazmak buna değmez. Belki Java'da yazılmış ve hızlı aramalar için Cis işlevlerini çağıran bir tür ara mantık vardır. Pekala, ön uç (kullanıcının baktığı şey), elbette, bazı komut dosyalarında, doğrudan tarayıcı tarafından yürütülen bir şeyde (JavaScript) zaten 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, hatta büyük olanlar bile, bazen insanlar ne yapar? Python'da bir prototip alıp yazıyorlar (hepsi nasıl çalışacak), taslak çiziyor, bir tür mimari üzerinde düşünüyorlar. Üzerine yazmak gerçekten çok hızlı - bir prototip attılar, denediler ve dediler ki: “Vay! Bu çok güzel!" Ve tamamen yeniden yazılmıştır. Görünüşe göre işi iki kez yaptılar, iki kat daha uzun sürdü (peki, bir buçuk). Ama hayır! Genellikle bu yöntemin kötü olmadığı ortaya çıkıyor, çünkü hemen bir şeye, örneğin Java'ya yazarsanız ve sonra karar verirseniz: "Hayır, yeniden düzenleyelim, mimariyi tamamen değiştirelim ve hepsini", o zaman 10 harcarsınız. kat daha fazla zaman... Böyle şeyler de var ve yaşıyor.

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

Şimdi de bazı güzel görünen dillerin neden hayatta kalmadığından ya da çok sınırlı bir alanda yaşamadığından bahsedelim. Wirth, kötü şirketlerin Apple, Borland ve Pascal'ı ile yaptıklarını görünce, daha da iyi bir dil buldu - Oberon. Sadece çılgınca minimalistti - yani çok az komut vardı (Dizeler? Neden dizelere ihtiyacımız var? Bir dizi karakter oluşturacağız!). Şey, bir şey onun için mümkün olduğu ö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 adında oldukça korkunç bir dildir, ancak yine de bir şeyler yazarlar, ancak yine - sadece ordu için.

Sorun nedir? Neden başlangıçta hiçbir şirketin desteklemediği Python gibi bazı diller piyasayı ele geçirdi. Yine kötü tasarlanmış olan PHP de piyasayı (çoğunlukla) kendi başına ele geçirmiş ve ele geçirmiştir. Ve her türlü milyarlarca dolar yatırım yapıldı (öğretim görevlisi Ada'yı işaret ediyor) ve hiçbir yere gitmedi, hiçbir şey olmadı. Bunun nedeni nedir? Bunun nedeni, bu dillerin etrafında bir altyapı olmamasıdır. Yani, dil mükemmel olabilir, ancak belge olmadığı sürece, soruları cevaplayabilecek bir topluluk olmadığı sürece (Stack Overflow'ta) ve son olarak, en önemlisi, çok sayıda olmadığı sürece kütüphaneler, dil ateşlenmez. Yani, örneğin, Oberon'da bir web sitesi yazmak istediniz. Ve neden olmasın? Ve kafa karışıklığı başlar... Web sunucunuzu hafif bir şekilde test etmek için Oberon'da yükseltemezsiniz, Oberon'da olmadığı için herhangi bir kitaplık bağlayamazsınız. Ve tüm bunlar bir çeşit koltuk değneği ile yapılır, kuvvetler gider ve genel olarak sitenizi Oberon yerine saf C ile tükürür ve yazarsınız. Ve diğer dillerden kütüphaneleri kullanabilen diller iyi yaşıyor. Yavaşladığı yerlerde aynı Python. Genel olarak, sıralama ve başka bir şey gibi her türlü standart şey C'de yazılmıştır ve o (Python) bunlarla nasıl etkileşime gireceğini bilir.

Java ayrıca bir Java Native Interface'e 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 olanlar) etkileşime girebilir. Ve bundan dolayı alırlar ve çalışırlar. Size aktarmaya çalıştığım fikir açık, değil mi? C kütüphanesine nasıl bağlanacağını bilmeyen dillerde yazmayınız. Güzel bir şeyin tadını çıkarmak istiyorsan. Eh, ve yavaş yavaş onlar (diller) kendi tür altyapılarıyla büyümüştür. Ve bir şekilde iyi yaşıyorlar.

Programlama dili ve kariyer rehberliği

Şimdi hayatta ne istediğinizi nasıl anlayacağınızdan bahsedelim. Güzel şeyler nelerdir? Bir çeşit sistem programlaması yapabilirsin, değil mi? Orada bu bisikletleri saymanız çok güzel, quadcopter'ları, birkaç kamerayı fırlatmak ve başka bir şey yapmak istiyorsunuz. O zaman C muhtemelen sizin seçiminizdir.

Yazmak istiyorsanız, belki de hayattaki en ilginç uygulamalar değil, ancak onları tasarlamanız, her şeyi düşünmeniz ve çok para kazanmanız harika, çünkü çoğu zaman oturup özlediğiniz için ( yüksek kaliteli bayan iseniz bunun için ödeme yapmak için), işte buradalar - Java, .Net. Bir bankada işe gidiyorsun, yazıyorsun, dokuzda beyaz bir gömlekle işe gidiyorsun, iyi bir maaş alıyorsun ve en iyi Java kaynakları, .Net-koyun ve diğerlerinin tavsiyelerine göre yazıyorsun ...

Herhangi bir uygulama, bir çeşit tarayıcı, bazı oyuncaklar, başka bir şey yazmak istiyorsanız, o zaman C ++ harikadır. Web siteleri yazmak istiyorsanız, işte buradalar, seçtiğiniz diller (öğretim görevlisi Perl, Python, PHP, Ruby'de gösteriyor), pek bir fark yok. Tek şey, PHP'nin Python'dan önce öleceğidir, bu yüzden yeni şeyler öğrenmek için tembelseniz Python'u öğrenin. Büyük bir fark görmeyeceksiniz, ancak daha uzun süre dayanacaksınız.

Ruby ile neler olup bittiği de belirsiz. Eh, zaten öğrendiyseniz PHP'yi de yapabilirsiniz, çünkü o kadar basittirler ki yeniden eğitmek çok uzun sürmez.

Ve son olarak, programlama dillerinin başka bir uygulama alanı daha var - bu, programcı olmayanların bunları kullandığı zamandır. Diyelim ki bir matematikçi, fizikçi, kimyager, analist, herhangi birisiniz ve hızlı bir şekilde bir şey hesaplamanız, bazı verileri analiz etmeniz gerekiyor (biyologlar için, örneğin, Komutan Adaları'nda kaç Arktik tilki yaşıyor). Tüm bunları Excel'de bir tabloya aktarabilir veya bir şeyle analiz edebilirsiniz. Python da bunun için uygundur, metinle nasıl çalışılacağını bilir ve kütüphaneler her türlü istatistiksel ve tüm bunlarla doludur. Bir tür Makine Öğrenimi yapmak, bazı verileri işlemek, tahmin etmek istiyorsanız, o zaman bu da Python'da en hızlı şekilde yapılır. Ancak görevlerin çok farklı olduğu unutulmamalıdır. Örneğin, fiyatların sürekli değiştiği koşullarda anında borsada işlem yapmak istiyorsanız, Python'da ne kadar havalı Makine Öğrenimi yazarsanız yazın, bir şeye daha hızlı yazmış olan kişilerin her şeyi daha erken satın almak için zamanları olacaktır. , siz sayılacaksınız, algoritmaları daha kötü olsa bile. Bu nedenle, bu makine öğrenimi görevleri bile (bazıları) yüksek performans (ve son derece yüksek) ve buna bağlı olarak başka diller gerektirir.

Ne istediğinizi bilmenin tek yolu her şeyi denemektir. Şimdi her şeyi nasıl deneyebileceğinize dair vizyonlardan biri olarak söyleyeceğim. Nasıl bir programcı ve mutlu biri olunur? Yani. Sıfırdan başlıyoruz. Burada okulda matematik, Rusça ve diğer zorunlu ve seçmeli derslerinizi okuyorsunuz ve programlama alanındaki bilginiz şu anda tahtaya yansıyor (öğretim görevlisi boş bir tahtayı gösteriyor). Ve mutlu bir insan olmak, sevdiğiniz şeyi yapmak, çok para kazanmak ve kendinizi hiçbir şeyden mahrum etmemek ve eğlenmek istiyorsunuz.

Bunu yapmanın bir yolu. Elbette, hiç üniversiteye gitmemiş veya okulu bırakıp milyarder, şirket sahibi vb. olmuş insanlarla ilgili her türden ilham verici hikayeler var. Ancak, milyarder olamamış olsa da, aynı zamanda iyi yaşayan çoğu insanın hala bir noktada üniversiteden mezun olduğuna dikkat edilmelidir.

Üniversiteye girişle ilgili durumumuz nedir (şu anda okulda okuyorsunuz)? Okuldayken, bir sonraki adımın kayıt olmak ve onunla ilgilenmek olduğunu anlamalısınız. Sınavı geç veya Olimpiyatı kazan. Sınavda Pascal, C ++ (saf C dahil), Python (bunlardan 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, ama özü değil.

Dillerin dağılımının grafiği, Bilişimdeki Tüm Rusya Olimpiyatlarında neye benziyor? En havalı Olimpiyat olan Tüm Rusya'ya katılan insanlar, ne yazıyorlar? Şuna benziyor (burada Pascal anlamına geliyor ve burada yaklaşık 2000 ve burada yaklaşık sıfır, burada C ++ ve işte 2015).

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

Java da var ama Java'da çok fazla harf var. Büyük projeler içindir, ancak küçük tek kullanımlık programlar için oldukça kötü olduğu ortaya çıkıyor, çünkü çok fazla gereksiz harf var. Ama bazı insanlar da yazar, üzerine yazmayı öğrenebilirsiniz. Ancak Birleşik Devlet Sınavında öyle değil ve Birleşik Devlet Sınavı'nın çoğunlukla geçilmesi gerekecek.

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

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

Şimdi size EYO'da kursu nasıl oluşturduğumuzu, dillerin hangi sırayla gittiğini, Yandex ve benim yapmakta olduğumuz Uygulamalı Bilimler Fakültesi'nde uygulamalı matematik ve bilgisayar bilimlerinde nasıl öğretildiğini anlatacağım. İlk yarıyılda - Python (tam olarak değil, okulda nasıl öğrenmeniz gerektiği hakkında) ve C ++ (daha geniş, genellikle okullarda öğretildiğinden çok daha geniş). Hemen söyleyeyim, korkmayasın, birden girmek istersen de ki: “Neden, ben bunları zaten biliyorum, neden bir yerde okuyacağım? Başka bir yere gitmeyi tercih ederim." Nasıl iyi programlanacağını zaten bilenler için, doğrudan algoritma çalışmasına ve oldukça teorik bir eğitime geçme fırsatı var. Şimdi onlara bakmıyoruz, bu (tahtaya işaret ediyor) orta program yapanlar veya hiç programlamayanlar için.

İlk yarıyılda Python'un temellerini öğrenirler, böylece insanlar programlamayı öğrenebilirler ve böylece kimse özellikle rahatsız olmaz. Python okullarda nadiren öğretilir, çoğunlukla insanlar Pascal veya C ++ bilgisi ile gelir. Temelde Pascal bile, eğer bir kitle okulu ise. Eh, kimse gücenmesin diye, herkes yeni bir dil öğreniyor (sanki eşit şartlardaymış gibi). Ve C ++, çünkü C ++'dan herhangi bir yere gidebilirsiniz.

Ardından "Algoritmalar" dersi ve ayrı bir ders projesi gelir. Uygulamalı klasik algoritmalar. Teoride bir şey aldığımızdan değil, karmaşıklığı hesapladığımızdan. Derste aldık, karmaşıklığı hesapladık, seminerde aldık, algoritmayı uyguladık. Bir proje, öğrencilerin bitmiş bir şey yapmasıyla ilgilidir. Ö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, biraz kiralayacağım. Ve bir fiyat belirlediler ve kimse sizden bir şey için bir daire kiralamak istemiyor - muhtemelen çok pahalı. Ya da bir fiyat belirlerler, hemen çıkarırlar ve “Aaa herhalde ucuza dağıtmışımdır” dersiniz ve siz de üzülürsünüz. Yani, bir daire kiralamanın ne kadara mal olduğunu hesaplamak gerekli miydi? Verilerde sürüş yaparsınız - sizin için bir tahmin oluşturur. Birkaç şeyden oluşan böyle bir site: öneriler alın, ayrıştırın, bir tür makine öğrenme algoritması uygulayın (muhtemelen) iddiasız ve içinde bir şey seçebileceğiniz, bir şeyler sürebileceğiniz, birkaç metre, herhangi bir sayıda oda, güzel bir web yüzü yapın, sauna sayısı, dairenizdeki jakuzi sayısı ve kabaca maliyetini tahmin edin. Yani, bir tür bitmiş, çok karmaşık olmayan bir şey. Burada konsol G / Ç ile böyle güçlü bir C ++ (öğretim görevlisi algoritmalar hakkındaki kursu işaret eder) anlamına gelir. Pekala, burada (öğretim görevlisi "proje" yazısına işaret ediyor) bir akıl hocasının rehberliğinde, muhtemelen veritabanlarıyla, belki metin ayrıştırma ve başka bir şeyle ilgili bir şey.
Ardından, Bilgisayar Sistemleri adlı bir ders olan üçüncü dönem gelir. Anlamak için epeyce bir montajcı var (çok az) ve sonra, saf C'ye ve işletim sistemleriyle etkileşime benzer bir şey, özünde sistem programlama. Ve bir seminer projesi aynı zamanda tüm ağ etkileşimleri konusunda oldukça düşük seviyeli bir şeydir: bazı yardımcı programlar geliştirin, örneğin rsync (senkronizasyon, belki bilirsiniz. Saf C'de aşağı yukarı bir rsync analogu yazın, tüm dosya erişimlerine sahip ağ senkronizasyon klasörlerine sahip olacaksınız, vb.).

Ve son olarak, dördüncü. Buna ne diyeceğimi bile bilmiyorum, örneğin web geliştirme gibi gerçek geliştirme için gerekli olan teknolojilerin bir salata sosu. Yani bu, veritabanlarının pratik bir uygulamasıdır, yine projede yapılana benzer bir şeydir (öğretim görevlisi 2. ders projesine işaret eder), ancak daha derinlemesine. Yani, az çok somut şeyler zaten pratik programlamadır. Buna paralel olarak, herhangi bir teori var, işte burada da bilimle uğraşıyorlar.

Ve iki dersten sonra, insanlar ilgi duydukları şeyi yapmak için dağılırlar, çünkü bu şey bu tür programlama temellerini oldukça geniş bir şekilde kapsar ve bu noktada insanlar zaten bilgisayar sistemleriyle uğraşmak istemediklerini zaten anlamışlardır (örneğin, sistem programlamayı sevmiyorlardı), ancak bazı teorik algoritmalar, saymanın zorluğu, bazı yeni şeyler bulma, dağıtılmış veya başka bir şeyle uğraşmak istiyorlar. Ya da tam tersine, burada çok fazla şey olmadığını düşünüyorlar ( öğretim görevlisi Python ve C ++ ile ilk ders satırına işaret ediyor) o zaman git ( öğretim görevlisi, sistem programlama ile üçüncü bir kurs hattına işaret ediyor) - beğenmediğiniz gibi, baytları sayın ve okuma-yazma, akışlar, iş parçacıkları ve başka şeyler için her türlü kısıtlamayı ayarlayın. Ve buna göre insan bir yön seçer ve öğrenir. Yani, prensipte, "ördek yavrusu sendromu" geliştirmemeniz için - önce Pascal'ınızı gördünüz ve şimdi "Pascal güçtür" diyorsunuz; veya daha ileri düzeyde - C++'ı gördünüz ve herkes hakkında C++'ın güçlü olduğu ve diğer her şeyin pek iyi olmadığı hakkında konuşmaya başladınız.

Burada buna daha geniş bir açıdan bakmamız gerekiyor (öğretim görevlisi tahtadaki derslerin listesini gösteriyor) - bu, özellikle EYO'da seçilen yöntemlerden biri (son zamanlarda ortaya çıktı, bu yüzden oldukça modern) ). Birbirinizi tanımanın başka yolları da var. Diğer iyi üniversitelerde biraz farklı bir sıra ve diğer aksanlar yer almaktadır. Ama aynı zamanda insanları sahip oldukları her şeyle tanıştırmaya çalışırlar.

Bir programcı olarak nasıl iş aranır?

Sen busun ( öğretim görevlisi dersler listesine işaret ediyor) her şeyi yaptı, üniversitede okudu, iki yıl daha verimli bir şey okudu ve işe gitmen gerekiyor. Çalışmak için bir şeyi nasıl seçersiniz? Önce her şeyi bilmelisin, derinlere indin ve neyi sevdiğini zaten biliyorsun. Doğal olarak neyi sevdiğinizi seçmelisiniz. Çünkü seversen enerji verirsin, motivasyonun olur ve genel olarak her şey yoluna girer. Çünkü mesele sadece parayla ilgili değil, onu sizin için ilginç ve keyifli kılmakla ilgili. Peki, ve havalı bir şirkete girmek istiyorsan, bir iş bul. Şahsen ne tür bir insan görmek isterim? Örneğin, yüz öğrenci bana geliyor - işe iki veya bir tane almam gerekiyor. Neden geliyorlar, kim olduklarını, ne olduklarını, nasıl olduklarını hiç anlamıyorum? En iyi ihtimalle bana üniversitede aldıkları diplomayı gösterecekler ve ben de “Vay be! Bu harika bir diploma, ama o kadar da havalı değil!" Ve bu arada yanılıyor olabilirim. Belki kişinin çok fazla boş zamanı vardı ve çok daha iyi öğrendi.

Ne harika olurdu? İlk olarak, baştan sona yazdığınız bir açık kaynak projesi. Verilerin hızlı bir şekilde okunabilmesi için bir tür altyapı veya başka bir şey yaparsam arzu edilir, o zaman elbette bana açık kaynak kodlu bir şey yazmakla ilgilenirim. Yapılmış bir web sitesi değil, konuyla ilgili bir şey. Neden bununla ilgileniyorum? Koduna bakabilirim, ne sıklıkta taahhüt verdiğini görebilirim, kullanıcılardan gelen hatalara nasıl tepki verdiğini görebilirim, onu kullanan geliştiricilerin hatalarına nasıl tepki verdiğini görebiliyorum - her şey yazılı, her şeye bakıyorum ve düşünüyorum: “Vay, bu hata iki yıldır gelmedi. kapalı burada kullanıcıya kabaca cevap verdin, o zaman başka bir şey almam ”. Yani, bu sizin kişisel projeniz.

Sonra, başka ne güzel olurdu? Takım çalışmasını nasıl yaptığınızı görmek isterim. Yani, bir röportaj için bana geliyorsunuz ve şöyle diyorsunuz: “Üniversiteden arkadaşlar ve ben iyi bir başvuru yaptık. Orada bir veritabanı yaptım, orada bir tür mobil uygulama yaptılar ve orada da çalışan bir adam vardı, bir kız-tasarımcı, bir erkek teknik destek. Beş kişiydik ve harika bir proje yaptık." Peki, gerçekten projenizin ne olduğunu anlıyorum, diyorum ki: "Seninki nedir?" Koda tekrar bakıyorum ve insanlarla bir ekipte nasıl çalışılacağını bildiğinizi anlıyorum.

Bir programcı, garajda tek başına (böyle bağımsız) oturan, ışıklar kapalı bir yerde oturan, kimseyle konuşmayan, sakalı çıkan ve yazan kişi değildir. Aynı şekilde, insanlarla bir tür etkileşim var. Örneğin, bazen size küfür edebilecek bir patronla (patronlar öyledir, her zaman kibar değildir). İnsanlarla nasıl çalışılacağını bildiğinizi görüyorum ve iyi bir ekibiniz varsa bu beni mutlu ediyor. İyi olmasa bile, olmamasından iyidir.

Kişisel olarak başka ne isterim? Kendinizi büyük projelerde gösterdiyseniz. Örneğin, Linux çekirdeğine bir şey adadınız, sistem programlama 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 buldun ve bazı hataları düzelttin!" Ve bundan çok mutlu olmaya başlıyorum. Çünkü ben... şey, bilmiyorum... rakipler ona daha yüksek maaş teklif ettiği için programcım istifa etti ve acilen birini susturmam gerekiyor - sizi. Görüyorum ki sadece sıfırdan yazmışsın ama başkasının kodunu okuyup editlemeyi bilmiyorsun ve sinirleniyorum.

Ve son olarak, belirli pozisyona bağlı olarak, çeşitli başka şeyler de vardır. Analist olarak iş buluyorsanız, Kaggle'da veri analizi görevlerini çözmenizi istiyorum. Algoritmik şeylerde iş bulursan spor programcılığında bazı algoritmalar yapmanı isterim. Ve son olarak, mesleği düşündüyseniz, röportajların nasıl yapıldığını bir okuyun, orada bazı kişilerin büyük memnuniyetsizlik ifade ettiğini görmüşsünüzdür: “Geldim ve bana hobimin ne olduğunu soruyorlar. Baykuş gibi oturuyorum ve cevap vermiyorum çünkü hobim yok ”- ve bunu İK'ların 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, büyük bilgi birikimine sahip zorlu bir uzman olursanız olun, ekibin sizinle çalışması zor olacak ve projeyi tek başınıza başaramayacaksınız. Ayrıca esneseniz bile şirket için nasıl bir yük olduğunu hayal edebilirsiniz. Ve yarın gelip "Maaşımı 10 kat artır, yoksa seni bırakırım" diyeceğini. Anlaşılır bir şekilde, şirketler bu duruma girmek istemiyorlar. Bu nedenle, kendi içinde yeterliliğin ve iyi niyetin yetiştirilmesi, (en azından) bir tür mesleki becerinin geliştirilmesi kadar önemlidir.

Özetlemek gerekirse, ne söyleyebilirsiniz? Hangi diller iyi, hangileri kötü? Peki, bir grup dil ​​içinde, örneğin Ruby, Python ve PHP arasında hangisini seçmeli? Tabii ki, doğru cevap Python'dur, ancak aslında aralarındaki fark izin verilen hata sayısında, başka bir şeyin miktarındadır - %5, peki, belki %10. Yani PHP ile yazılmış hazır bir projeniz varsa aklı başında hiç kimse "Her şeyi Python'da yeniden yazalım" demez. Şöyle diyecekler: "Daha fazla PHP geliştiricisi tutalım ve PHP'de yazmaya devam edelim." Harika, bu kötü bir seçim değil. Aniden bir proje yazmaya başlarsanız, şimdi Python'u seçmeniz akıllıca olabilir. Bununla birlikte, aynı zamanda bağlıdır. Belki piyasada bir sürü ucuz PHP geliştiricisi vardır, ancak python geliştiricileri pahalıdır ve şöyle düşünürsünüz: "Evet, teknoloji daha havalı, ama 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 yapabilirim? 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 olacağınızı ve doğru seçimi yapabileceğinizi düşünüyorum. Şu anda, henüz bu seçimi yapmak zorunda değilsin ve bu yüzden sana istediğini yapmanı tavsiye ediyorum.

Temel bilgiler, daha önce de söylediğim gibi, programlamanın çok, çok temelleri (işlev nedir, if'ler, for'lar, diziler, başka bir şey nedir) herhangi bir dilde az çok öğrenilebilir. Örneğin, C ++ 'da, çünkü birçok şeye benziyor ve içindeki özellikler (bu düzeyde) en az ve harfler gereksiz yazmak için en az. Peki, o zaman, bazı karmaşık mimari şeyler öğrendiğinde, bunun hakkında çok fazla şey öğren ve endişelen. Yani, asıl mesele - deneyin, neyi sevdiğinizi arayın ve zaten sabahın 4'ü olduğunu fark ettiğinizde ve eğlenmek için oturup sevdiğiniz için yazdığınızda - muhtemelen şu andadır. senin bulduğunu...