ลักษณะนิสัยอะไรที่ทำให้โปรแกรมเมอร์โดดเด่นโดดเด่น? ที่มา:
Hackernoon อะไรแยกโปรแกรมเมอร์ที่ยอดเยี่ยมออกจากคนดี? ฉันค้นพบคุณลักษณะสองประการที่โปรแกรมเมอร์ผู้ยิ่งใหญ่มีเหมือนกัน คือ มีความสม่ำเสมอและต่อเนื่อง คุณลักษณะเหล่านี้ในตัวเองไม่ใช่สัญญาณของอัจฉริยะ และหากต้องการ ใครๆ ก็สามารถพัฒนาคุณลักษณะเหล่านี้แล้วนำไปใช้ในการทำงานได้
1. มีความสม่ำเสมอ โปรแกรมเมอร์ที่ดีไม่ได้เขียนโปรแกรมเป็นครั้งคราว แต่พวกเขามีตารางเวลาเฉพาะเพื่อพัฒนาความรู้และทักษะในช่วงเวลาว่าง ทั้งก่อนหรือหลังเลิกงานและวันหยุดสุดสัปดาห์ ตัวอย่างเช่น โปรแกรมเมอร์ที่ฉันรู้จักใช้เวลาสองชั่วโมงแรกของวัน — หกวันต่อสัปดาห์ — ในโครงการศึกษาส่วนตัวหรืองานต่างๆ นี่ไม่ได้เป็นการบอกว่าคนประเภทนี้เขียนโค้ดตลอดเวลา เช่นเดียวกับเราทุกคน พวกเขามีเวลาสำหรับชีวิตส่วนตัว ภาระผูกพัน และความสนใจ แต่มันก็สอดคล้องกัน: การเขียนโปรแกรมกลายเป็นนิสัยไปแล้ว คุณจะสม่ำเสมอได้อย่างไร? นี่คือสิ่งที่พวกเราหลายคนพยายามทำให้สำเร็จ ฉันพบว่ามีหลายวิธีในการทำเช่นนี้ ขั้นแรก ให้กำหนดจำนวนชั่วโมงต่อสัปดาห์ที่คุณสามารถเขียนโปรแกรมได้ หมายเลขนี้คือ "ไมล์สะสมของโปรแกรม" รายสัปดาห์ของคุณ ในฐานะอดีตนักวิ่งระยะไกล ฉันวิ่งเป็นจำนวนไมล์ในแต่ละสัปดาห์ นี่คือการวิ่งประจำสัปดาห์ของฉัน ตอนนี้ฉันมีประสบการณ์การเขียนโปรแกรมแล้ว นี่คือจำนวนชั่วโมงที่ฉันใช้เขียนโปรแกรมในแต่ละสัปดาห์ คนส่วนใหญ่ละเลยขั้นตอนนี้ พวกเขาตรงไปที่โครงการที่ต้องการทำให้เสร็จหรือหัวข้อที่ต้องการศึกษา โดยไม่คิดว่าจะหาเวลาทำได้อย่างไร ส่งผลให้พวกเขาทำงานตอนกลางคืนหรือ 16 ชั่วโมงต่อวัน แนวทางนี้มีปัญหา: มันไม่ยั่งยืนในระยะยาว การฝึกฝนทักษะของคุณในฐานะโปรแกรมเมอร์ไม่ใช่สิ่งที่คุณทำในช่วงสัปดาห์หรือสองสัปดาห์ที่ยุ่งวุ่นวาย แต่คุณต้องทำงานอย่างต่อเนื่องเป็นเวลานาน ด้วยเหตุนี้การระบุประสบการณ์การเขียนโปรแกรมของคุณจึงเป็นเรื่องสำคัญมาก ในการทำเช่นนี้ ให้ลองใช้บันทึกเวลาเพื่อดูว่าคุณใช้เวลาไปที่ไหนและอย่างไร หยิบกระดาษแผ่นหนึ่งแล้วจดทุกสิ่งที่คุณทำทุกวันและระยะเวลาที่ทำ รวมทั้งตรวจสอบโซเชียลมีเดียหรืออีเมลเป็นเวลาห้านาที วิธีนี้จะช่วยให้คุณค้นหาช่องว่างในกำหนดการของคุณได้ง่ายขึ้น คุณอาจจะมีเวลาเพิ่มเติมเล็กน้อยในการทำงานบ้านหรือดูทีวี จากนั้นคุณสามารถสร้างแผนการฝึกอบรมการเขียนโปรแกรมที่คุณต้องปฏิบัติตามได้ แผนการฝึกอบรมเป็นวิธีที่มีประสิทธิภาพมากที่สุดวิธีหนึ่งในการรักษาความสม่ำเสมอ ช่วยให้คุณกระจายรายละเอียดทั้งหมดล่วงหน้า สิ่งที่คุณต้องทำคือนำแผนนี้ไปใช้จริงทุกวัน แผนการฝึกวิ่งของฉันสรุปว่าฉันต้องวิ่งกี่ไมล์ในแต่ละวันและเร็วแค่ไหนในการวิ่ง ตอนนี้ฉันสร้างแผนการออกกำลังกายแบบตั้งโปรแกรมที่มีจุดประสงค์เดียวกัน โดยจะบอกฉันว่าฉันต้องทำอะไรในแต่ละวัน เมื่อสิ้นสุดวัน ฉันเปิด Evernote บนคอมพิวเตอร์และจัดตารางเวลาสำหรับวันถัดไป นี่คือตัวอย่าง:
6:30 น. - 8:30 น. - การเขียนโปรแกรม
บทวิจารณ์สำรับแฟลชการ์ด Python Anki (20 นาที)
การแก้ปัญหาข้อมูล Word Cloud
ฉันปฏิบัติตามกระบวนการนี้ตลอดทั้งวันทำงาน: ฉันกำหนดระยะเวลาที่ฉันจะใช้กับงานและสิ่งที่ฉันอยากจะทำให้สำเร็จในเวลานั้น ฉันยังสร้างแผนการฝึกอบรมรายเดือนด้วย ในนั้น ฉันรวมสามสิ่งที่ฉันอยากทำ เรียนรู้ หรือทำให้สำเร็จในเดือนหน้า ฉันเคยจัดทำแผนรายไตรมาส แต่แล้วฉันก็ค้นพบว่าสิ่งที่มากเกินไปสามารถเปลี่ยนแปลงได้ภายในสามเดือน แผนรายเดือนจะช่วยให้มีเวลาเพียงพอในการดำเนินการตามขั้นตอนสำคัญในการฝึกอบรม
2. มีความมุ่งมั่น คุณลักษณะที่สองของโปรแกรมเมอร์ที่ดีคือความพากเพียร พวกเขาทำงานผ่านตัวเลือกทั้งหมดสำหรับการแก้ปัญหาและค้นหาคำตอบ นี่ดูเหมือนจะเป็นความลับ โปรแกรมเมอร์ผู้ยิ่งใหญ่ที่ฉันพบมีความสามารถที่แปลกประหลาดในการแยกแยะปัญหาและคิดวิธีแก้ปัญหาที่แตกต่างกันสำหรับสถานการณ์ที่ยากลำบาก สรุปก็คือมีระบบในการแก้ปัญหา ฉันไม่เคยมีระบบการแก้ปัญหาในโรงเรียนมัธยม เมื่อไรก็ตามที่ฉันเจอปัญหาในชั้นเรียนคณิตศาสตร์ ฉันจะพุ่งตรงไปที่ปัญหานั้นเต็มสปีด จากนั้นฉันก็ทำสิ่งนี้ต่อไปเมื่อเริ่มเขียนโปรแกรม ไม่มีแผน. ไม่มีระบบ. ไม่มีเวลาคิด ไม่มีการวิเคราะห์ ไม่น่าแปลกใจเลยที่ทั้งสองกรณีฉันหมุนล้อโดยไม่จำเป็นและวิ่งชนสิ่งกีดขวางอยู่ตลอดเวลา ตอนนี้ฉันมีระบบการแก้ปัญหาที่ช่วยให้ฉันแยกแยะปัญหาเพื่อค้นหาตัวเลือกต่างๆ ตัวอย่างเช่น ขั้นตอนแรกในกระบวนการแก้ไขปัญหาของฉันคือการระบุปัญหา นี่เป็นครั้งแรก เมื่อฉันเข้าใจปัญหาแล้ว ฉันจะมุ่งเน้นไปที่แต่ละขั้นตอนต่อไปนี้
การวิเคราะห์ข้อมูลอินพุตและผลลัพธ์ที่คาดหวัง
การสร้างอัลกอริธึมการดำเนินการ
การเขียนรหัสเทียม
การแก้ปัญหาเวอร์ชันที่เรียบง่าย
หวังว่าคุณจะได้รับความคิด ขั้นตอนอาจไม่ง่ายแต่สามารถจัดการได้ ด้วยการแก้ปัญหายากๆ เราจะเป็นคนที่ดีขึ้น ยังสร้างความมั่นใจอีกด้วย เมื่อเราแก้ปัญหายากๆ หนึ่งได้ เราก็พร้อมสำหรับปัญหาใหม่
3. ทัศนคติต่อปัญหา? บนเส้นทางสู่การเป็นโปรแกรมเมอร์ที่ดีขึ้น ยังมีอีกสิ่งหนึ่งที่เราต้องพิจารณา นั่นก็คือ ทัศนคติ คุณต้องมีแนวทางใหม่ในการแก้ไขปัญหาและความคลุมเครือ วันหนึ่งฉันถามคำถามกับนักพัฒนาอาวุโสเกี่ยวกับปัญหาที่ฉันติดอยู่ ฉันสับสนและผิดหวัง ตอนแรกผู้พัฒนาก็งงเหมือนกัน อย่างไรก็ตาม คำตอบของเขาทำให้ฉันตกใจ “ว้าว นั่นเป็นปัญหาที่ยอดเยี่ยม” เขากล่าว ความสนใจของเขาป่องๆ ด้วยรายละเอียดที่เขาค้นพบ ไม่ได้หมายความว่าโปรแกรมเมอร์ที่ยอดเยี่ยมจะไม่มีปัญหาเช่นกัน พวกเขาติดขัด แต่ความแตกต่างอยู่ที่ทัศนคติ บทเรียนที่ฉันเรียนรู้ในวันนั้นคือ: โปรแกรมเมอร์ที่ดีไม่กลัวที่จะเสี่ยงกับสิ่งที่ไม่รู้จัก พวกเขาเข้าใจว่าพวกเขาจะเรียนรู้สิ่งใหม่อย่างแน่นอนจากการศึกษาปัญหานี้ เราสามารถเรียนรู้ได้มากมายจากการศึกษาโปรแกรมเมอร์คนอื่นๆ แต่ท้ายที่สุดแล้วความรับผิดชอบก็อยู่กับเรา: เราต้องทำงานทุกวันและดำเนินการ
คู่มือการเขียนโปรแกรมอย่างง่าย: ฟังก์ชันและวิธีการ ที่มา:
DZone อะไรทำให้ฟังก์ชั่นหรือวิธีการที่ดี? ซึ่งต้องใช้ปัจจัยหลายอย่างรวมกัน ซึ่งแต่ละปัจจัยมีความสำคัญ ลองดูสี่สิ่งที่สำคัญที่สุด
ชื่อที่มีความหมาย ฟังก์ชันควรมีชื่อที่อธิบายวัตถุประสงค์หรือฟังก์ชันการทำงาน เมื่อฟังก์ชันมีชื่อที่มีความหมาย ก็จะง่ายต่อการอ่านและเข้าใจวัตถุประสงค์ของฟังก์ชัน ตัวอย่างเช่น หากจุดประสงค์ของฟังก์ชันนี้คือการค้นหาลูกค้าด้วย ID ชื่อที่ดีอาจเป็น
findCustomerById(id: String ) ตัวเลือกอื่นอาจเป็น
findCustomer(id: String ) ที่นี่ลายเซ็นของฟังก์ชันบอกเป็นนัยว่าพบผู้ซื้อด้วย ID ของเขา คำว่า "ค้นหา" ยังหมายถึงว่าผู้ซื้ออาจพบหรือไม่พบก็ได้ หากเปลี่ยนชื่อฟังก์ชันเป็น
getCustomer(id: String) ความหมายของมันจะเปลี่ยนไปเนื่องจากตอนนี้ไม่มีการย้อนกลับ พบไคลเอ็นต์หรือฟังก์ชันล้มเหลวและอาจส่งข้อยกเว้น ชื่อทั้งสองเป็นชื่อที่ถูกต้องสำหรับฟังก์ชัน แต่มีความหมายต่างกัน ดังนั้นการใช้งานจึงต้องแตกต่างกันด้วย
พารามิเตอร์น้อยที่สุด ฉันชอบที่จะปฏิบัติตามกฎสามข้อ ซึ่งหมายความว่าฟังก์ชันจะต้องมีพารามิเตอร์สามตัวหรือน้อยกว่า เมื่อฟังก์ชันต้องการพารามิเตอร์มากกว่า 3 ตัว ควรเขียนใหม่และวางพารามิเตอร์ไว้ในที่เก็บข้อมูล เช่น คลาส คลาสข้อมูล วัตถุ JavaScript เป็นต้น นี่เป็นวิธีง่ายๆ ในการลดจำนวนพารามิเตอร์และจัดระเบียบข้อมูลภายในแอปพลิเคชัน ยกตัวอย่างฟังก์ชันที่มีพฤติกรรมเหมือนกัน แต่มีลายเซ็นต่างกัน:
fun addCustomer (
firstname: String ,
lastname: String ,
streetAddress: String ,
city: String ,
zipCode: String
)
นี่เป็นอีกทางเลือกหนึ่ง:
data class Address (
val street: String ,
val city: String ,
val zipCode: String ,
val streetNumber: String
)
data class Customer (
val firstname: String ,
val lastname: String ,
val address: Address
)
fun addCustomer ( customer: Customer )
ฟังก์ชันทำสิ่งที่คาดหวัง ฟังก์ชั่นต้องทำสิ่งที่คาดหวังจากมัน ไม่มากไม่น้อย. หากฟังก์ชันชื่อ
findAddress(ละติจูด, ลองจิจูด) ควรค้นหาที่อยู่ในพิกัดที่กำหนด หรือหากไม่สามารถแปลงที่อยู่เป็นพิกัด ให้ส่งคืน
None ,
null ,
Empty หรืออะไรก็ตามที่เป็นประเภทที่เหมาะสมสำหรับภาษาที่กำหนด ฟังก์ชันนี้ไม่ควรดำเนินการอย่างอื่น เช่น ค้นหาที่อยู่ใกล้เคียงหรือสร้างบันทึกพิกัด ฟังก์ชันอาจมีผลข้างเคียง เช่น การบันทึกหรือการวิเคราะห์ แต่สิ่งเหล่านี้จะมองไม่เห็นสำหรับอินพุตและเอาต์พุต
สามารถทดสอบฟังก์ชันได้ คุณสมบัติต้องได้รับการออกแบบเพื่อให้สามารถทดสอบได้ ในตัวอย่างโค้ดก่อนหน้านี้ ฉันกำหนด ฟังก์ชัน
addCustomer แล้ว แต่ฉันไม่ได้กำหนดประเภทการคืนสินค้าใดๆ เลย ความสามารถในการทดสอบจึงเป็นที่น่าสงสัย แน่นอนว่าสามารถทดสอบได้โดยใช้โปรแกรมจำลองหรือสายลับ ขึ้นอยู่กับว่าการใช้งานภายในเป็นอย่างไร ซึ่งสามารถทำได้โดยเพียงแค่ระบุประเภทการส่งคืน:
fun addCustomer ( customer: Customer ) : Customer
ด้วยลายเซ็นฟังก์ชันนี้ เราสามารถส่งคืนเอนทิตีไคลเอนต์ที่เพิ่มไปยังส่วนประกอบที่เรียกว่าได้ นอกจากนี้เรายังสามารถตรวจสอบได้ว่าฟังก์ชันทำสิ่งที่ควรทำกับออบเจ็กต์ไคลเอนต์นี้หรือไม่ (นั่นคือ กำหนดตัวระบุเฉพาะให้กับมัน)
GO TO FULL VERSION