Bahasa pemrograman apa yang harus dipelajari pada tahun 2018 dan mengapa?

Jika Anda ingin masuk ke tim pengembangan kompiler atau di "Wild West world", jangan ragu untuk memilih dan mempelajari bahasa pemrograman teratas dari TIOBE dan yang terbaik: pada tingkat spesifikasinya. Tapi serius, sekarang di industri semuanya sangat membingungkan dengan logika dan kesimpulan, begitu banyak pemasaran dan air, sehingga strategi yang paling menang adalah menghidupkan otak Anda sendiri dan melakukan evaluasi ulang yang tegas atas nilai-nilai teknis yang sudah biasa kita gunakan. Dalam posting ini, saya akan mencoba untuk mengarahkan sejelas mungkin para pengembang yang memulai karir mereka pada risiko memilih teknologi dan menarik kesimpulan yang benar dan jauh (jauh, jauh).

Apakah Anda sudah dewasa atau belum?


Anak-anak berbeda dari orang dewasa dalam memahami kata “tanggung jawab”. Sayangnya, tidak semua anak tumbuh tepat waktu, dan beberapa meninggal dalam popok. Tidak ada yang mengerikan di sini - kecuali satu hal: anak-anak dalam tim pemrogram membuat orang lain sangat menderita, terutama ketika tenggat waktu berakhir dan pembebasannya dekat: entah mereka tiba-tiba nongkrong di tengah ruang terbuka, atau mereka membutuhkan dot saat melakukan brainstorming pada area subjek dengan perwakilan klien.



Orang dewasa berbeda dengan anak-anak dalam memahami prinsip utama manajemen TI: “pemrograman adalah hak istimewa”. Di antara sesama pengembang yang berpengalaman dan sukses, yang paling memadai dan kode dengan baik dan "memajukan perusahaan" pada saat yang sama.

Industri TI - menjadi gila


Ya, kami adalah orang-orang dan rentan terhadap emosi. Namun sejauh ini tidak ada yang tahu cara memprogram dengan benar, meskipun lebih dari 50 tahun telah berlalu sejak ditemukannya komputer. Tidak ada Semua orang hanya histeris dan berusaha menarik lebih banyak pendukung ke kamp mereka, sambil merayu bisnis untuk membuat proyek sendiri :-) Saya akan menjelaskannya dengan sebuah contoh.



Kecepatan otak


Faktanya adalah bahwa komputer pertama sangat lambat, sangat lambat, dan sangat mahal. Oleh karena itu, program pertama ditulis dalam bahasa tingkat sangat rendah, dan kadang-kadang langsung dalam kode mesin. Saat ini, teknologi "prasejarah" seperti itu kadang-kadang digunakan, tetapi secara langsung: untuk membuat sistem operasi dan komponennya (dekat dengan perangkat keras), untuk mesin permainan, untuk perpustakaan dan server berkinerja tinggi, untuk cryptocurrency dan, tentu saja, untuk membuat bahasa pemrograman .

Dan jika C , terlepas dari kebocoran total dan bahaya besar bagi pengembang, ternyata benar-benar bagus dan memenangkan hati para pecinta, maka C ++ ternyata merupakan ciptaan yang sangat jelek dan kontradiktif - tetapi yang harus dilakukan adalah hidup. Mungkin Rust , dengan ide-ide yang tepat untuk penanganan memori yang aman, akan memengaruhi situasi menjadi lebih baik, tetapi dalam hal keburukan sintaksis dan tidak terbaca, ia tampaknya telah meninggalkan C ++ jauh di belakang.

Situasi semakin diperparah dengan munculnya Golang . Di satu sisi - tidak ada yang baru di dalamnya, akord demobik dari Ken Thompson yang hebat : hanya sisa-sisa fitur Java yang menyedihkan. Di sisi lain, menjadi lebih mudah untuk menulis sistem "relatif" dan perangkat lunak multithreaded, dan ini adalah fakta bahwa banyak perusahaan telah memberi peringkat :-)

Di kamp ini Anda akan menemukan sebagian besar teknologi tingkat rendah yang sangat luas dan perangkat keras programmer "nyata" hardcore yang biasanya belajar satu bahasa pemrograman, tetapi kemudian mereka tidur dengan spesifikasi kompiler alih-alih seorang istri. Sungguh, ada orang-orang keren di kamp ini. Dan jika Anda tidak tahu perintah prosesor x86 menghasilkan dekomposisi dengan python - rasa malu pada Anda dan rasa malu. Karena itu, saran - hindari perkemahan ini sampai Anda membaca sampai akhir posting.

