คำศัพท์ที่เหมาะสมเมื่อช่วยโปรแกรมเมอร์มือใหม่


9

ฉันพบว่าตัวเองช่วยเหลือโปรแกรมเมอร์มือใหม่ค่อนข้างบ่อย อธิบายสาเหตุที่รหัสของพวกเขาไม่ทำงานเมื่อพวกเขาถามแนะนำวิธีแก้ปัญหาและสิ่งที่คล้ายกัน คนที่ฉันกำลังช่วยมีการศึกษาอย่างเป็นทางการในการเขียนโปรแกรมจากโมดูลระดับปริญญาปีแรกใน Java แต่ฉันรู้สึกว่าฉันไม่สามารถสื่อสารกับพวกเขาได้เป็นอย่างดี

ตัวอย่างเช่น: บางคนอาจเขียนฟังก์ชั่น แต่ไม่เข้าใจว่าทำไมมันถึงไม่ถูกเรียกใช้งานโดยไม่รู้ว่าพวกเขาลืมเรียกมัน ถ้าฉันใช้วลีที่ชอบ"(make a) call (to) the function/it"และ"pass it the.."ฉันได้รับรูปลักษณ์ที่ว่างเปล่า

กระบวนการปกติของฉันก็คือการหาสถานที่ในรหัสของพวกเขาที่พวกเขาเรียกฟังก์ชั่นจากภาษาและบอกพวกเขาว่าพวกเขาสามารถเรียกฟังก์ชั่นของตัวเองในลักษณะเดียวกับที่พวกเขาเรียกว่าฟังก์ชั่นอื่น บางครั้งแม้แต่ที่ดูว่างเปล่า

มีคำศัพท์อื่น ๆ ที่เหมาะกับการช่วยเหลือโปรแกรมเมอร์ดีกว่าหรือไม่? หรือนี่ไม่ใช่ปัญหาของการสื่อสาร?


5
ผู้ใช้สเปรดชีตรู้วิธีเรียกใช้ฟังก์ชัน หลายคนสามารถเขียนของตัวเอง มีบางอย่างผิดปกติที่นี่
JeffO

@JeffO ฉันได้รับความรู้สึกบางอย่างผิดปกติ แต่ต้องการที่จะให้โมดูลนั้นและคนเหล่านั้นได้รับประโยชน์จากความสงสัย
Andy Hunt

7
รออะไร? โปรแกรมเมอร์ที่คุณทำงานด้วยไม่รู้ว่า "การเรียกฟังก์ชัน" และการผ่านข้อโต้แย้งหมายถึงอะไร นั่นเป็นพื้นฐานที่คุณสามารถทำได้โดยไม่ต้องวาดรูปและใช้คำอุปมาอุปมัยที่เกี่ยวข้องกับแมวและสุนัข สิ่งนี้นอกเหนือไปจากปัญหาการสื่อสารและน่าเสียดายที่อาจมีปัญหากับการขาดความรู้ ฉันอ่านคำถามของคุณอีกครั้งและดูเหมือนว่าพวกเขาเข้าเรียนหลักสูตรระดับเบื้องต้นและใช่ไหม
wkl

3
@AndyBursh: นักเรียนเหล่านี้นำไปสู่ปีที่สองได้อย่างไร หวังว่าพวกเขาจะไม่ผ่านการสอบและเลือกงานนอกการพัฒนาซอฟต์แวร์
Doc Brown

3
บางทีหุ่นถุงเท้าก็อาจช่วยได้
MattDavey

คำตอบ:


15

พวกเขาจะต้องเรียนรู้คำศัพท์ที่เหมาะสมในที่สุด

ใช้อย่างถูกต้องและอธิบายพวกเขาเมื่อใดก็ตามที่คุณได้รับจ้องมองที่ว่างเปล่า เพียงแค่พยายามส่งสัญญาณที่ถูกต้องคุณสามารถถามสิ่งที่พวกเขาไม่เข้าใจ - คำถามที่โง่เพียงอย่างเดียวคือคำถามที่คุณไม่ได้ถาม


2
ฉันกำลังจะโพสต์คำตอบเดียวกันเกือบทั้งหมดจากนั้นโหลดของคุณ :) +1
Tom Squires

