“ ตัวอย่างโค้ด” ของฉันควรเป็นอย่างไร [ปิด]


24

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

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

ยินดีต้อนรับความคิดหรือคำแนะนำทั้งหมด!


2
มีข้อกำหนดใด ๆ ในตัวอย่างโค้ดที่จะส่งหรือไม่ ดูเหมือนไม่มีจุดหมายเลยใคร ๆ ก็สามารถคัดลอก / วางโค้ดที่สวยงามจากเว็บได้ จนกว่าพวกเขากำลังพยายามที่จะคัดออกคนที่ไม่สามารถได้รับที่ถูกต้อง ...
FrustratedWithFormsDesigner

5
เพียงแค่เตะคุณสามารถส่งสคริปต์ Perl ที่อยู่ในรูปของชื่อของเขา / เธอ ... ;)
FrustratedWithFormsDesigner

2
@thesunneversets: ดังนั้นฉันเดาว่าซอร์สโค้ดที่งดงามอย่างยิ่งจากโปรเจ็กต์ส่วนตัวของคุณจะออกมา ... ;) อย่างจริงจังนี่อาจปลอมได้ง่าย และนายจ้างปัจจุบันของคุณตกลงกับคุณหรือไม่ที่จะแสดงตัวอย่างรหัสต้นฉบับของคุณ ตกลงหรือไม่หากรหัสบางส่วนถูกเขียนโดยเพื่อนร่วมงาน (อาจเป็นไปได้ว่าไฟล์ถูกส่งไปมาระหว่างคนสองสามคนในช่วงเวลาหนึ่ง)?
FrustratedWithFormsDesigner

2
ผลกระทบทางจริยธรรมนั้นน่ากังวลเล็กน้อย ... แต่เพียงเล็กน้อยเท่านั้น ฉันไม่คิดว่าฉันจะตกหลุมพรางอุตสาหกรรม สำหรับเพื่อนร่วมงานนั้นมีเพียงสองคนเท่านั้นที่เคยได้รับใน codebase นี้และรหัสของคนอื่นเป็นระเบียบใหญ่ดังนั้นฉันจึงค่อนข้างเป็นของตัวเอง! :)
thesunneversets

4
@thununeveversets การให้รหัสนายจ้างของคุณไม่ได้ผิดจรรยาบรรณในหลาย ๆ ที่มันผิดกฎหมาย อย่าทำอย่างนั้น.
HLGEM

คำตอบ:


17

ฉันต้องการดูรหัสสะอาด :

Clean code : รหัสซอฟต์แวร์ที่มีการฟอร์แมตอย่างถูกต้องและในลักษณะที่เป็นระเบียบเพื่อให้ coder อื่นสามารถอ่านหรือแก้ไขได้อย่างง่ายดาย

นั่นหมายความว่า:

  • ฟังก์ชั่นการใช้งาน - ฟังก์ชั่นบางอย่างที่ไม่ยุ่งยาก (กลุ่มของผู้ได้รับ / ผู้ตั้งค่าจะไม่แสดงว่าคุณรู้อะไร)
  • สไตล์ที่สม่ำเสมอและสะอาด - สไตล์ที่เป็นที่นิยมหรืออย่างน้อยการเยื้องการเว้นวรรคและการใส่สไตล์
  • การตั้งชื่อที่ดี - ชื่อคุณภาพ - ห้ามใช้iนอกเสียจากว่าจะเป็นการเพิ่มเฉพาะค่าเท่านั้น อย่าใช้ชื่อตัวแปรไร้สาระ
  • คุณลักษณะอื่น ๆ ของรหัสสะอาด - แนวปฏิบัติที่ดีเกี่ยวกับการตรวจสอบข้อผิดพลาดเงื่อนไขลูปวิธีการอำนวยความสะดวกหรือวิธีการยูทิลิตี้และการแยกข้อกังวลที่ดี (ระหว่างวิธีการ) และนี่เป็นเวลาที่ดีที่จะได้ 100% แห้ง - ไม่มีการทำซ้ำ!

