Boshqalar

Qanday qilib yaxshi savollar berish mumkin?

Yaxshi savollar berish dasturiy taʼminot yozishda juda muhim koʻnikma. Yillar oʻtib bu borada ancha tajriba orttirdim (buni hatto hamkasblarim ham eʼtirof eta boshladi). Quyida esa menga yordam bergan bir nechta tavsiyalarni keltiraman.

Yomon savol soʻrash normal holat

Aslida, men ahmoqona yoki “yaxshi” savollar berish tarafdoriman. Men doim Google yoki kod bazasida qidirish orqali javob berish mumkin boʻlgan savollar beraman. Buni qilmaslikka urinsam ham, baʼzida shunday yoʻl tutishga toʻgʻri keladi va bu oxirzamon deb ham oʻylamayman.
Demak, bunday vaziyatdagi strategiyalar roʻyxati “bu yerda savol berishdan avval qilishingiz kerak boʻlgan barcha ishlar, aks holda siz yaxshi odam emassiz va oʻzingizni yomon his qilishingiz kerak” degan fikrlardan emas, balki “yaxshi savollar berish va kerakli javoblar olishda menga yordam bergan baʼzi narsalar” qabilidagi tavsiyalardan iborat boʻladi.

Yaxshi savollar qanday boʻladi?

Maqsadimiz javob berish oson boʻladigan texnik konsepsiyalar haqida savollar berishdan iborat. Koʻpincha yonimda juda bilimli insonlar boʻladi, men ham bu bilimlardan boxabar boʻlishni istayman, lekin ular buni qanday qilib yaxshi tushuntirishni doim ham bilavermaydi.

Agar ularga yaxshi shakllantirilgan savollar bersam, u kishiga bilgan narsasini menga yaxshiroq tushuntirishiga va oʻzimga qiziq narsani aytib berishiga yordam bergan boʻlaman. Keling, shuni qanday qilish haqida gaplashaylik.

Nimalarni bilishingizni ayting

Bu savol tuzishdagi sevimli texnikalarimdan! Bu turdagi savollar asosan quyidagi shaklda boʻladi:

Shu mavzuda nimani tushunganingizni aytib, “Shu toʻgʻrimi?” deb soʻrang.

Masalan, yaqinda bir kishi bilan (u haqiqatda juda yaxshi savollar berar edi) tarmoq texnologiyalari haqida gaplashib qoldim. U kishi “tushunishimcha, rekursiv DNS serverlarning qandaydir zanjiri mavjud”, dedi. Bu esa toʻgʻri emasdi! Aslida, rekursiv DNS serverlarning hech qanday zanjiri boʻlmaydi (gap rekursiv DNS serverlar haqida ketganida faqat bitta rekursiv server mavjud boʻladi). Shu tariqa u kishi oʻsha paytdagi gapi bilan hammasi aslida qanday ishlashini tushunishimga yordam berdi.

Birmuncha vaqt avval rkt bilan qiziqib qolgandim, lekin nega rkt konteynerlar ishga tushirilganda diskda Dockerʼga nisbatan koʻproq joy olishini tushunolmagandim.

“Nega rkt Dockerʼga nisbatan diskda koʻproq joy oladi?” degan savol yaxshi tuzilgandek koʻrinmadi. Aslida, kod qanday ishlashini bilardim, lekin kod nega aynan shunday yozilganini tushunolmayotgan edim. Shuning uchun rkt-dev fikr-mulohazalar boʻlimiga shunday savol yubordim: “Nega rkt konteynerlar obrazlarini Dockerʼga nisbatan boshqacha saqlaydi?”

Men keyin esa rkt va Docker konteynerlarni diskda qanday saqlashiga oid fikrlarimni yozdim.

Buni nega aynan shunday qilishgani haqida bir nechta sabablarni oʻylab topdim va keyin shunchaki “Buni toʻgʻri tushundimmi?” deb soʻradim.

Olgan javobim esa juda tushunarli va aynan men izlagan javob edi. Savolni toʻgʻri tuzish uchun ancha vaqt sarfladim, shuning uchun ham sarflagan vaqtim jarayon qanday kechishini yaxshiroq tushunishimga yordam berganidan mamnun boʻldim.

Oʻsha mavzuda nimani tushunayotganingizni bildirish oson ish emas (aynan nimani bilishingizni aniqlash uchun ham anchagina oʻylashingiz kerak), lekin bu usul juda yaxshi ish beradi va yordam soʻrayotgan kishi uchun masalani ham osonlashtiradi.

