ฉันกำลังเตรียมตัวสำหรับ Google HashCode World Championship Finals 2017 นี่คือการแข่งขันที่ใหญ่ที่สุดที่มีปัญหาอัลกอริทึมซึ่งจัดโดย Google
ฉันเริ่มเรียน C++ ตั้งแต่เริ่มต้นตอนเกรด XNUMX ฉันไม่รู้อะไรเลยเกี่ยวกับการเขียนโปรแกรม อัลกอริธึม หรือโครงสร้างข้อมูล เมื่อถึงจุดหนึ่งฉันก็เขียนโค้ดบรรทัดแรก เจ็ดเดือนต่อมา การแข่งขันเขียนโปรแกรมก็ใกล้เข้ามาแล้ว ฉันอยากจะเห็นว่าสไตล์การเรียนรู้การเขียนโปรแกรมของฉันทำงานได้ดีแค่ไหน มันเป็นโอกาสที่สมบูรณ์แบบ
หลังจากการแข่งขันสองวัน ผลลัพธ์ก็มาถึง ฉันได้รับรางวัลเหรียญทอง
ฉันตกใจมาก ฉันนำหน้าคู่แข่งด้วยประสบการณ์ 5 ปี ฉันรู้ว่าฉันทำงานหนัก แต่ความสำเร็จนี้เกินความคาดหมายทั้งหมดของฉัน ฉันรู้ว่ารายการกีฬาเป็นหัวข้อของฉันและมุ่งความสนใจไปที่มัน
ฉันรู้ว่าอะไรทำให้ฉันประสบความสำเร็จและฉันต้องการแบ่งปันกับคุณ
บทความนี้ได้รับการแปลโดยได้รับการสนับสนุนจาก EDISON Software ซึ่งดูแลสุขภาพของโปรแกรมเมอร์และอาหารเช้าของพวกเขา และพัฒนาซอฟต์แวร์ที่กำหนดเอง .
เลือกภาษาโปรแกรมอะไร
- C++ - ขอแนะนำอย่างยิ่ง! เขาเร็วมาก การใช้อัลกอริทึมใช้เวลาเพียงเล็กน้อยเนื่องจาก STL ยอมรับ C++ ในทุกการแข่งขัน ฉันเขียนโค้ดบรรทัดแรกด้วยภาษา C++
- C - เรียนรู้ C ++ เพราะ STL ถ้าคุณรู้จัก C คุณก็เขียนโปรแกรมในภาษา C++ ได้เช่นกัน
- Java เป็นภาษาโปรแกรมที่ช้า มันมีคลาส Big Integer แต่มันจะไม่ช่วยอะไรคุณมากนัก หากการแข่งขันมีเวลาจำกัด ด้วย Java คุณจะเกินนั้นอย่างแน่นอน Java ไม่ได้รับการยอมรับในการแข่งขันทั้งหมด
ฝึกได้ที่ไหน.
ฉันแนะนำ
ขั้นแรก คุณต้องฝึกฝนความรู้พื้นฐานของคุณ
เมื่อคุณคุ้นเคยกับไวยากรณ์ของภาษาแล้ว ก็มีปัญหาบางประการที่ต้องแก้ไข เริ่มต้นด้วยปัญหาง่ายๆ ที่ต้องฝึกฝน ในขั้นตอนนี้ สิ่งสำคัญคือการกำหนดสไตล์การเขียนโปรแกรมของคุณ บางทีคุณอาจต้องการเขียนโค้ดที่มีช่องว่างมาก บางทีคุณอาจไม่ชอบ คุณอาจวางวงเล็บไว้ในบรรทัดเดียวกับ “if” หรืออาจแยกวงเล็บออกจากกัน
คุณต้องค้นหาสไตล์การเขียนโปรแกรมของคุณเพราะมันเป็นสไตล์ของคุณ
เมื่อคุณมองหามัน ให้จำหลักการพื้นฐานสองประการ:
- รหัสของคุณควรใช้งานง่าย คุณควรรู้สึกสบายใจที่จะนำโซลูชันที่คุณคิดขึ้นมาไปใช้ ทำไม เพราะในระหว่างการแข่งขัน สิ่งสุดท้ายที่คุณต้องการคือการหลงลืมรหัสของคุณ เป็นการดีกว่าเสมอที่จะใช้เวลาเพิ่มอีก 5 นาทีในการคิดถึงวิธีทำให้การใช้งานโค้ดง่ายขึ้น แทนที่จะใช้เวลา 10 นาทีในการพยายามคิดออก
- รหัสของคุณควรอ่านง่าย เมื่อโค้ดอ่านง่าย การดีบักก็ง่าย ยอมรับเถอะว่าข้อบกพร่องเกิดขึ้นตลอดเวลา คุณรู้ไหมถึงความรู้สึกนั้นเมื่อคุณเหลือเวลาอีก 10 นาทีและไม่พบข้อผิดพลาดร้ายแรง? แน่นอนคุณทำ เพื่อหลีกเลี่ยงสถานการณ์นี้ ให้เขียนโค้ดที่อ่านง่าย เมื่อคุณเริ่มแก้ไขโค้ดแล้ว โค้ดจะดูเป็นธรรมชาติและเข้าใจง่าย
วิธีการพัฒนาทักษะการพัฒนาของคุณ
ฝึกฝน ฝึกฝน และฝึกฝนให้มากขึ้น ฉันขอแนะนำให้คุณแก้ไขปัญหาที่แก้ไขได้มากที่สุด 250 อันดับแรก
อย่าพูดว่า: "ปัญหานี้ยากเกินไปสำหรับฉัน ฉันจะพยายามแก้ไขปัญหาต่อไป" นี่คือวิธีที่ผู้แพ้คิด
หยิบกระดาษและดินสอ ลองคิดดูสิ บางทีคุณอาจพบวิธีแก้ปัญหาบางทีอาจจะไม่ใช่ อย่างน้อยที่สุด คุณจะพัฒนาการคิดแบบอัลกอริทึม หากคุณไม่สามารถหาวิธีแก้ปัญหาได้ภายในหนึ่งชั่วโมง ให้มองหาวิธีแก้ปัญหาสำเร็จรูปในฟอรัมหรือในบทความ
คุณจะได้อะไรจากแนวทางนี้? เรียนรู้การนำแนวคิดของคุณไปใช้อย่างรวดเร็วโดยใช้โค้ด และศึกษาปัญหาและอัลกอริทึมแบบคลาสสิก
ประการที่สอง คุณต้องเชี่ยวชาญอัลกอริธึมและโครงสร้างข้อมูล
ปฏิบัติตามแนวทางแบบลำดับชั้น คุณเริ่มวิ่งโดยไม่รู้ว่าจะเดินอย่างไร? เลขที่ คุณสามารถสร้างตึกระฟ้าโดยไม่มีรากฐานที่มั่นคงได้หรือไม่? ไม่มีอีกครั้ง.
คุณไม่สามารถละเลยขั้นตอนต่างๆ ในเส้นทางการเรียนรู้ได้ หากคุณเพิกเฉย คุณจะเหลือช่องว่างความรู้ เมื่อเวลาผ่านไปพวกเขาจะแย่ลงเท่านั้น
เริ่มต้นด้วยอัลกอริธึมพื้นฐานและโครงสร้างข้อมูล
มันยากที่จะเริ่มต้น อาจเป็นเพราะไม่รู้ว่าจะเรียนอะไรก่อน นั่นเป็นเหตุผล
หากคุณพยายามแก้ไขปัญหาง่ายๆ คุณจะไม่มีวันพัฒนาเลย
วิธีที่มีประสิทธิภาพที่สุดในการทำความเข้าใจสิ่งที่คุณไม่รู้คือการสัมผัสกับมันในทางปฏิบัติ นั่นคือวิธีที่ฉันเรียนรู้ ฉันได้เรียนรู้เทคนิคใหม่ๆ มากมายที่ฉันไม่เคยได้ยินมาก่อนโดยการเลือกงานที่ท้าทาย
ทุกปัญหาที่สามที่คุณทำควรสอนอะไรใหม่ๆ ให้กับคุณ ระมัดระวังมากขึ้นเมื่อเลือกปัญหา เลือกปัญหาที่ยากขึ้น!
เมื่อคุณทำโจทย์ทั้ง 250 ข้อจาก SPOJ เสร็จแล้ว คุณจะมีความเข้าใจพื้นฐานเกี่ยวกับหัวข้อหลักของรายการกีฬา ด้วยความเข้าใจอย่างลึกซึ้งเกี่ยวกับตรรกะเบื้องหลังอัลกอริธึมพื้นฐาน อัลกอริธึมระดับสูงจะดูซับซ้อนน้อยลง ด้วยวิธีนี้คุณจะสามารถใช้ความรู้ให้เกิดประโยชน์สูงสุดได้
เจาะลึกเข้าไปในแต่ละธีมหลัก
หากคุณไม่เสริมความรู้หลังจากเรียนรู้สิ่งใหม่ คุณจะลืมทุกสิ่งอย่างรวดเร็ว
ฉันขอแนะนำว่าหลังจากที่คุณเรียนรู้อัลกอริทึมใหม่แล้ว ให้นำไปใช้ในทางปฏิบัติ ทำงานผ่าน 2-3 งาน ค้นหาแท็กอัลกอริทึมใน SPOJ คุณจะพบปัญหาที่ต้องใช้อัลกอริทึมนี้ในการแก้ไข แก้ไขปัญหาเหล่านี้ก่อน
การเขียนโปรแกรมไดนามิกระดับปรมาจารย์เพราะมันจะนำคุณไปสู่ชัยชนะ
จากประสบการณ์ของผม ทุกการแข่งขันย่อมมีปัญหาอย่างน้อยหนึ่งข้อ
และนี่เป็นสิ่งที่ดี เพราะถ้าคุณเข้าใจการเขียนโปรแกรมแบบไดนามิก คุณจะชนะ
ฉันชอบการเขียนโปรแกรมแบบไดนามิก มันเป็นหัวข้อโปรดของฉัน เคล็ดลับของการเขียนโปรแกรมแบบไดนามิกคือการตัดสินใจที่เหมาะสมที่สุดในระดับสากล ไม่ใช่แค่เฉพาะในท้องถิ่นเท่านั้น คุณต้องแยกปัญหาออกเป็นปัญหาย่อยที่ง่ายกว่า แก้ไขปัญหาย่อยแต่ละข้อเหล่านี้เพียงครั้งเดียว จากนั้นสร้างโซลูชันที่รวมปัญหาย่อยที่แก้ไขแล้วเข้าด้วยกัน
ในขณะที่เรียนรู้แนวคิดใหม่ๆ ให้ลองดู
ทำงานหนัก
คุณเคยได้ยินเกี่ยวกับนักกีฬาที่ชนะการแข่งขันกีฬาโอลิมปิกโดยไม่ต้องฝึกฝนนานหลายปีหรือไม่? ฉันไม่.
ทุกปี การเตรียมการสำหรับการแข่งขันคอมพิวเตอร์โอลิมปิกจะเริ่มในเดือนกันยายนและสิ้นสุดในเดือนเมษายน
ทุกวันตลอด 8 เดือนนี้ ฉันฝึกซ้อมเป็นเวลา 5 ชั่วโมง
ใช่ ฉันใช้เวลา 5 ชั่วโมงนี้เพียงแก้ปัญหาอัลกอริทึมเท่านั้น ฉันจำวันที่ฉันฝึกซ้อม 8 หรือ 10 ชั่วโมงได้ ทำไม เพราะฉันชอบมัน ทุกวันเมื่อฉันกลับจากโรงเรียน ฉันจะตรงไปที่ห้องนอน นั่งหน้าคอมพิวเตอร์ และเริ่มวิเคราะห์ปัญหาใหม่ หรือฉันกำลังเรียนรู้อัลกอริทึมใหม่ที่ฉันจำเป็นต้องรู้เพื่อแก้ไขปัญหานี้
หากคุณต้องการชนะคุณต้องทำเช่นเดียวกัน เลือกปัญหาและยึดติดกับมัน ลองคิดดูขณะเดินไปซุปเปอร์มาร์เก็ตหรือขณะขับรถ
คุณรู้ไหมว่าเมื่อคุณนอนหลับ สมองของคุณจะจัดเรียงข้อมูลที่รวบรวมในวันนั้น ดูเหมือนเขาจะวางหนังสือเรียงตามลำดับตัวอักษรบนชั้นหนังสือ โดยพื้นฐานแล้ว สมองของคุณคิดถึงปัญหาต่างๆ ที่คุณกำลังเผชิญอยู่
สามารถใช้ได้อย่างชำนาญ ก่อนเข้านอน ให้อ่านปัญหายากๆ และจำไว้ว่าต้องทำอย่างไรจึงจะแก้ปัญหาได้ ในขั้นตอนนี้ คุณไม่จำเป็นต้องมองหาวิธีแก้ปัญหาด้วยตนเอง ไปนอนซะ. สมองของคุณจะเริ่มประมวลผลปัญหานี้ เมื่อคุณตื่นขึ้น คุณจะประหลาดใจเมื่อพบว่าคุณพบวิธีแก้ปัญหาในขณะที่คุณหลับ
ลองด้วยตัวเอง มันเหมือนกับเวทมนตร์
ฉันสร้างบล็อกวิดีโอ
ย่อหน้าสั้นๆ นี้ไม่เกี่ยวข้องกับรายการกีฬา หากคุณอายุยี่สิบและสงสัยว่าฉันมองโลกอย่างไร คุณอาจต้องการลองดู
ทำงานอย่างชาญฉลาด
นี่คือความลับของความสำเร็จ คุณต้องมีเป้าหมาย
เราเป็นคนและเราชอบมัน
วิธีเอาชนะการผัดวันประกันพรุ่ง
ตั้งเป้าหมายให้ตัวเอง. คุณจะพบปัญหาที่น่าสนใจซึ่งคุณสามารถเรียนรู้สิ่งใหม่ๆ อยู่เสมอ (ตรวจสอบแหล่งข้อมูลที่ฉันกล่าวถึงข้างต้น) แต่ปัญหาเหล่านี้จำเป็นต้องแก้ไข ไม่ใช่แค่อ่านเฉยๆ
ต่อไปนี้คือวิธีที่ฉันเอาชนะการผัดวันประกันพรุ่ง ฉันเริ่มปฏิทินกระดาษและในแต่ละวันเต็มไปด้วยปัญหาที่ฉันต้องการแก้ไข ฉันมักจะกรอกปัญหาล่วงหน้าสองวันเสมอ ฉันจึงรู้จักบริหารเวลาในวันต่อๆ ไป
ดังนั้นฉันจึงมีแรงบันดาลใจอยู่เสมอ ฉันจำเป็นต้องแก้ไขปัญหาบางอย่างและค้นหาปัญหาใหม่เพื่อเติมเต็มในวันถัดไปในปฏิทิน การข้ามปัญหาที่ได้รับการแก้ไขแล้วรู้สึกดีมาก ฉันรู้ว่าคุณก็ชอบมันเช่นกัน
รับปฏิทินกระดาษของคุณเอง อย่าสร้างรายการสิ่งที่ต้องทำในโทรศัพท์ของคุณซึ่งคุณจะลืมวันพรุ่งนี้
วิธีแก้จุดบกพร่องอย่างมีประสิทธิภาพ
คุณต้องการที่จะเป็นมืออาชีพหรือไม่? ถ้าใช่ คุณต้อง "แก้ไขข้อบกพร่องในใจ"
นี่เป็นเทคนิคการดีบักที่มีประสิทธิภาพที่สุดที่ฉันรู้จัก เนื่องจากไม่จำเป็นต้องใช้ดีบักเกอร์เลย สมองของคุณจะตรวจสอบสาขาโค้ดหลายสาขาพร้อมกันและให้ภาพรวมของโค้ดที่กว้างกว่ามากเมื่อเทียบกับ
คุณสามารถเปรียบเทียบตัวเองกับปรมาจารย์ที่เล่นหมากรุกและคิดล่วงหน้า 3 ประการ
ฉันใช้เทคนิคนี้เป็นแนวป้องกันเริ่มต้นเท่านั้น จากนั้นฉันก็ใช้ดีบักเกอร์จริง
หากต้องการเรียนรู้วิธีแก้ไขจุดบกพร่องในหัว คุณต้องฝึกฝน เมื่อคุณตรวจสอบวิธีแก้ไขปัญหาและได้รับ "คำตอบที่ผิด" อย่าไปที่ปุ่มดีบักเกอร์โดยตรง อ่านโค้ดซ้ำแล้วคิดว่า: "เกิดอะไรขึ้นในบรรทัดนี้", "ถ้า" ที่นี่ส่งผลต่อโปรแกรมอย่างไร, "เมื่อเราออกจากลูป ค่าของตัววนซ้ำจะเป็นเท่าใด"
วิธีนี้คุณคิดไปเอง เมื่อเวลาผ่านไป คุณจะได้เรียนรู้การเขียนโค้ดและแก้ไขข้อบกพร่องได้ทันที
เกี่ยวกับผู้แต่ง
Andrei Margeloiu เป็นโปรแกรมเมอร์ตัวยงที่มีความสนใจในการเป็นผู้ประกอบการ สตาร์ทอัพ และกิจกรรมกลางแจ้ง คุณสามารถติดต่อเขาได้
การแปล: ไดอาน่า เชเรเมียวา
ที่มา: will.com