วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

1
รายละเอียดทางเทคนิคใดที่โปรแกรมเมอร์ของเว็บแอปพลิเคชันควรพิจารณาก่อนที่จะทำให้ไซต์เป็นแบบสาธารณะ
โปรแกรมเมอร์ควรใช้สิ่งใดในการนำรายละเอียดทางเทคนิคของแอปพลิเคชันเว็บมาพิจารณาก่อนที่จะทำให้ไซต์เป็นแบบสาธารณะ หากJeff Atwoodสามารถลืมเกี่ยวกับHttpOnly คุกกี้ , แผนผังเว็บไซต์ , และ ข้ามไซต์ปลอมคำขอ ทั้งหมดในเว็บไซต์เดียวกันสิ่งที่สิ่งที่สำคัญฉันจะถูกลืมเช่นกัน? ฉันกำลังคิดเกี่ยวกับสิ่งนี้จากมุมมองของนักพัฒนาเว็บคนอื่นกำลังสร้างการออกแบบและเนื้อหาจริงสำหรับเว็บไซต์ ดังนั้นในขณะที่ความสามารถในการใช้งานและเนื้อหาอาจมีความสำคัญมากกว่าแพลตฟอร์ม สิ่งที่คุณต้องกังวลคือการติดตั้งแพลตฟอร์มของคุณมีเสถียรภาพทำงานได้ดีปลอดภัยและบรรลุเป้าหมายทางธุรกิจอื่น ๆ (เช่นไม่เสียค่าใช้จ่ายมากเกินไปใช้เวลานานเกินไปในการสร้างและจัดอันดับด้วย Google เช่นเดียวกับ รองรับเนื้อหา) ลองนึกถึงสิ่งนี้จากมุมมองของนักพัฒนาที่ทำงานบางอย่างสำหรับแอปพลิเคชันอินทราเน็ตในสภาพแวดล้อมที่น่าเชื่อถือและกำลังจะได้ช็อตแรกของเขาและวางไซต์ที่ได้รับความนิยมสำหรับอินเทอร์เน็ตขนาดใหญ่ทั่วโลก นอกจากนี้ฉันกำลังมองหาบางสิ่งที่เฉพาะเจาะจงยิ่งกว่าการตอบสนอง "มาตรฐานเว็บ" ที่คลุมเครือ ฉันหมายความว่า HTML, JavaScript, และ CSS บน HTTP นั้นเป็นสิ่งที่กำหนดโดยเฉพาะอย่างยิ่งเมื่อฉันได้ระบุว่าคุณเป็นนักพัฒนาเว็บมืออาชีพ ดังนั้นจะเกินที่ซึ่งมาตรฐาน? ในสถานการณ์อะไรและทำไม ระบุลิงก์ไปยังข้อกำหนดของมาตรฐาน

11
อัลกอริทึมการแปลงแป้นพิมพ์แบบใดดีที่สุดสำหรับความเป็นเอกลักษณ์และความเร็ว
อัลกอริทึมการแปลงแป้นพิมพ์แบบใดดีที่สุดสำหรับความเป็นเอกลักษณ์และความเร็ว ตัวอย่างการใช้ (ดี) รวมถึงพจนานุกรมแฮช ฉันรู้ว่ามีสิ่งที่ต้องการSHA-256และดังกล่าว แต่ขั้นตอนวิธีการเหล่านี้จะถูกออกแบบมาให้เป็นที่เชื่อถือได้ซึ่งมักจะหมายความว่าพวกเขาจะช้ากว่าอัลกอริทึมที่น้อยที่ไม่ซ้ำกัน ฉันต้องการอัลกอริทึมแฮชที่ออกแบบมาให้เร็ว แต่ก็ยังคงมีเอกลักษณ์ที่ไม่เหมือนใคร
1388 algorithms  hashing 