คุณต้องการส่งสิ่งที่ซับซ้อนพอที่จะน่าสนใจแต่สะอาดพอที่นักพัฒนาที่ดีสามารถเข้าใจได้ทันทีว่าทำอะไรอยู่

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


* อย่างน้อยที่สุดถ้าผู้สัมภาษณ์ถามเกี่ยวกับโครงการที่ผ่านมาล่วงหน้าแล้วขอตัวอย่างจากโครงการนี้และถามสิ่งที่คุณต้องเขียนหรือการพัฒนามันฉันคิดว่ากระบวนการจะเป็นคนโกหก ผมคิดว่าผู้สมัครส่วนใหญ่ที่จะนอนจะแสดงให้ปัญหาที่เกิดขึ้นในพื้นที่อื่น ๆ ต่อไป


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

เพิ่มความคิดเห็นในกรณีที่เครื่องหมายของคุณเกลียดรหัสที่สะอาด
Ewan

9

เมื่อฉันกำลังมองหางานฉันแก้ไขคำถามการประกวดเขียนโปรแกรม ACM หลายภาษาในหลาย ๆ ภาษาและใช้คำถามเหล่านั้นเป็นตัวอย่างโค้ดหลังจากนั้น ฉันคิดว่าพวกเขาทำตัวอย่างรหัสที่ดีเพราะ:

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

จากนั้นโค้ดที่คุณสร้างควรมีความชัดเจนสอดคล้องกันอ่านง่ายและเข้าใจง่าย

และสุดท้าย:

  • มันคุ้มค่าที่จะแก้ปัญหาให้พวกเขาเพื่อความสนุกและเป็นการฝึกฝนที่ดี

นี่เป็นทางออกที่ดี ฉันจะทำสิ่งนี้ มีคำถามเฉพาะที่คุณชอบที่สุดหรือไม่
zkent

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

6
  • ควรรวบรวม / ตีความข้อผิดพลาดและการเตือนฟรีที่ระดับความเข้มงวดสูงสุด
  • มันไม่ควรเป็นรหัสสำเร็จรูปที่คุณเขียนทุกวัน ทำให้เป็นเอกลักษณ์และน่าสนใจดังนั้นจึงเป็นที่ชัดเจนว่าคุณไม่ได้คัดลอก / วาง
  • ควรมีการตัดสินใจออกแบบที่น่าสนใจพร้อมความคิดเห็นอธิบายว่าคุณทำมันอย่างไร / ทำไม
  • ตั้งเป้าที่จะพิมพ์ออกมาไม่เกิน 2-3 หน้า
  • ควรเป็นภาษาที่คุณสมัคร
  • มันไม่ควรทำให้สมองของฉันเจ็บปวดเมื่อฉันอ่านมันเป็นครั้งแรก มีเพื่อนดูมันหรือโพสต์ใน codereview

3

ถ้าฉันสัมภาษณ์คุณฉันอยากเห็นรหัสของคุณ

สะอาดดีการแก้ปัญหานั้นดี แต่รหัสจริงดีกว่า โปรแกรมเมอร์ที่ดีรู้ว่าเมื่อใดที่เขา / เธอถูกหลอกลวงโดยโปรแกรมเมอร์คนอื่นดังนั้นความมั่นใจจึงลดลง

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

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


10
ฉันรักที่คุณไม่คิดว่าคนโง่สามารถเต้นรำได้ แต่คุณมั่นใจในความกล้าหาญทางเพศของพวกเขา! : D
thesunneversets

ไม่ฉันเพิ่งเห็นภัยพิบัติมากเกินไปตัวเอง ... :)
Machado

ที่โรงเรียนของฉันคนเดียวที่ปรากฏตัวในชั้นเรียนการเต้นรำทางสังคม / ลูกเป็นสาขาวิชาวิศวกรรม
Eva

คุณควรเปลี่ยนเพศด้วยการอ้างอิงการเล่นเกมบางอย่างให้ถูกต้องมากขึ้น :)
zkent

2

