เขียนแนวทางแก้ไขปัญหาของฉันลงบนกระดาษ? [ปิด]


55

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

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

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

แก้ไข: ขออภัยที่ไม่ชัดเจน แต่เมื่อฉันพูดว่าเขียนบนกระดาษฉันหมายถึงวิธีการแก้ปัญหาของฉัน (เช่นการเขียนตัวอย่างการสร้างตารางที่มีค่า ฯลฯ ) ไม่ใช่รหัสจริงของฉัน ฉันแค่ใช้กระดาษเพื่อทำให้ความคิดของฉันออกมา


28
ฉันไม่สามารถเห็นสิ่งผิดปกติในการคิดผ่านปัญหาบนกระดาษก่อน
Julien Guertault


34
บุคคลนั้นผิด ส่วนใหญ่ใช้ชวเลขอย่าง UML หรือ pseudocode block แต่วิธีใดก็ตามที่คุณใช้ต้องทำงานเหมือนที่ใจคุณทำงานและต้องการกระดาษ =) ฉันคิดว่าไฟน์แมนไม่ควรเป็นนักฟิสิกส์เพราะเขาเขียนสมการบนกระดานดำใช่ไหม?
Patrick Hughes

10
ความท้าทายสำหรับคุณมักจะเรียนรู้ที่จะทำสิ่งต่าง ๆ บนกระดาษในขณะที่คุณอยู่ในห้องแล็บ วิศวกรและนักวิทยาศาสตร์มักใช้สมุดบันทึกกระดาษสำหรับสิ่งนี้ (และเป็นทางกระดาษ) และฉันสงสัยอยู่เสมอว่าทำไมคนไอทีจำนวนมากจึงไม่ชอบวิธีการนี้ ฉันเป็นวิศวกรที่ใช้รหัสอาชีพในการเขียนและใช้สมุดบันทึกกระดาษตลอดเวลา
Móż

4
@ ott-- ฉันและเพื่อนร่วมงานทุกคนใช้ปากกากับสมุดบันทึก สำหรับฉันอย่างน้อยมันเป็นเคล็ดลับที่ดีที่ฉันเรียนรู้ในวิทยาลัยการไม่สามารถลบได้ช่วยบังคับให้ฉันต้องคิดให้ถี่ถ้วนยิ่งขึ้นดังนั้นฉันจึงไม่ต้องแพร่กระจายออกไปทั่วหน้าเพิ่มเติม นอกจากนี้สิ่งล่อใจที่จะเก็บทุกอย่างไว้ในหน้าเดียวและความสามารถในการลบทำให้มันง่ายเกินไปที่จะลบสิ่งที่คุณต้องการโดยไม่ตั้งใจ วิธีการที่ไม่ถูกต้องสามารถถูกขีดฆ่าไม่ใช่ลบดังนั้นคุณจึงมีตัวเตือนให้ทราบเกี่ยวกับสิ่งที่คุณลองและสิ่งที่ใช้ไม่ได้ กระดาษราคาถูกอย่าทำให้ตัวเองหนักขึ้น
Izkata

คำตอบ:


71

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

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

ตัวอย่างเช่นหากฉันลบองค์ประกอบออกจากกลางรายการที่เชื่อมโยงฉันอาจเริ่มต้นด้วยสิ่งต่อไปนี้:

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

จากนั้นฉันอาจแทนที่// find the elementด้วยฟังก์ชันที่มีรหัสเทียมเพิ่มเติมและดำเนินการต่อไปจนกว่าฉันจะมีโซลูชันที่สมบูรณ์ อย่าคิดว่าต้องเขียนโค้ดในลักษณะเชิงเส้น


คำแนะนำที่ดีคาร์ล
andy256

2
ฉันรวมวิธีการข้างต้นกับการแก้ปัญหาเป็ดยาง (ของฉันเป็นตุ๊กตา SuSE แต่) เพื่อทำงานที่ซับซ้อนที่สุดของฉัน ฉันยังมีกระดานไวท์บอร์ดที่หรูหราสำหรับเขียนสิ่งต่างๆมากมาย
เดโค

+1 การเขียนคำถามและคำตอบนั้นเป็นวิธีที่ฉันมักจะแก้ปัญหา มันบังคับให้ฉันมองหาหลุมพรางและ gotchas ในแผนของฉัน
Andy Hunt

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

1
จริง ๆ แล้วเทคนิคนี้มีชื่อ: กระบวนการการเขียนโปรแกรม Pseudocode
roufamatic

16

ไปเลย! ถ้าเราเรียกสิ่งที่คุณกำลังคิดและออกแบบวิธีแก้ปัญหาของคุณมันก็สมเหตุสมผลที่กระบวนการของคุณจะเร็วกว่าการทำลายโค้ด

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

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


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