9
แนวคิดเรื่อง“ การกลับมาครั้งเดียวเท่านั้น” มาจากไหน
ฉันมักจะพูดคุยกับโปรแกรมเมอร์ที่พูดว่า " อย่าใส่ข้อความส่งคืนหลายรายการในวิธีเดียวกัน " เมื่อฉันขอให้พวกเขาบอกเหตุผลว่าทำไมสิ่งที่ฉันได้คือ " มาตรฐานการเข้ารหัสบอกเช่นนั้น " หรือ " มันสับสน " เมื่อพวกเขาแสดงวิธีการแก้ปัญหาให้ฉันด้วยคำสั่งการส่งคืนเดียวรหัสดูเหมือนจะไม่ดีสำหรับฉัน ตัวอย่างเช่น: if (condition) return 42; else return 97; " นี่น่าเกลียดคุณต้องใช้ตัวแปรเฉพาะที่! " int result; if (condition) result = 42; else result = 97; return result; การขยายโค้ด 50% นี้ทำให้โปรแกรมเข้าใจได้ง่ายขึ้นอย่างไร โดยส่วนตัวแล้วฉันพบว่ามันยากขึ้นเพราะพื้นที่ของรัฐเพิ่มขึ้นจากตัวแปรอื่นที่สามารถป้องกันได้ง่าย แน่นอนโดยปกติฉันจะเขียน: return (condition) ? 42 : 97; แต่โปรแกรมเมอร์จำนวนมากหลีกเลี่ยงผู้ปฏิบัติงานที่มีเงื่อนไขและชอบแบบยาว แนวคิดเรื่อง ...

30
ฉันเรียนจบสาขาวิทยาศาสตร์คอมพิวเตอร์ แต่ฉันไม่รู้สึกว่ารู้วิธีการโปรแกรม
ฉันเรียนจบสาขาวิทยาศาสตร์คอมพิวเตอร์ แต่ฉันเห็นเว็บไซต์เช่น Stack Overflow และเครื่องมือค้นหาอย่าง Google และไม่รู้ว่าฉันจะเริ่มเขียนอะไรแบบนั้น ในช่วงฤดูร้อนที่ผ่านมาฉันมีโอกาสได้ทำงานเป็นนักพัฒนา iPhone แต่ฉันรู้สึกว่าฉันติดกาวเข้าด้วยกันเป็นห้องสมุดที่คนอื่น ๆ เขียนด้วยความเข้าใจเพียงเล็กน้อยเกี่ยวกับกลไกที่เกิดขึ้นใต้ฝากระโปรง ฉันพยายามพัฒนาความรู้ของฉันโดยการศึกษาอัลกอริทึม แต่มันเป็นกระบวนการที่ยาวนานและเจ็บปวด ฉันพบว่าอัลกอริธึมยากและในอัตราที่ฉันเรียนรู้มาสิบปีจะผ่านไปก่อนที่ฉันจะเชี่ยวชาญเนื้อหาในหนังสือ จากสถานการณ์ปัจจุบันของฉันฉันใช้เวลาหนึ่งเดือนในการหางาน แต่ทักษะของฉัน (C, Python, Objective-C) ค่อนข้างตื้นและไม่เป็นที่พึงปรารถนาในตลาดท้องถิ่นที่ C #, Java และการพัฒนาเว็บสูงขึ้นมาก ในความต้องการ. ไม่ได้หมายความว่าโอกาส C และ Python ไม่มีอยู่ แต่พวกเขามักจะต้องการประสบการณ์มากกว่า 3 ปีที่ฉันไม่มี เกรดเฉลี่ยของฉันใช้ได้(3.0) แต่ไม่สูงพอที่จะนำไปใช้กับ บริษัท ขนาดใหญ่เช่น IBM หรือผลตอบแทนเพื่อการศึกษาระดับบัณฑิตศึกษา โดยทั่วไปฉันเรียนจบสาขาวิทยาศาสตร์คอมพิวเตอร์ แต่ฉันไม่รู้สึกว่าฉันเรียนรู้วิธีการเขียนโปรแกรม ฉันคิดว่าการเข้าร่วม บริษัท และเขียนโปรแกรมเต็มเวลาจะให้โอกาสฉันในการพัฒนาทักษะของฉันและเรียนรู้จากผู้ที่มีประสบการณ์มากกว่าตัวฉันเอง แต่ฉันพยายามดิ้นรนเพื่อหางานทำและเริ่มรู้สึกหงุดหงิดจริงๆ ฉันจะเหวี่ยงตาข่ายให้กว้างขึ้นและมองออกไปนอกเมืองที่ฉันโตมา แต่คนอื่น ๆ ในสถานการณ์ที่คล้ายกันพยายามทำอะไร? ...
1050 education 

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