โปรดระวังด้วยว่ามันไม่ใช่รหัสจากนายจ้างปัจจุบันของคุณ (พวกเขาเป็นเจ้าของมันคุณทำไม่ได้และฉันรับประกันได้ว่าพวกเขาจะไม่ชอบให้คุณแบ่งปันมัน) ทำสิ่งที่คุณภูมิใจและทำใหม่ด้วยตัวเองเพื่อไม่ให้เป็นนายจ้างโดยเฉพาะ (กำจัดการอ้างอิงใด ๆ ไปยังตารางฐานข้อมูลหรือชื่อเซิร์ฟเวอร์ ฯลฯ ) สิ่งที่คุณไม่ส่งรหัสที่มีข้อผิดพลาดหรือเป็นเทคนิคที่ไม่ดีสำหรับประเภทของรหัสนั้น (ฉันอาจจะปฏิเสธคนที่ส่งเคอร์เซอร์เมื่อการดำเนินการแบบ set-based จะง่ายขึ้นและทำงานได้ดีขึ้นเมื่อตรวจสอบโค้ด SQL มีเทคนิคที่คล้ายกันสำหรับภาษาอื่น ๆ ที่มีเพื่อแก้ปัญหาปัญหาที่ค่อนข้างหายากซึ่งสามารถใช้สำหรับปัญหาทั่วไปอื่น ๆ แต่ไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับปัญหาอื่น ๆ ประโยคนั้นเหมาะสมหรือไม่?)


ฉันยอมรับการทำงานซ้ำทั้งหมดดังนั้นจึงไม่มีข้อมูลเฉพาะของนายจ้างอีกต่อไปดูเหมือนว่าเป็นความคิดที่ดี จริยธรรมมีความสำคัญ - ขอบคุณสำหรับเคล็ดลับ!
thesunneversets

0

ฉันจะโพสต์ที่สองจาก Renesis เกี่ยวกับรหัสที่สะอาด แต่จะเพิ่มไปยังรายการที่มีคุณภาพและการทดสอบหน่วยเอกสารที่ดีในรหัสที่คุณส่ง โปรแกรมเมอร์ที่ดีควรจะเขียนการทดสอบหน่วยสำหรับรหัสของพวกเขา


0

ในฐานะที่เป็นความคิดเห็นหนึ่งจากคนที่ขอตัวอย่างโค้ดเมื่อประเมินผู้สมัครมีคุณสมบัติระดับสูงไม่กี่ (เนื้อหาของรหัส) และคุณลักษณะระดับต่ำสองสาม (โครงสร้างของรหัส) คุณสมบัติระดับสูง:

  1. เอกลักษณ์ : รสชาติของรหัส หากคุณกำลังเรียกเก็บเงินด้วยตัวคุณเองในฐานะ UI / HCI coder ฉันต้องการเห็นรูปลักษณ์ / ความรู้สึกที่ดีเมื่อมองเห็นสิ่งที่เรียกใช้ หากคุณเป็นผู้สร้างฐานข้อมูลฉันต้องการเห็นสิ่งที่น่าสนใจเกี่ยวกับการแสดงข้อมูลหรือการวิเคราะห์ กลุ่มตัวอย่างที่ใช้ควรเป็นสิ่งที่คุณมีความภาคภูมิใจของ หากคุณไม่มีอย่างน้อยหนึ่งในนั้นคุณไม่มีตัวตน
  2. วุฒิภาวะ : คุณเปลี่ยนกลยุทธ์สำหรับปัญหาที่แตกต่างกันหรือไม่? คุณกำลังแก้ปัญหาที่น่าสนใจ? รหัสหรือแนวทางจะง่ายต่อการขยายไปสู่ปัญหาที่คล้ายกันหรือไม่ ในการสนทนาฉันรู้สึกเหมือนกำลังดูสมาชิกของชุมชนลัทธิขนส่งสินค้าหรือไม่?
  3. การสื่อสาร : รหัสอธิบายสิ่งที่กำลังทำอยู่ได้อย่างง่ายดายและทำไม? นี่ไม่ได้หมายความว่ารหัสจะต้องง่าย ในความเป็นจริงมันเป็นโบนัสที่จะทำให้รหัสที่ซับซ้อนเข้าใจง่าย