Tetapi ada sisi lain dari koin. Proyek-proyek di sini sedang dilakukan tidak hanya untuk waktu yang lama, tetapi ... selama beberapa dekade . Bahasa pemrograman tingkat rendah bukanlah sesuatu yang membantu, melainkan mengganggu. Pelanggaran dalam bekerja dengan memori terus-menerus terjadi, puluhan dan ratusan penguji diperlukan (atau Anda dapat meletakkannya di github dan kami akan menguji secara kolektif) dan ribuan unit dan jenis tes lainnya untuk membuatnya lepas landas . Banyak pengembang yang bergabung dengan tim pada awal proyek tidak hidup untuk melihat rilis dan mati karena usia tua, membantu penguji beta untuk napas terakhir mereka. Tetapi orang-orang pemberani ini, sebelum berdarah dari mata, sebelum kemunculan stigmata, melakukan segala yang mungkin dan ... karya - karya lahir.



Arsitektur Otak dan Kewirausahaan


Karena tidak ada yang tahu cara memprogram dengan benar, metode "desain yang kompeten dan keandalan" dibentuk oleh seleksi alam. Anda gila memprogram dalam bahasa yang memungkinkan operasi memori yang tidak aman melalui pointer - Anda juga dapat membawa dunia ke kiamat: "kesalahan segmentasi dalam perangkat lunak reaktor nuklir". Bagaimana seseorang bisa mulai melakukan proyek tanpa mendukung pengetikan yang kuat dalam bahasa ?? Dan mereka datang dengan bahasa pemrograman yang benar berikutnya: Java dan C #. Tetapi di Jawa, mereka lupa tentang bahaya nilai-nilai nol, dan di C # mereka tidak sepenuhnya berpikir tentang kompatibilitas ke belakang. Hasilnya adalah dunia perusahaan yang besar, relatif aman, dan relatif kompatibel. Di dunia ini, tujuannya diukur dalam garis kode per hari (biasanya tidak lebih dari beberapa lusin, karena jari digosokkan ke dalam darah) dan buku-buku filosofis dan religius yang tebal tentang pola desain dan, oh ya, saya hampir lupa tentang cara mengubur diri, proyek, klien dan lingkungan dunia ke dalam kode dan tenggelam di dalamnya, mengingat derita 20 tingkat hierarki warisan - tentang OOP . Salah satu motto utama kamp adalah “mengapa melakukannya secara sederhana, jika mungkin ... sulit dan dapat diandalkan, untuk waktu yang lama, selama berabad-abad!”. Selain itu, beberapa dari mereka dapat menulis dengan cepat dan elegan, mencuci tangan mereka dalam darah dan mengumpulkan struktur proyek di kepala mereka setiap pagi, melihat 3 monitor sekaligus. Tetapi beberapa sangat kecanduan sehingga mereka terus menciptakan hierarki hierarki dalam hierarki hierarki ad infinitum - dan tujuannya telah lama hilang, dan mata terus menyala dan tangan gatal.

Bahkan, di area di mana area subjek telah menetap dengan baik dan cocok dengan "objek dengan status dan pesan di antara mereka" - pendekatan serupa bekerja dengan sangat baik.



Terutama menyenangkan ketika ada "ketat" (tanda kutip, karena apa yang akan terjadi selanjutnya tentang haskell) mengetik statis (ini adalah ketika jenis entitas diketahui sebelumnya, mereka diperiksa oleh kompiler dan Anda tidak dapat menambahkan string ke nomor) kemudahan dan kesenangan ketika refactoring dan meningkatkan kode dan tinggi jika belum lagi lingkungan pengembangan yang hebat . Kolega di kamp ini sering kali sangat terdidik dalam arsitektur perangkat lunak, banyak membaca (ambang masuk tinggi), memahami kemampuan berbagai pustaka platform, pola desain, teknik untuk menulis berton-ton dokumentasi dan membuat tes otomatis, tes tes ini dan dapat menulis tiruan selama berbulan-bulan, yang ternyata menjadi tidak perlu. Sekali lagi - proyek sering dibuat dan diluncurkan untuk waktu yang sangat lama, oleh tim besar, banyak penguji diperlukan, tetapi sifat kesalahannya adalah urutan besarnya kurang fatal, yang menginspirasi. Masuk ke "kasta" pengembangan usaha ini sangat sulit. Jika Anda mendemonstrasikan bagaimana dalam PHP Anda bisa menyelesaikan masalah 5-line yang akan diselesaikan oleh rekan-rekan java Anda dalam 5 hari, Anda akan dibakar hidup-hidup dalam microwave :-)