28
เจ้านายของฉันตัดสินใจเพิ่มฟิลด์“ บุคคลที่จะตำหนิ” ในรายงานข้อผิดพลาดทุกครั้ง ฉันจะโน้มน้าวเขาได้อย่างไรว่าเป็นความคิดที่ไม่ดี
ในหนึ่งในการเคลื่อนไหว "WTF" ครั้งล่าสุดเจ้านายของฉันตัดสินใจว่าการเพิ่มฟิลด์ "บุคคลที่จะกล่าวโทษ" ในเทมเพลตการติดตามข้อผิดพลาดของเราจะเพิ่มความรับผิดชอบ ข้อโต้แย้งของฉันว่าสิ่งนี้จะลดขวัญกำลังใจเพิ่มการใช้นิ้วชี้และจะไม่คำนึงถึงคุณสมบัติที่หายไป / เข้าใจผิดที่รายงานเนื่องจากข้อผิดพลาดไม่เคยได้ยินมาก่อน อะไรคือข้อโต้แย้งที่แข็งแกร่งอื่น ๆ เกี่ยวกับการฝึกฝนนี้ที่ฉันสามารถใช้ได้ มีการเขียนในหัวข้อนี้ที่ฉันสามารถแบ่งปันกับทีมและเจ้านายได้หรือไม่?

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

9
เพราะเหตุใด 80 อักขระจึงถูกจำกัดความกว้างของมาตรฐานสำหรับความกว้างของรหัส
เหตุใด 80 อักขระจึงถูก จำกัด "มาตรฐาน" สำหรับความกว้างของรหัส ทำไม 80 และไม่ใช่ 79, 81 หรือ 100 ต้นกำเนิดของค่าเฉพาะนี้คืออะไร

1
การใช้“ utf8 = ✓” ดีกว่าที่จะ“ utf8 = จริง” หรือไม่?
ฉันเพิ่งเห็น URI บางอย่างที่มีพารามิเตอร์การสืบค้น "utf8 = ✓" ความประทับใจครั้งแรกของฉัน (หลังจากคิดว่า "mmm, ดูดี") คือสิ่งนี้สามารถใช้เพื่อตรวจจับการเข้ารหัสอักขระที่ไม่สมบูรณ์ ดังนั้นนี่เป็นวิธีที่ดีกว่าในการแก้ไขปัญหาที่อาจเกิดขึ้นจากการเข้ารหัสอักขระหรือเป็นเพียงนักพัฒนาที่สนุกกับการแฮ็ค

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

2
ซอฟต์แวร์ของ Mars Curiosity Rover สร้างขึ้นในอะไร?
ดาวอังคารอยากรู้อยากเห็นรถแลนด์โรเวอร์มีที่ดินที่ประสบความสำเร็จและเป็นหนึ่งในโปรโมชั่นวิดีโอ "7 นาทีของความหวาดกลัว" โกลด์โทมีการ 500,000 บรรทัดของรหัส มันเป็นปัญหาที่ซับซ้อนอย่างไม่ต้องสงสัย แต่นั่นเป็นรหัสจำนวนมากแน่นอนว่ามีความพยายามเขียนโปรแกรมที่ยิ่งใหญ่อยู่ข้างหลัง ไม่มีใครรู้อะไรเกี่ยวกับโครงการนี้หรือไม่? ฉันนึกได้แค่ว่ามันฝังซีบางอย่าง