Javobi faktdan iborat savollar bering

Menda yuzaga keladigan savollar koʻpincha “SQL aloqalar qanday ishlaydi” kabi noaniqlik bilan boshlanadi. Bu savol odatiy savollardan emas, chunki bunday aloqalar qanday ishlashining koʻplab turlari mavjud. Men savol bergan odam nimani bilishni xohlayotganimni qayerdan bilishi mumkin?

Javobi faktdan iborat savollar berishni yoqtiraman. Masalan, bizning SQL aloqalar bilan bogʻliq misolda faktdan iborat javoblar soʻraladigan savollar quyidagicha boʻlishi mumkin:

  • N va M hajmli ikki jadval birlashishining vaqt murakkabligi qanday boʻladi?  Bu O(NM) yoki O(NlogN) + O(MlogM) boʻladimi? 
  • MySQL birlashishni amalga oshirishdan oldin doim birinchi boʻlib ustunlar birlashuvini saralab chiqadimi? 
  • Hadoop baʼzida “hash birlashuv” qilishini bilaman, boshqa maʼlumotlar ombori tizimlari ham bu birlashish usulidan foydalanadimi? 
  • Bitta indekslangan ustun va bitta indekslanmagan ustunni birlashtirganimda, indekslanmagan ustunni saralash kerakmi?

Superaniq savollar berganimda murojaat qilgan odamim doim ham javobni bilmaydi (va bu normal holat), lekin har holda meni nima qiziqtirishini tushunadi. Masalan, menga qoʻshilishlarni qanday qoʻllash qiziq emasligini, detallar realizatsiyasi va algoritmlar haqida tushunmoqchiligimni anglaydi.

Tushunmagan narsangizni aytishga tayyor boʻling

Koʻpincha kimdir menga nimanidir tushuntirayotganda, men tushunmayotgan narsani aytadi. Masalan, kimdir menga maʼlumotlar ombori haqida nimanidir tushuntira turib: “Xoʻsh, MySQL bilan optimistik qulflashni amalga oshiramiz va...”, deb aytishi mumkin. Ammo men “optimistik qulflash” nima ekani haqida tasavvurga ham ega emasman. Demak, bu haqida soʻrashning ayniq vaqti!

Kimnidir toʻxtatib, “Hoy, bu oʻzi nima degani?” deb soʻray olish kerakli koʻnikma. Bu oʻziga ishongan dasturchining xislati va oʻzlashtirish kerakli jihat deb hisoblayman. Senior muhandislarning koʻpchiligi masalani ochiqlaydigan jihatlarni soʻrashiga guvoh boʻlganman. Oʻylashimcha, koʻnikmalaringizga ishonch ortib borishi bilan buni qilish ham osonlashadi.

Buni qanchalik koʻp qilsam, vaziyatni aniqlashtirishni soʻraganim uchun oʻzimni shunchalik yaxshi his qilaman. Vaholanki, agar kimgadir nimanidir tushuntirayotganimda aniqlashtirishimni soʻramasa, meni eshitmayotganidan xavotirga tushaman.

Bu hatto javob berayotgan insonga bilimining chegarasiga yetganini tan olish imkonini ham beradi. Koʻp hollarda kimgadir savol berganimda ular bilmaydigan narsani soʻragan boʻlaman. Murojaat qilgan insonlarim esa: “Yoʻq, men buni bilmayman”, deb bemalol ayta oladi.

Tushunmaydigan atamalaringizni aniqlashtiring

Hozirgi ish joyimga kirgan vaqtimda men maʼlumotlarni qayta ishlash guruhida ish boshlagan edim. Yangi ishim nimalardan iboratligiga qiziqqanimda bir dunyo soʻzlarga duch kelgandim. Hadoop, Scalding, Hive, Impala, HDFS, Zoolander va boshqalar. Avval ham Hadoop soʻzini eshitgan boʻlishim mumkin, ammo bularning birortasi nima maʼnoni anglatishini bilmasdim. Soʻzlardan baʼzilari ichki loyihalarga tegishli edi, baʼzilari ochiq manba kodli loyihalarga. Shuning uchun ishni bu atamalar nima maʼno anglatishi va ular orasidagi bogʻliqlikni tushunishimga yordam berishni soʻrashdan boshladim. Men bergan baʼzi savollar esa quyidagicha edi:

  • HDFS maʼlumotlar omborimi? (yoʻq, bu distributiv fayl tizimi)
  • Scalding Hadoopʼdan foydalanadimi? (ha)
  • Hive Scaldingʼdan foydalanadimi? (yoʻq)