Keandalan Otak


Dalam lingkungan akademik, kamp lain telah dibuat, sangat menarik dan direkomendasikan untuk pemahaman, dan satu set bahasa pemrograman fungsional (Lisp, Haskell, Erlang dan lain-lain). Apakah Anda gila memprogram menggunakan variabel dan loop - Anda juga dapat membuat banyak kesalahan! Suatu program adalah seperangkat pemanggilan fungsi, dan bukannya loop, gunakan rekursi, tuan-tuan! OOP? Tidak, tidak terdengar - jenis kacamata dan tipe data aljabar. Anda tidak tahu tentang fungsi aplikatif dan tidak membuka teori kategori - ya, Anda tidak mengembangkan otak Anda sendiri, teman saya.

Bahkan, menurut pendapat saya, untuk memasuki kemah ini dan memahami nilainya, Anda harus benar-benar memaksakan otak Anda - untuk matematika akan ada lautan dan bahkan konsep yang lebih tak terduga tetapi lebih indah. Pengalaman yang diperoleh dalam tim ini akan sangat berharga dan akan berguna ketika bekerja dengan bahasa pemrograman lain. Mereka mengatakan bahwa seseorang kadang-kadang menggunakan bahasa fungsional dalam proyek nyata: kompiler, cryptocurrency - tidak diragukan lagi, proyek Anda akan memiliki urutan kesalahan kurang besar logis bahwa kompiler akan menangkap, dan kependekan dan kejelasan dan keringkasan kode di Haskell, tentu saja, mengherankan - tetapi dalam zaman "on the Louboutins!" mempelajari dan memahami keindahan ini menjadi semakin berkurang.



Hasil dan efektivitas "otak"


Persetan dengan arsitektur dan OOP, saudara! Cthulhu mencintai Anda, dan mengetik bebek adalah kunci kesuksesan! Mengetik dengan kuat? Dan siapa yang waras akan memberikan string ke nomor ?? Pengetikan dan kompilasi statis adalah buang-buang waktu, karena kodenya ditulis sekali, dan jika Anda tidak punya waktu untuk menulisnya untuk rilis, itu akan dibuang (dan bahkan dibuang, tetapi sedikit kemudian). Refactoring? Tulis benar :-) Enkapsulasi? Letakkan tanda hubung di depan nama variabel dan semua hal . OOP adalah penargetan ulang yang tidak perlu. Kompilasi apa itu F5 dan Anda melihat hasilnya. Pola desain - tidak, Anda belum pernah mendengar: skrip kami semua ... Anda ingin rumput liar?

Hal yang paling menarik adalah ketika Anda mempelajari bahasa dengan pengetikan dinamis (ketat dalam python, tidak ketat dalam php dan javascript), maka mata Anda secara bertahap membuka ke gambaran nyata dari berbagai hal, karena:

  • kode menjadi sangat jelas dan ringkas dan tidak perlu naik 20 kelas (jika tidak menyangkut perpustakaan sistem)
  • Anda dapat dengan cepat memeriksa ide melalui REPL
  • bahasa sederhana, sering minimalis, mengandung primitif yang diperlukan dan kuat (daftar, kamus), yang, paling penting - pas di kepala Anda!
  • ada cloud perpustakaan dan Anda selalu dapat memecahkan masalah dalam 5 baris

Dan persetan dengan itu, dengan refactoring :-) Hidup menjadi lebih menyenangkan (saya harap pengembang yang mendukung kode saya tidak akan tahu di mana saya tinggal). Di kamp ini, Anda akan sering bertemu banyak orang ceria dari spesialisasi yang sama sekali berbeda, kecuali untuk "pemrograman assembler", yang mampu, bagaimanapun, sangat cepat dan efisien untuk menyelesaikan masalah dalam 5 baris dan untuk mendukung kode dan proyek web untuk waktu yang lama dan berhasil.