6
ข้อดีข้อเสียของการตอบโต้ของ Facebook กับเว็บคอมโพเนนต์ (พอลิเมอร์)
อะไรคือประโยชน์หลักของการตอบสนองของ Facebook เกี่ยวกับสเป็คของWeb Components ที่กำลังจะเกิดขึ้นและในทางกลับกัน (หรืออาจเปรียบเทียบแอปเปิ้ลกับแอปเปิ้ลต่อไปจะเป็นห้องสมุดพอลิเมอร์ของ Google ) จากการพูดคุยของ JSConf EUและหน้าแรกของ React ประโยชน์หลักของ React คือ: Decoupling และเพิ่มการเชื่อมโยงกันโดยใช้แบบจำลองส่วนประกอบ นามธรรม, องค์ประกอบและการแสดงออก เหตุการณ์ Virtual DOM & Synthetic (ซึ่งโดยทั่วไปหมายถึงพวกเขานำระบบและเหตุการณ์ของ DOM ไปใช้ใหม่ทั้งหมด) เปิดใช้งานกิจกรรม HTML5 ที่ทันสมัยใน IE 8 การเรนเดอร์ฝั่งเซิร์ฟเวอร์ การตรวจสอบได้ การเชื่อมโยงกับ SVG, VML และ <canvas> เกือบทุกอย่างที่กล่าวถึงนั้นถูกรวมเข้ากับเบราว์เซอร์ผ่านทาง Web Components ยกเว้นแนวคิด DOM เสมือนนี้ (ชัดแจ้ง) ฉันสามารถดูได้ว่า DOM และเหตุการณ์สังเคราะห์มีประโยชน์อย่างไรในวันนี้เพื่อสนับสนุนเบราว์เซอร์รุ่นเก่า แต่ไม่ทิ้งโค้ดเบราว์เซอร์ขนาดใหญ่เช่นถ่ายภาพตัวเองในระยะยาว ...
521 javascript  html 

30
เหตุใดอุตสาหกรรมไอทีจึงไม่สามารถส่งมอบโครงการขนาดใหญ่ที่ปราศจากข้อผิดพลาดได้อย่างรวดเร็วเหมือนในอุตสาหกรรมอื่น ๆ
หลังจากดูซีรีส์ MegaStructuresของ National Geographic ฉันรู้สึกประหลาดใจที่โครงการขนาดใหญ่เสร็จสมบูรณ์ เมื่อทำงานเบื้องต้น (การออกแบบรายละเอียดอื่น ๆ ) จะทำบนกระดาษสำนึกตัวเองของโครงการขนาดใหญ่ที่ใช้เวลาเพียงไม่กี่ปีหรือบางครั้งไม่กี่เดือน ตัวอย่างเช่นแอร์บัส A380 "เปิดตัวอย่างเป็นทางการในวันที่ 19 ธันวาคม 2000" และ "ในช่วงต้นเดือนมีนาคม 2548"เครื่องบินได้ทำการทดสอบแล้ว เช่นเดียวกันกับเรือบรรทุกน้ำมันขนาดใหญ่ตึกระฟ้า ฯลฯ เมื่อเทียบกับความล่าช้าในอุตสาหกรรมซอฟต์แวร์ฉันไม่สามารถช่วยสงสัยได้ว่าทำไมโครงการไอทีส่วนใหญ่จึงช้าหรือแม่นยำกว่าทำไมพวกเขาจึงไม่รวดเร็วและไม่ผิดพลาดในระดับเดียวกันทำให้มีคนมากพอ? โครงการต่างๆเช่น Airbus A380 มีทั้ง: ความเสี่ยงที่คาดไม่ถึงที่สำคัญ: แม้ว่านี่จะไม่ใช่เครื่องบินลำแรกที่สร้างขึ้น แต่ก็ยังคงผลักดันขีด จำกัด ของเทคโนโลยีและสิ่งต่าง ๆ ที่ทำงานได้ดีสำหรับสายการบินขนาดเล็กอาจไม่ทำงานสำหรับเครื่องบินที่ใหญ่กว่าเนื่องจากข้อ จำกัด ทางกายภาพ ในทำนองเดียวกันเทคโนโลยีใหม่ที่ใช้ซึ่งยังไม่ได้ใช้เพราะตัวอย่างเช่นพวกเขายังไม่พร้อมใช้งานในปี 1969 เมื่อโบอิ้ง 747 เสร็จสิ้น ความเสี่ยงที่เกี่ยวข้องกับทรัพยากรมนุษย์และการจัดการโดยทั่วไป: ผู้คนเลิกกลางโครงการไม่สามารถเข้าถึงบุคคลเพราะเธออยู่ในช่วงหยุดพักร้อนข้อผิดพลาดทั่วไปของมนุษย์ ฯลฯ ด้วยความเสี่ยงเหล่านี้ผู้คนยังคงประสบความสำเร็จในโครงการเช่นสายการบินขนาดใหญ่เหล่านั้นในระยะเวลาอันสั้นและแม้จะมีความล่าช้าในการส่งมอบโครงการเหล่านั้นก็ยังคงประสบความสำเร็จอย่างมากและมีคุณภาพสูง เมื่อพูดถึงการพัฒนาซอฟต์แวร์โครงการขนาดใหญ่และซับซ้อนเหมือนสายการบิน (ทั้งในเชิงเทคนิคและในแง่ของการจัดการ) และมีความเสี่ยงที่ไม่คาดคิดจากโลกจริงน้อยลงเล็กน้อย อย่างไรก็ตามโครงการไอทีส่วนใหญ่นั้นช้าและล่าช้าและการเพิ่มนักพัฒนาให้กับโครงการไม่ใช่ทางออก (จากทีมนักพัฒนาสิบถึงสองพันคนบางครั้งจะอนุญาตให้ส่งมอบโครงการเร็วขึ้นบางครั้งก็ไม่ได้และบางครั้งจะเป็นอันตรายต่อ โครงการและเพิ่มความเสี่ยงของการไม่จบเลย) ...

