Daftar bahasa pemrograman. Bahasa pemrograman paling populer. Bahasa pemrograman untuk pemula

Bahasa pemrograman yang berbeda dan bidang aplikasinya. Kuliah di Yandex

Kami memutuskan untuk mendedikasikan posting pertama kami tahun ini untuk topik yang sangat mendasar, kuliah yang diberikan di Small ShAD. Dihadiri oleh siswa sekolah menengah yang tertarik dengan teknologi, maka kekhususan presentasi - kuliah akan sangat menarik bagi mereka yang baru mulai memprogram dan sedang memikirkan arah mana yang akan dikembangkan. Bagi mereka, Yandex memiliki kursus "Pengantar Pemrograman (C++)", yang dapat diambil di platform Stepic.org.

Dosen Mikhail Gustokashin - kurator program akademik di Yandex, direktur Pusat Olimpiade Mahasiswa Fakultas Ilmu Komputer HSE. Mikhail menyiapkan lusinan pemenang dan pemenang hadiah Olimpiade Pemrograman Seluruh Rusia.

Kuliah tersebut menceritakan tentang apa itu bahasa pemrograman, bagaimana perbedaannya, bagaimana kemunculannya dan mana yang lebih baik dan mana yang lebih buruk. Pada awalnya, kita akan berbicara sedikit tentang sejarah bahasa - bagaimana mereka muncul, bagaimana orang memulai pemrograman, bagaimana semuanya berkembang, apa yang terjadi sekarang. Bagian kedua akan menyentuh pada tugas apa bahasa yang cocok untuk, bagaimana "memilih bahasa favorit Anda dan menikmati hidup." Dosen juga akan berbicara sedikit tentang bagaimana, menurutnya, mempelajari semua ini dan kemudian mendapatkan pekerjaan.

Seperti biasa, di bawah potongan adalah transkrip rinci kuliah sehingga Anda dapat menavigasi isinya.

Sejarah bahasa pemrograman

Mari kita mulai dari awal. Pada awalnya, komputer bahkan tidak memiliki keyboard! Artinya, semuanya sangat buruk - mereka tidak memiliki keyboard atau layar, mereka memiliki kartu berlubang (ini adalah benda-benda kecil berlubang atau tanpa lubang). Oleh karena itu, pin ditusukkan di sana, atau disinari dengan cahaya di sana. Jika ada lubang (atau sebaliknya tidak) - itu berarti nol atau satu. Dan program pada waktu itu ditulis menggunakan kode mesin - setiap operasi di komputer (penambahan, pengurangan, beberapa operasi yang lebih kompleks) memiliki semacam kode mesin. Orang-orang sendiri memilih kode ini dari piring, segala macam alamat dalam memori, mereka merobohkan semuanya dengan tangan mereka dan memasukkannya ke pembaca - dan semuanya dipertimbangkan. Tentu saja, pekerjaan seorang programmer mungkin tidak terlalu menarik saat itu - untuk membuat lubang - dan dengan perkembangan ilmu pengetahuan dan teknologi, tentu saja, mereka mulai menemukan berbagai hal yang lebih "menarik". Misalnya, assembler (Assembler), yang telah membuat hidup sedikit lebih mudah.

Nah, bagaimana dia membuat hidup lebih mudah? Alih-alih mengingat bahwa ada semacam kode "ajaib" untuk perintah tersebut, semua jenis kata yang mirip dengan bahasa Inggris "manusia" digunakan - beberapa menambahkan atau memindahkan - yah, dan kemudian register atau area memori terdaftar, variabel yang digunakan melakukan operasi. Tetapi jelas bahwa ini, secara umum, juga memerlukan upaya mental yang cukup besar untuk mengingat di register mana kita memiliki apa yang ada, di mana variabel dan apa yang terjadi secara umum. Kenapa ini terjadi? Karena komputer itu "bodoh" dan tidak bisa memahami apa pun yang lebih "pintar". Bahkan, butuh waktu dan memori juga untuk merakit kode mesin dari assembler (waktu itu tentunya belum cukup).

Secara bertahap, menjadi jelas bahwa sangat sulit untuk mengembangkan program yang begitu rumit. Produktivitas programmer dalam perintah ini sangat rendah - yaitu, ia menulis beberapa baris sehari (bermakna), dan setiap baris tidak melakukan sesuatu yang istimewa - beberapa operasi aritmatika sederhana. Dan orang ingin membuat bahasa lebih mirip bahasa manusia, khususnya bahasa Inggris, sehingga akan lebih mudah dan nyaman untuk menulis program. Dan kita berangkat!

Bahasa lama dan mati

Salah satu bahasa pertama adalah Fortran. Omong-omong, itu juga dipukuli pada kartu berlubang - ada kartu berlubang khusus untuk melumpuhkan program Fortran. Tetapi jika Anda sekarang mengambil Fortran ini - menurut saya, itu bahkan antara 50-60 tahun. muncul - dan coba tulis sesuatu di atasnya, itu akan sangat tidak menyenangkan bagi Anda, saya jamin! Fortran modern masih hidup, tetapi sudah sangat berbeda dari sebelumnya.

Bahasa lain - sekarang saya akan menulis satu hal, yang mungkin pernah Anda dengar, tetapi hanya di semua jenis acara di mana mereka berbicara tentang sejarah pemrograman - ini adalah COBOL. Itu adalah bahasa untuk menulis aplikasi bisnis. Apa itu aplikasi bisnis? Beberapa transaksi di bank, sesuatu yang lain, semua ini ditulis dalam Cobol. Kami, tentu saja, tidak terlalu populer. Saya pikir Anda akan menemukan programmer Cobol di Moskow dengan kesulitan besar. Dan di suatu tempat tidak di Moskow - dengan kesulitan yang lebih besar. Tapi, yang mengejutkan, bahkan 10 tahun yang lalu, lebih dari setengah dari semua kode yang ditulis oleh umat manusia ditulis dalam bahasa Cobol. Dan sampai sekarang, sebagian besar transaksi perbankan berjalan dengan bantuan program tertulis di atasnya (COBOL), dan orang masih menulis sesuatu di atasnya.

Ada juga bahasa "lucu", itu disebut Algol (versi ke-68, yang menjadi ciri tahun pembuatannya). Ini adalah bahasa algoritmik. Secara umum, mereka tahu sesuatu di sana, tetapi sekarang kami tidak terlalu tertarik dengan apa yang bisa mereka lakukan. Dan dalam hal ini, perjalanan kami ke zaman kuno dan bahasa yang relatif tidak digunakan dapat diselesaikan dan kami dapat melanjutkan ke apa yang masih hidup (dan hidup aktif).

Bahasa lama tapi hidup

Algol ditemukan di Eropa, dan Fortran digunakan terutama di Amerika Serikat - tidak ada perbedaan besar. Tren apa yang terlihat? Pada awalnya, semuanya sulit dan untuk menulis, Anda harus hampir menjadi seorang insinyur, seorang insinyur listrik, untuk memahami di mana kontak mana yang ditutup dan sesuatu yang lain untuk pemrograman. Kemudian juga, perlu untuk duduk dengan daun dan menghitung memori, menjaganya. Dan secara bertahap semuanya menjadi lebih sederhana, lebih sederhana, lebih sederhana dan lebih jauh bahkan lebih mudah bagi programmer - sesedikit mungkin bagi seseorang untuk berpikir, sebanyak mungkin untuk melakukannya secara otomatis. Sekitar akhir periode ini (dosen menunjuk ke Algol dan Kobol), bahasa mulai muncul yang, dalam arti tertentu, telah "bertahan" hingga hari ini.

DASAR. Mungkin beberapa orang masih menulis sesuatu di sana, setidaknya saya melihat bahwa di beberapa institusi mereka mengajar di QBasic - jendela biru tempat "1989" ditulis. Secara umum, "dengan kekuatan dan utama" hidup! Itu dipahami sebagai bahasa untuk non-programmer. Pada saat itu programmer adalah profesi yang sangat terspesialisasi. Dan di sini mereka memberi tahu Anda: "Di sini kami memiliki bahasa Dasar yang keren, dan setiap orang yang berakal akan mengambil dan menulis program di dalamnya - itu mudah." Sekali lagi, BASIC dan BASIC modern adalah perbedaan besar. Semua baris ini diberi nomor hingga 10, segala macam GOTO dan kengerian lainnya - mereka tidak lagi ada hubungannya dengan BASIC modern, dan bahkan tidak ada hubungannya dengan BASIC tahun ke-89.

Cerita lucu lainnya adalah bahasa Pascal, yang dikenal luas di kalangan universitas, terutama di Rusia dan di negara-negara bekas Uni Soviet. Ini telah dan terus digunakan secara mengejutkan sebagai bahasa pengajaran. Di seluruh dunia, itu kurang umum, tetapi juga hidup dan sehat. Ada orang seperti itu Wirth - di sini dia adalah seorang ilmuwan, seorang ahli teori. Dia berpartisipasi dalam diskusi tentang Algol, dia tidak menyukai apa yang terjadi, dan dia menemukan bahasanya sendiri - Pascal. Dan kemudian perusahaan Borland (dan sebelum itu, banyak perusahaan lain - Apple terlibat, khususnya) mengambilnya dan menghancurkan segalanya. Dia memiliki teori yang indah, ramping - "semuanya akan baik-baik saja," - dan mereka mengambilnya dan mengisinya dengan apa yang dibutuhkan orang untuk bekerja. Yah, ternyata tidak sebaik yang dia inginkan.

Dan akhirnya, . C ditemukan oleh para insinyur. Jika Pascal ditemukan oleh seorang ilmuwan, maka C ditemukan oleh Kernighan dan Ritchie, mereka bekerja sebagai insinyur di Bell. Bagaimana hal itu terjadi? Saat itu, dalam bahasa-bahasa ini (dosen menunjuk Fortran, COBOL, Algol), tidak mungkin menulis sesuatu yang sistemik. Apa itu "sistemik"? Misalnya, sistem operasi, beberapa driver, sesuatu yang lain. Bahasa-bahasa ini dimaksudkan untuk perhitungan matematis, untuk perhitungan bisnis, untuk semuanya. Dan segala sesuatu yang lain ditulis dalam assembler. Ada beberapa bahasa, mereka sekarang mati, yaitu bahasa C tidak langsung muncul dari Assembler, tetapi melalui beberapa hal perantara.

Apa intinya? Kernighan dan Ritchie suka bermain mainan Asteroid - sebuah pesawat ruang angkasa terbang, dan ada asteroid, dia menembak mereka, dan mereka hancur berantakan. Mereka memiliki server tempat mereka bermain, tetapi ada banyak orang di sana, dan mainannya melambat. Dan mereka menemukan di suatu tempat di kantor mereka bahwa mereka memiliki semacam komputer yang tidak digunakan siapa pun. Tapi ada masalah - arsitekturnya berbeda, dan gamenya ditulis dalam assembler.

Mereka menulis ulang, tentu saja, bahkan menambahkan beberapa fitur untuk bermain di dalamnya. Tapi ini membawa mereka pada gagasan bahwa menulis ulang untuk arsitektur baru setiap saat tidak terlalu cerdas. Dan mereka memutuskan untuk menulis bahasa tingkat tinggi yang cocok untuk pemrograman sistem, yaitu, di mana dimungkinkan untuk mengelola memori, di mana dimungkinkan untuk memahami di mana letak sesuatu dan bagaimana mengakses potongan-potongan memori ini. . Dan bahasa C muncul, yang berdampak besar pada semua yang mengikutinya. Semuanya (dosen menunjuk ke Algol, Fortran dan bahasa lain yang disebutkan) memiliki pengaruh yang besar, tetapi C - benar, ya ...

