อาชีพ

วิธีคิดอย่างโปรแกรมเมอร์เมื่อแก้ปัญหา

วิธีคิดอย่างโปรแกรมเมอร์เมื่อแก้ปัญหา


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

คุณต้องการเรียนรู้การแก้ปัญหาเหมือนโปรแกรมเมอร์คอมพิวเตอร์หรือไม่? ถ้าอย่างนั้นคุณมาถูกที่แล้ว

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

อย่างน้อยก็ในทางทฤษฎี

ที่เกี่ยวข้อง: 9 รายชื่อโปรแกรมเมอร์ที่ตลกที่สุดตอนนี้

การแก้ปัญหาในการเขียนโปรแกรมคืออะไร?

ก่อนที่เราจะเริ่มต้นอาจเป็นการดีที่จะเข้าใจว่าการแก้ปัญหามีแนวโน้มที่จะหมายถึงอะไรสำหรับโปรแกรมเมอร์

ตามที่ School of Computing ที่มหาวิทยาลัยยูทาห์มักกำหนดให้เป็น:

"การแก้ปัญหา [คือ] การแก้ปัญหาเป็นหัวใจสำคัญของวิทยาการคอมพิวเตอร์โปรแกรมเมอร์ต้องเข้าใจก่อนว่ามนุษย์แก้ปัญหาอย่างไรจากนั้นจึงเข้าใจวิธีแปล 'อัลกอริทึม' นี้เป็นสิ่งที่คอมพิวเตอร์ทำได้และสุดท้ายจะ" เขียน "อย่างไร ไวยากรณ์เฉพาะ (ที่คอมพิวเตอร์ต้องการ) เพื่อให้งานสำเร็จ "

ฟังดูเรียบง่าย แต่ในขณะที่คุณกำลังจะพบว่าแท้จริงแล้วมันเป็น "ศิลปะ" มากกว่าวิทยาศาสตร์ (ในระดับหนึ่ง)

ยึดมั่นในแน่น...

คุณคิดเหมือนโปรแกรมเมอร์ได้อย่างไร?

สตีฟจ็อบส์มีชื่อเสียงกล่าวว่า "ทุกคนในประเทศนี้ควรเรียนรู้การเขียนโปรแกรมคอมพิวเตอร์เพราะมันสอนให้คุณคิด" นี่เป็นข้อความที่ทรงพลังมากและไม่ได้แปลว่าคุณต้องเป็น Ada Lovelace, Steve Wozniak หรือ Bill Gates คนต่อไป

การพัฒนา "ทักษะที่นุ่มนวล" หรือ "ทักษะเมตา" เช่นการเรียนรู้วิธีคิดอย่างชัดเจนและมีวิจารณญาณจะจ่ายเงินปันผลในหลาย ๆ ด้านในชีวิตของคุณ

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

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

“ ทักษะในการแก้ปัญหาแทบจะเป็นคุณสมบัติที่สำคัญที่สุดที่นายจ้างมองหา…. มากกว่าความสามารถด้านภาษาโปรแกรมการดีบักและการออกแบบระบบ

การแสดงให้เห็นถึงความคิดเชิงคำนวณหรือความสามารถในการแยกปัญหาใหญ่ ๆ ที่ซับซ้อนนั้นมีค่าพอ ๆ กับทักษะทางเทคนิคพื้นฐานที่จำเป็นสำหรับงานหนึ่ง ๆ ” - อันดับแฮ็กเกอร์

คุณจะพัฒนาทักษะดังกล่าวได้อย่างไร? วิธีหนึ่งคือพยายามคิดเหมือนโปรแกรมเมอร์

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

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

1. พยายามแก้ปัญหา

2. หากไม่ได้ผลให้ลองใช้วิธีอื่น

3. หากยังไม่สำเร็จให้ล้างและทำซ้ำขั้นตอนที่ 2 จนกว่าคุณจะพบสิ่งที่ใช้ได้ (อาจจะเป็นเพราะโชคช่วย)

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