ลักษณะระดับต่ำนั้นง่ายกว่า:

  1. รูปแบบ : รหัสควรมีความสะอาดสม่ำเสมอ (ตามแนวทางที่กำหนดไว้บางส่วน) และมีเอกสารครบถ้วน
  2. บรรจุภัณฑ์ : ควรมีอย่างน้อยหนึ่ง readme สั้น ๆ เวอร์ชันที่รันได้และการทดสอบที่รันได้ readme ควรจะบอกฉันถึงวิธีการรันสองอันหลังรวมทั้งสาเหตุที่คุณสาธิตตัวอย่างโค้ดนี้โดยเฉพาะ
  3. ภาษา : โดยทั่วไปแล้วฉันจะขอตัวอย่างจากบุคคลในภาษาสำหรับตำแหน่งรวมถึงคนที่พวกเขารู้สึกแข็งแกร่งที่สุดให้ความคิดที่ดีเกี่ยวกับเพดานปัจจุบันของบุคคล

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

ในที่สุดเท่าที่บางคนตะโกนว่า "โอ้บางคนอาจได้รับตัวอย่างรหัสจากอินเทอร์เน็ต" ข้อโต้แย้งคือคนส่วนใหญ่ที่ไม่เข้าใจรหัสคุณภาพการผลิตที่ดีก็ไม่เข้าใจเมื่อพวกเขาเห็น . นอกจากนี้ Google สามารถใช้บรรทัดที่โดดเด่นเพื่อให้โค้ดตรวจสอบได้เสมอ อีกอย่างที่ดีที่สุดการขโมยรหัสจะทำให้ผู้สมัครสอบสัมภาษณ์ที่พวกเขาขายหน้า ("ทำไมคุณถึงทำแบบนี้ ... ?")

ในฐานะที่เป็นโน้ตสุดท้ายเกี่ยวกับรหัสจากการจ้างงานก่อนหน้านี้: อย่าเพิ่ง จากมุมมองของฝ่ายทรัพยากรบุคคลการขอรหัสจากการจ้างงานก่อนหน้านี้ไม่เหมาะสมและการตั้งค่าสถานะสีแดงเกี่ยวกับ บริษัท คุณทั้งสองจะมีความรับผิดตามกฎหมาย (กล่าวคือคุณสามารถถูกฟ้องทั้งคู่ได้) และแสดงให้เห็นว่าพวกเขาไม่รู้ว่ากำลังทำอะไรอยู่ ไม่ควรให้รหัสที่ทำกับนายจ้างคนก่อนนอกเสียจากว่าจะมีรหัสสาธารณะแล้วหรือคุณได้รับอนุญาตอย่างชัดเจนจากนายจ้างรายนั้น ที่แย่กว่านั้นใน บริษัท ใหญ่หัวหน้าโดยตรงของคุณอาจไม่มีอำนาจอนุญาตให้คุณได้ดังนั้นขอให้สนุกกับแผนกกฎหมายในกรณีนั้น ฉันแน่ใจว่าพวกเขาจะดีใจมากที่จะเปิดเผย IP ของพวกเขาสำหรับพนักงานที่กำลังออก


ฉันจะทราบด้วยว่าในการเปิดเผยข้อมูลอย่างเต็มรูปแบบฉันได้ให้ตัวอย่างโค้ดแก่ห้องปฏิบัติการบัณฑิตวิทยาลัยที่ฉันได้รับปริญญาเอก ตัวอย่างโค้ดนี้เป็นรหัสเต็มสำหรับหุ่นยนต์อัตโนมัติ (5-10k บรรทัด) โดยมีไฟล์สามไฟล์แยกกัน เอกสารเป็นที่น่านับถือ แต่ไม่ใช่เก่าแก่ ถ้าฉันต้องทำมันอีกครั้งฉันอาจจะไม่ได้นำรหัสฉบับพิมพ์มาให้สัมภาษณ์ที่หน้างานของฉัน (อาจนำหน้า 100 หน้าว่า "ROOKIE MISTAKE" เป็นตัวอักษรตัวใหญ่) ฉันได้รับการคบหาเต็มรูปแบบดังนั้นมันจึงไม่มากนัก คุณธรรม: มากเกินไป> = น้อยเกินไป
ชื่อ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.