Dengan demikian, itu adalah bahasa utama di Unix, sebuah sistem operasi yang bahkan lebih populer saat itu daripada sekarang. Dan sekitar tahun 80-an, situasinya seperti ini (dosen menunjukkan di Basic, C dan bahasa lain yang disebutkan). Mari kita asumsikan bahwa semua ini telah perlahan-lahan mati bersama kita (dosen menghapus penyebutan Assembler, Fortran dan Algol) ... Dan di tahun 80-an, komputer menjadi lebih kecil, lebih pintar, lebih murah, dan orang menginginkan segala macam keanehan untuk hidup lebih baik, hidup lebih menyenangkan.

Bahasa dari tahun 80-an

Salah satu keanehan pertama adalah bahasa C++. Bahasa C memiliki sejumlah besar kekurangan (yah, hanya satu yang besar) - Anda dapat melakukan semua yang ada di dalamnya, termasuk menembak diri sendiri di kaki, menembak diri sendiri di kaki dengan fiksi, di kaki lain, menembak dengan satu kaki di kaki lainnya, secara umum - bahwa apa pun yang ingin Anda lakukan. Tetapi pada saat yang sama, beberapa hal arsitektur dibuat cukup sulit di sana - sekali lagi, seperti di Assembler, kita harus melacak di mana kita berada, apa dan jenis memori apa yang kita alokasikan; itu ada sepanjang waktu "mengalir" di suatu tempat memori ini - yaitu, kami mengalokasikan, lupa untuk menghapus, menghapus hal yang salah, naik dari memori, secara umum - menyapu banyak masalah.

C++ pada awalnya dibuat sebagai satu set ekstensi ke bahasa C yang akan membuat pengembangan lebih mudah. Pada saat itu, pemrograman berorientasi objek menjadi mode dan orang-orang memutuskan bahwa semuanya dapat digambarkan sebagai hierarki, yaitu, Anda memiliki bola (abstrak), Anda mewarisi darinya bola sepak, bola voli, bola abstrak lainnya. Kemudian menjadi mode bahwa "kita sekarang menulis segala sesuatu dalam bentuk semacam hierarki, dan semuanya akan baik-baik saja, hidup akan menjadi lebih baik, semuanya akan menjadi baik dan hanya itu." C++ dalam arti tertentu menerapkan pendekatan objek ini - itu bukan bahasa pemrograman berorientasi objek pertama, tetapi menjadi sangat populer dan segala macam fitur mulai muncul di dalamnya. Pada saat yang sama, C ++ mempertahankan kompatibilitas yang hampir lengkap (pada waktu itu) dengan bahasa C, sebuah program yang ditulis dalam C berhasil dikompilasi sebagai C ++ dalam 99% kasus dan bahkan bekerja dengan cara yang sama. Hal ini dimaksudkan untuk memudahkan migrasi dari C ke C++.

Selain pendekatan objek (dalam C++), Standard Template Library (STL) muncul cukup cepat. Saya pikir di sekolah, mereka yang masih belajar Pascal mengetahui bahwa Anda memiliki, pertama, tidak ada penyortiran bawaan (dalam Borland Pascal biru kuno, sekarang sudah dalam versi modern) - ada contoh (sumber) penyortiran , dapat disalin dan ditempel. Tetapi jika Anda ingin mengurutkan bilangan bulat di sini, Anda ingin bilangan real di sini, dan di sini Anda ingin string yang dapat dibandingkan satu sama lain, Anda harus menulis tiga jenis berbeda yang melakukan hal yang persis sama, mereka hanya memiliki tipe data yang berbeda. Ini tidak terlalu bagus, dan template, yang tidak segera muncul di C ++, sangat memudahkan masalah ini. Artinya, Anda memiliki program abstrak yang berhasil mengurutkan sesuatu yang dapat dibandingkan satu sama lain.

Bahasa skrip dari tahun 90-an

Namun waktu tidak berhenti, di tahun 80-an banyak hal menarik terjadi. Tetapi di suatu tempat sekitar pergantian tahun 80-an dan 90-an, komputer menjadi begitu baik sehingga sudah memungkinkan untuk melakukan hal-hal yang sangat aneh dan sangat tidak efisien. Secara khusus, ini adalah bahasa skrip yang tidak dikompilasi ke dalam kode mesin, tetapi ditafsirkan. BASIC juga ditafsirkan pada suatu waktu, tetapi bahasa skrip ini terutama ditujukan untuk pengolah kata - misalnya, Perl, Python (saat itu tidak terlalu terkenal), PHP, Ruby - ini adalah bahasa skrip bahwa dalam satu atau sampai batas tertentu, mereka masih hidup (mereka semua berhasil muncul sebelum tahun 2000, bahkan jauh lebih awal).

Mari kita bahas sedikit, karena ini adalah hal-hal khusus dan sekarang digunakan di banyak tempat. Apa idenya? Jika kita tidak mengkompilasi, maka kita dapat mengizinkan lebih banyak. Misalnya, sebuah program dapat melihat kodenya dan entah bagaimana menggunakannya; dia tahu apa yang terjadi dalam dirinya dan karena ini, Anda dapat melakukan banyak hal menarik.

Perl dirancang untuk pengolah kata - pada masa itu sudah ada begitu banyak memori di komputer sehingga Anda dapat meletakkan beberapa teks di sana dan melakukan sesuatu yang berguna dengan teks ini (misalnya, menghitung kata, mencari beberapa). Tapi, menurut saya, itu dirancang oleh orang-orang yang sedikit gila, karena ada lelucon tentang itu: "Setiap set karakter yang ditulis adalah program yang benar di Perl." Menurut pendapat saya, Anda hanya bisa menulis di atasnya, Anda tidak bisa membacanya. Ketika saya melihat kode Perl dan mencoba memahami sesuatu, saya tidak mengerti apa-apa. Mungkin jika saya mengenalnya lebih baik, saya akan memahami sesuatu, tetapi seperti yang saya dengar dari orang-orang yang masih tahu caranya, mereka mengatakan bahwa lebih mudah untuk menulis ulang. Artinya, programnya pendek dan sangat mudah untuk ditulis ulang daripada mencari tahu apa yang ada dan memperbaikinya.

Sekitar waktu itu, di pertengahan 90-an, Internet muncul. Pada awalnya adalah surat, situs dengan HTML statis, tetapi orang ingin menambahkan semacam dinamika di sana, sehingga semuanya akan terjadi secara dinamis, beberapa formulir dapat diisi, buku tamu dapat dilakukan, dan lain-lain. Oleh karena itu, ini memerlukan semacam interaksi, mereka datang dengan protokol untuk cara berinteraksi, dan, yang paling penting, pembuatan halaman statis (bersyarat) ini yang akan "dimuntahkan" kepada pengguna sebagai tanggapan atas permintaannya.

Secara umum, tidak ada apa pun selain Pearl pada waktu itu yang tidak cocok. Menulis dalam penangan C atau C++ murni adalah ide yang buruk. Dan karena tidak ada yang lebih baik pada saat itu (dan cukup lama), Pearl adalah bahasa yang digunakan untuk pengembangan web. Tentu saja skalanya tidak bisa dibandingkan dengan apa yang terjadi sekarang.

PHP muncul sebagai ... secara kebetulan. Satu orang dengan cepat berhenti melakukan ini - dia membuat semacam halamannya sendiri, dia memiliki semacam buku tamu, sesuatu yang lain, semacam hal. Dan dia menulis satu set makro untuk Perl yang tampak seperti C, karena dia tahu cara menggunakan C, hanya karena itu sangat nyaman baginya. Dan menyebutnya Personal HomePage. Dia membagikannya dan berkata: "Teman-teman, lihat apa yang saya tulis, semuanya jauh lebih jelas di sini daripada di Perl dan Anda dapat mengeditnya." Dan orang-orang menyukainya.

Kemudian dia menjatuhkan masalah itu. Secara umum, sebagai hasilnya, PHP ini mulai hidup dan menjadi jauh lebih populer daripada Perl dari waktu ke waktu. Tapi "trauma kelahiran" ini (ide sebagai satu set makro untuk Pearl) memainkan lelucon yang agak kejam dengannya. Bahasanya aneh. Artinya, itu berkembang sendiri, tidak ada yang mendesainnya, tidak ada yang mengatur proses pengembangan (baik perusahaan, atau siapa pun), tetapi ada banyak kelompok, yang masing-masing menggergaji apa yang mereka sukai. Akibatnya, fungsi dipanggil secara berbeda di sana, bahkan tidak ada gaya, semuanya melalui garis bawah, secara umum, bagaimanapun, pengaturan ada di sana-sini, dan bagaimana semua ini akan bekerja tidak terlalu jelas. Tapi Anda bisa duduk dan menulis dalam PHP dalam dua jam, karena dia pikir begitu.

Python dan Ruby: Ruby kurang populer sekarang, Python entah bagaimana lebih baik "direncanakan", mari kita bicarakan nanti. Jelas bahwa pada masa itu (dosen menunjuk ke Perl, Python, Ruby, PHP) bahasa yang sangat khusus untuk tujuan yang sangat khusus. Dalam kasus umum, tidak ada yang menulis pemrograman sistem apa pun, tidak ada logika bisnis pada mereka pada waktu itu, dan sekarang mereka tidak terlalu banyak melakukannya.

Bahasa yang dikompilasi dari tahun 90-an