โปรแกรมเมอร์เป็นผู้เชี่ยวชาญในวิธีการที่ละเอียดกว่าและมีประสิทธิภาพในการทำเช่นนี้ผ่านการวางแผนทำตรวจสอบดำเนินกลยุทธ์ สิ่งนี้เกี่ยวข้องกับผล:

1. มีกรอบแนวทางในการแก้ไขปัญหา

2. ฝึกฝนเรียนรู้จากข้อผิดพลาดทบทวนและปรับปรุงจนกว่าคุณจะเชี่ยวชาญ

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

ฉันจะพัฒนาทักษะการแก้ปัญหาการเขียนโปรแกรมและพัฒนาความคิดของโปรแกรมเมอร์ได้อย่างไร

ดังที่เราได้กล่าวไปแล้ววิธีที่ดีที่สุดคือการพัฒนากรอบเพื่อแก้ปัญหาจากนั้นฝึกฝนฝึกฝนฝึกฝน แต่การมีกรอบในการแก้ปัญหาหมายความว่าอย่างไร?

มีห้องสมุดมากมายในเฉพาะเรื่องนี้ แต่โดยพื้นฐานแล้วกรอบการแก้ปัญหาจะมีส่วนประกอบหลักบางส่วนหากไม่ใช่ทั้งหมด:

1. แจกแจงทำความเข้าใจปัญหาในมือ

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

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

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

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

2. ล้มเหลวในการวางแผนกำลังวางแผนที่จะล้มเหลว (จัดทำแผนและแยกปัญหาใหญ่ออกเป็นปัญหาเล็ก ๆ )

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

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

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

นี่คือความคิดของโปรแกรมเมอร์

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

นี่เป็นสิ่งสำคัญสำหรับโปรแกรมเมอร์เนื่องจากต้องพัฒนารูทีนย่อยฟังก์ชันเมธอดและโพรซีเดอร์และโค้ดขนาดเล็กอื่น ๆ ที่ต้องทำงานโดยรวม

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

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

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

แต่เราพูดนอกเรื่อง

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

“ ถ้าฉันสามารถสอนทักษะการแก้ปัญหาให้กับโปรแกรมเมอร์ระดับเริ่มต้นทุกคนได้ก็จะเป็น ‘เทคนิคลดปัญหา’ ...

ลดปัญหาให้ถึงจุดที่คุณรู้วิธีแก้และเขียนวิธีแก้ปัญหา จากนั้นขยายปัญหาเล็กน้อยและเขียนวิธีการแก้ปัญหาใหม่ให้เข้ากันและดำเนินการต่อไปจนกว่าคุณจะกลับมาที่จุดเริ่มต้น "- V. Anton Spraul

3. "อยู่ในเป้าหมาย" คุณสามารถและจะติดขัดในบางครั้ง

“ แผนการที่วางไว้อย่างดีที่สุดของหนูและผู้ชายมักจะผิดพลาด” ดังที่โรเบิร์ตเบิร์นส์กล่าว ไม่ต้องกังวลนี่เป็นสิ่งที่คาดหวังและมักจะสวมกอด

แต่คุณจะทำอย่างไรเมื่อแก้ปัญหาไม่ได้โดยเฉพาะอย่างยิ่งเมื่อเขียนโปรแกรม?

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

ไม่ต้องพูดถึงความมุ่งมั่นที่จะแก้ไข

เมื่อพวกเขาครอบตัดโปรแกรมเมอร์มักจะเริ่มต้นกระบวนการซึ่งเป็นหน้าที่ทางจิตหากคุณต้องการสิ่งต่อไปนี้:

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

4. ฝึกฝนทำให้สมบูรณ์แบบ

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

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

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

และที่สำคัญที่สุดคืออย่ากลัวความล้มเหลว คุณจะได้เรียนรู้มากขึ้นจากจุดที่คุณทำเลอะเทอะมากกว่าที่คุณเคยทำจากที่ที่คุณประสบความสำเร็จ เรียนรู้ที่จะล้มเหลวและล้มเหลวอย่างรวดเร็ว!

และนั่นคือห่อ เส้นทางสู่การแก้ปัญหาในฐานะโปรแกรมเมอร์รออยู่!

ขอให้โชคดีนักเดินทาง