19
ฉันได้รับรหัสปาเก็ตตี้ 200K บรรทัดแล้วตอนนี้เป็นอย่างไร
ฉันหวังว่านี่ไม่ใช่คำถามทั่วไปเกินไป ฉันสามารถใช้คำแนะนำที่ปรุงรสได้จริงๆ ฉันเพิ่งได้รับการว่าจ้างให้เป็น "SW Engineer" แต่เพียงผู้เดียวในร้านค้าเล็ก ๆ ของนักวิทยาศาสตร์ที่ใช้เวลา 10-20 ปีที่ผ่านมาในการปูก้อนกรวดด้วยกันเป็นฐานรหัสที่กว้างใหญ่ (มันถูกเขียนในภาษาที่ล้าสมัยจริง: G2 - คิดว่า Pascal ด้วยกราฟิก) ตัวโปรแกรมเองเป็นแบบจำลองทางกายภาพของโรงงานแปรรูปสารเคมีที่ซับซ้อน ทีมที่เขียนมันมีความรู้เกี่ยวกับโดเมนอย่างไม่น่าเชื่อ แต่มีการฝึกอบรมอย่างเป็นทางการเพียงเล็กน้อยในการเขียนโปรแกรมพื้นฐาน พวกเขาเพิ่งเรียนรู้บทเรียนที่ยากลำบากเกี่ยวกับผลที่ตามมาของการจัดการการกำหนดค่าที่ไม่มีอยู่จริง ความพยายามในการบำรุงรักษาของพวกเขายังถูกขัดขวางอย่างมากจากการสะสม "ตะกอน" ที่ไม่มีเอกสารในรหัสด้วย ฉันจะให้คุณ "การเมือง" ของสถานการณ์ (มีเสมอ การเมือง!) แต่ก็เพียงพอที่จะบอกว่าไม่มีความเห็นเป็นเอกฉันท์เกี่ยวกับสิ่งที่จำเป็นสำหรับเส้นทางข้างหน้า พวกเขาขอให้ฉันเริ่มนำเสนอหลักการบางประการของการพัฒนาซอฟต์แวร์ที่ทันสมัยให้กับทีม พวกเขาต้องการให้ฉันแนะนำวิธีปฏิบัติและกลยุทธ์มาตรฐานอุตสาหกรรมบางประการเกี่ยวกับข้อกำหนดการเข้ารหัสการจัดการวงจรชีวิตรูปแบบการออกแบบระดับสูงและการควบคุมแหล่งที่มา ตรงไปตรงมามันเป็นงานที่ค่อนข้างน่ากลัวและฉันไม่แน่ใจว่าจะเริ่มต้นที่ไหน ในตอนแรกฉันมีแนวโน้มที่จะสอนพวกเขาในบางแนวคิดหลักของThe Pragmatic ProgrammerหรือRefactoringของ Fowler ("Code Smells" ฯลฯ ) ฉันหวังว่าจะแนะนำวิธีการแบบ Agile จำนวนมาก แต่ท้ายที่สุดเพื่อให้มีประสิทธิภาพฉันคิดว่าฉันจะต้องฝึกฝนพื้นฐาน 5-7 หลัก กล่าวอีกนัยหนึ่งอะไรคือหลักการหรือวิธีปฏิบัติที่สำคัญที่สุดที่พวกเขาสามารถเริ่มใช้งานได้อย่างแนบเนียน นั่นคือคำถามของฉัน: สิ่งที่คุณจะรวมไว้ในรายการกลยุทธ์ที่มีประสิทธิภาพที่สุดเพื่อช่วยยืดเส้นสปาเก็ตตี้ออกไป (และป้องกันไม่ให้เกิดขึ้นในอนาคต)