อย่านำคำอธิบายลงมาสู่ระดับของพวกเขายกระดับขึ้นมา
Bent

2

โดยทั่วไปแล้ว

เมื่อบุคคลไม่เข้าใจคุณคุณมีทางเลือกสองทาง:

  1. ปรับคำศัพท์ตามสิ่งที่บุคคลนั้นรู้หรือไม่

  2. อธิบายเงื่อนไขที่เธอไม่เข้าใจให้กับบุคคลนั้น

กรณีแรกทำงานได้ดีเมื่อบุคคลนั้นรู้คำศัพท์ทางเทคนิคค่อนข้างดี แต่ไม่เพียงพอหรือไม่อยู่ในโดเมนของคุณ

ตัวอย่างเช่นคุณอาจใช้วิธีการคำใน C # หรือ Java และคนที่ทำงานกับภาษาอื่น ๆ ส่วนใหญ่จะไม่เข้าใจคำนี้ จากนั้นคุณจะอธิบายว่าใน C # หรือ Java วิธีจะหมายถึงสิ่งที่เรามักจะเรียกฟังก์ชั่น (ตัวอย่างเช่นใน C) และไม่มีสิ่งเช่นฟังก์ชั่นใน C # หรือ Java ในPHP , ตัวอย่างเช่นทั้งวิธีการและฟังก์ชั่นที่มีอยู่และมีความหมายที่แตกต่างกัน หากความแตกต่างนั้นเจ็บปวดเกินกว่าที่คุณจะพูดถึงฟังก์ชั่นเพื่อความเรียบง่าย

ในกรณีที่แม่นยำของคุณคุณแทบจะไม่สามารถเลือกตัวแรก: "โทรออกไปยังฟังก์ชั่น" ไม่สามารถจัดรูปแบบใหม่ได้ในวิธีที่ง่ายกว่า สายคือสาย คุณไม่สามารถทำให้สิ่งนี้ง่ายขึ้นอีก

ซึ่งหมายความว่าคุณต้องเลือกวิธีที่สอง: อธิบายถึงแต่ละคำศัพท์ด้านเทคนิค

  1. ชี้บุคคลไปที่พจนานุกรมหรือ Wikipedia ซึ่งทำงานได้ดีมากสำหรับแนวคิดพื้นฐานและคำศัพท์

    ผมจะเลือกนี้สำหรับคำที่ใช้กันทั่วไป ตัวอย่างเช่นฉันอยากเชิญบุคคลให้อ่านวิกิพีเดียเพื่อทำความเข้าใจว่าอะไรคือความแตกต่างหรือความแปรปรวนร่วมและความแปรปรวนคืออะไร คำศัพท์เหล่านี้มีการอธิบายที่ดีอยู่แล้วดังนั้นไม่จำเป็นต้องบูรณาการล้อที่นี่

  2. หรืออธิบายในคำพูดของคุณเอง

    ฉันจะเลือกสิ่งนี้สำหรับคำที่เฉพาะเจาะจงกับบริบทและ / หรือการยอมรับคำจำกัดความที่หลากหลาย ตัวอย่างเช่น Wikipedia ไม่ได้มีประโยชน์มากในการทำความเข้าใจวิสัยทัศน์ของ Microsoft เกี่ยวกับการประมวลผลแบบคลาวด์และฉันอยากอธิบายตัวเองว่า Cloud คืออะไรสำหรับคนที่จะทำงานกับแอปพลิเคชัน Windows Azure

ในกรณีของคุณโดยเฉพาะ

คนที่คุณกำลังพูดถึงกำลังขาดแนวคิดพื้นฐานและคำศัพท์ที่ใช้ในการเขียนโปรแกรม พวกเขาไม่สามารถดำเนินการต่อได้โดยไม่ต้องเรียนรู้คำศัพท์หลักนี้เพราะพวกเขาไม่สามารถสื่อสารได้เลยพวกเขาไม่สามารถอ่านหนังสือเกี่ยวกับการเขียนโปรแกรมหรือบล็อกพวกเขาไม่สามารถฟังเพื่อนร่วมงานของพวกเขาและพวกเขาก็ไม่สามารถถามคำถาม เว็บไซต์ Stack Exchange เนื่องจากไม่มีใครจะเข้าใจสิ่งที่พวกเขาถาม