Lihatlah tren terbaru di perkemahan ini dan rayakan diri Anda dengan filosofi kebahagiaan ini. Lingkungan pemrograman yang sederhana dan mudah dipahami di browser , apa yang bisa lebih seksi?



Dan betapa mudahnya sekarang untuk meningkatkan server web non-blocking yang melayani ribuan koneksi dalam 10 baris pada node.js dan komunitas tumbuh dengan pesat?

Dan tidak ada "Eclipse XML Soap Entiny beans Enterprise OOP ..." - json dan csv dan senyum (dan aroma tanaman yang tidak dikenal). Dan kode itu dibaca, dan ditempatkan di otak, dan karena itu ia bekerja dengan senang dan lama dan dikelola dengan kemudahan yang sama selama bertahun-tahun.

Dan ternyata "cara ini" juga dapat berhasil diprogram dan tahun-tahun yang dihabiskan dalam "bahasa pemrograman industri" hidup sia-sia (tetapi jari-jari semakin kuat).

Pemilihan teknologi


Apakah Anda kaget? Saya juga. Dan bayangkan betapa kagumnya klien, memilih teknologi untuk mengimplementasikan proyek bisnis! :-)

Saya pikir Anda saat ini mengerti dengan sangat baik bahwa dunia IT benar-benar menjadi gila dan tersesat (hanya bercanda). Beberapa bahasa pemrograman, seperti Scala, mencoba untuk duduk di semua kursi, tetapi mereka masih tidak benar-benar berhasil - kode menjadi sulit dipahami sebagai manusia biasa. Tapi serius, kompetisi paradigma pemrograman hanya akan meningkat karena ... tugas-tugas dalam proyek benar-benar berbeda dan dari tugas-tugas yang Anda butuhkan untuk "menari"! Dalam domain menetap (server, perpustakaan), pengetikan nominal (C ++, Java, C # ...) lebih baik, di suatu tempat akan lebih baik dengan pengetikan struktural (Golang, Haskell ...), dan dalam skrip web atau tugas mesin belajar akan membawa kebahagiaan nyata dengan bebek (python, php, javascript ...). Tidak perlu berpikir bahwa pengetikan statis , terutama pengetikan ketat, secara langsung "harus" - Anda akan gagal melewati tenggat waktu dan kode dengan pemikiran paranoid yang puas tentang "kemungkinan kesalahan" akan dibuang ke tempat sampah. Di web, scripting dan pembelajaran mesin, Anda dapat dengan percaya diri bergerak maju dengan kecepatan tinggi dan dengan pengetikan bebek dinamis dan php dan python dengan sejumlah besar perpustakaan yang indah dan kuat, ini adalah contoh yang baik.

Oleh karena itu, lupakan "apa yang harus dipelajari bahasa pemrograman pada tahun 2018" ke neraka:

  • Memahami paradigma pemrograman (OOP bisa menjadi kuburan, atau bisa menyelamatkan Anda proyek)
  • memahami seluk-beluk pengetikan dan risiko serta peluang yang terkait dengannya (Anda dapat mengutuk pengetikan dinamis di perpustakaan keuangan, atau Anda dapat mengorbankan seorang programmer java untuk Cthulhu dan menulis ulang 100 kelasnya pada 100 baris dalam sebuah skrip yang dapat dimengerti bahkan untuk anak-anak)
  • pada tingkat intuisi, pahami algoritmanya (Anda perlu membedakan antara pencarian dan penyortiran, dan jaringan saraf dari regresi logistik - dan untuk memahami lebih jauh, Anda harus belajar ... sepanjang hidup Anda, tetapi itu sangat berharga)
  • pahami bahwa pengembang yang berpengalaman (meskipun tidak ada yang tahu di mana menemukannya di pasar) akan mengimplementasikan proyek tepat waktu di hampir semua teknologi (bahkan brainfuck) dan melakukannya dengan baik, tetapi yang belum berpengalaman harus memilih bahasa pemrograman dengan tingkat entri yang paling nyaman dan risiko runtuh masih bagus

Selanjutnya, pilih bidang tugas yang akan Anda minati, seperti pembelajaran web atau mesin, dan:

  • lihat apa yang orang pecahkan masalah ini
  • sebarkan risiko dan peluang masing-masing instrumen sesuai dengan kriteria di atas
  • duduk beberapa akhir pekan dengan 1-3 alat khusus, tetapi tidak untuk fanatisme atau spesifikasi
  • turun ke bisnis lebih cepat dan dapatkan pengalaman dalam menggunakan alat dalam praktik - ini adalah hal yang paling penting
  • Anda tidak perlu mempelajari bahasa pemrograman "sampai akhir" - lebih baik belajar bagaimana menyelesaikan masalah Anda dalam 5 alat paling populer dalam 10-15 baris dan Anda benar-benar akan bertindak dengan cara yang sangat memadai!

Studi Kasus - ML


Katakanlah Anda tertarik pada pembelajaran mesin ... Selamat! Di satu sisi, ada teori akademis - tetapi Anda harus mendapatkan esensi dari itu sesuai dengan statistik dan aljabar linier, dan dalam kasus apa pun Anda tidak boleh nongkrong di kursus berbulan-bulan (pergi, percayalah, gila jika Anda bukan ahli matematika, tetapi seorang humanis - dan itu tidak terlihat oleh diri Anda sendiri ) Di sisi lain, Anda perlu belajar cara cepat menulis kode yang berguna dan menyelesaikan masalah dalam 5-15 baris. Ya, Anda dapat menulis semuanya dalam C dalam 10.000 tahun, jadi Anda melihat pengalaman rekan kerja dan memilih, dengan benar, python, di mana ada banyak perpustakaan dan solusi siap pakai tentang topik ini. Anda mencurahkan beberapa hari libur untuk mempelajari python - tidak ada lagi yang bisa dipelajari di sana, bahasanya sangat sederhana (dan kami sepakat untuk tidak naik ke alam liar, karena waktu adalah uang).

Selain itu, baca tentang esensi numpy, panda, scikit-belajar dan, jika mata Anda lurus, maka Keras dan terus maju, lakukan proyek. Tapi Anda bisa pergi ke jalan lain, yang panjang, sulit dan mengarah ke kekudusan pribadi dan kemiskinan sosial (setelah 3 tahun Anda akan memahami esensi dari algoritma, menjual koran di kereta listrik, tapi mungkin ini adalah cara khusus) - mulai mengimplementasikan algoritma sendiri, dengan manajemen memori manual, atau menerapkan solusi yang lebih berat dan menggali kode selama berbulan-bulan. Alat yang salah - kunci malam tanpa tidur dan waktu yang terbuang - hindari kerumitan dalam segala hal.

Alat yang dipilih secara tidak benar, bahkan yang paling populer, bahkan gratis sebagai hadiah, bahkan jika secara teoritis mampu melakukan semuanya dalam jangka panjang, dapat merusak proyek Anda dengan gagal memenuhi tenggat waktu. Minimalkan risiko ini semampu Anda dan tidak bisa.

Kesimpulan


Secara total, teman-teman saya, kami memastikan bahwa tidak ada yang tahu cara memprogram dengan benar dan berhasil, bahkan kami pengembang :-) Persaingan paradigma dan teknologi pemrograman semakin kuat, kepala semakin bengkak, dan waktu luang semakin berkurang. Oleh karena itu, strategi yang paling menang bagi pengembang memulai karirnya adalah minum sekaleng bir dingin, bersantai dan:

  • menghindari penempelan dan pencelupan di bagian teknologi yang berlebihan, yang jumlahnya terus meningkat secara eksponensial
  • pilih area masalah yang menarik di mana Anda tertarik untuk memecahkan masalah pelanggan
  • belajar untuk mengekstrak esensi pendek dan erotis dari alat dan bahasa pemrograman
  • menulis sesedikit mungkin, tetapi jelas dan dapat dimengerti oleh Anda dan orang-orang di sekitar Anda kode
  • belajar untuk memecahkan masalah dalam 5-15 baris, bukan 20-50 kelas
  • jika Anda ingin pergi ke tempat lain, maka biarkan hal-hal mendasar seperti matematika, haskell atau rfc oleh tcp / ip
  • nikmati pemrograman dan hangatkan kolega Anda dengan itu!



Dan selalu ingat bahwa waktu, terutama waktu luang, adalah sumber daya yang berharga dan itu tergantung pada kita di mana menginvestasikannya. Semoga beruntung untuk semua orang dan suasana hati yang baik!

Source: https://habr.com/ru/post/id417397/


All Articles