21
การเอาชนะการแก้ปัญหาช้าเนื่องจากความรู้ที่เพิ่มขึ้นของสิ่งที่อาจผิดพลาด [ปิด]
เรื่องนี้ทำให้ฉันหนักใจในบางครั้งและฉันจะขอขอบคุณผู้เชี่ยวชาญของผู้เชี่ยวชาญคนอื่น ๆ พื้นหลังสั้น ๆ : ฉันเริ่มเขียนโปรแกรมเมื่อพ่อแม่ซื้อคอมพิวเตอร์เครื่องแรกของฉันในปี 1988 (ตอนอายุ 14 ตอนนี้ฉันอายุ 39 แล้ว) ฉันติดตามสองเส้นทางอาชีพอื่น ๆ ก่อนที่จะกลายเป็นโปรแกรมเมอร์มืออาชีพในที่สุดในปี 1997 สายผิดพลาดอย่างช้า ๆ บางที แต่นั่นเป็นวิธีที่มันเป็น ฉันยังคงมีความสุขกับตัวเลือกของฉันฉันรักการเขียนโปรแกรมและฉันคิดว่าตัวเองดีในสิ่งที่ฉันทำ เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นว่ายิ่งฉันได้รับประสบการณ์มากเท่าไหร่ฉันก็ต้องใช้เวลาในการทำโครงการให้เสร็จสมบูรณ์ ฉันยังไม่ชราภาพ เป็นเพียงที่ฉันได้เห็นวิธีการมากมายที่สิ่งต่าง ๆ ผิดพลาด และข้อผิดพลาดที่อาจเกิดขึ้นและ gotchas ที่ฉันรู้และจำได้ก็แค่เพิ่มมากขึ้นเรื่อย ๆ ตัวอย่างเล็กน้อย: มันเคยเป็นเพียง "โอเคเขียนไฟล์ที่นี่" ตอนนี้ฉันกังวลเกี่ยวกับการอนุญาตล็อคการทำงานพร้อมกันการทำงานของอะตอมทางอ้อม / เฟรมเวิร์กระบบไฟล์ต่าง ๆ จำนวนไฟล์ในไดเรกทอรีชื่อไฟล์ temp ที่คาดเดาได้คุณภาพของการสุ่มใน PRNG ของฉันการขาดแคลนพลังงานในช่วงกลาง การดำเนินงาน API ที่เข้าใจได้สำหรับสิ่งที่ฉันกำลังทำเอกสารที่เหมาะสม ฯลฯ ฯลฯ กล่าวโดยย่อปัญหาได้เปลี่ยนไปจาก ...
450 experience  effort 

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