ในระหว่างการสัมภาษณ์ฉันถูกถามว่ารู้ความแตกต่างระหว่าง C และ C ++ หรือไม่
ฉันสงสัยว่าทำไมคำถามดังกล่าวถึงถูกถาม
ในระหว่างการสัมภาษณ์ฉันถูกถามว่ารู้ความแตกต่างระหว่าง C และ C ++ หรือไม่
ฉันสงสัยว่าทำไมคำถามดังกล่าวถึงถูกถาม
คำตอบ:
หากคำถามถูกใช้เป็นประโยคเช่น "คุณรู้จักความแตกต่างระหว่าง C และ C ++ หรือไม่" และคุณได้รับอนุญาตให้ตอบกลับด้วย "ใช่" ฉันจะได้เห็นความสับสนของคุณ แต่ถ้าพวกเขาถามจริง ๆ ว่า "อะไรคือสิ่งที่แตกต่างระหว่าง C และ C ++" และคาดว่าจะได้คำตอบที่เปิดกว้างกว่านี้ฉันเห็นว่ามันเป็น
ตัวอย่างเช่นมีรหัสใน C เท่านั้นและไม่เคยอยู่ใน C ++ ฉันแทบจะไม่สามารถตอบได้นอกเหนือจาก "C ++ รองรับการเข้ารหัสเชิงวัตถุ?"
บางคนสังเกตเห็นว่ามีผู้สมัครงานการเขียนโปรแกรมจำนวนมากที่ไม่สามารถเขียนโค้ดได้เลย ดังนั้นใช่การถามคำถาม "ชัดเจน" ทำให้รู้สึกที่สมบูรณ์แบบ
มีพวกมันทั้งหมด มีคนมากมายที่มีวิทยากรคนบ้าที่สอน C-strings และnew
และdelete
หรือแบบฝึกหัดที่ล้าสมัยหรือหนังสือไม่ดีผู้เรียนรู้ "C ++" แต่จริงๆแล้ว C ซึ่งคิดว่าทั้งคู่นั้นค่อนข้างใกล้เคียงกัน
แน่นอนถ้าคุณเป็นนายจ้างแล้วบอกว่าพวกเขาเหมือนกันหรือคล้ายกันคือไฟเตือนขนาดใหญ่
นอกจากนี้ยังมีคนจำนวนเล็กน้อย (เช่นตัวเอง) ที่เรียนรู้ภาษาซีพลัสพลัสก่อนเรียนวิชาซี
ฉันแน่ใจว่าคุณรู้ถึงความแตกต่าง แต่ถ้าคุณเป็นนักเรียนที่มีคลาส C ++ เท่านั้นและไม่ใช่คลาส C ชิ้นส่วนของ C ++ ที่ไม่เข้ากันได้กับ C จะไม่ชัดเจน
ความแตกต่างที่ชัดเจนมากขึ้นบางอย่างที่ฉันได้เรียนรู้ (ไม่ใช่รายการที่ครบถ้วนสมบูรณ์) ( ) ชนิดข้อมูล struct เดิมไม่สามารถมีฟังก์ชั่นและไม่สามารถมีสมาชิกส่วนตัวได้ซึ่งหมายความว่าเป็นการยากที่จะบังคับใช้กฎความถูกต้องของชนิดข้อมูลนามธรรม ในคลาสC ( ) ไม่ได้รับการสนับสนุนใน C ( ) ผ่านโดยการอ้างอิงโดยใช้ตัวดำเนินการเครื่องหมายเฉพาะสำหรับ C ++ ( ) C ไม่รองรับสตรีมหรือเทมเพลต (*) malloc และฟรีมีไว้สำหรับใช้ใน C เท่านั้นและไม่ได้อยู่ใน C ++
น่าเสียดายที่ฉันคิดว่ามันเป็นเรื่องธรรมดามากขึ้นเรื่อย ๆ
ฉันคิดว่าโปรแกรมเมอร์รุ่นใหม่ออกจากโรงเรียนเทคนิค (หรือที่พวกเขาเรียนรู้ทักษะของพวกเขา) เพียงแค่ไม่เรียนรู้ภาษาเก่าเช่น C, C ++, Lisp, OCaml และอื่น ๆ พวกเขาออกมาเป็น "c # โปรแกรมเมอร์" หรือ "โปรแกรมเมอร์ Java "ฯลฯ และเมื่อพวกเขาหางานพวกเขาจะไม่ท้าทายตัวเองด้วยการเรียนรู้ภาษาอื่น
แน่นอนว่ามีบางอย่างที่ทำ แต่จากที่ฉันได้ทำงานด้วยมีแนวโน้มทั่วไปสำหรับโปรแกรมเมอร์ที่อายุน้อยกว่าที่จะทำตามรูปแบบนี้
ข้อจำกัดความรับผิดชอบ: เนื่องจากฉันกำลังพูดถึงการศึกษาแน่นอนว่าอาจมีความแตกต่างจากประเทศหนึ่งไปอีกประเทศหนึ่งเกี่ยวกับสิ่งที่กำลังให้ความสำคัญในการศึกษา
อาจไม่แท้จริงในที่พวกเขาคิดว่า C ++ และ C เป็นหนึ่งเดียวกัน แต่ในแง่ของความเข้าใจอย่างแท้จริงและความสามารถในการใช้คุณสมบัติที่แตกต่างของ C ++ ใช่
สาเหตุหลักคือลักษณะไบนารีของรายการภาษา / เครื่องมือในประวัติย่อ / CV ของคุณ โดยพื้นฐานแล้วมาตรฐานดูเหมือนว่าถ้าคุณมี "Hello World" ในการรวบรวมและเรียกใช้ในภาษากว่าจะตกลงเพื่อแสดงรายการในประวัติย่อ / CV ของคุณ
เมื่อมันเกิดขึ้นเวอร์ชัน C ของ "Hello, World!" รวบรวมและทำงานใน C ++ ดังนั้นหากไม่มีข้อมูลอื่น ๆ ทั้งหมดที่เห็น "C ++" ในประวัติย่อบอกฉันว่าบุคคลนี้รู้ดีพอที่จะได้รับ "Hello, World!" ทำงานและรู้ว่าโปรแกรม C ส่วนใหญ่จะรวบรวมใน C ++
ระบุว่าฉันจะต้องสอบสวนว่าเล็กน้อยในการสัมภาษณ์ ฉันอาจจะไม่ทำเช่นนั้นโดยถามว่า "ใช่ / ไม่ใช่" "คุณรู้จักความแตกต่างหรือไม่" คำถามสั้น ๆ เพราะมีคำตอบ "ถูกต้อง" ที่ชัดเจน ฉันอาจถามผู้สมัครว่าภาษาใดที่เธอชอบดีกว่าทำไมและหากมีข้อได้เปรียบใด ๆ กับภาษาที่เธอไม่ได้เลือก
ตอบ
ใช่มันเป็นเรื่องธรรมดา ฉันได้เห็นสถานการณ์นี้ทั้งตัวฉันเองเพื่อนร่วมงานหรือรหัสห้องสมุดของบุคคลที่สาม
ยกตัวอย่างเช่นตัวเองบางครั้งทำงานกับภาษาการเขียนโปรแกรมอื่น ๆ หรือกรอบการเขียนโปรแกรมและมีการเชื่อมโยงหรือปรับปรุงเพื่อห้องสมุด "บริสุทธิ์ c" หรือ "c ++"
ฉันเพิ่งพบปัญหาในการแก้ไขโค้ด "Pure C" บางอย่าง และใช้ฟังก์ชันการจัดสรรหน่วยความจำ "ใหม่" & "ลบ" นั่นคือ "c ++" ส่วนที่เหลือของรหัสไม่ได้มุ่งเน้นวัตถุ
คอมไพเลอร์คือ C ++ ต่อมาฉันฟ้องร้องผู้รวบรวมคนอื่นและค้นพบข้อผิดพลาด
โบนัส
หากบางคนถามด้วยวาจาหรือแบบทดสอบเป็นลายลักษณ์อักษรหรือแบบทดสอบออนไลน์ทางเว็บ:
"คุณรู้จักความแตกต่างระหว่าง C หรือ C ++ หรือไม่"
และคุณตอบว่า "ใช่" หรือ "ไม่"
พวกเขาหมายถึง:
"คุณรู้จักความแตกต่างระหว่าง C หรือ C ++ ไหมถ้าคุณช่วยบอกฉันที"
ดังนั้นคุณต้องตอบ:
"ใช่ความแตกต่างของ C ++ คือ Object Oriented แม้ว่าคุณอาจใช้ Pure C ในโปรแกรม C ++ เพื่อความเข้ากันได้แบบย้อนหลัง"
บางครั้งพวกเขาจะไม่ถามคุณว่า "ถ้าคุณช่วยบอกฉันที" และพวกเขาจะคิดว่าคุณไม่รู้ อย่าเพิ่งตอบว่า "ใช่" หรือ "ไม่"
แก้ไข
โปรดทราบว่าคำตอบนี้ไม่ได้มีไว้เพื่อประกาศว่าไม่มีความแตกต่างหรือว่าฉันยอมรับความแตกต่างหรือแม้กระทั่งที่ฉันรู้ว่า "Hello World" ใน C หรือ C ++ มันเป็นคำตอบของคำถามโดยกำหนดเงื่อนไขของการอ้างอิงชี้ให้เห็นว่าผู้คนจำนวนมากรู้ว่าความแตกต่างเบื้องต้น (เช่นมี+
ตัวละครบางตัวในชื่อของมัน) และคนน้อยมากที่จะรู้ถึงความแตกต่างทั้งหมดหรือแม้แต่ส่วนใหญ่
มันขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย 'โปรแกรมเมอร์' และสิ่งที่คุณหมายถึงโดย 'แตกต่าง'
ฉันเป็น 'โปรแกรมเมอร์' (แม้ว่าฉันจะเรียกตัวเองว่าเป็นนักพัฒนาซอฟต์แวร์) และฉันก็พยายามที่จะให้ความแตกต่างที่แท้จริงระหว่าง C และ C ++ ถ้ากดฉันอาจจะบอกว่า C ++ เป็น superset ของ C ที่มีเนมสเปซและการสืบทอด วิธีจัดการกับหน่วยความจำที่แตกต่างกัน ฉันรู้พอที่จะแก้ไขข้อผิดพลาดบางอย่างหรือทำการเปลี่ยนแปลงบางอย่างในโปรแกรมที่มีอยู่ของคุณ แต่ฉันไม่สามารถจินตนาการการเขียนอะไรมากไปกว่ายูทิลิตี้ธรรมดาใน C หรือ C ++ ฉันรู้พอที่จะผ่านไปได้ แต่ฉันไม่ได้วาดตัวเองว่า "รู้" ทั้งสองภาษา
ฉันรู้ว่า 'โปรแกรมเมอร์' คนอื่น (เช่นนักพัฒนา) ซึ่งไม่แม้แต่บอกความแตกต่างระหว่าง Java กับ FORTRAN หรือ Javascript และ Pascal พวกเขาเก่งในสิ่งที่พวกเขาทำและพวกเขาไม่ได้ใช้ภาษาเชิงปฏิบัติ
จากนั้นมีโปรแกรมเมอร์ระดับปานกลางหลายล้านคนที่แทบไม่รู้ภาษาเดียวที่พวกเขาใช้งานทุกวัน
คำว่า 'แตกต่าง' นั้นมีความหมาย ฉันได้ชี้ให้เห็นสิ่งที่ฉันเห็นว่าเป็นความแตกต่างบางอย่างด้านบน แต่ฉันรู้ว่ามันไม่ชัดเจนและสมบูรณ์ มีคนน้อยมากที่จะรู้ถึงความแตกต่าง - คนจำนวนมากจะสามารถให้คำตอบที่คลุมเครือ (อย่างที่ฉันมี) เกี่ยวกับการวางแนวของวัตถุ
เป็นเรื่องปกติหรือไม่ที่โปรแกรมเมอร์จะไม่ทราบถึงความแตกต่างระหว่าง C และ C ++
ยี่สิบปีที่แล้ว? ใช่.
วันนี้? ไม่มากนัก.
เหตุผลนี้เป็นเพราะแนวการเขียนโปรแกรมมีการเปลี่ยนแปลงครั้งใหญ่ โปรแกรมวันนี้หลายโปรแกรมเป็นแบบเว็บ แม้โปรแกรมที่เขียนขึ้นสำหรับเดสก์ท็อปอาจถูกเขียนในภาษาระดับสูงกว่า C หรือ C ++ เช่นนี้เว้นแต่คุณจะเป็นโปรแกรมเมอร์ที่เขียนรหัสระบบปฏิบัติการคุณอาจไม่ทราบมากนักเกี่ยวกับภาษาใดภาษาหนึ่ง
ผู้สัมภาษณ์อาจถามคำถามนี้ในการสัมภาษณ์เพื่อวัดความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรมพื้นฐาน ถ้าคุณทราบความแตกต่างระหว่าง C และ C ++ คุณก็จะรู้ว่าการเขียนโปรแกรมเชิงวัตถุคืออะไรคุณอาจเข้าใจไลบรารีและคอมไพเลอร์คุณเข้าใจฟังก์ชันหน่วยความจำการอ้างอิงพอยน์เตอร์ .... หลายสิ่งที่มีอิทธิพลต่อภาษาการเขียนโปรแกรมในปัจจุบัน . ฉันไม่ได้ใช้ C ++ มาก (และฉันไม่สามารถพูดได้ว่าฉันเป็นโปรแกรมเมอร์ที่ยอดเยี่ยมในภาษาใด ๆ ภูมิปัญญาจะมาพร้อมกับเวลา) แต่ฉันสามารถพูดได้ว่าประสบการณ์ของฉันกับ C ++ ทำให้ฉันเป็นโปรแกรมเมอร์ที่ดีขึ้นอย่างแน่นอน