การจัดการกับรหัสดั้งเดิมช่วยให้วิวัฒนาการเป็นโปรแกรมเมอร์หรือไม่? [ปิด]


18

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

คุณจะพิจารณาเกี่ยวกับแนวทางปฏิบัติที่ดีสำหรับผู้เริ่มต้นหรือไม่?


อาจเป็นไปได้ซ้ำซ้อนกับการเป็น "ผู้พัฒนาบำรุงรักษา"
gnat

1
การเรียนรู้จากความผิดพลาดของคนอื่นเป็นวิธีที่ปลอดภัยที่สุดที่จะได้รับประสบการณ์ ...
Michael Borgwardt

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

มีจาวาที่ดี แต่หาได้ยากกว่าสำหรับ jr dev กว่า devs ของภูมิหลังภาษาเริ่มต้นอื่น ๆ ส่วนใหญ่ฉันจะจินตนาการตามประสบการณ์ซึ่งโดยทั่วไปแล้วในฐานะนักพัฒนาเว็บส่วนหน้าผู้ใช้งานทั่วไปก็หายไปซึ่งได้รับการสัมผัสกับปลายด้านหลังที่หลากหลาย ปัญหาที่ฉันคิดว่าคือ Java ภาษานั้นให้บริการได้อย่างสมบูรณ์แบบ แต่ Java วัฒนธรรมนั้นเกี่ยวกับการเล่นทุกอย่างอย่างปลอดภัยและปราศจากตำหนิมากที่สุด
Erik Reppen

คำตอบ:


34

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

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

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

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


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

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

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

8

ฉันคิดว่ามันเป็นวิธีปฏิบัติที่ยอดเยี่ยมสำหรับทุกคนที่เริ่มต้น การเรียนรู้จากประสบการณ์ของผู้อื่นจะมีประสิทธิภาพมาก

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


2
นอกจากนี้ยังช่วยให้คุณเข้าใจวิธีการที่คุณคิดว่าควรใช้ไม่สามารถใช้ได้เมื่อมีการเขียนโค้ด
HLGEM

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

6

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

หากคุณพร้อมที่จะรับความท้าทายลองนำโครงการนี้ไปพัฒนา


2

มันจะช่วยคุณได้ แต่คุณต้องระวัง

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

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


2

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

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

Sports analogy alert: คุณคิดว่าผู้สนับสนุนสายใน NFL เรียนรู้มากขึ้นและมีค่ามากขึ้นด้วยการเล่นกับทีมที่มีสถิติแย่ที่สุดหรือดีที่สุด? คำตอบของฉัน: ไม่เพียง แต่พวกเขาจะมีค่ามากกว่าสำหรับการเล่นให้กับทีมที่ดีที่สุด แต่พวกเขาอาจเลือกวิธีปฏิบัติที่ดีที่สุดและความรู้และหลีกเลี่ยงการเลือกปฏิบัติในตอนจบอาชีพและทัศนคติ

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

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

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

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

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

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

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

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


1

มันขึ้นอยู่กับว่าคุณนิยามคำว่า "ดั้งเดิม" ในบริบทนี้อย่างไร ขอยกตัวอย่างจาก C และ C ++ โปรแกรมเมอร์ C ++ หลายคนเรียกมันว่าการใช้สตริง C ในแอพพลิเคชั่น C ++ ที่ไม่ดีนักในขณะที่คนอื่น ๆ กลับกลายเป็นการอ้างว่ามันเป็นสิ่งที่เลี่ยงไม่ได้เลยที่จะใช้รหัส C เพราะบิตเก่าเช่น " รหัส "ดั้งเดิม" บางคนไปไกลกว่าและหลีกเลี่ยงการใช้ pre-C ++ X (แทนที่ 'X' ด้วยหมายเลขที่เหมาะสม) สำนวนมาตรฐานสไตล์ - นั่นคือไวยากรณ์เพราะเป็นสไตล์ "ดั้งเดิม"

ออกจากกันปัญหาประสิทธิภาพการทำงานของ c ++ ลำธารและสตริงและลักษณะ STL #include <string.h>ไม่กี่แน่ใจว่าเป็นวิธีที่ดีที่จะได้ดูสิ่งที่อยู่ภายในคำสั่ง ถ้าคุณทำตามเส้นทางไปสู่การนำไปใช้งานและค้นหาตัวคุณเองบนเครื่องยูนิกซ์ / ลินุกซ์ที่/usr/include/string.h(และรับ libc การนำไปใช้งานแหล่งที่มาเช่นจากgnu.org ) และอ่านstrcmp.cหรือstrlen.cหรือstrtok.cฉันพนันว่าคุณจะได้ยิน "ช่างเป็นโลกที่สวยงาม "การวางขั้นตอนใน

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

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