Bagaimana saya beralih dari C ++ ke Python: perubahan konseptual

pengantar

Orang-orang mengatakan bahwa pengkodean dengan Python sangat mudah bahkan anak berusia 6 tahun pun bisa melakukannya. Ini adalah pemikiran yang ada dalam pikiran saya ketika saya mulai membuat kode dengan Python di tempat kerja. Saya telah menjadi pengembang perangkat lunak penuh waktu selama 4 tahun pada waktu itu, terutama menulis dalam C ++ di Linux, dengan banyak menggunakan pustaka QT. Namun, saya menulis kode Python yang buruk pada awalnya.

Sudah sekitar 3 tahun sejak saya melakukan peralihan itu dan saya pikir itu adalah poin yang bagus untuk menyimpulkan kemajuan yang saya buat selama ini. Ketika melihat ke belakang, saya tidak hanya mengubah bahasa pemrograman utama saya, tetapi juga mengubah lingkungan kerja saya dan cara saya berpikir tentang kode.

Saya tidak akan membahas detail dan perbedaan antara C ++ dan Python, karena ada banyak sumber daya online, melainkan akan menjelaskan pengalaman saya sendiri. Saya berharap postingan ini bermanfaat bagi orang-orang yang mengalami transisi yang sama seperti saya.

C ++ adalah menyelam, Python adalah snorkeling

C ++ terasa seperti menyelam ke dalam misteri magis laut - itu indah, tetapi membutuhkan lebih banyak pembelajaran dan latihan, dan secara keseluruhan, jarak yang Anda tempuh tidak terlalu besar. Python agak mirip dengan snorkeling - Anda melihat keindahannya segera setelah Anda memasukkan kepala ke dalam air, tetapi Anda tidak perlu melangkah lebih jauh. Anda terus berenang di perairan dangkal, dan dapat menempuh jarak jauh dengan mudah. Dari uraian tersebut jelaslah bahwa masing-masing bahasa tersebut harus digunakan pada tempat dan waktu yang tepat.

Menyelam ke C ++ dan bertahan

C ++ lebih ketat dan menghukum Anda lebih keras atas kesalahan Anda. Ini bukan sesi pengkodean yang efektif jika Anda belum mendapatkan kesalahan Segmentasi yang mengejutkan setidaknya sekali. Oleh karena itu, dibutuhkan pemahaman yang lebih dalam tentang komputer, kompiler dan bahasanya. Jika Anda mendalami lebih dalam, Anda benar-benar dapat melihat dan terkesan dengan hal-hal indah, seperti proses kompilasi dan manajemen memori.

Sebagai programmer C ++ saya lebih peduli tentang sintaks tweak dan contoh aneh. Saya selalu tahu di mana saya mengalokasikan memori dan bagaimana saya melepaskannya. Program yang saya tulis lebih mandiri karena saya lebih suka mengetahui apa yang terjadi di dalam kode saya. Ide utamanya adalah, kode yang ditulis orang lain kurang dapat diandalkan, lebih rentan kesalahan, dan mungkin meledakkan penggunaan memori Anda.

Alat utama saya sehari-hari adalah Vim dengan banyak plugin untuk menulis kode, GDB untuk debugging dan Valgrind untuk menganalisis penggunaan dan kesalahan memori saya. Saya mengkompilasi dengan g ++ dan menulis Makefiles saya sendiri . Saat itu, saya tidak merasa bahwa IDE akan menguntungkan saya, tetapi lebih baik memperlambat segalanya dan membuat saya kehilangan kontak dengan kode saya. Dalam retrospeksi, saya sangat bergantung pada kompiler untuk menemukan kesalahan tipe saya .

Berenang dangkal dengan Python

Salah satu hal pertama yang perlu Anda pelajari saat beralih ke Python adalah bagaimana melepaskan - Anda tidak tahu apa yang terjadi di balik kap mesin, di mana memori dialokasikan dan dilepaskan, dan tidak apa-apa. Anda juga didorong untuk menggunakan kode yang ditulis oleh orang lain, dikemas ke dalam perpustakaan, karena menghemat waktu Anda dan membantu Anda membuat kode lebih cepat. Ini tidak berarti bahwa Anda perlu menulis kode yang lambat dan bergantung pada pustaka yang tidak dikelola dan tidak berfungsi, tetapi fokusnya jelas berbeda.

Ketika saya mulai membuat kode dengan Python, saya pertama kali menulis kode C ++ dengan Python. Itu berhasil, tetapi saya tidak mendapatkan manfaat apa pun dari bahasanya. Pengkodean saya meningkat ketika saya mulai menulis dengan gaya yang lebih "Pythonic" dan mulai menggunakan perpustakaan, dan konsep yang lebih maju seperti generator, dekorator, dan konteks.

Sebagai pengembang Python, saya cenderung mencari pustaka pertama yang memecahkan masalah yang dihadapi. Python memiliki ekosistem perpustakaan yang kaya dan komunitas yang mendukungnya. Ada perpustakaan untuk melakukan apa saja. Berikut adalah beberapa yang berguna yang saya gunakan setiap hari: NumPy untuk kalkulasi numerik, OpenCV untuk computer vision, json untuk membaca file json, SciPyuntuk kalkulasi ilmiah, sqlite3 untuk database.

Alat sehari-hari saya adalah PyCharm (ya, IDE) dengan plugin IdeaVim . Saya mulai menggunakannya terutama karena ini adalah debugger yang kuat, yang jauh lebih ramah daripada debugger Python default, pdb . Saya juga menggunakan pip untuk menginstal pustaka yang saya butuhkan. Saya tidak memantau penggunaan memori saya lagi kecuali jika benar-benar harus.

Beberapa Tips Praktis

Jika Anda adalah pengembang C ++, dan Anda mempertimbangkan untuk mulai membuat kode dengan Python, berikut adalah saran saya untuk Anda:

  • Singkirkan kebiasaan lama - Berhenti menggunakan kompiler C ++ sebagai debugger. Jangan terlalu mengoptimalkan penggunaan memori. Hindari menulis kode seperti C ++. Dan dengan segala cara, cobalah untuk tidak bergantung pada tipe.
  • Dapatkan kebiasaan baru - Mulai gunakan perpustakaan. Tulis kode Pythonic (tapi jangan berlebihan). Buat semuanya mudah dibaca. Gunakan konsep yang lebih kompleks seperti generator / dekorator / konteks. Coba PyCharm.
  • Gunakan pustaka umum C ++ dan Python - Beberapa pustaka C ++, seperti OpenCV dan QT, memiliki antarmuka Python. Sangat mudah untuk mulai menggunakan pustaka yang sama dengan Python daripada mempelajari pustaka baru dari awal.
  • Jangan lupa asal - usul Anda - Terkadang Python terlalu lambat atau tidak optimal untuk tugas tersebut. Ini adalah saat pengetahuan C ++ Anda masuk. Ada banyak cara ( SIP , ctypes dll) untuk menggunakan kode C ++ di dalam Python.

Intinya

Tidak peduli apa yang orang lain katakan, beralih ke bahasa pemrograman yang berbeda, terutama ke bahasa yang secara fundamental berbeda dari yang biasa Anda gunakan, tidaklah mudah. Luangkan waktu untuk belajar, menggali, menemukan. Namun yang terpenting, pahami bahwa tidak hanya bahasanya yang harus berubah, tetapi juga gaya pengkodean dan metodologi kerja Anda.

Semoga berhasil!