Aslida, men atamalarning butun boshli lugʻatini yozib chiqdim, chunki ular juda koʻp edi va bu atamalar nima anglatishini tushunish toʻgʻri yoʻnalish olishimga, keyinchalik esa yaxshiroq savollar berishimga yordam berdi.

Biroz izlaning

Yuqoridagi savollarni yozar ekanman, Googleʼga “SQL birlashmalar qanday amalga oshiriladi” deb qidiruv berdim. Bir nechta havolani koʻrib chiqqanimda “oh, tushunarli, demak, baʼzan saralash boʻlarkan, baʼzan hash birlashuvi boʻlar ekan, bu haqda eshitgandim” degan xulosaga keldim va endi tugʻilgan baʼzi aniqroq savollarni ham izlab koʻrdim. Avval kichik Google qidiruvini oʻtkazish yaxshiroq savollar tuzishga yordam berdi!

Baʼzida odamlar “Googleʼdan qidirmasdan turib savol bermaslik” kerakligini koʻp taʼkidlaydi, lekin men baʼzida tushlik payti kimdir bilan ovqatlanayotganda ularning ish jarayoniga qiziqib, oʻsha soha uchun juda oddiy savollarni berishim mumkin. Buni normal holat deb bilaman.

Lekin biroz izlanib koʻrish chindan ham foydali, aslida yetarlicha izlanish imkoniga ega boʻlish bir qator ajoyib savollarni oʻylab topishga ham yordam beradi.

Kimdan soʻrashni bilib oling

Odatda savollarni hamkasblaringizga berishni tavsiya qilaman, chunki oʻzim koʻp vaqtimni aynan ular bilan oʻtkazaman.

Hamkasblarimga savol bilan yuzlanishdan avval esa quyidagilarni hisobga olaman:

  • Murojaat qilayotgan vaqtim bu odam uchun ham maqbulmi? (Agar u stressli vaziyatda boʻlsa, katta ehtimol bilan, yoʻq.)
  • Bu savolni berishim meniki kabi uning ham vaqtini tejaydimi? (Agar bergan savolimga javob berish besh daqiqa vaqt olsa va bu ikki soat vaqtimni tejasa, demak, juda yaxshi.)
  • Savollarimga javob berish qancha vaqt oladi? Agar bermoqchi boʻlgan savollarimga yarim soat kerak boʻlsa, balki ular bilan keyinroq biror vaqtni moʻljallarmiz, agar faqat bitta qisqa savolim boʻlsa, uni hoziroq soʻrashim ham mumkin.
  • Bu inson savollarim uchun juda tajribali emasmi? Baʼzida savollarni oʻsha sohaning eng tajribali, bilimli kishisiga berib, tezda qopqonga tushib qolish mumkin deb oʻylayman. Aslida biroz kamroq ilmli insonni topish ham yaxshiroq – ular koʻp savollaringizga javob bera oladi, bu esa bosimni teng taqsimlaydi, bu bilan oʻz bilimini ham namoyish qila oladi (bu esa juda ajoyib holat).

Doim ham buni toʻgʻri deb oʻylamayman, ammo bu haqida oʻylash menga ancha foyda bergan edi.

Bundan tashqari, asosan vaqtimni menga yaqinroq kishilarga savol berish bilan oʻtkazaman – ular deyarli har kuni gaplashadigan odamlarim boʻlgani uchun savol berishim ham osonroq boʻladi. Chunki ular nima bilan shugʻullanayotganimdan xabardor boʻladi va menga foydali javobni osonlik bilan berishi mumkin.

ESR tomonidan qanday qilib aqlli tarzda savollar berish — juda mashhur va anchayin agressiv kayfiyatli qoʻllanma (u “Bunday insonlarni omadsizlar deb ataymiz” deb boshlanadi va keyin ham shu tarzda davom etadi). Bu qoʻllanmada ham gap internetda begonalarga qanday savol berish haqida boradi. Internetda begonalardan savollar soʻrash ham juda foydali koʻnikma va siz haqiqatda kerakli maʼlumotga ega boʻlishingiz mumkin. Ammo bu savol berishning murakkab usuli hamdir. Suhbatlashayotgan insoningiz vaziyatingiz haqida kam maʼlumotga ega boʻladi, shuning uchun aynan nimani bilmoqchi ekaningizni bildirishda ehtiyotkor boʻlishingiz kerak. “Qanday qilib aqlli tarzda savol berish” savol berayotgan kishilarga asoslanmagan bosim beradi deb oʻylayman (unda savol soʻrashdan avval oʻsha maʼlumotni olish uchun har qanday usuldan foydalanish kerak, boʻlmasa “dangasa shimgich”ga aylanasiz deyiladi), ammo qoʻllanmadagi “Savollarga qanday qilib foydali javob berish kerak” boʻlimi yaxshi yozilgan.

