Kue itu bohong

Pernahkah Anda berpikir - Bagaimana menjelaskan pemrograman kepada orang yang belum pernah menghadapinya sebelumnya? Ini bisa menjadi masalah, selama yang baru tidak akan mengerti Anda.


Jadi, mari kita bayangkan - Anda punya teman, yang tidak kotor oleh ilmu komputer, tidak pernah mencoba mengotomatisasi sesuatu, tidak pernah bermain faktorio, tidak pernah menulis satu baris kode pun.


Jadi, mari kita bayangkan manusia normal.


Dan sebut saja dia Bill . Dia tidak terlalu bagus dalam Matematika, hanya "tidak baik", tapi dia suka permen !



Tugas Anda adalah mengajarkan Bill beberapa hal dasar (atau sulap) IT, yang Anda lakukan setiap hari. Yang paling sederhana.
Jadi apa yang harus Anda lakukan pertama kali? Pada dasarnya - PAKAN DIA!


Beri dia makan!


Singkat cerita, tetapi suatu hari Andrey Alexandrescu bertanya kepada Bill:


- Andrey: Hai Bill, apakah Anda ingin permen?
- Bill: Ya, tentu!

Kemudian Bill mengambil permen itu, membuka bungkusnya dari bungkus Permen dan memakan muatannya .
Sederhana? Dan kami telah menggunakan dua kata ajaib!




Hanya beberapa hari kemudian Wirth bertanya kepada Bill:


- Wirth: Hai Bill, apakah Anda ingin permen?
- Bill: Ya! PASTI!
- Wirth: Hei, saya punya satu lagi, apakah Anda menginginkannya juga?
- Bill: Ya! PASTI!

Ini adalah loop yang dikendalikan oleh kondisi , atau siklus .


- Wirth: Hei, saya punya satu lagi, apakah Anda menginginkannya juga?
- Bill: Ya! PASTI!

Tapi tidak ada permen, dan Bill mendapat pengecualian null pointer yang umum.




Waspadalah - jika Alexandrescu tiba-tiba kembali dan terus memberi makan Bill dengan permen - buffer overflow akan terjadi. Selama Bill akan selalu menerima permen baru.


buffer overflow




Hari berikutnya Wirth disiapkan. Dia punya sekantong besar permen.


- Wirth: Ok, biarkan saya memeriksa tas saya ....
- Wirth: Saya masih punya permen. Bill, kamu mau permen?
- Bill: Ya! PASTI!

Dalam hal ini, Wirth akan memberikan permen hanya jika ia memilikinya.
Di sini kita memiliki siklus dengan prasyarat .




Tetapi suatu hari Bill datang ke rumah Wirth, dan rumah:


- Bill: Beri aku PERMEN!
- Wirth: Tidak ada yang abadi! Anda sudah makan semuanya!
- Bill: Tapi saya akan mengambilnya DALAM KASUS APAPUN !!!
- Bill: APAKAH ANDA MEMILIKI CANDY ???

Itu adalah siklus dengan postcondition . Cerita sedih Syukurlah polisi ada di dekatnya. Hati-hati lain kali, dan jangan memberi makan burung liar (dan Bill).





Beberapa dekade kemudian Dan Abramov mendatangi Bill dan meletakkan semua permennya di atas meja:


- Dan: tak bisa berkata apa-apa menatap Bill.
- Bill: tak bisa berkata-kata menatap permen pertama
- Dan: Bill, apakah Anda mau permen ini?
- Bill: Ya, tentu.
- Dan: Ini dia.

Itu adalah loop terkontrol koleksi .




Tepat setelah itu, Dan mengambil tas lain, meletakkan semua permen di atas meja, menghitungnya, dan mengembalikannya ke tas.


- Dan: Bill, sepertinya aku masih punya permen. Apakah kamu mau permen?
- Bill: Ya, tentu.
- Dan: Ini dia.

Itu adalah loop yang dikontrol jumlah .





Cepat atau lambat, tetapi Bjarne Stroustrup datang untuk memberi makan Bill.


- Bjarne: Bill, apakah Anda ingin permen.
- Bill: Ya, tentu.
- Bjarne: Ini dia.
- Bjarne: Bill, apakah Anda ingin permen.
- Tagihan: - - -

Bill mengunyah permen. Dia sibuk dan tidak ada yang bisa mengganggunya. Dia telah mengangkat mutex , utasnya terkunci dan waktu berhenti ...


kunci utas


Bjarne adalah yang sangat pintar, dan dia menemukan solusi:


- Bjarne: Bill, apakah Anda ingin permen.
- Tagihan: - - -
- Bjarne: Ok, saya akan menunggu sampai selesai mengunyah ...

Di sini kami mendapat sinkronisasi utas .




Oke, kali ini kami akan memanggil Peter_Norton.


- Peter: Bill, apakah Anda ingin permen.
- Bill: Ya! Tentu!
- Peter: Saya akan menyediakan satu paket penuh. Mengunyahnya sendiri.
Bill berikutnya akan mendapatkan permen, satu per satu, dari tas, dan memakannya, satu per satu.