Kami akan pergi pada waktu yang hampir bersamaan, tetapi dengan arah yang berbeda. Pada saat itu, C++ digunakan di negara kita untuk hampir semua yang perlu ditulis bukan untuk web, bukan untuk pemrosesan teks, tetapi hanya untuk aplikasi, untuk sistem operasi, untuk mainan - secara umum, untuk apa pun. Tapi C++ adalah bahasa yang menyeramkan, sungguh. Mengapa? Karena, pertama, ia mewarisi semua masalah C karena kompatibilitas ke belakang. Di sana Anda masih bisa bunuh diri dengan sejuta cara berbeda, yang sama dengan yang ada di C (tentu saja, cara baru ditambahkan di C ++). Pada saat yang sama, jika Anda menulis semuanya dengan baik dan benar, seperti yang dimaksudkan oleh penulis C ++, maka, tentu saja, sudah tidak mungkin untuk bunuh diri dengan cara C-ish lama, dan sepertinya ada lebih sedikit dari mereka. Namun, ia memiliki model objek yang sangat aneh. Memisahkan program menjadi modul, menjadi beberapa bagian, entah bagaimana berasal dari C (jika Anda tahu cara menulis sertakan dalam C atau C ++ - sebenarnya, itu dianggap hanya memasukkan teks perpustakaan ke dalam program Anda, sebagai hasilnya, ketika Anda menulis banyak penyertaan, Anda memiliki segalanya - jika itu "primitif", seperti di awal - semuanya dimasukkan ke dalam satu file dan kemudian semuanya membutuhkan waktu yang sangat lama untuk dikompilasi, karena berjalan beberapa kali Pascal yang sama, Virtovsky, jauh lebih bijaksana dalam hal ini, versi yang lebih baru bahkan lebih baik.

Secara umum, C++ memiliki banyak kekurangan. Kualifikasi seorang programmer harus tinggi untuk menulis dalam C ++, dan programmer seperti itu mahal (baik pelatihan dan hal lain, yaitu sulit untuk menemukan programmer di pasaran, mereka harus membayar banyak, baik, secara umum, ini bukan apa-apa ... ). Dan komputer kita menghitung lebih cepat dan lebih cepat, menjadi lebih murah, orang membeli komputer baru untuk diri mereka sendiri dan menginginkan lebih banyak aplikasi, lebih banyak mainan untuk ponsel mereka, secara umum, lebih banyak kesenangan.

Inilah bagaimana Jawa lahir. Ada juga cerita yang agak lucu tentang bagaimana bahasa ini mendapatkan namanya. Ada programmer, mereka minum kopi sepanjang waktu, dan pada saat itu sedang trend minum kopi, yang tumbuh di pulau Jawa. Bahasa itu dipahami sebagai bahasa untuk perangkat yang disematkan, khususnya untuk mesin kopi. Begitulah nama itu muncul ...
Apa yang secara umum dimulai dengan dia, apa yang baik dalam dirinya dan mengapa dia mendapatkan popularitas besar? Pertama, mereka menyingkirkan warisan Sishnoi, sepenuhnya. Tidak ada petunjuk, apalagi cara untuk menembak diri sendiri beberapa bagian tubuh dan menghancurkan segalanya. Kedua, mereka memperkenalkan ide-ide yang jauh lebih baru dalam hal model objek - yaitu, C ++ muncul jauh lebih awal daripada Java dan menggunakan model objek "liar" yang lebih kuno. Nah, di sini (dosen menunjuk ke Jawa) itu sudah lebih dipikirkan, dan secara teori orang berpikir, dan diterapkan dalam praktik dan membuat segalanya lebih keren.

Dan terakhir, yang ketiga. Program kami di Java dirakit bukan menjadi kode mesin, tetapi menjadi kode untuk mesin virtual. Artinya, Anda memiliki mesin virtual (VM) JVM - Java. Program Anda dirakit menjadi semacam representasi perantara dan kemudian, dengan bantuan mesin ini, mereka sudah dieksekusi. Apa yang diberikannya? Pertama, ia melambat, kedua, ia memakan memori dengan kekuatan yang mengerikan, ketiga, ia portabel di mana saja (secara teoritis) - bahkan ke pembuat kopi, bahkan ke penggiling kopi, bahkan ke komputer, bahkan ke ponsel. Di satu sisi, ini bagus, yaitu, Anda baru saja menulis implementasi mesin virtual, lalu Anda meluncurkan program Java Anda di mana-mana. Tapi, di sisi lain, itu buruk bahwa ada sedikit memori pada telepon yang sama pada waktu itu, kinerjanya rendah, dan semua ini juga mulai tumpul dan melambat.

Tetapi bahkan ini bukan hal utama yang secara umum bahasa itu ditemukan. Bahasa Java diciptakan untuk mengurangi persyaratan kualifikasi programmer. Artinya, programmer yang lebih buruk dapat menulis program yang bagus di Java, karena itu tidak memungkinkan Anda untuk menulis program yang buruk - tidak ada cara untuk menulis program dengan buruk. Di sana Anda hanya dapat menulis program yang bagus. Nah, dalam pemahaman para pencipta bahasa.

Artinya, jika dalam C, dalam C ++, dengan Python, pada apa pun kita dapat membiakkan semacam tempat pembuangan sampah yang mengerikan dari proyek kita, di mana kita memiliki segalanya yang tercampur, berlangsung berjam-jam, dan ada sesuatu yang lain. Di Jawa, juga dimungkinkan untuk membiakkan tong sampah, tetapi untuk ini Anda perlu melakukan beberapa upaya. Artinya, secara default, itu tidak berubah menjadi "tempat pembuangan sampah", masalah lain muncul, bahwa ada sesuatu yang diwarisi, diwarisi di sana - secara umum, sepuluh yang tidak terlalu bermakna ternyata menjadi satu baris yang bermakna. Tapi, mungkin programmer dengan keterampilan menengah seperti itu dapat menulis kode yang cukup berkualitas tinggi.
Kami hampir mencapai akhir. Bagi kami, hal berikutnya yang muncul adalah .Net (dotnet), dan khususnya, kami tertarik pada C # (hampir sama [dosen menunjuk ke Java], yaitu ada perbedaan detail, jika Anda memilih di antara mereka - lihat di mana membayar lebih banyak uang).

Dan satu hal lagi - JavaScript. Tidak ada hubungannya dengan bahasa Jawa, muncul di tahun yang sama - kata itu modis, mereka melisensikan merek dagang untuk digunakan.

Apa yang paling penting untuk diperhatikan? (Dosen menggambar panah dari C++ ke Java, .Net, C#, JavaScript dan PHP). Untuk menulis program sederhana dalam salah satu bahasa ini, dan dalam banyak bahasa lainnya - jika Anda tahu C ++, Anda biasanya tidak perlu tahu apa-apa lagi - Anda mengambil dan menulis dalam C ++, dan kemudian menambahkan dolar di awal , sesuatu yang lain melakukan hal-hal kecil dan itu mulai bekerja untuk Anda pada apa pun (dosen menunjuk ke bahasa yang panah dari C ++ ditugaskan). Artinya, mereka sangat mirip dalam beberapa hal sederhana. Jika Anda memecahkan beberapa masalah sekolah, masalah pendidikan, sesuatu yang lain (Anda tidak merancang proyek besar - Anda memiliki satu file yang membaca angka, menampilkan angka di konsol, melakukan sesuatu yang lain), maka hampir tidak ada perbedaan antara bahasa-bahasa ini . Jelas bahwa JavaScript dan PHP terspesialisasi, mereka memiliki segalanya sedikit berbeda. Dan di sini (dosen menunjuk ke Java dan C#) ada sedikit perbedaan sama sekali.

Sejak itu, segala macam hal menarik lainnya telah muncul, tetapi tidak jelas apakah mereka akan hidup atau mati dengan sukses. Apa sekarang, untuk tugas apa mereka menggunakannya?

Memilih bahasa tergantung pada tugas

Misalkan Anda dihadapkan dengan tugas menulis driver untuk kartu video. Bahasa apa yang akan Anda gunakan hari ini? (Teriak dari penonton: Java!) Mengapa… Java itu hebat, tapi mengapa tidak di Ruby atau PHP? (Dosen berbicara dengan sinis.)

pemrograman tingkat rendah

Jika Anda menulis sesuatu tingkat rendah, maka C adalah pilihan terbaik, tetapi saya pernah mendengar (tetapi tidak melihat) bahwa C++ digunakan untuk ini. Tetapi saya kurang percaya akan hal ini, karena dalam C Anda dapat dengan jelas mengontrol - karena Anda telah memberikan begitu banyak byte memori, itu berarti akan ada begitu banyak. Dan di C++ (STL), bagaimana string diimplementasikan? Nah, entah bagaimana dilaksanakan. Dan pada akhirnya, kita tidak tahu bagaimana dan apa yang terjadi di sana, mungkin kita akan kehabisan memori pada kartu video kita atau sesuatu yang lain akan terjadi. Oleh karena itu, C masih hidup dan tidak mati, masih ada tugas pemrograman sistem seperti itu - menulis sistem operasi, menulis driver, menulis sesuatu yang lain - C sangat bagus untuk ini. Selain itu, semua jenis perangkat sekarang muncul (Internet of things menjanjikan bahwa itu akan segera datang) yang hidup dengan baterai (dan, tentu saja, akan ada jutaan di antaranya, semuanya akan digantung dengan Internet of things ini) , mereka harus sangat murah dan sangat sedikit mengkonsumsi listrik. Dengan demikian, akan ada 2 KB memori, prosesor pada 5 kHz, dan, tentu saja, tidak akan mungkin untuk memasang beberapa jenis mesin virtual atau bahasa skrip dalam waktu dekat - yang berarti Anda harus menulis sesuatu di C Dan bahkan sekarang, misalnya, perhitungan pada kartu video (OpenCL atau teknologi lain) - mereka tidak menemukan bahasa baru untuk menulis program untuk mereka - mereka melakukan C dengan beberapa batasan besar. Hanya karena orang sudah tahu caranya, mengapa belajar sesuatu yang baru? Secara formal, ini mungkin juga, dalam arti tertentu, C.

Pemrograman web

Katakanlah Anda ingin menulis Facebook baru (jejaring sosial). Apa yang akan Anda tulis? (Dari audiens mereka berbicara tentang HTML dan CSS.) HTML, CSS adalah desain, dan kami ingin memungkinkan untuk menambahkan foto, berteman, meninggalkan komentar di sana.

Untuk bagian skrip - yaitu, apa yang akan terjadi di sisi klien - ini adalah JavaScript. Selain itu, terkadang JavaScript dibuat dalam bahasa lain dan dikirim (kebetulan skrip dibuat ... karena terkadang lebih mudah untuk memproses beberapa perubahan dalam logika).

Anehnya, itu ditulis dalam PHP - dan Facebook, dan banyak proyek besar lainnya. Tentu saja, saya harus menulis hal-hal saya sendiri sehingga masih berfungsi dengan baik, dan tidak seperti yang dilakukan, tetapi mereka melakukannya. Pada prinsipnya, tidak masalah apa yang Anda tulis, tetapi saya tidak merekomendasikan Perl. Di sini dan sekarang, tentu saja, tidak ada yang menulis apa pun dari awal untuk web. Semua orang menulis semacam kerangka kerja atau yang lainnya. Toko online? Kami mengunduh kerangka kerja untuk toko online - itu saja, kami menulis toko online.

Pemrograman bisnis

Selanjutnya, Anda ingin menulis beberapa aplikasi bank yang membosankan. Atau, misalnya, apakah Anda memiliki seseorang yang menjual kartu sim? Mungkin Anda pernah membeli telepon atau sesuatu dan mereka memberi tahu Anda: "Ini adalah sistem yang menggantung, tidak ada yang bisa kami lakukan." Apa yang akan Anda tulis aplikasi seperti itu? (Sebuah teriakan dari penonton tentang Python) Anda tidak bisa menulis hal-hal seperti itu dengan Python, apa yang Anda?! Tidak ada untuk bisnis yang harus ditulis dengan Python. Mengapa? Karena ketika Anda menulis sesuatu dengan Python, Anda tidak dapat menemukan banyak bug dalam proses penulisan. Python diketik secara dinamis dalam setiap cara yang memungkinkan, dan secara umum, Anda dapat menyembunyikan bug di sana sehingga muncul dalam situasi sedemikian rupa sehingga Anda bahkan tidak dapat memahami apa yang dilakukan pengguna bengkok ini di sana, sehingga semuanya rusak untuk Anda. Artinya, lebih baik menulis sendiri dengan Python, skrip kecil - Anda mengerti apa yang terjadi di sana dan apa yang sedang dilakukan. Nah, atau sesuatu yang Anda tidak keberatan membuangnya: Anda ingin meluncurkan sesuatu sebelum pesaing Anda, jadi bagaimana jika itu rusak setiap saat. Anda menulis dengan Python dan hanya itu - Anda merebut pasar. Dan jika Anda menulis sesuatu untuk waktu yang lama, misalnya, semacam aplikasi perbankan (sehingga menyetujui pinjaman, sesuatu yang lain) - Anda menulisnya di Jawa. Karena itu masalah serius di sana, kertas, uang, dokumen, sesuatu yang lain, tetapi Anda tidak dapat mengacaukannya sehingga semuanya akan pecah, jika tidak, orang akan tersinggung - uang mereka hilang dan tidak sampai ke mana pun, karena Anda telah beberapa saat string berubah menjadi angka atau sebaliknya. Jadi, itu berarti Anda secara metodis mengambil dan menulis di Jawa, menulis ... Yah, atau di .Net, situasi seperti itu, pada prinsipnya, juga terjadi. Di sana, tentu saja, Anda juga dapat mengalami masalah, tetapi kemungkinannya masih sedikit lebih rendah.

Pemrograman untuk tentara, industri kedirgantaraan

Sekarang bayangkan mereka memutuskan untuk mengirim Anda ke bulan dengan roket. Apa yang Anda lebih suka untuk menulis kode yang mengontrol mesin roket? Ayo lihat. Ini, mungkin (dosen menunjuk ke Perl, Python, PHP, Ruby), tidak sepadan - melambat, sesuatu yang lain sedang terjadi, yah, secara umum, saya tidak akan setuju untuk terbang dengan roket seperti itu. Di C++? Sejujurnya, saya juga tidak, karena ada terlalu banyak cara untuk bunuh diri di C++. Ketika Anda berada di luar sana di suatu tempat di luar angkasa, itu tidak terlalu bagus.

Mungkin di Jawa? Semuanya tampak cukup andal di sana dan arsitekturnya bagus, tidak ada tipe liar, tidak ada memori tambahan yang berlebihan. Katakanlah saat yang paling penting telah tiba, dan Java kita telah memutuskan untuk mengumpulkan sampah untuk kita. Kita perlu mendarat, melambat, dan dia seperti, "Tidak, sampah akan pergi." Secara umum juga tidak terlalu banyak.

Sejujurnya, saya lebih suka program ini ditulis dalam Pascal. Tentu saja, saya tidak terlalu suka Pascal, tetapi entah bagaimana dalam hal-hal seperti itu akan sangat keren.

Menggunakan beberapa bahasa untuk pengembangan perangkat lunak sekaligus

Nah, apa yang harus dikatakan tentang bahasa modern secara umum. Sekarang banyak proyek tidak hidup dalam satu bahasa, yaitu, beberapa di antaranya hidup dalam satu bahasa, beberapa dalam bahasa lain, dan beberapa lagi dalam bahasa ketiga. Misalnya, jika Anda memiliki beberapa jenis aplikasi web yang memproses sejumlah besar informasi, akses ke disk (bahkan tidak ke database, mereka sangat besar sehingga bahkan database yang sudah ditulis di sana bahkan tidak dapat menarik) mungkin ditulis di beberapa kemudian C tingkat rendah, untuk menulis ke disk dengan sangat cepat dan sebagainya. Secara alami, tidak ada gunanya menulis seluruh proyek dalam bahasa C. Mungkin ada beberapa logika perantara yang ditulis dalam Java yang memanggil fungsi C untuk panggilan cepat. Nah, frontend (apa yang dilihat pengguna), tentu saja, sudah ditulis pada sesuatu, pada beberapa skrip, pada apa yang langsung dieksekusi oleh browser (JavaScript). Dan semua ini hidup bersama dan berhasil berinteraksi.

Dalam pengembangan beberapa aplikasi, bahkan yang berukuran besar, terkadang orang melakukan apa? Mereka mengambilnya dan menulis prototipe dengan Python (bagaimana semuanya akan bekerja), membuat sketsa, memikirkan beberapa jenis arsitektur. Menulis di atasnya sangat cepat - mereka melemparkan prototipe, bereksperimen dengannya dan berkata: “Wow! Itu sangat keren! Dan benar-benar ditulis ulang. Tampaknya mereka melakukan pekerjaan itu dua kali, yang memakan waktu dua kali lebih lama (yah, satu setengah). Tapi tidak! Seringkali ternyata cara ini tidak buruk, karena jika Anda segera menulis sesuatu, misalnya, di Jawa, dan kemudian memutuskan: "Tidak, mari kita refactor, ubah arsitektur sepenuhnya dan semua itu," maka Anda akan menghabiskan 10 kali lipat. lebih banyak waktu. Hal-hal seperti itu juga ada dan hidup.

Kondisi untuk keberhasilan bahasa pemrograman apa pun

Sekarang mari kita bicara tentang mengapa beberapa bahasa yang bagus tidak bertahan, atau hidup di ruang yang sangat terbatas. Ketika Wirth melihat apa yang telah dilakukan perusahaan buruk Apple, Borland, dan semua yang telah dilakukan dengan Pascal-nya, dia menemukan bahasa yang lebih baik lagi - Oberon. Itu hanya sangat minimalis - yaitu, ada sangat sedikit perintah (String? Mengapa kita membutuhkan string? Kami akan membuat array karakter!). Yah, ada sesuatu yang tidak berjalan baik dengannya, sejauh itu bisa berjalan.

Satu hal lagi. Militer AS meminta mereka untuk mengembangkan bahasa keren di mana semuanya bekerja dan semuanya bisa ditulis. Hasilnya adalah bahasa Ada yang agak mengerikan, di mana, bagaimanapun, sesuatu masih ditulis, tetapi sekali lagi - hanya untuk militer.

Apa masalahnya? Mengapa beberapa bahasa seperti Python, yang pada awalnya tidak didukung oleh perusahaan, mengambil alih pasar. PHP, yang juga dirancang dengan buruk, juga mengambil alih dan merebut pasar (sebagian besar) dengan sendirinya. Dan segala macam miliaran dolar diinvestasikan (dosen menunjuk ke Ada) dan tidak ke mana-mana, tidak ada yang terjadi. Apa hubungannya? Ini karena tidak ada infrastruktur di sekitar bahasa-bahasa ini. Artinya, bahasanya bisa sangat baik, tetapi selama tidak ada dokumentasi, selama tidak ada komunitas yang dapat menjawab pertanyaan (di Stack Overflow), dan, yang terakhir, yang paling penting, selama tidak banyak jumlah perpustakaan, bahasa tidak menembak. Artinya, Anda, misalnya, ingin menulis situs web di Oberon. Dan apa itu, mengapa tidak? Dan masalahnya dimulai ... Anda tidak dapat mengatur server web Anda di Oberon untuk mengujinya dengan ringan, Anda tidak dapat menghubungkan perpustakaan apa pun, karena mereka tidak ada di Oberon. Dan semua ini dilakukan melalui semacam kruk, kekuatannya hilang, dan secara umum Anda meludah dan menulis situs Anda dalam C murni, bukan Oberon. Dan bahasa-bahasa yang dapat menggunakan perpustakaan dari bahasa lain hidup dengan baik. Python yang sama di tempat-tempat di mana ia melambat. Yah, secara umum, segala macam hal standar seperti penyortiran dan hal lain ditulis dalam C, dan dia (Python) tahu cara berinteraksi dengan mereka.

Java juga memiliki Antarmuka Asli Java. Ini pada dasarnya C, yaitu ada (menurut saya, mereka selalu ingin melarang, tetapi tampaknya mereka belum melarang) bahasa-bahasa ini dapat berinteraksi dengan perpustakaan yang ada (terutama Cs). Dan karena ini mereka mengambil dan bekerja. Anda memahami gagasan yang saya coba sampaikan kepada Anda, bukan? Jangan menulis dalam bahasa yang tidak tahu cara menghubungkan C-library. Nah, jika Anda ingin menggunakan sesuatu yang keren. Nah, dan secara bertahap mereka (bahasa) memperoleh semacam infrastruktur. Dan mereka hidup dengan baik.

Bahasa pemrograman dan bimbingan karir

Sekarang mari kita bicara tentang bagaimana memahami apa yang Anda inginkan dalam hidup. Apa yang terjadi dari hal-hal keren? Anda dapat melakukan beberapa pemrograman sistem, bukan? Sangat bagus untuk menghitung byte ini di sana, Anda ingin meluncurkan quadrocopters, semacam kamera, melakukan sesuatu yang lain. Maka C mungkin adalah pilihan Anda.

Jika Anda ingin menulis, mungkin bukan aplikasi yang paling menarik dalam hidup, tapi itu keren bagi Anda untuk mendesainnya, pikirkan semuanya dan dapatkan banyak uang untuk duduk dan bosan sepanjang waktu (Anda harus membayar untuk ini jika Anda baik merindukanmu), ini dia - Java, .Net. Anda pergi bekerja di beberapa bank, Anda menulis, Anda pergi bekerja pada jam sembilan dengan kemeja putih, Anda mendapatkan gaji yang bagus dan menulis sesuai dengan rekomendasi dari pengembang Java terbaik, domba .Net dan semua itu ...

Jika Anda ingin menulis beberapa aplikasi, beberapa browser, beberapa mainan, sesuatu yang lain, maka C ++ sangat bagus. Jika Anda ingin menulis situs web, maka ini dia, bahasa pilihan Anda (dosen menunjukkan Perl, Python, PHP, Ruby), tidak ada banyak perbedaan. Satu-satunya hal adalah PHP akan mati sebelum Python, jadi jika Anda terlalu malas untuk mempelajari hal-hal baru, maka pelajari Python. Anda tidak akan melihat perbedaan besar, tetapi Anda akan bertahan lebih lama.

Apa yang terjadi pada Ruby juga tidak jelas. Nah, Anda juga bisa PHP, jika Anda sudah mempelajarinya, karena sangat sederhana sehingga tidak butuh waktu lama untuk belajar kembali di sana.

Dan akhirnya, ada area aplikasi bahasa pemrograman lain - ini adalah saat non-programmer menggunakannya. Katakanlah Anda seorang matematikawan, fisikawan, ahli kimia, analis, siapa saja, dan Anda perlu menghitung sesuatu dengan cepat, menganalisis beberapa data (untuk ahli biologi, misalnya, berapa banyak rubah yang hidup di Kepulauan Komandan). Anda dapat mengarahkan semua ini ke dalam tabel di Excel atau menganalisisnya dengan sesuatu. Python juga cocok untuk ini, dapat bekerja dengan teks dan perpustakaan yang penuh dengan semua jenis, statistik dan semua itu. Jika Anda ingin melakukan semacam Machine Learning, memproses beberapa data, memprediksi, maka Python juga melakukannya paling cepat sekarang. Benar, perlu dicatat bahwa tugasnya sangat berbeda. Misalnya, jika Anda ingin berdagang di bursa saham secara instan dalam kondisi saat harga berubah setiap saat, maka tidak peduli seberapa keren Machine Learning yang Anda tulis dengan Python, orang yang menulisnya lebih cepat akan punya waktu untuk membeli semuanya lebih awal, sampai Anda akan dihitung, bahkan jika algoritme mereka lebih buruk. Oleh karena itu, bahkan tugas pembelajaran mesin ini (beberapa di antaranya) memerlukan kinerja tinggi (dan sangat tinggi), dan, karenanya, bahasa lain.

Satu-satunya cara untuk memahami apa yang Anda inginkan adalah mencoba segalanya. Sekarang saya akan mengatakan sebagai salah satu visi bagaimana Anda dapat mencoba segalanya. Bagaimana menjadi seorang programmer, dan bahagia? Jadi. Kita mulai dari awal. Di sini Anda belajar di sekolah matematika, bahasa Rusia dan mata pelajaran wajib dan opsional lainnya, dan pengetahuan Anda di bidang pemrograman tercermin di papan tulis (dosen menunjuk ke papan kosong) saat ini. Dan Anda ingin menjadi orang yang bahagia, lakukan apa yang Anda sukai, dapatkan banyak uang dan tidak menyangkal apa pun dan bahagia.

Salah satu cara untuk mencapainya. Tentu saja ada berbagai macam kisah inspiratif tentang orang-orang yang sama sekali tidak kuliah, atau putus sekolah dan menjadi miliarder, pemilik perusahaan, dan sebagainya. Tetapi perlu dicatat bahwa mayoritas orang yang mungkin tidak menjadi miliarder, tetapi juga hidup dengan baik, bagaimanapun juga lulus dari universitas di beberapa titik.

Bagaimana situasi kita dengan memasuki universitas (sekarang Anda belajar di sekolah)? Saat Anda berada di sekolah, Anda perlu memahami bahwa langkah selanjutnya adalah mendaftar dan mengurusnya. Lulus ujian atau menangkan Olimpiade. Pada ujian, Anda dapat menggunakan Pascal, C ++ (termasuk C murni), Python (saya tidak akan menyebutkannya lebih lanjut). Di Olimpiade - Pascal yang sama, C ++ yang sama, Python yang sama (kita akan membicarakan masalahnya sekarang) dan, paling sering, ada Java. Hal lain terjadi tergantung pada Olimpiade, tetapi bukan itu intinya.

Seperti apa jadwal distribusi bahasa di All-Russian Olympiad in Informatics? Orang-orang yang berpartisipasi dalam semua-Rusia, Olimpiade paling keren, apa yang mereka tulis? Sepertinya ini (ini artinya Pascal, dan ini sekitar 2000, dan ini tentang nol, ini C ++, dan ini 2015).

Pada tahun 2000, hampir tidak ada yang menulis C++. 15 tahun telah berlalu, dan hampir tidak ada yang menulis dalam Pascal, meskipun faktanya Pascal adalah modern. Ini adalah bahasa yang dapat melakukan hal yang hampir sama. Hanya saja setiap orang menjadi terlalu malas untuk mempelajari ini, dengan segala macam tren baru, dan semua orang terus menulis dalam bahasa Borland Pascal, yang tentu saja tidak bisa berbuat apa-apa. Di C++, orang menulis beberapa algoritma (STL) untuk mengurutkan - bagus, mereka menulis sort () dan hanya itu. Pada Pascal, pada yang biasa, pada yang lama - ini adalah masalah. Mereka menulis beberapa set (diperlukan) - sangat baik, mereka menulis dalam C ++, di Pascal lagi siksaan belaka. Pada Pascal baru, tentu saja, Anda dapat melakukan ini, tetapi pada umumnya membutuhkan biaya. Anda mungkin tidak menyadarinya, tetapi memang demikian.

Ada juga Jawa, tetapi ada banyak huruf di Jawa. Ini untuk proyek besar, tetapi untuk program kecil sekali saja ternyata cukup buruk, karena ada banyak surat tambahan. Tetapi juga beberapa orang menulis, Anda dapat belajar menulis di atasnya. Tapi itu tidak tersedia di USE dan USE sebagian besar masih harus diambil.

Apa yang terbaik untuk ujian? Untuk ujian, yang terbaik (jika Anda tidak tahu apa-apa dan mereka tidak mengajari Anda apa pun di sekolah) untuk belajar Python. Beberapa soal ujian diselesaikan dengan baik. Di Olympiad, secara umum ternyata C++ (digunakan), karena Python sangat lambat, tidak semuanya diselesaikan di atasnya.

Jadi Anda mempelajari beberapa bagian kecil dari bahasa dan beberapa algoritma (mungkin) dan memecahkan banyak masalah untuk mendapatkan diploma dari Olimpiade Anda dan pergi ke universitas untuk mendapatkan pendidikan yang lebih tinggi.

Sekarang saya akan berbicara tentang bagaimana kami membangun kursus di HSE, dalam urutan apa bahasa diajarkan, bagaimana mereka dipelajari dalam matematika terapan dan ilmu komputer dari Fakultas Ilmu Terapan, yang kami lakukan dengan Yandex. Di semester pertama - Python (tidak lengkap, tentang bagaimana Anda harus diajarkan di sekolah) dan C ++ (sudah lebih luas, jauh lebih luas daripada yang biasanya diajarkan di sekolah). Katakanlah segera agar Anda tidak takut, jika Anda tiba-tiba ingin melakukannya, Anda berkata: “Apa, saya sudah tahu semua ini, mengapa saya harus pergi ke suatu tempat untuk belajar? Aku lebih suka pergi ke tempat lain." Bagi mereka yang sudah tahu cara memprogram dengan baik, ada kesempatan untuk segera pergi ke studi algoritma, dan dalam persiapan yang agak teoretis. Kami tidak melihat mereka sekarang, ini (menunjuk ke papan tulis) adalah untuk mereka yang memprogram rata-rata atau tidak sama sekali.

Semester pertama mengajarkan Anda dasar-dasar Python, agar orang-orang dapat belajar cara memprogram dan tidak ada yang terlalu tersinggung. Python jarang diajarkan di sekolah, kebanyakan orang datang dengan pengetahuan Pascal atau C++. Pada dasarnya bahkan Pascal, jika itu adalah sekolah massal. Nah, agar tidak ada yang tersinggung, semua orang belajar bahasa baru (seolah-olah mereka memiliki pijakan yang sama). Dan C++, hanya karena dari C++ Anda dapat pergi ke mana saja.

Kemudian datang kursus "Algoritma" dan proyek kursus terpisah. Algoritma klasik dengan implementasi. Bukan berarti secara teori kita mengambil sesuatu, menghitung kerumitannya. Di kuliah, kami mengambil, menghitung kompleksitas, di seminar - mengambil, menerapkan algoritma. Sebuah proyek adalah siswa melakukan sesuatu selesai. Misalnya, salah satu proyeknya adalah: menghitung ... Katakanlah Anda memiliki banyak apartemen di Moskow dan Anda mengerti: “Oh, saya punya banyak barang tambahan, saya akan menyewa satu. Dan mereka menetapkan harga, dan tidak ada yang mau menyewa apartemen dari Anda - mungkin terlalu mahal. Atau mereka memasang harga tertentu, mereka segera melepasnya dari Anda dan Anda berpikir: "Oh, saya mungkin memberikannya dengan harga murah" - dan Anda juga kesal. Artinya, perlu menghitung berapa biaya untuk menyewa apartemen? Anda mendorong data - itu membangun penilaian untuk Anda. Situs semacam itu yang terdiri dari beberapa hal: mengambil kalimat, mengurai, menerapkan semacam algoritma pembelajaran mesin (mungkin) sederhana dan membuat tampilan web yang indah di mana Anda dapat memilih sesuatu, memasukkan sesuatu, beberapa meter, sejumlah ruangan, jumlah sauna, jumlah jacuzzi di apartemen Anda, dan perkiraan biayanya secara kasar. Artinya, beberapa selesai, hal yang tidak terlalu rumit. Ini maksudnya (dosen menunjuk mata kuliah tentang algoritma) C++ yang begitu gencar, dengan console I/O. Nah, dan di sini (dosen menunjuk ke prasasti "proyek") sesuatu di bawah bimbingan seorang mentor, mungkin dengan database, mungkin dengan penguraian teks dan sesuatu yang lain.
Kemudian datang semester ketiga - kursus yang disebut "Sistem Komputer". Ada sedikit assembler untuk dipahami (sangat sedikit) dan kemudian, sesuatu yang mirip dengan C murni dan interaksi dengan sistem operasi, pemrograman sistem pada dasarnya. Dan proyek untuk seminar ini juga sesuatu tentang topik semua jenis interaksi jaringan, tingkat yang cukup rendah: kembangkan beberapa utilitas, misalnya rsync (sinkronisasi, Anda mungkin tahu. Dalam C murni, kurang lebih, tulis analog dari rsync, yang akan Anda miliki melalui folder sinkronisasi jaringan dengan semua akses file dan seterusnya).

Dan terakhir, yang keempat. Saya bahkan tidak tahu harus menyebutnya apa, ini adalah perpaduan teknologi yang dibutuhkan untuk pengembangan nyata, seperti pengembangan web. Artinya, ini adalah aplikasi praktis database, sekali lagi mirip dengan apa yang dilakukan di proyek (dosen menunjukkan 2 mata kuliah di proyek), tetapi sudah lebih mendalam. Artinya, hal-hal yang kurang lebih konkret sudah, pemrograman praktis. Sejalan dengan ini, ada teori apa pun, nah, di sini mereka masih melakukan sains.

Dan setelah dua kursus, orang-orang bubar untuk melakukan apa yang mereka minati, karena hal ini mencakup dasar-dasar pemrograman yang cukup luas dan pada saat ini orang sudah mengerti bahwa mereka tidak ingin berurusan dengan sistem komputer dengan cara apa pun (misalnya, mereka tidak suka pemrograman sistem ), tetapi mereka ingin berurusan dengan beberapa algoritma teoretis, kerumitan penghitungan, menemukan beberapa hal baru, didistribusikan atau sesuatu yang lain. Atau, sebaliknya, mereka berpikir bahwa mereka tidak punya banyak di sini ( dosen menunjuk ke baris kursus pertama dengan Python dan C ++) pergi, lalu ( dosen menunjuk ke baris mata kuliah ketiga, dengan pemrograman sistem) - bagaimana Anda tidak menyukainya, hitung byte dan atur segala macam batasan baca-tulis, buat aliran, utas, dan yang lainnya. Dan sesuai dengan ini, orang memilih beberapa arah dan belajar. Artinya, pada prinsipnya, agar Anda tidak mengembangkan "sindrom bebek" - Anda adalah orang pertama yang melihat Pascal Anda dan sekarang mengatakan "Pascal adalah kekuatan"; atau lebih maju - Anda melihat C ++ dan mulai berbicara tentang semua orang bahwa C ++ adalah kekuatan, dan yang lainnya tidak terlalu bagus di sana.

Di sini Anda perlu melihatnya (dosen menunjuk ke daftar mata kuliah di papan tulis) lebih luas - ini adalah salah satu metode yang dipilih, khususnya di HSE (baru-baru ini muncul, jadi cukup modern) . Ada cara lain untuk bertemu. Universitas bagus lainnya memiliki tatanan yang sedikit berbeda dan aksen yang berbeda. Tetapi mereka juga mencoba untuk memperkenalkan orang-orang dengan semua yang mereka miliki.

Cara mencari pekerjaan sebagai programmer

Kamu adalah ( dosen menunjuk ke daftar mata kuliah) melakukan segalanya, belajar di universitas, melakukan sesuatu yang lebih produktif selama dua tahun lagi dan Anda harus pergi bekerja. Bagaimana Anda memilih sesuatu untuk dikerjakan? Pertama, Anda harus mengetahui segalanya, pergi jauh ke suatu tempat dan sudah tahu apa yang Anda sukai. Anda harus memilih apa yang Anda sukai secara alami. Karena jika Anda mencintai, Anda akan menginvestasikan upaya Anda, Anda akan memiliki motivasi dan secara umum semuanya akan baik-baik saja. Karena ini bukan hanya tentang uang, ini tentang membuatnya menarik dan menyenangkan bagi Anda. Nah, dan Anda ingin masuk ke perusahaan yang keren, dapatkan pekerjaan. Orang seperti apa yang ingin saya temui secara pribadi? Katakanlah seratus siswa datang kepada saya - saya harus mengambil dua untuk bekerja atau satu. Mengapa mereka datang, saya tidak mengerti sama sekali siapa mereka, apa mereka, bagaimana mereka? Paling-paling, mereka akan menunjukkan kepada saya ijazah yang mereka terima di universitas, dan saya akan berkata: “Wow! Ini ijazah yang keren, tapi ini tidak terlalu keren!” Dan saya bisa saja salah, omong-omong. Mungkin orang itu punya banyak waktu luang, dan dia belajar jauh lebih baik.

Apa yang bagus? Pertama, beberapa proyek open source yang Anda tulis dari awal hingga akhir. Lebih disukai, jika saya melakukan semacam infrastruktur sehingga data dapat dibaca dengan cepat, atau yang lainnya, maka, tentu saja, saya akan tertarik untuk menulis sesuatu yang bersifat open-source untuk saya. Mereka tidak membuat semacam situs web, tetapi sesuatu tentang topik tersebut. Mengapa ini menarik bagi saya? Saya dapat melihat kode Anda, saya dapat melihat seberapa sering Anda melakukan, saya dapat melihat bagaimana Anda bereaksi terhadap bug dari pengguna, bug dari pengembang yang menggunakannya - semuanya direkam, saya melihat semuanya dan berpikir: "Wow, bug ini telah sudah pergi selama dua tahun ditutup, lalu Anda dengan tidak sopan menjawab pengguna, ada sesuatu yang lain - saya tidak terima. Jadi ini adalah proyek pribadi Anda.

Selanjutnya, apa lagi yang keren? Saya ingin melihat bagaimana Anda melakukan kerja tim. Artinya, Anda datang kepada saya untuk wawancara dan berkata: “Orang-orang dari universitas dan saya menghapus beberapa aplikasi yang bagus. Saya membuat database di sana, mereka membuat semacam aplikasi seluler di sana, dan kami juga memiliki seorang pria yang bekerja di sana, seorang gadis desainer, seorang anak dukungan teknis. Ada lima dari kami dan kami membuat proyek yang keren.” Nah, saya melihat apa sebenarnya proyek Anda, saya berkata: "Apa milik Anda?" Saya melihat kodenya lagi dan mengerti bahwa Anda tahu cara bekerja dalam tim dengan orang-orang.

Seorang programmer bukanlah orang yang duduk sendirian (indie seperti itu) di garasi, di suatu tempat dengan lampu dimatikan, tidak berbicara dengan siapa pun, menumbuhkan janggut dan menulis. Bagaimanapun, ada semacam interaksi dengan orang-orang. Dengan bos, misalnya, yang kadang-kadang memaki Anda (bos, mereka seperti itu, tidak selalu baik). Dan saya melihat bahwa Anda tahu bagaimana bekerja dengan orang-orang dan itu membuat saya senang jika Anda memiliki semacam tim yang bagus. Bahkan jika tidak baik, itu lebih baik daripada tidak sama sekali.

Apa lagi yang saya pribadi suka? Jika Anda menunjukkan diri Anda dalam proyek-proyek besar. Misalnya, Anda melakukan sesuatu ke kernel Linux, jika Anda menyukai pemrograman sistem, Anda memperbaiki beberapa bug. Artinya, mereka menunjukkan bahwa Anda dapat membaca kode orang lain dan mengetahui cara membuat beberapa perubahan pada kode tersebut. Saya melihat: "Oh, sungguh, Anda menemukan sesuatu yang rumit dan memperbaiki beberapa bug!" Dan aku mulai sangat menikmatinya. Karena saya telah ... yah, saya tidak tahu ... jadi programmer saya berhenti karena pesaingnya menawarinya gaji yang lebih tinggi, dan saya sangat membutuhkan seseorang untuk menggantikannya - Anda. Sepertinya Anda hanya menulis dari awal, dan Anda tidak tahu cara membaca dan mengedit kode orang lain, dan saya kesal.

Dan akhirnya, tergantung pada posisi tertentu, ada hal lain yang berbeda. Jika Anda melamar pekerjaan sebagai analis, saya ingin Anda menyelesaikan masalah analisis data di Kaggle. Jika Anda mendapatkan pekerjaan di beberapa hal algoritmik, saya ingin Anda melakukan beberapa algoritme dalam pemrograman olahraga. Dan akhirnya, jika Anda berpikir tentang profesi, membaca bagaimana wawancara berjalan, Anda menemukan bahwa ada beberapa orang yang sangat tidak puas: “Saya datang, dan mereka bertanya apa hobi saya. Saya duduk seperti burung hantu dan tidak menjawab karena saya tidak punya hobi,” dan mereka mengira HR melakukan ini. Bahkan, mereka mencoba memahami betapa ramah dan memadainya Anda. Jika Anda tidak ramah dan tidak memadai, maka tidak peduli seberapa jenius dan gila kerja Anda, seorang spesialis keren dengan pengetahuan yang hebat, akan sulit bagi tim untuk bekerja dengan Anda, dan Anda tidak dapat menyelesaikan proyek sendirian. Selain itu, bahkan jika Anda menariknya, Anda dapat membayangkan betapa beratnya beban yang dihadapi perusahaan. Dan apa yang akan Anda datang besok dan berkata: "Naikkan gaji saya 10 kali lipat, kalau tidak saya akan meninggalkan Anda." Tentu saja, perusahaan tidak ingin masuk ke situasi seperti itu. Oleh karena itu, menumbuhkan kecukupan dan niat baik dalam diri sendiri sama pentingnya (setidaknya) dengan mengembangkan beberapa keterampilan profesional.

Kesimpulannya, apa yang bisa dikatakan? Bahasa mana yang bagus dan mana yang buruk? Nah, dalam beberapa kelompok bahasa, misalnya antara Ruby, Python dan PHP, apa yang harus dipilih? Tentu saja, jawaban yang benar adalah Python, tetapi sebenarnya perbedaan di antara mereka adalah jumlah bug yang diizinkan, dalam jumlah yang lain - 5%, yah, mungkin 10%. Artinya, jika Anda sudah memiliki proyek selesai yang ditulis dalam PHP, maka tidak ada orang waras yang akan berkata: "Ayo tulis ulang semuanya dengan Python." Mereka akan berkata: "Mari kita mempekerjakan lebih banyak pengembang PHP dan terus menulis dalam PHP." Oke, itu pilihan yang bagus. Tentu saja, jika Anda tiba-tiba mulai menulis semacam proyek, maka mungkin bijaksana untuk memilih Python sekarang. Meskipun, itu juga tergantung. Mungkin Anda memiliki banyak pengembang PHP murah di pasaran, dan yang Python mahal, dan Anda berpikir: "Ya, teknologinya lebih keren, tetapi saya akan menghemat uang untuk pengembang yang sudah jadi." Dan semuanya baik-baik saja, Anda sudah datang dan bekerja di sana.
Bagaimana cara memilih antara Java dan C++? Ya, hal yang sama persis terjadi. Saya pikir pada saat Anda memutuskan dalam bahasa apa untuk memulai proyek besar baru, Anda akan memperoleh pengetahuan di bidang profesional Anda dan akan dapat membuat pilihan yang tepat. Saat ini Anda tidak harus membuat pilihan itu dulu, jadi saya menyarankan Anda untuk melakukan apa yang Anda sukai.

Dasar-dasar, seperti yang saya katakan, dasar-dasar pemrograman (apa itu fungsi, bagaimana jika, untuk, array, sesuatu yang lain) dapat dipelajari kurang lebih dalam bahasa apa pun. Misalnya, dalam C ++, karena banyak hal yang mirip dengannya, dan spesifikasi di dalamnya (pada level ini) adalah yang paling sedikit, dan paling sedikit huruf yang tidak perlu untuk ditulis. Nah, kemudian, ketika Anda mempelajari beberapa hal arsitektur yang kompleks, Anda akan belajar dan Anda tidak perlu terlalu khawatir tentang hal ini. Artinya, hal utama adalah mencoba, mencari apa yang Anda suka, dan ketika Anda menyadari bahwa ini sudah jam 4 pagi, dan Anda sedang duduk dan menulis untuk bersenang-senang, karena Anda menyukainya - mungkin, pada saat ini saat itu jelas bahwa Anda telah menemukan Anda.

    Daftar bahasa pemrograman Berdasarkan kategori Kronologis Genealogis Daftar bahasa pemrograman dikelompokkan berdasarkan kategori. Beberapa bahasa termasuk dalam lebih dari satu kategori. Isi ... Wikipedia

    Daftar bahasa pemrograman Berdasarkan kategori Kronologis Genealogis Daftar silsilah bahasa pemrograman diberikan. Bahasa diklasifikasikan menurut bahasa sebelumnya, yang memiliki pengaruh kuat pada pembentukan ... Wikipedia

    Isi 1 Oleh pabrikan atau platform 1.1 Flash 1.2 Java 1.3 Microsof ... Wikipedia

    Daftar bahasa pemrograman Berdasarkan kategori Kronologis Genealogis Garis waktu bahasa pemrograman adalah daftar bahasa pemrograman yang diurutkan secara kronologis. Isi ... Wikipedia

    Artikel ini harus di-wiki. Silakan format sesuai aturan pemformatan artikel. Konvensi ... Wikipedia

    Halaman ini adalah daftar informasi. .NET bahasa pemrograman (CLI-enabled bahasa atau bahasa CLI) bahasa pemrograman komputer yang digunakan untuk membuat perpustakaan dan program yang memenuhi persyaratan Kom ... Wikipedia

    Artikel utama: Editor teks Daftar editor teks Windows dan tabel perbandingan. Daftar Isi 1 Tabel perbandingan editor teks terkenal ... Wikipedia

    Bahasa pemrograman C# merupakan salah satu bahasa pemrograman yang paling populer saat ini. Perangkat lunak grafis raster sumber terbuka Paint.NET SharpDevelop IDE sumber terbuka untuk C#, Visual Basic .NET (VB.NET), Boo ... Wikipedia

    Ini adalah daftar perangkat lunak yang dikembangkan oleh Free Software Foundation sebagai bagian dari proyek GNU UNIX untuk sistem operasi serupa yang seluruhnya terbuat dari perangkat lunak bebas. Sebagian besar paket ini juga ... ... Wikipedia

    Artikel atau bagian ini perlu direvisi. Harap perbaiki artikel sesuai dengan aturan penulisan artikel ... Wikipedia

Buku

  • Python untuk anak-anak. Tutorial Pemrograman, Jason Briggs. Tentang buku Buku ini adalah tutorial tentang salah satu bahasa pemrograman paling populer saat ini - Python. Dimulai dengan langkah paling sederhana, langkah demi langkah, Anda akan menulis…
  • JavaScript untuk anak-anak. Tutorial Pemrograman, Nick Morgan. Tentang buku Buku ini akan memungkinkan Anda menyelami pemrograman dan menguasai JavaScipt dengan mudah. Anda akan menulis beberapa game nyata - berburu harta karun di peta, "Gallows" dan "Snake". Pada setiap…

Pemrograman adalah seluruh ilmu yang memungkinkan Anda untuk membuat program komputer. Ini mencakup sejumlah besar operasi dan algoritma berbeda yang membentuk satu bahasa pemrograman. Jadi, apa itu dan apa bahasa pemrogramannya? Artikel ini memberikan jawaban, serta daftar ikhtisar bahasa pemrograman.

Sejarah munculnya dan perubahan bahasa pemrograman harus dipelajari seiring dengan sejarah perkembangan teknologi komputer, karena konsep-konsep tersebut berkaitan langsung. Tanpa bahasa pemrograman, tidak mungkin membuat program apa pun untuk pengoperasian komputer, yang berarti bahwa pembuatan komputer akan menjadi latihan yang tidak berarti.

Bahasa mesin pertama ditemukan pada tahun 1941 oleh Konrad Zuse, yang merupakan penemu Analytical Engine. Beberapa saat kemudian, pada tahun 1943, Howard Aiken menciptakan mesin Mark-1, yang mampu membaca instruksi pada tingkat kode mesin.

Pada 1950-an, ada permintaan aktif untuk pengembangan perangkat lunak, dan bahasa mesin tidak dapat menahan kode dalam jumlah besar, sehingga cara baru untuk berkomunikasi dengan komputer diciptakan. "Assembler" adalah bahasa mnemonic pertama yang menggantikan instruksi mesin. Dari tahun ke tahun, daftar bahasa pemrograman hanya bertambah, karena ruang lingkup teknologi komputer menjadi lebih luas.

Klasifikasi bahasa pemrograman

Saat ini ada lebih dari 300 bahasa pemrograman. Masing-masing dari mereka memiliki karakteristiknya sendiri dan cocok untuk satu tugas tertentu. Semua bahasa pemrograman dapat dibagi menjadi beberapa kelompok:

  • Berorientasi aspek (ide utamanya adalah pemisahan fungsionalitas untuk meningkatkan efisiensi modul program).
  • Struktural (berdasarkan gagasan untuk membuat struktur hierarki blok individu program).
  • Logis (berdasarkan teori aparat logika matematika dan aturan resolusi).
  • Berorientasi objek (dalam pemrograman seperti itu, algoritma tidak lagi digunakan, tetapi objek milik kelas tertentu).
  • Multi-paradigma (menggabungkan beberapa paradigma, dan programmer sendiri yang memutuskan bahasa mana yang akan digunakan dalam kasus ini atau itu).
  • Fungsional (elemen utama adalah fungsi yang nilainya berubah tergantung dari hasil perhitungan data awal).

Pemrograman untuk pemula

Banyak orang bertanya apa itu pemrograman? Pada dasarnya, ini adalah cara untuk berkomunikasi dengan komputer. Berkat bahasa pemrograman, kita dapat mengatur tugas khusus untuk berbagai perangkat dengan membuat aplikasi atau program khusus. Saat mempelajari ilmu ini pada tahap awal, yang terpenting adalah memilih bahasa pemrograman yang sesuai (menarik untuk Anda). Daftar untuk pemula di bawah ini:

  • Basic ditemukan pada tahun 1964, milik keluarga bahasa tingkat tinggi dan digunakan untuk menulis program aplikasi.
  • Python ("Python") cukup mudah dipelajari karena sintaksnya yang sederhana dan mudah dibaca, tetapi keuntungannya adalah dapat digunakan untuk membuat program desktop biasa dan aplikasi web.
  • Pascal ("Pascal") - salah satu bahasa tertua (1969) dibuat untuk mengajar siswa. Modifikasi modernnya memiliki pengetikan dan struktur yang ketat, tetapi "Pascal" adalah bahasa yang sepenuhnya logis yang dapat dimengerti pada tingkat intuitif.

Ini bukan daftar lengkap bahasa pemrograman untuk pemula. Ada sejumlah besar sintaks yang mudah dipahami dan pasti akan diminati di tahun-tahun mendatang. Setiap orang berhak untuk secara mandiri memilih arah yang akan menarik baginya.

Pemula memiliki kesempatan untuk mempercepat pembelajaran pemrograman dan dasar-dasarnya berkat alat khusus. Asisten utama adalah lingkungan pengembangan terintegrasi Visual Basic untuk program dan aplikasi ("Visual Basic" juga merupakan bahasa pemrograman yang mewarisi gaya bahasa Basic tahun 1970-an).

Tingkat bahasa pemrograman

Semua bahasa formal yang dirancang untuk membuat, menjelaskan program, dan algoritme untuk menyelesaikan masalah pada komputer dibagi menjadi dua kategori utama: bahasa pemrograman tingkat rendah (daftar diberikan di bawah) dan bahasa tingkat tinggi. Mari kita bicarakan masing-masing secara terpisah.

Bahasa tingkat rendah dirancang untuk membuat instruksi mesin untuk prosesor. Keuntungan utama mereka adalah mereka menggunakan notasi mnemonic, yaitu, alih-alih urutan nol dan satu (dari sistem bilangan biner), komputer mengingat kata singkatan yang bermakna dari bahasa Inggris. Bahasa tingkat rendah yang paling terkenal adalah "Assembler" (ada beberapa subspesies bahasa ini, yang masing-masing memiliki banyak kesamaan, tetapi hanya berbeda dalam satu set arahan dan makro tambahan), CIL (tersedia di .Net platform) dan JAVA Bytecode.

Bahasa pemrograman tingkat tinggi: daftar

Bahasa tingkat tinggi dirancang untuk kenyamanan dan efisiensi aplikasi, mereka adalah kebalikan dari bahasa tingkat rendah. Fitur pembeda mereka adalah adanya konstruksi semantik yang secara ringkas dan singkat menggambarkan struktur dan algoritma program. Dalam bahasa tingkat rendah, deskripsi mereka dalam kode mesin akan terlalu panjang dan tidak dapat dipahami. Bahasa tingkat tinggi, di sisi lain, adalah platform independen. Sebaliknya, kompiler melakukan fungsi penerjemah: mereka menerjemahkan teks program ke dalam instruksi mesin dasar.

Daftar bahasa pemrograman berikut: C ("C"), C # ("C-sharp"), "Fortran", "Pascal", Java ("Java") - adalah salah satu sintaks tingkat tinggi yang paling banyak digunakan. Ini memiliki properti berikut: bahasa ini bekerja dengan struktur yang kompleks, mendukung tipe data string dan operasi I/O file, dan juga memiliki keuntungan karena lebih mudah digunakan karena sintaks yang mudah dibaca dan dimengerti.

Bahasa pemrograman yang paling banyak digunakan

Pada prinsipnya, Anda dapat menulis program dalam bahasa apa pun. Pertanyaannya adalah, apakah itu akan bekerja secara efisien dan tanpa gagal? Itulah mengapa bahasa pemrograman yang paling cocok harus dipilih untuk menyelesaikan berbagai masalah. Daftar popularitas dapat diringkas sebagai berikut:

  • Bahasa OOP: Java, C++, Python, PHP, VisualBasic dan JavaScript;
  • kelompok bahasa struktural: Basic, Fortran dan Pascal;
  • multi-paradigma: C#, Delphi, Curry dan Scala.

Lingkup program dan aplikasi

Pilihan bahasa di mana program ini atau itu ditulis sangat tergantung pada area aplikasinya. Jadi, misalnya, untuk bekerja dengan perangkat keras komputer itu sendiri (penulis driver dan program pendukung), opsi terbaik adalah C ("C") atau C ++, yang termasuk dalam bahasa pemrograman utama (lihat daftar di atas). Dan untuk pengembangan aplikasi mobile, termasuk game, sebaiknya pilih Java atau C# ("C-sharp").

Jika Anda belum memutuskan arah mana yang harus dikerjakan, kami sarankan Anda mulai belajar dengan C atau C ++. Mereka memiliki sintaks yang sangat jelas, pembagian struktural yang jelas ke dalam kelas dan fungsi. Selain itu, dengan mengetahui C atau C++, Anda dapat dengan mudah mempelajari bahasa pemrograman lainnya.

Sesempurna apapun sebuah komputer, tanpa software ia hanyalah seonggok besi dan plastik. Ini adalah program yang menentukan apa dan bagaimana, dalam urutan apa ia melakukan operasi tertentu. Pertama bahasa pemrograman mulai muncul pada awal tahun lima puluhan dan digunakan untuk mengubah ekspresi aritmatika sederhana menjadi kode mesin. Kode mesin adalah sistem instruksi komputer yang ditafsirkan langsung oleh mikroprosesor. Tetapi sangat merepotkan bagi seseorang untuk menulis program dalam kode mesin. Untuk memudahkan pekerjaan programmer, dan mulai dibuat bahasa pemrograman.Bahasa pemrograman dibagi menjadi bahasa tingkat tinggi dan rendah. Semakin tinggi level bahasa, semakin mudah bagi seorang programmer untuk menulis di dalamnya. Bahasa seperti itu lebih dapat dipahami oleh seseorang, karena memungkinkan penggunaan konstruksi semantik sederhana untuk mengatur urutan tindakan yang diperlukan. Setelah program dibuat, program tersebut dikompilasi - yaitu, program secara otomatis dikompilasi ke dalam bahasa kode mesin yang dapat dimengerti oleh prosesor. Bahasa tingkat rendah lebih dekat dengan bahasa mesin dan karenanya lebih sulit untuk ditulis. Tetapi mereka memiliki keunggulan sendiri - program yang ditulis dalam bahasa seperti itu sangat cepat dan ringkas. Bahasa tingkat rendah yang paling populer adalah Assembler. Beberapa kelebihannya begitu jelas sehingga bahkan dalam program kompleks yang ditulis dalam bahasa tingkat tinggi, sisipan bahasa assembly sering digunakan. pemrograman banyak digunakan bisa dihitung dengan jari. Salah satu yang paling banyak digunakan adalah C++. Ini adalah bahasa yang sangat nyaman dan cukup sederhana untuk seorang programmer, memungkinkan Anda untuk membuat program dengan tingkat kerumitan apa pun. Belum lama ini, Microsoft mengembangkan bahasa C # (dibaca sebagai "C Sharp"), yang memiliki sejumlah fitur baru dan dirancang untuk menulis program untuk sistem operasi Windows. Microsoft juga telah merilis lingkungan yang sangat populer pemrograman Microsoft Visual Studio, yang memungkinkan pemrograman dalam C++, C# dan beberapa bahasa lainnya.Bahasa yang sangat terkenal adalah pemrograman Delfi. Itu berasal dari Pascal yang dulu terkenal, tetapi berkat upaya Borland, ia telah memperoleh sejumlah kualitas baru, menjadi, pada kenyataannya, bahasa baru. Menulis dalam bahasa ini cukup sederhana dan nyaman, dan berkat lingkungan pemrograman Borland Delphi telah menerima distribusi yang sangat luas. Tanpa bahasa pemrograman keberadaan Internet tidak akan mungkin. Seperti bahasa, karena Perl dan PHP memungkinkan Anda membuat skrip yang menentukan eksekusi tindakan yang diperlukan pada halaman situs. Bahkan pembuatan halaman web yang paling sederhana pun tidak mungkin tanpa pengetahuan tentang HTML - bahasa markup dokumen standar. Perangkat komputasi sekarang ada di mana-mana: di ponsel dan mesin ATM, di mesin CNC dan di televisi. Sulit untuk menemukan lingkungan kehidupan di mana mereka tidak akan terlibat dalam satu atau lain cara. Dan semua perangkat ini berfungsi berkat program yang ditulis menggunakan bahasa tertentu. pemrograman.

Bahasa pemrograman adalah alat komunikasi antara programmer dan komputer. Komputer dalam hal ini adalah mesin yang hanya memahami perintah-perintah dasar. Dalam bahasa apa percakapan paling sulit antara seseorang dan komputer?

Novel Soviet "Programmer" menceritakan tentang situasi ketika komputer berada di lembaga teknis. Pihak berwenang datang dan meminta untuk mendemonstrasikan karyanya. Tapi dia tidak mengerti perintah bahasa pemrograman. Kemudian seorang insinyur berbakat memulai dialog dengan mesin dalam bahasanya - tepat dalam kode biner.

Banyak programmer menganggap kode biner sebagai bahasa pemrograman yang paling sulit - yang merupakan paradoks, karena bilangan biner bukanlah bahasa. Konsep "bahasa pemrograman" berarti dari bahasa komputer ke bahasa manusia. Dalam kode biner, bagaimanapun, programmer harus berdebat tanpa penyederhanaan dengan mesin.

Terlepas dari kesulitan besar dalam bekerja dengan kode biner secara langsung, logika binerlah yang memungkinkan penggunaan memori mesin yang paling ekonomis. Ini dapat digunakan untuk perangkat listrik sederhana (oven microwave, ceret), serta pada perangkat yang membutuhkan kecepatan khusus (jam tangan yang akurat, peralatan medis, peralatan olahraga wasit).

perakit

Assembler adalah sekelompok instruksi kode biner yang dikelompokkan menjadi beberapa bagian. Bahasa ini digunakan saat membongkar program. Terkadang perlu untuk mengetahui kode program dengan file yang dapat dieksekusi. Untuk melakukan ini, Anda perlu mendekripsi file yang dapat dieksekusi (pekerjaan ini memiliki banyak kesamaan dengan kriptografi). Proses mendekripsi file yang dapat dieksekusi ini disebut disassembly. Akibatnya, programmer menerima sekelompok instruksi assembler, bahkan jika program tersebut awalnya ditulis dalam bahasa lain. Bekerja dengan assembler (asm) seperti pemrograman dalam kode biner, menjadi tantangan bahkan untuk programmer tingkat lanjut.

C++ populer

Sejumlah besar program dan shell di dunia ditulis dalam bahasa C. Bahasa C itu sendiri dibuat pada tahun 1970 untuk bekerja dengan prosesor. Bahasa ini sangat sederhana.

Dalam """ bahasa C++ dikembangkan, mewarisi sebagian besar fitur pendahulunya, tetapi menambahkan prinsip tambahan - paradigma pewarisan. Terlepas dari kesederhanaan perintahnya, bahasa ini adalah alat pemrograman yang paling kuat. Sejumlah besar perpustakaan pihak ketiga memberi programmer banyak ruang untuk proses kreatif. Namun, bahasa memiliki struktur logis yang kompleks. Anda perlu menggunakan pendekatan berorientasi objek yang mengurangi jumlah baris kode (karena pewarisan) tetapi memperumit logika. Dari seorang programmer, kemampuan untuk berfantasi diperlukan, yang dengan sendirinya tidak mudah.

Bahasa baru

Saat ini, bahasa pemrograman "abstrak" gratis sangat populer: NOSQL, Erlang, Python. Tidak mudah untuk menguasainya, tetapi spesialis dalam bahasa langka sangat populer. Sebagai aturan, bahasa baru dibuat untuk memecahkan masalah tertentu: bekerja dengan antarmuka web, membuat aplikasi, atau mengelola proses server. Kesulitan khusus pemrograman dalam bahasa terbaru terletak pada penelitian kecil mereka - ada beberapa komponen dan perpustakaan, spesifikasi dan buku teks.

Programmer William W. Vold memberi tahu

Selama enam bulan terakhir, saya telah mengerjakan bahasa pemrograman (PL) yang disebut Pinecone. Saya tidak akan mengambil risiko menyebutnya selesai, tetapi sudah dapat digunakan - ini berisi cukup banyak elemen untuk ini, seperti variabel, fungsi, dan struktur data yang ditentukan pengguna. Jika Anda ingin memeriksanya sebelum membaca, saya sarankan mengunjungi halaman resmi dan repositori di GitHub.

pengantar

Saya bukan ahli. Ketika saya memulai proyek ini, saya tidak tahu apa yang saya lakukan, dan saya masih tidak tahu. Saya tidak pernah dengan sengaja mempelajari prinsip-prinsip menciptakan bahasa - saya hanya membaca beberapa materi di Web dan bahkan di dalamnya saya tidak menemukan hampir semua hal yang berguna untuk diri saya sendiri.

Namun, saya menulis bahasa yang sama sekali baru. Dan dia bekerja. Aku harus melakukan sesuatu yang benar.

Pada artikel ini, saya akan mencoba menunjukkan bagaimana Pinecone (dan bahasa pemrograman lainnya) mengubah kode sumber menjadi apa yang dianggap banyak orang sebagai keajaiban. Saya juga akan fokus pada situasi di mana saya harus berkompromi dan menjelaskan mengapa saya membuat keputusan yang saya buat.

Teks tidak benar-benar mengklaim sebagai panduan lengkap untuk membuat bahasa pemrograman, tetapi bagi yang penasaran itu akan menjadi titik awal yang baik.

Langkah pertama

"Di mana Anda mulai?" adalah pertanyaan yang sering diajukan pengembang lain ketika mereka mengetahui bahwa saya menulis bahasa saya sendiri. Pada bagian ini saya akan mencoba menjawabnya secara detail.

Disusun atau ditafsirkan?

Kompiler mem-parsing program secara keseluruhan, mengubahnya menjadi kode mesin, dan menyimpannya untuk eksekusi nanti. Interpreter mem-parsing dan mengeksekusi program baris demi baris secara real time.

Secara teknis, bahasa apa pun dapat dikompilasi dan ditafsirkan. Tetapi untuk setiap bahasa, salah satu metode lebih cocok daripada yang lain, dan pilihan paradigma pada tahap awal menentukan desain lebih lanjut. Secara umum, interpretasi bersifat fleksibel dan kompilasi memberikan kinerja tinggi, tetapi ini hanyalah tip dari topik yang sangat kompleks.

Saya ingin membuat bahasa yang sederhana namun berkinerja baik, yang jarang terjadi, jadi saya memutuskan dari awal untuk membuat Pinecone dapat dikompilasi. Namun demikian, Pinecone juga memiliki penerjemah - pada awalnya, peluncuran hanya dimungkinkan dengan bantuannya, nanti saya akan menjelaskan alasannya.

Catatan. terjemahan Omong-omong, kami memiliki ikhtisar singkat - ini adalah latihan yang bagus untuk mereka yang sedang belajar Python.

Pilihan bahasa

Semacam meta-langkah: bahasa pemrograman itu sendiri adalah program yang harus ditulis dalam beberapa bahasa. Saya memilih C++ karena kinerjanya, rangkaian fiturnya yang kaya, dan hanya karena saya menyukainya.

Tetapi secara umum, saran yang dapat diberikan seperti ini:

  • ditafsirkan PL sangat dianjurkanmenulis pada PL yang dikompilasi (C, C++, Swift). Jika tidak, penalti kinerja akan menjadi bola salju saat penerjemah meta menafsirkan penerjemah Anda;
  • dikompilasi PL kamu bisa menulis dalam PL yang ditafsirkan (Python, JS). Waktu kompilasi akan bertambah, tetapi tidak waktu eksekusi program.

desain arsitektur

Struktur bahasa pemrograman memiliki beberapa langkah dari kode sumber ke file yang dapat dieksekusi, yang masing-masing memformat data dengan cara tertentu, serta berfungsi untuk berpindah di antara langkah-langkah ini. Mari kita bicarakan ini lebih detail.

Penganalisis leksikal / lexer

String kode sumber dilewatkan melalui lexer dan diubah menjadi daftar token.

Langkah pertama dalam kebanyakan PL adalah analisis leksikal. Secara sederhana, ini adalah pembagian teks menjadi token, yaitu unit bahasa: variabel, nama fungsi (pengidentifikasi), operator, angka. Jadi, dengan memasok string dengan kode sumber ke lexer, kita akan mendapatkan daftar semua token yang dikandungnya sebagai output.

Referensi ke kode sumber tidak akan lagi terjadi pada tahap berikut, jadi lexer harus menyediakan semua informasi yang diperlukan untuk mereka.

Melenturkan

Saat membuat bahasa, hal pertama yang saya lakukan adalah menulis lexer. Kemudian, saya mempelajari alat yang dapat mempermudah analisis leksikal dan mengurangi jumlah bug.

Salah satu alat utama tersebut adalah Flex, generator penganalisis leksikal. Dibutuhkan file dengan deskripsi tata bahasa sebagai input, dan kemudian membuat program C, yang pada gilirannya mem-parsing string dan menghasilkan hasil yang diinginkan.

Keputusanku

Saya memutuskan untuk menyimpan penganalisis yang saya tulis. Pada akhirnya, saya tidak melihat keuntungan khusus untuk Flex, dan menggunakannya hanya akan membuat dependensi tambahan yang memperumit proses pembuatan. Selain itu, pilihan saya memberikan lebih banyak fleksibilitas - misalnya, Anda dapat menambahkan operator ke bahasa tanpa harus mengedit banyak file.

Pengurai / pengurai

Daftar token melewati parser dan berubah menjadi pohon.

Tahap selanjutnya adalah parser. Ini mengubah teks sumber, yaitu, daftar token (dengan mempertimbangkan tanda kurung dan urutan operasi), menjadi pohon sintaksis abstrak, yang memungkinkan Anda untuk secara struktural mewakili aturan bahasa yang dibuat. Prosesnya sendiri dapat disebut sederhana, tetapi dengan peningkatan jumlah konstruksi bahasa, itu menjadi jauh lebih rumit.

Banteng

Pada langkah ini, saya juga berpikir untuk menggunakan perpustakaan pihak ketiga, mempertimbangkan Bison untuk menghasilkan parser. Ini mirip dengan Flex dalam banyak hal - file pengguna dengan aturan sintaks disusun menggunakan program C. Tapi sekali lagi, saya mengabaikan alat otomatisasi.

Keuntungan dari program khusus

Dengan lexer, keputusan saya untuk menulis dan menggunakan kode saya sendiri (panjang sekitar 200 baris) cukup jelas: Saya suka teka-teki, dan yang ini juga relatif sepele. Pengurai adalah cerita yang berbeda: sekarang panjang kode untuk itu adalah 750 baris, dan ini adalah upaya ketiga (dua yang pertama sangat buruk).

Namun, saya memutuskan untuk membuat parser sendiri. Berikut adalah alasan utamanya:

  • meminimalkan pengalihan konteks;
  • penyederhanaan perakitan;
  • kemauan untuk melakukan sesuatu sendiri.

Saya yakin akan kemanfaatan solusi dengan pernyataan Walter Bright (pencipta bahasa D) di salah satu artikelnya:

Saya tidak akan merekomendasikan menggunakan generator lexer dan parser, serta apa yang disebut "kompiler kompiler" lainnya. Menulis lexer dan parser tidak akan memakan banyak waktu, dan menggunakan generator akan mengikat Anda dengan kuat di pekerjaan mendatang (yang penting saat mem-porting kompiler ke platform baru). Selain itu, generator terkenal karena mengeluarkan pesan kesalahan yang tidak relevan.

Grafik semantik abstrak

Pindah dari Pohon Sintaks ke Grafik Semantik

Di bagian ini, saya menerapkan struktur yang pada dasarnya paling dekat dengan "representasi perantara" (representasi menengah) di LLVM. Ada perbedaan kecil namun penting antara Pohon Sintaks Abstrak (AST) dan Grafik Semantik Abstrak (ASG).

ASG vs ASD

Secara kasar, grafik semantik adalah pohon sintaks dengan konteks. Artinya, ini berisi informasi seperti jenis fungsi yang dikembalikan atau di mana variabel yang sama digunakan. Karena grafik perlu mengenali dan mengingat semua konteks ini, kode yang menghasilkannya memerlukan dukungan dalam bentuk banyak tabel penjelasan yang berbeda.

meluncurkan

Setelah grafik terpasang, menjalankan program menjadi tugas yang cukup sederhana. Setiap node berisi implementasi fungsi yang mengambil beberapa input, melakukan apa yang diprogram untuk dilakukan (termasuk kemungkinan memanggil fungsi pembantu), dan mengembalikan hasilnya. Inilah juru bahasa yang sedang beraksi.

Opsi kompilasi

Anda mungkin bertanya dari mana penerjemah berasal jika saya awalnya mendefinisikan Pinecone sebagai bahasa yang dikompilasi. Intinya adalah kompilasi jauh lebih rumit daripada interpretasi - saya sebutkan sebelumnya bahwa saya mengalami beberapa masalah pada langkah ini.

Tulis kompiler Anda sendiri

Awalnya saya menyukai ide ini - saya suka melakukan sesuatu sendiri, selain itu, saya sudah lama ingin belajar bahasa rakitan. Tetapi membuat kompiler lintas platform dari awal lebih sulit daripada menulis kode mesin untuk setiap elemen bahasa. Saya menemukan ide ini sama sekali tidak praktis dan tidak sebanding dengan sumber daya yang dihabiskan.