ฉันจะไปจากการเขียนโค้ดเพื่อเป็นนักพัฒนาที่ดีได้อย่างไร


10

ฉันรู้สึกผิดหวังที่ไม่มีคำอธิบายที่เป็นรูปธรรมเกี่ยวกับวิธีการที่จะสามารถเขียนสคริปต์ (bash, awk) และเขียนแอปพลิเคชันง่าย ๆ (c, php, python) ไปจนถึงการออกแบบและพัฒนาซอฟต์แวร์ที่มีขนาดใหญ่และซับซ้อนมากขึ้น ดูเหมือนว่าในอีกด้านหนึ่งมีหนังสือภาษาโปรแกรมและอีกด้านหนึ่งมีหนังสือวิศวกรรมซอฟต์แวร์ / การจัดการโครงการที่ออกแบบมาสำหรับทีมโปรแกรมเมอร์

ฉันได้อ่านทั้งสองอย่างมากมาย ฉันได้อ่านคลาสสิก XP / Agile และมีความเข้าใจทางทฤษฎีที่ดีเกี่ยวกับกระบวนการพัฒนาซอฟต์แวร์ ฉันชอบอ่านรหัสของคนอื่นและสามารถทำตามได้ค่อนข้างดี แต่เมื่อฉันมีความคิดเกี่ยวกับโครงการหรือต้องการเปลี่ยนจาก "นี่คือปัญหา / ต้องการ" ถึง "นี่คือทางออก" ใจของฉันวาดหน้าเปล่าและไม่รู้ว่าจะเริ่มต้นตรงไหน

ฉันเพิ่งแฮ็คมันออกมา? มีเวิร์กโฟลว์ที่มีโครงสร้างสำหรับนักพัฒนาแต่ละคนที่ไม่ได้ทำงานเป็นทีมหรือเป็นบ้านซอฟต์แวร์ขนาดใหญ่หรือไม่? ฉันไม่มีความปรารถนาที่จะได้รับ PMP หรือทำงานให้กับ บริษัท ซอฟต์แวร์ ฉันแค่มองหาเวิร์กโฟลว์ที่มีประสิทธิภาพประสิทธิผลและใช้งานได้จริง


2
ประสบการณ์เป็นครูที่ดี
เบอร์นาร์ด

ซอฟต์แวร์ที่มีขนาดใหญ่และซับซ้อนมากขึ้นไม่ใช่แค่การรวบรวมซอฟต์แวร์ที่ใช้งานง่ายขึ้นไปข้างหน้าใช่หรือไม่
Rig

5
"เพราะสิ่งที่สำคัญที่สุดเกี่ยวกับศิลปะคือการทำงานไม่มีอะไรสำคัญนอกจากนั่งลงทุกวันและพยายาม" - Steven Pressfield
Ryan Kinal

แบบเดียวกับที่คุณไป Carnegie Hall ...
Michael Brown

1
เช่นเดียวกับที่คุณไปที่ Carnegie Hall - ฝึกฝน!
Martin Beckett

คำตอบ:


11

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

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

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

  • ทำให้ทุกอย่างเป็นแบบทดสอบได้สิ่งนี้จะทำให้ชีวิตของคุณง่ายขึ้นมาก
  • คุณไม่สามารถคาดหวังได้ว่าจะมีการออกแบบที่สมบูรณ์แบบและสามารถออกแบบแอพพลิเคชั่นระดับองค์กร / ชื่อเกมที่ใหญ่ที่สุด / แทรกเพิ่มเติมได้ที่นี่โดยไม่ต้องมีประสบการณ์ในการทำเช่นนั้น
  • เป็นการยากที่จะออกแบบซอฟต์แวร์ที่ดีถ้าคุณไม่เคยมีประสบการณ์ในการทำเช่นนั้นและเรียนรู้จากผู้อื่น
  • คุณจะไม่มีการออกแบบที่สมบูรณ์แบบในครั้งแรกแม้ในฐานะนักพัฒนาที่มีประสบการณ์ - สิ่งต่าง ๆ จึงเปลี่ยนไป การออกแบบของคุณอาจเกินไป;
  • เขียนสิ่งต่างๆลงไป: การเขียน / การวาดภาพ / ไวท์บอร์ด / การวาดภาพ / อะไรก็ตามที่คุณรู้สึกสะดวกสบายมันจะทำให้ชีวิตง่ายขึ้นถ้าคุณมีสิ่งที่เขียนลงไป เช่นการออกแบบ GUI, ไดอะแกรมของชั้นเรียนเป็นต้นจากประสบการณ์ของฉันเพียงแค่ไปที่ "แฮ็คบางสิ่งร่วมกัน" มีโอกาสที่จะล้มเหลวอย่างรุนแรง
  • อย่าประดิษฐ์ล้อขึ้นมาใหม่คุณไม่จำเป็นต้องทำ หากคุณกำลังพยายามใช้ HashMap ของคุณเองคุณอาจทำสิ่งผิดปกติ ค้นคว้าข้อมูลและคิดก่อนเขียนโค้ด