Nima noaniqligini bildirish uchun savol bering

Savol berishning mukammallashgan shakli bu — noaniq taxmin va bilimlarni ochiqlash uchun berilgan savollar. Aslida, bunday turdagi savollardan ikki xil maqsad koʻzlanadi: javob olish (katta ehtimol bilan, boshqa odamlarda bu maʼlumot boʻlmaydi), shuningdek, qandaydir yopiq maʼlumot borligi va u bilan boʻlishish foydali ekanidir.

Etsyʼning debrifing oʻtkazish boʻyicha qoʻllanmasi “Savol soʻrash sanʼati” boʻlimi yuz bergan voqea yuzasidan muhokama oʻtkazishda ajoyib kirish qism boʻla oladi. Ana shu qoʻllanmadagi bir nechta savollarni keltiramiz:

“Bu turdagi muvaffaqiyatsizlik yuz berganidan shubhalansangiz nimalarga ahamiyat qaratasiz?”

“Bu holat ʻnormalʼ ekanini nimaga qarab xulosa qilasiz?”

“Maʼlumotlar ombori ishlamayotganini qanday bilib oldingiz?”

“Aynan shu jamoani chaqirishingiz kerakligini qayerdan bildingiz?”

Bunday (yaʼni oddiy tuyulsa-da, aslida noaniq boʻlgan) savollarni qandaydir lavozimdagi kishi soʻraganda koʻproq natija beradi. Menejer yoki katta muhandisning “Maʼlumotlar ombori ishlamayotganini qanday bildingiz?” kabi savol berishi menga yoqadi, chunki bu kichikroq lavozimdagilarga ham keyinchalik shunday savol berishga imkon beradi. 

Savollarga javob berish

Andre Arkoning “Ochiq kod manbasiga qanday hissa qoʻshish kerak?” nomli ajoyib postidagi menga eng yoqqan joyi quyidagicha:

Barcha muammo va pull requestsʼni oʻqib chiqqaningizdan keyin javob bera oladigan savollarni izlashni boshlang. Shunda kimdir avval javob berilgan yoki siz hozir oʻqigan hujjatlarda javob berilgan savol berayotganini payqaguningizcha koʻp vaqt oʻtmaydi. Qanday javob berishni biladigan savollarga javob bering.

Agar yangi loyihaga kirishayotgan boʻlsangiz, siz oʻrgangan narsalarni endigina oʻrganayotgan kishilarning savollariga javob berish, bilimingizni mustahkamlashning chindan ham ajoyib usuli boʻlishi mumkin. Har safar yangi mavzu boʻyicha savolga ilk marta javob berayotganimda “Ey xudoyim, agar savolga notoʻgʻri javob bersam nima boʻladi” deb oʻylashni boshlayman. Lekin koʻpincha savolga toʻgʻri javob beraman va mavzuni yaxshi tushungandek mamnunlik bilan yoʻlimda davom etaman.

Savollar katta foyda boʻlishi mumkin

Yaxshi savollar jamiyat uchun katta foyda keltirishi mumkin. Birmuncha vaqt avval Twitterʼda CDN haqida koʻplab savollar bergandim va CDN faqatgina keshlash uchun moʻljallanmagani haqida javoblar yozdim. Koʻplab insonlar blogdagi bu post ularga yoqqanini aytganida, bu savollar mendan tashqari boshqa insonlarga ham yordam bergani haqida oʻyladim.

Koʻp kishilar savollarga javob berishni yoqtiradi. Oʻylashimcha, yaxshi savollarga “odamlar qattiq emas, birozgina bezovtalanishi uchungina yaxshi savol berish” uchun deb emas, balki suhbatga qoʻshishingiz mumkin boʻlgan yaxshi narsalar deb qarash muhim.

Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
Julia Evans

Julia Evans