ในกรณีของคุณมากกว่าการค้นหาคำศัพท์ที่เหมาะสมผมจะใช้เวลาไม่กี่วันหรือสัปดาห์สอนให้พวกเขาแนวคิดการเขียนโปรแกรมหลักและข้อกำหนดที่ใช้กันทั่วไป หลังจากนั้นไม่กี่วันคุณจะสามารถที่จะพูดคุยกับพวกเขาโดยไม่ถูกต้องอย่างต่อเนื่อง"วาดภาพพวกเขาและการใช้คำอุปมาอุปมัยที่เกี่ยวข้องกับสุนัขและแมว"


1

แทนที่จะฟังก์ชั่นเริ่มต้นด้วยซับรูทีน บอกพวกเขาว่าโปรแกรมเป็นเพียงรายการคำแนะนำสูตรในการบอกคอมพิวเตอร์ว่าต้องทำอะไร และมันจะถูกดำเนินการคำสั่งอย่างใดอย่างหนึ่งหลังจากที่อื่น (มีความเป็นไปได้ที่จะทำบางขั้นตอนในแบบคู่ขนาน แต่เพิ่มเติมเกี่ยวกับที่ในภายหลัง)

งานบางอย่างค่อนข้างบ่อยและซ้ำซากดังนั้นมันจะแย่มากถ้าเราต้องเขียนมันซ้ำแล้วซ้ำอีกดังนั้นเราเขียนมันแค่ครั้งเดียวและสร้าง "โปรแกรมเล็ก ๆ " ออกจากโปรแกรม - รูทีนย่อยที่สามารถนำมาใช้ซ้ำได้ ส่วนอื่น ๆ ของโปรแกรม เพื่อให้สามารถดำเนินการได้มากกว่าหนึ่งครั้งเราให้ชื่อที่มีความหมายในโปรแกรมของเรา และจากนั้นเราสามารถใช้ชื่อนั้นเมื่อเราต้องการเรียกใช้งาน "โปรแกรมเล็ก ๆ " นี้เป็นส่วนหนึ่งของชื่อที่ใหญ่กว่าโดยเรียกมันด้วยชื่อนั้น

การเรียกรูทีนย่อยนั้นเหมือนกับการเรียกปีศาจที่รู้วิธีการทำงานโดยใช้ชื่อของปีศาจนั้น ดังนั้นเมื่อเราต้องการทำงานเฉพาะในโปรแกรมของเราเราเขียน "เรียกปีศาจชื่ออาร์โก ธ " และปีศาจก็ปรากฏขึ้นและทำงานให้เราเมื่อเราสั่งให้เขาทำแล้วจากนั้นก็ไปต่อ งาน.

บางครั้งปีศาจต้องการข้อมูลเพิ่มเติมโดยที่เขาไม่สามารถตัดสินใจได้ว่าจะต้องทำงานอะไรหรืออะไรที่เราต้องการจากเขา เช่นถ้าปีศาจควรจะสร้างปราสาทเขาอาจจำเป็นต้องรู้ที่เขาควรจะสร้างมันหรือวิธีการใหญ่ฯลฯ เหล่านี้เป็นข้อโต้แย้งที่ส่งผ่านไปยังปีศาจ ... ผมหมายถึงย่อยซึ่งตอนนี้กลายเป็นparametrized

พารามิเตอร์คือชิ้นส่วนของข้อมูลที่ขาดหายไป แต่จำเป็นสำหรับการทำงาน พวกเขาเปลี่ยนสิ่งที่รูทีนย่อยสามารถทำได้เล็กน้อย พวกเขาเป็นเหมือนช่องว่างในสูตรที่ต้องกรอกก่อนที่เราจะสามารถดำเนินการได้

อาร์กิวเมนต์ในทางกลับกันคือข้อมูลจริง (ค่า) ที่เราจัดหาให้สำหรับพารามิเตอร์เหล่านี้