6

ฉันไม่คิดว่ามีอะไรผิดปกติในการร่างรหัส (หลอกหรืออย่างอื่น) บนกระดาษก่อน - มันไม่ต่างไปจากการเขียนลงบนกระดานไวท์บอร์ดซึ่งผู้คนมากมายทำกันเมื่อพูดถึงวิธีการแก้ไขปัญหา

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

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


6

ฉันไม่ได้ใส่รหัสจริงลงบนกระดาษ แต่สำหรับสิ่งที่ไม่สำคัญฉันแทบจะเริ่มจากไวท์บอร์ดหรือโน้ตบุ๊ก ฉันมักจะร่างออก:

  • อัลกอริทึม / การไหลของกระบวนการ / การควบคุม
  • โครงสร้างข้อมูล
  • สัมพันธ์
  • ส่วนประกอบ (ฉันจะแยกปัญหานี้ออกได้อย่างไร)

มันมักจะเป็นการรวมกันของสเก็ตช์, ปลอมและภาษาอังกฤษ

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

การมอบสิ่งที่เป็นกระดาษเป็นความช่วยเหลืออย่างมากสำหรับการเก็บรักษาหน่วยความจำ สโลแกนสำหรับแบรนด์Field Notes ของโน้ตบุ๊กคือ:

ฉันไม่ได้เขียนมันลงไปเพื่อจดจำมันในภายหลังฉันจะเขียนมันลงไปเพื่อจดจำมันในตอนนี้

หลังจากใช้วิธีจดจ่อกับการจดสิ่งต่าง ๆ ลงบนกระดาษแม้ว่าฉันจะเข้ามาในแอพ ToDo บนโทรศัพท์ของฉันในเวลาต่อมาฉันก็พบว่าความคิดนั้นถูกยึดไว้ในหัวของฉันได้ดีกว่าการจดบันทึกอิเล็กทรอนิกส์ IOW โดยการวางแผนการเขียนโค้ดของฉันบนกระดาษ / ไวท์บอร์ดความคิดยังคงอยู่ในหัวของฉันได้ดีขึ้น

มันยังทำหน้าที่เป็นข้อมูลอ้างอิงที่มีประโยชน์เมื่อถึงเวลาบันทึกสิ่งที่ฉันเขียน


3

การแก้ปัญหาและการเขียนรหัสที่ใช้โซลูชันของคุณเป็นกิจกรรมที่แตกต่างกันสองกิจกรรม

หากคุณไม่คุ้นเคยกับภาษาคุณจะต้องใช้เวลากับโค้ดมาก - และไม่เพียงพอในการหาทางออกที่ดี ถ้ากระดาษไวท์บอร์ดหรือเริ่มที่เพดานช่วยคุณในเรื่องนั้นก็หมายความว่าทำได้

(โดยส่วนตัวแล้วฉันพบว่าตัวเองกำลังออกจากคอมพิวเตอร์และเดินไปรอบ ๆ ในแวดวงพยายามที่จะสร้างทางออกในใจของฉัน)


2

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

พ่อของฉันใช้กระดาษจำนวนมากเมื่อเขียนโปรแกรม COBOL ฉันคิดว่ามันเป็นแค่สไตล์ความคิดของคุณ


0

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


0

ไม่มีอะไรผิดปกติกับสิ่งที่คุณทำฉันเรียนรู้ที่จะเขียนโปรแกรมโดยใช้กระดาษและปากกาเช่นกัน

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

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

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

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


1
คำถามนี้ถามคำถามนี้อย่างไร
ริ้น

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

-1

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


-1

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


-2

ฉันยังประสบปัญหาเดียวกันในวันแรกของการเรียนรู้ทักษะทางเทคนิค

แต่การฝึกฝนประเภทนี้ไม่ควรให้ความสำเร็จ 100% เพราะถ้าเราเขียนโค้ดลงบนกระดาษแล้วไม่มีโอกาสแก้ไขข้อผิดพลาดมีโอกาสที่จะแก้ไขข้อผิดพลาดและข้อยกเว้นระหว่างการทำงานกระดาษ

ดังนั้นงานกระดาษไม่ได้ให้การนำทางใด ๆ เพื่อแก้ไขปัญหาและเราสามารถรับความเร็วในการพิมพ์เป็นโบนัสเนื่องจากการฝึกปฏิบัติของระบบ

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

โปรดลองใช้เวลามากขึ้นในการฝึกฝนระบบ สิ่งนี้จะให้ความมั่นใจและผล 100%

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