อะไรคือสิ่งที่เลวร้ายที่สุดที่นักพัฒนาที่ไม่มีประสบการณ์ลืมนึกถึง [ปิด]


15

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

มีข้อผิดพลาดอะไรบ้างที่ผู้พัฒนาที่ไม่มีประสบการณ์มักจะทำซึ่งอาจนำไปสู่ความยุ่งยากสำหรับนักพัฒนาที่มีประสบการณ์มากกว่า


1
ฉันจะไม่เรียกสิ่งที่เรียกว่าการรักษาความปลอดภัยอย่างแน่นอนใน "รายการตรวจสอบ" - ความปลอดภัยต้องได้รับการพิจารณาในทุกระดับของการออกแบบไม่ใช่เพิ่มในภายหลัง คุณลักษณะด้านความปลอดภัย! = คุณสมบัติด้านความปลอดภัย!
Billy ONeal

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

@awmckinley: จากนั้นคำถามของคุณคือ "ฉันจะพัฒนาแอปพลิเคชันได้อย่างไร" แต่คำถามนั้นกว้างเกินไปที่จะตอบได้
Billy ONeal

@Billy ONeal: เพิ่งแก้ไขคำถามของฉัน สิ่งนี้สมเหตุสมผลหรือไม่
awmckinley

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

คำตอบ:


12

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

  • การตรวจสอบในรหัสที่ทำลายการสร้าง
  • ไม่ได้ใช้รหัสซ้ำที่มีอยู่แล้ว
  • ทำสิ่งต่าง ๆ ในแบบของพวกเขามากกว่าแบบเดียวกับคนอื่น - ซึ่งทำให้การบำรุงรักษาแพง

นั่นไม่ได้หมายความว่ารหัสของพวกเขาจะไม่แยกออกจากกัน แต่พวกเขาก็ไม่ได้ทำงานอย่างโดดเดี่ยวอีกต่อไป


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

8
  1. การทดสอบ
  2. การทดสอบ
  3. การทดสอบเพิ่มเติม
  4. การควบคุมแหล่งที่มา
  5. ภาษีที่เหมาะสมกับโปรแกรมที่คุณกำหนดเป้าหมาย

ใน Windows ภาษีเหล่านี้คือ :

  • การจัดการกับสภาพแวดล้อม DPI สูง
  • โปรไฟล์ผู้ใช้งานข้ามเขต
  • การสลับผู้ใช้อย่างรวดเร็ว
  • เดสก์ท็อประยะไกล (เช่นคุณไม่ต้องการใช้การบัฟเฟอร์สองครั้งเมื่อ RDP มีผลบังคับใช้
  • เล่นอย่างสวยงามด้วย Hierarchical Storage Management
  • จอภาพหลายจอ
  • Windows 64 บิต

ในทุก ๆ แพลตฟอร์มคุณจะต้องจัดการกับ:

  • Unicode
  • การ จำกัด
  • การจัดการพลังงาน

ฉันขอโทษบิลลี่ บางทีฉันอาจไม่ชัดเจนในวิธีที่ฉันถาม quesiton ของฉัน: ฉันไม่ได้มองหาวิธีการพัฒนา (เช่นการควบคุมแหล่งที่มา) ฉันคิดว่ามันค่อนข้างครอบคลุมในรายการตรวจสอบโครงการพัฒนาซอฟต์แวร์นี้ . ส่วน "ภาษี" มีประโยชน์แน่นอน
awmckinley

3
@awmckinley: เหตุผลที่ฉันนำการควบคุมแหล่งข้อมูลมาใช้คือคุณจะไม่สามารถจัดการการเผยแพร่ได้อย่างมีประสิทธิภาพโดยไม่ต้องมีหัวหน้าหลายฝ่ายในการพัฒนาแม้ว่าคุณจะเป็นนักพัฒนาเดี่ยวก็ตาม คุณต้องคิดเกี่ยวกับการปล่อย n + 1 แม้ในขณะที่คุณกำลังใช้งานการปล่อย n
Billy ONeal

5

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

อีกวิธีหนึ่งการส่งมอบโค้ดที่สมบูรณ์แบบสามเดือนหลังจาก บริษัท ของคุณไม่ได้รับผลกระทบใด ๆ

ในความคิดของฉันนี่เป็นหนึ่งในวิธีที่สำคัญที่สุดที่การพัฒนาในโลกแห่งความจริงแตกต่างจากการพัฒนาที่สอนในมหาวิทยาลัย


3

คำถามที่กว้างจริงๆ คำตอบในรายละเอียดคือ ... หนังสือหลายเล่ม

นี่คือรายการตรวจสอบข้อกำหนดระบบทั่วไปเพื่อให้คุณเริ่มต้น -

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

1

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

และคุณสามารถสร้างเครื่องจักรการพัฒนาขึ้นมาใหม่ได้เร็วแค่ไหน?

  • คุณรู้หรือไม่ว่าคุณต้องการบรรจุภัณฑ์อะไร?
  • คุณมีวิธีกดปุ่มเพื่อสร้างฐานข้อมูลของคุณหรือไม่
  • คุณมีวิธีกดปุ่มเพื่อทดสอบความสมบูรณ์ของซอร์สโค้ดหรือไม่?

1

ฉันคิดว่ามันน่าจะเป็นการออกแบบ - นั่นคือวิธีคิดเกี่ยวกับสิ่งที่คุณจะทำก่อนที่คุณจะทำ

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

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

เห็นได้ชัดว่าเขาทำให้มันทำงานได้ แต่มันไม่เป็นระเบียบและนั่นหมายถึงการติดตั้งและการบำรุงรักษาจะลำบาก


1

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

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

0

เพราะคุณถามสิ่งที่เลวร้ายที่สุดคำตอบของฉันมีดังนี้:

  1. ลืมคิดถึงการฆ่าเชื้อของเครื่องพัฒนาจากสปายแวร์มัลแวร์และไวรัสโทรจัน
  2. ลืมนึกถึงการสำรองข้อมูลปกติที่บันทึกไว้ในที่เก็บรักษาความปลอดภัยที่อยู่ในสถานที่ตั้งทางภูมิศาสตร์ที่แตกต่างกัน

0

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

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

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