หวังว่าบางอย่างที่ช่วย


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

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

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

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

5

ดีในความคิดของฉันเป็นในอาชีพใดที่จะเป็นมืออาชีพที่ดีทุกสิ่งที่จะ - นอกเหนือจากการสร้างทฤษฎี - เป็นประสบการณ์

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

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

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

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

อย่างไรก็ตามผมคิดว่ามีไม่ได้เป็นทางลัดไปยังได้รับประสบการณ์และจะต้องมีการดำเนินการอย่างมีระเบียบวินัยและความอดทน


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

4

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

และอย่ากลัวที่จะแฮ็กข้อมูล มีการพัฒนาใหม่ ๆ มากมายโดยการปรับแต่ง (หรือเขียนใหม่) อย่างรวดเร็วและสกปรกต้นแบบ ไปข้างหน้าและใช้ทุกการปฏิบัติที่เลวร้ายที่สุดและ antipattern ในหนังสือเพียงแค่เหวี่ยงสิ่งที่คุณต้องการ จากนั้นย้อนกลับและออกแบบอย่างถูกต้อง โดยปกติแล้วฉันคิดว่าตัวเองกำลังคิดว่า "คุณรู้วิธีที่ดีกว่าในการทำเช่นนี้คือ ... " ในขณะที่ฉันเข้ารหัสพารามิเตอร์การกำหนดค่าบางอย่างใน 800- บรรทัดสามขั้นตอนที่น่าประหลาดใจ

ฉันรู้ว่ามันไม่ทันสมัย ​​แต่เทคนิคของการวิเคราะห์เชิงโครงสร้างช่วยให้ฉันได้รับการออกแบบซอฟต์แวร์อย่างแท้จริง เล่นกับการสร้างแผนภูมิฟองสองสามฟองและ DFD เพื่อทำความเข้าใจกับปัญหาการย่อยสลายและออกแบบส่วนต่าง ๆ ของระบบเพื่อทำงานร่วมกัน


2

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


1

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

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

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

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

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

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


0

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

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

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


0

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

ในขั้นต้นคุณควรลงเอยด้วยการทำตามวิธีการทางวิทยาศาสตร์

  1. คุณมีปัญหา (ใช้เครื่องมือและเทคนิคเพื่อช่วยกำหนดสิ่งนี้)
  2. คุณตั้งสมมติฐานวิธีแก้ปัญหา (รูปแบบและประสบการณ์ช่วยเหลือ)
  3. ทดสอบสมมติฐาน (คุณอาจไม่มีรหัสที่นี่)
  4. ทำซ้ำขั้นตอนที่ 2 และ 3 จนกระทั่งมีสมมติฐาน ตอนนี้คุณมีทฤษฎี (โปรแกรมทำงานเพื่อแก้ปัญหา)
  5. พัฒนาการทดลองเกี่ยวกับทฤษฎีความเครียดโดยมองหาหลุม (กรณีทดสอบ!)
  6. หากกรณีทดสอบค้างไว้คุณมีทางออก! มิฉะนั้นล้างและทำซ้ำ

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

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

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