Operasi atau urutan ini disebut LIFO - Terakhir, Pertama keluar. Selama permen dari bagian bawah bungkus akan dimakan terakhir.
Pada saat yang sama, pencernaan Bill adalah FIFO - masuk pertama, keluar pertama. Anda harus mengetahuinya sebelumnya.


FIFO




Donald_Knuth juga bergabung dengan tim pemberi makan. Tetapi suatu hari dia bosan membeli permen baru untuk Bill, dan dia meminta perusahaan katering untuk melakukannya.


- Donald: Hai, teman saya, dapatkah Anda membeli permen terbaik di toko terdekat dan memberikannya kepada Bill? Berikut alamat dan uang Bill ...
Sejak saat itu Bill selalu memiliki permen baru dari Donald.
Dalam hal ini, perusahaan katering adalah fungsi , dan alamat serta uang adalah argumen . Dan permen adalah nilai balik .
Jika untuk alamat yang sama dan jumlah uang yang sama, Bill akan selalu mendapatkan permen yang sama - itu akan disebut fungsi murni .
Tetapi hanya dalam kasus perusahaan hanya akan mentransfer permen dari titik A ke titik B, dan toko akan selalu menjadi fungsi yang tidak murni, asalkan permen hilang dengan menjualnya ... dan mendapatkan uang! Jadi itu mengubah keadaan internal .


Tapi Dennis_Ritchie bahkan pintar!


- Dennis: Hai Bill, apakah Anda ingin permen?
- Bill: Anda tahu itu!
- Dennis: Jadi ini alamatnya. Anda akan menemukan permen yang diinginkan di sana.

Itu adalah sebuah pointer .


Tapi, kemudian Bill mencapai alamat itu dia hanya menemukan benda militer rahasia. Tidak ada yang melihatnya sejak itu.


Beberapa bulan kemudian, setelah melarikan diri dari penjara, ia mencoba mengulangi, tetapi sekali lagi tidak dapat mencapai "target". Kali ini ada sesuatu yang menghentikannya dari kejauhan - dinding batas tak terlihat dan tak bisa dihancurkan memeriksa .




Tapi suatu hari ... Bahkan, untuk mengatakan yang sebenarnya - malam - Cyberdemon datang ke rumah Bill dan berteriak:


- Cyberdemon: APAKAH ANDA INGIN PERMEN?
- Tagihan: YA! DI DAYTIME, DAN KEMUDIAN BINTANG-BINTANG BERSINAR! SELALU!

Jadi, Bill sudah mendapat permennya lagi. Tapi ini adalah kisah yang agak menyedihkan, selama dia lupa memeriksa jenis payload atau melakukan validasi data lainnya. ️





Setelah itu Bill terbangun dalam kehampaan, dan mendengar:


- Kosmos: Bill! Apakah kamu mau permen?
- Bill: Ya!
- Kosmos: Bill! Apakah kamu mau permen?
- Bill: Ya!
- Kosmos: Bill! Apakah kamu mau permen?
- Bill: Ya!

Beginilah cara kerja ping .




Dalam sistem yang terganggu dengan latensi non-nol ini mungkin terlihat seperti ini:


- Kosmos: Bill! Apakah kamu mau permen?
- Kosmos: Bill! Apakah kamu mau permen?
- Kosmos: Bill! Apakah kamu mau permen?
- Bill: Ya!
- Bill: Ya!
- Bill: Ya!

Namun case ini hanya berlaku untuk TCP / UDP . Dalam kasus TCP / IP , mungkin saja


- Kosmos: Bill! Apakah kamu mau permen? Bill! Apakah kamu mau permen?
- Kosmos: Bill! Apakah kamu mau permen?
- Bill: Ya! Ya! Ya!

Selama paket saudara kandung akan bergabung dengan faktor waktu atau ukuran (alias MTU ).



Akhirnya


Saya memiliki banyak cerita yang tak terhitung, seperti permen Bill dan Gang-of-Four , atau permen non-browser .
Tetapi izinkan saya memberi tahu yang terakhir, tentang The Indivisible Candy:


Bill memakannya ratusan kali, tetapi itu kembali ke tangannya, tanpa mengunyah dan bahkan masih manis!
Jadi permen yang tidak dapat dibagi-bagi mungkin merupakan singleton atau kebocoran ingatan , karena pengumpul sampah lama tidak dapat mencernanya.

Jadi, bisakah Anda menggambarkan sesuatu dari IT dalam gaya permen? Untuk pakan ajarkan Bill, dan dapatkan dia di IT.


Bill


Bill masih sangat lapar, dan dia kelaparan. Anda harus memberinya makan. Di sini Dalam komentar.


PS: Ini adalah terjemahan dari artikel yang berumur 10 tahun . Artikel asli "The Val`s Candies" dirilis 8 tahun yang lalu, dan sejak saat itu ia mendapatkan banyak contoh baru sebagai komentar pengguna - rekursi, delegasi, antarmuka, stack overflow, prosedur vs fungsi, kelas, B-tree, dan begitu seterusnya. Tapi ... di dimensi lain.

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


All Articles