สำหรับการประมวลผลแบบขนานเราสามารถคิดได้ด้วยวิธีนี้: มีบางคน (หรือบางอย่าง ) ที่เรียกใช้งานโปรแกรม (รายการคำสั่ง) มันเป็นมนุษย์อีกคน (คุณรู้ไหมว่า "คอมพิวเตอร์" เคยเป็นชื่อของคนที่ทำการคำนวณหรือไม่) หรือเครื่องจักร โปรแกรมเป็นเพียงรายการคำสั่ง แต่ไม่สามารถทำงานได้ด้วยตนเอง ต้องมีบางคนหรือบางสิ่งที่จะทำกระบวนการคำนวณ(ทำสิ่งเหล่านี้จากรายการ) และบางครั้งการกระทำเหล่านี้สามารถทำได้ในแบบคู่ขนาน - เราสามารถแจกจ่ายสำเนาของรายการไปให้คนหลาย ๆ คนและปล่อยให้แต่ละคนทำหน้าที่แตกต่างกันจากรายการตราบใดที่พวกเขาไม่ขัดจังหวะกันและกันหรือไม่ ไม่ต้องรอผลงานของคนอื่น นั่นคือมัลติเธรดสำหรับคุณ;)

สำหรับความแตกต่างระหว่างฟังก์ชั่นและซับรูทีน (เรียกว่าขั้นตอน ) ที่แตกต่างกันตามปกติคือว่าการทำงานจะถูกเรียกว่าการคำนวณบางอย่างคุ้มค่าซึ่งมันกลับเป็นผลมาจากการดำเนินการในขณะที่ขั้นตอนมีการดำเนินการเพียงเพื่อความสนุกสนาน;) AKA สำหรับ "ผลข้างเคียง" ของพวกเขา - เพียงเพื่อประโยชน์ของการดำเนินการที่ทำจากรายการ

แต่ถ้าเรียกขั้นตอนหรือฟังก์ชั่นที่ทำให้เกิดปัญหาบางอย่างในตอนแรกคุณสามารถใช้อีกวาระหนึ่งที่ครั้งหนึ่งเคยเป็นที่นิยม: กระโดด หนึ่งสามารถกระโดดลงในรูทีนย่อยซึ่งหมายความว่าคุณหยุดดำเนินการสิ่งที่คุณกำลังทำในขณะนี้และ "กระโดด" ไปยังสถานที่อื่นในรายการ (หรือรายการอื่นใด ๆ ) - รูทีนย่อย - เพื่อทำงานของมัน จากนั้นเมื่อคุณทำเสร็จแล้วคุณ "กระโดดกลับ" นั่นคือคุณกลับไปยังสถานที่ที่คุณถูกขัดจังหวะเพื่อที่คุณจะสามารถทำงานต่อไปได้ ความแตกต่างระหว่างการโทรและกระโดดคือตอนนี้คุณคือปีศาจ

สำหรับวิธีที่บางคนกล่าวถึงที่นี่หรือความจริงที่ว่าบางภาษา "ไม่มีฟังก์ชั่นวิธีการเท่านั้น" - ที่ไม่ถูกต้องมากเพราะวิธีการที่มีฟังก์ชั่น! - ชนิดพิเศษ: เป็นฟังก์ชั่นที่ใช้ในการดึงข้อมูลบางอย่างที่ห่อหุ้มอยู่ในวัตถุหรือทำงานกับมัน พวกเขาเป็น "วิธีการทำงานกับข้อมูลเหล่านั้น" ชื่อมาจากกระบวนทัศน์เชิงวัตถุที่ข้อมูลถูกล้อมรอบด้วยวัตถุและไม่สามารถดำเนินการได้โดยตรงโดยฟังก์ชันพิเศษที่เรียกว่า "วิธีการ" เท่านั้น

วิธีการพิเศษในวิธีอื่น: ต้องทราบว่าวัตถุใดที่ควรจะใช้งาน / เรียกใช้บน (วัตถุ "นี้") นั่นเป็นสาเหตุที่วิธีการมักจะประดับด้วยพารามิเตอร์ที่ซ่อนเพิ่มเติมที่เก็บข้อมูลเกี่ยวกับวัตถุที่มันถูกเรียก (ตัวชี้ "นี้") วิธีนี้จะซับซ้อนวิธีที่ฟังก์ชั่นนั้นเรียกว่าบิต แต่เป็น "รายละเอียดการใช้งาน" โปรแกรมเมอร์ไม่ควรกังวลมากตราบใดที่เขารู้ว่าเขากำลังทำอะไรอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.