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

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

21
ลูกค้าของฉันต้องการให้ฉันบันทึกวิดีโอว่าฉันพัฒนาผลิตภัณฑ์ซอฟต์แวร์ของเขาอย่างไร
ทำงานเป็นอิสระฉันมักจะเห็นคำขอแปลก ๆจากลูกค้าของฉันซึ่งบางอย่างอาจส่งผลเสียต่อการทำงานประจำวันของฉันและบางคนก็พยายามควบคุมบางอย่าง ฉันมักจะพบเจอสิ่งเหล่านี้ในระหว่างการเจรจาเบื้องต้นดังนั้นจึงเป็นเรื่องง่ายพอที่รัฐนี้จะอธิบายให้ลูกค้าฟังว่าฉันใส่ใจงานและผลิตผลของฉันและคาดหวังให้ลูกค้าเชื่อมั่นในงานของฉัน สิ่งที่ยากยิ่งขึ้น²ในโครงการที่ฉันเพิ่งยอมรับเพราะหลังจากจบการเจรจาเท่านั้น (สัญญามีการลงนามแล้วและไม่ได้พูดถึงอะไรเกี่ยวกับการติดตามวิดีโอ) และหลังจากที่ฉันเริ่มทำงานในโครงการที่ลูกค้าของฉันขอให้ฉันบันทึก วิดีโอทั้งหมดที่ฉันทำบนเครื่องขณะทำงานในโครงการของเขานั่นคือวิดีโอที่จะแสดงให้เห็นว่าฉันย้ายเคอร์เซอร์พิมพ์อักขระเปิดไฟล์ย้ายหน้าต่าง ฯลฯ ฉันทำงานใน บริษัท ของตัวเองโดยใช้พีซีของตัวเอง ฉันตอบลูกค้านี้ว่าคำขอดังกล่าวไม่สามารถยอมรับได้เนื่องจาก: การทำงานหลายร้อยชั่วโมงบนพีซีแบบดูอัลจอจะต้องใช้พื้นที่ดิสก์จำนวนมากสำหรับวิดีโอที่บันทึกไว้ หากฉันไม่สนใจเรื่องพื้นที่ฉันสนใจเกี่ยวกับลูกค้ารายนี้ที่เสียแบนด์วิดท์ของฉันในการดาวน์โหลดวิดีโอเหล่านั้น การบันทึกวิดีโอสามารถส่งผลกระทบต่อประสิทธิภาพโดยรวมและลดประสิทธิภาพการทำงานของฉัน (ซึ่งไม่เป็นความจริงเนื่องจากเครื่องมีประสิทธิภาพเพียงพอที่จะบันทึกวิดีโอนี้โดยไม่สูญเสียประสิทธิภาพการทำงาน แต่ก็ยังดูเหมือนอาร์กิวเมนต์ที่ถูกต้อง) ฉันจำไม่ได้เสมอว่าให้เปิดการบันทึกวิดีโอก่อนเริ่มงานและปิดท้าย มันอาจเป็นเรื่องความเป็นส่วนตัว ฉันควรทำอย่างไรหากเปลี่ยนเป็นอีเมลเมื่อบันทึกวิดีโอ จะทำอย่างไรถ้าหากต้องการเปิดไดเรกทอรีที่มีไฟล์เกี่ยวกับโครงการลูกค้านี้ฉันจะเปิดไดเรกทอรีหลักที่มีรายชื่อลูกค้าทั้งหมดของฉันก่อน วิดีโอดังกล่าวไม่สามารถเป็นแหล่งที่น่าเชื่อถือในการติดตามค่าใช้จ่ายของโครงการ (ฉันจ่ายเงินตามชั่วโมง) เนื่องจากการทำงานบางอย่างจะทำมีเพียงดินสอและกระดาษ (ซึ่งเป็นความจริงที่จริงตั้งแต่ผมทำจำนวนมากของการทำงานร่างโดยไม่ต้อง ใช้พีซี) แม้จะมีประเด็นเหล่านี้ลูกค้าก็คิดว่าถ้าฉันไม่ต้องการบันทึกวิดีโอมันเป็นเพราะฉันมีบางอย่างที่ต้องซ่อนและต้องการโกหกเกี่ยวกับเวลาที่ใช้จริงในโครงการของเขา³ วิธีที่จะอธิบายให้เขาว่ามันไม่ได้เป็นปฏิบัติตามปกติสำหรับ freelancers ในการบันทึกวิดีโอของการทำงานในชีวิตประจำวันของพวกเขาและว่าคำขอฟุ่มเฟือยดังกล่าวจะต้องสงวนไว้ให้circumstances⁴พิเศษ? ¹ตัวอย่างที่พบบ่อยที่สุดคือการขอให้ทำงานผ่าน Remote Desktop บนเซิร์ฟเวอร์มากกว่าช้าซึ่งใช้การเชื่อมต่ออินเทอร์เน็ตมากกว่าช้ากว่าหรือถูกบังคับให้ใช้ซอฟต์แวร์ที่ล้าสมัยเช่นWindows Meโดยไม่มีเหตุผลร้ายแรงในฐานะมรดก สนับสนุน. ²ในความเป็นจริงฉันได้ทำงานเกี่ยวกับการจัดการและการออกแบบระบบหลายอย่างซึ่งเป็นสิ่งจำเป็น แต่มักจะเข้าใจผิดโดยลูกค้าและถูกมองว่าเป็นการเสียเวลาและเงิน จากการสังเกตลูกค้าที่เกี่ยวข้องฉันค่อนข้างมั่นใจว่าเขาจะปฏิเสธที่จะจ่ายเงินจำนวนมากสำหรับสิ่งที่ได้ทำไปแล้วเนื่องจากมีรหัสบรรทัดจริง ๆ แม้ว่าฉันจะสามารถพิสูจน์ได้อย่างถูกกฎหมายว่ามีงานด้านออกแบบจำนวนมากฉันไม่ต้องการยุติความสัมพันธ์กับลูกค้ารายนี้ในศาล ³ซึ่งไม่เสี่ยงเท่าที่ควรเนื่องจากฉันมอบให้กับลูกค้ารายนี้ถึงความคาดหวังและต้นทุนสูงสุดของโครงการดังนั้นลูกค้าจึงมั่นใจได้ว่าจะไม่ถูกขอให้จ่ายเกินจำนวนสูงสุดตามที่ระบุไว้ในสัญญา ถ้างานจริงมีค่าใช้จ่ายมากกว่า ⁴กรณีหนึ่งเมื่อฉันบันทึกความคิดริเริ่มของตัวเองได้อย่างมีประสิทธิภาพวิดีโอการกระทำคือเมื่อฉันต้องทำการเปลี่ยนแปลงบางอย่างโดยตรงบนเซิร์ฟเวอร์ที่ใช้งานจริงของลูกค้าโดยเฉพาะอย่างยิ่งเมื่อพูดถึงปัญหาด้านความปลอดภัย การบันทึกขั้นตอนเหล่านั้นอาจเป็นความคิดที่ดีที่จะรู้ว่าสิ่งใดที่ทำไปแล้วและให้แน่ใจว่าไม่มีข้อผิดพลาดในงานของฉันหรือดูว่าข้อผิดพลาดเหล่านั้นคืออะไร ปรับปรุง: ก่อนอื่นขอขอบคุณสำหรับคำตอบและความคิดเห็นทั้งหมดของคุณ เนื่องจากคำถามดึงดูดความสนใจมากขึ้นและมีคำตอบมากกว่าที่ฉันคาดไว้ฉันคิดว่ามันอาจเกี่ยวข้องกับคนอื่นดังนั้นฉันจึงเพิ่มการอัปเดต ขั้นแรกเพื่อสรุปคำตอบและความคิดเห็นแนะนำให้ (สั่งแบบสุ่ม): …

20
ควรถือว่า UTF-16 เป็นอันตรายหรือไม่?
ฉันจะถามสิ่งที่อาจเป็นคำถามโต้เถียง: "หนึ่งในการเข้ารหัสที่นิยมมากที่สุด UTF-16 ถือว่าเป็นอันตรายหรือไม่" ทำไมฉันถึงถามคำถามนี้ มีโปรแกรมเมอร์กี่คนที่ตระหนักถึงความจริงที่ว่า UTF-16 เป็นความยาวแปรผันได้หรือไม่? โดยสิ่งนี้ฉันหมายความว่ามีจุดรหัสที่แสดงเป็นคู่ตัวแทนแทนใช้องค์ประกอบมากกว่าหนึ่ง ฉันรู้ว่า; แอปพลิเคชั่นเฟรมเวิร์กและ API จำนวนมากใช้ UTF-16 เช่นสตริงของ Java, สตริง C #, Win32 APIs, ไลบรารี Qt GUI, ไลบรารี ICU Unicode เป็นต้นอย่างไรก็ตามจากทั้งหมดนี้มีข้อบกพร่องพื้นฐานมากมายในการประมวลผล ของอักขระจาก BMP (อักขระที่ควรเข้ารหัสโดยใช้สององค์ประกอบ UTF-16) ตัวอย่างเช่นลองแก้ไขหนึ่งในตัวละครเหล่านี้: LE ( U + 1D11E ) ดนตรีซิมโฟนี G CLEF 𝕥 ( U + 1D565 ) คณิตศาสตร์สองชั้นซ้อนขนาดเล็ก 𝟶 …
432 unicode 

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

30
ฉันจะสร้างภาษาการเขียนโปรแกรมของตัวเองและคอมไพเลอร์ได้อย่างไร [ปิด]
ฉันถี่ถ้วนกับการเขียนโปรแกรมและได้เจอภาษาต่างๆเช่นภาษาเบสิกภาษาฟอร์แทรนภาษาโคบอล LISP โลโก้ Java, C ++, C, MATLAB, Mathematica, Python, Ruby, Perl, JavaScript, Assembly เป็นต้น ฉันไม่เข้าใจว่าผู้คนสร้างภาษาการเขียนโปรแกรมและประดิษฐ์คอมไพเลอร์อย่างไร ฉันยังไม่เข้าใจว่าผู้คนสร้างระบบปฏิบัติการเช่น Windows, Mac, UNIX, DOS และอื่น ๆ อย่างไร สิ่งอื่น ๆ ที่ลึกลับสำหรับฉันคือวิธีที่ผู้คนสร้างห้องสมุดเช่น OpenGL, OpenCL, OpenCV, Cocoa, MFC และอื่น ๆ สิ่งสุดท้ายที่ฉันไม่สามารถเข้าใจได้ก็คือวิธีที่นักวิทยาศาสตร์คิดค้นภาษาแอสเซมบลีและแอสเซมเบลอร์สำหรับไมโครโปรเซสเซอร์ ฉันอยากจะเรียนรู้สิ่งเหล่านี้ทั้งหมดและฉันอายุ 15 ปี ฉันมักจะต้องการเป็นนักวิทยาศาสตร์คอมพิวเตอร์ที่ชอบ Babbage, Turing, Shannon หรือ Dennis Ritchie ฉันได้อ่านหนังสือการออกแบบคอมไพเลอร์ของ Aho แล้วและแนวคิดระบบปฏิบัติการของ Tanenbaum และพวกเขาทั้งหมดพูดถึงแนวคิดและรหัสในระดับสูงเท่านั้น …

12
ฉันควรตั้งใจทำลายโครงสร้างเมื่อพบข้อบกพร่องในการผลิตหรือไม่
ดูเหมือนว่าสมเหตุสมผลสำหรับฉันว่าหากพบข้อบกพร่องร้ายแรงในการผลิตโดยผู้ใช้ขั้นปลายการทดสอบหน่วยที่ล้มเหลวควรถูกเพิ่มเข้ากับข้อบกพร่องนั้นดังนั้นจงใจทำลายการสร้างจนกว่าข้อผิดพลาดจะได้รับการแก้ไข เหตุผลของฉันสำหรับสิ่งนี้คือการสร้างควรล้มเหลวมาตลอดแต่ไม่ได้เกิดจากการครอบคลุมการทดสอบอัตโนมัติที่ไม่เพียงพอ เพื่อนร่วมงานของฉันหลายคนไม่เห็นด้วยที่บอกว่าไม่ควรตรวจสอบการทดสอบหน่วยที่ล้มเหลวฉันเห็นด้วยกับมุมมองนี้ในแง่ของการปฏิบัติตามมาตรฐาน TDD แต่ฉันคิดว่าข้อบกพร่องในการผลิตควรได้รับการจัดการแตกต่างกัน สร้างเพื่อประสบความสำเร็จกับข้อบกพร่องที่รู้จักกัน? ใครบ้างมีกลยุทธ์ที่พิสูจน์แล้วสำหรับการจัดการสถานการณ์นี้ ฉันเข้าใจว่าการทำลายโครงสร้างโดยเจตนาอาจส่งผลกระทบต่อสมาชิกในทีมคนอื่น ๆ แต่นั่นก็ขึ้นอยู่กับว่าคุณใช้กิ่งไม้อย่างไร
410 unit-testing  tdd  builds 

12
“ ตรรกะทางธุรกิจควรอยู่ในบริการไม่แม่นยำในแบบจำลอง”
สถานการณ์ เมื่อเช้านี้ฉันตอบคำถามใน StackOverflow คำถาม: การแก้ไขวัตถุที่มีอยู่ควรทำในพื้นที่เก็บข้อมูลเลเยอร์หรือบริการ? ตัวอย่างเช่นถ้าฉันมีผู้ใช้ที่มีหนี้ ฉันต้องการเปลี่ยนหนี้ของเขา ฉันควรทำมันใน UserRepository หรือในการให้บริการเช่น BuyingService โดยรับวัตถุแก้ไขและบันทึกมันได้หรือไม่ คำตอบของฉัน: คุณควรปล่อยให้ความรับผิดชอบในการกลายวัตถุเป็นวัตถุเดียวกันนั้นและใช้ที่เก็บเพื่อดึงข้อมูลวัตถุนี้ สถานการณ์ตัวอย่าง: class User { private int debt; // debt in cents private string name; // getters public void makePayment(int cents){ debt -= cents; } } class UserRepository { public User GetUserByName(string name){ // Get appropriate user …

15
ตกลงหรือไม่ที่จะมีการยืนยันหลายชุดในการทดสอบหน่วยเดียว?
ในความคิดเห็นต่อโพสต์ที่ยอดเยี่ยมนี้ Roy Osherove ได้กล่าวถึงโครงการOAPTที่ออกแบบมาเพื่อใช้ในการทดสอบแต่ละครั้งในการทดสอบครั้งเดียว ต่อไปนี้เป็นลายลักษณ์อักษรในโฮมเพจของโครงการ: การทดสอบหน่วยที่เหมาะสมควรล้มเหลวด้วยเหตุผลเดียวนั่นคือเหตุผลที่คุณควรใช้หนึ่งยืนยันต่อการทดสอบหน่วย และรอยยังเขียนความคิดเห็น: แนวทางของฉันมักจะให้คุณทดสอบหนึ่งแนวคิดเชิงตรรกะต่อการทดสอบ คุณสามารถมีหลายอ้างในเดียวกัน วัตถุ พวกเขามักจะเป็นแนวคิดเดียวกันที่ถูกทดสอบ ฉันคิดว่ามีบางกรณีที่จำเป็นต้องมีการยืนยันหลายครั้ง (เช่นGuard Assertion ) แต่โดยทั่วไปฉันพยายามหลีกเลี่ยงสิ่งนี้ ความคิดเห็นของคุณคืออะไร? โปรดให้เป็นตัวอย่างที่โลกแห่งความจริงที่หลายอ้างจริงๆจำเป็น
397 unit-testing 


30
เหตุใดจึงไม่ใช้ Java สำหรับการพัฒนาเว็บแอปพลิเคชันที่ทันสมัย [ปิด]
ในฐานะโปรแกรมเมอร์ Java มืออาชีพฉันพยายามทำความเข้าใจ - ทำไมความเกลียดชัง Java สำหรับเว็บแอปพลิเคชันสมัยใหม่ ฉันสังเกตเห็นแนวโน้มที่ว่าเมื่อเร็ว ๆ นี้เว็บสตาร์ทอัพในปัจจุบันมีสัดส่วนค่อนข้างน้อยที่ใช้ Java (เทียบกับความนิยมโดยรวมของ Java) เมื่อฉันถามบางอย่างเกี่ยวกับเรื่องนี้ฉันมักจะได้รับคำตอบเช่น "ฉันเกลียดชวาด้วยความหลงใหล" แต่ดูเหมือนว่าไม่มีใครที่จะสามารถให้คำตอบที่ชัดเจน ฉันเคยได้ยินชุมชนการเริ่มต้นเว็บเดียวกันนี้อ้างถึงผู้พัฒนา Java ในเชิงลบ - มากขึ้นหรือน้อยลงซึ่งบ่งบอกว่าพวกเขาช้าไม่สร้างสรรค์และเก่า เป็นผลให้ฉันใช้เวลาทำงานเพื่อรับ Ruby / Rails โดยทั่วไปเพื่อค้นหาสิ่งที่ฉันขาดหายไป แต่ฉันไม่สามารถช่วยคิดด้วยตัวเองว่า "ฉันสามารถทำสิ่งนี้ได้เร็วขึ้นมากถ้าฉันใช้ Java" ส่วนใหญ่เป็นเพราะระดับประสบการณ์ญาติของฉัน แต่ก็เป็นเพราะฉันไม่เห็นสิ่งสำคัญ "ขาดหายไป" จาก Java ทำให้ฉันไม่สามารถสร้างแอปพลิเคชันเดียวกันได้ ซึ่งนำมาสู่คำถามของฉัน : เหตุใด Java จึงไม่ถูกใช้ในเว็บแอปพลิเคชันสมัยใหม่ มันเป็นจุดอ่อนของภาษาหรือไม่ มันเป็นกฎตายตัวของ Java เพราะมันมีมานานแล้ว (มันเกี่ยวข้องอย่างไม่ยุติธรรมกับเทคโนโลยีที่เก่ากว่าและไม่ได้รับการยอมรับสำหรับความสามารถ "ทันสมัย" ของมัน)? ทัศนคติเชิงลบของนักพัฒนา Java แข็งแกร่งเกินไปหรือไม่? …

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

28
ฉันทำการบำรุงรักษา 90% และการพัฒนา 10% เป็นปกติหรือไม่ [ปิด]
ฉันเพิ่งเริ่มอาชีพของฉันในฐานะนักพัฒนาเว็บไซต์สำหรับ บริษัท ขนาดกลาง ทันทีที่ฉันเริ่มฉันก็มีหน้าที่ในการขยายแอปพลิเคชั่นที่มีอยู่ (เขียนโค้ดไม่ดีพัฒนาโดยโปรแกรมเมอร์หลายคนในช่วงหลายปีที่ผ่านมา ดังนั้นหลังจากที่ฉันขยายแอปพลิเคชันนี้ได้สำเร็จด้วยฟังก์ชั่นที่ร้องขอพวกเขาก็มอบหมายงานให้ฉันในการดูแลแอปพลิเคชันให้เต็มที่ แน่นอนว่าไม่ใช่ปัญหาหรืออย่างนั้นฉันก็คิด แต่แล้วฉันก็ได้ยินว่าฉันไม่ได้รับอนุญาตให้ปรับปรุงโค้ดที่มีอยู่และเน้นเฉพาะการแก้ไขข้อบกพร่องเมื่อมีการรายงานข้อบกพร่อง จากนั้นฉันก็มีอีกสามโครงการเหมือนตอนที่ฉันต้องทำ และฉันมีสี่โครงการที่ฉันได้รับอนุญาตให้สร้างแอปพลิเคชันตั้งแต่เริ่มต้นและฉันต้องดูแลโครงการเหล่านั้นด้วย ในขณะนี้ฉันเริ่มคลั่งไคล้อีเมลจากผู้ใช้รายวัน (อ่านผู้จัดการ) สำหรับแต่ละแอปพลิเคชันที่ฉันต้องดูแล พวกเขาคาดหวังให้ฉันจัดการกับจดหมายเหล่านี้โดยตรงในขณะที่ยังทำงานในโครงการใหม่อีกสองโครงการ (และมีโครงการอีกห้าโครงการที่จัดเรียงกันหลังจากนั้น) สิ่งที่น่าเศร้าก็คือฉันยังไม่ได้รับรายงานข้อผิดพลาดเกี่ยวกับสิ่งที่ฉันเขียนเอง สำหรับสิ่งที่ฉันได้รับการร้องขอการเปลี่ยนแปลงเป็นครั้งคราวขอสิ่งที่แตกต่าง 180 องศา อย่างไรก็ตามนี่เป็นเรื่องปกติหรือไม่ ในความคิดของฉันฉันทำผลงานเทียบเท่ากับทีมนักพัฒนาทั้งหมด ฉันเป็นคนงี่เง่าเมื่อฉันคาดหวังว่าสิ่งต่าง ๆ ในตอนแรกจะแตกต่างกันอย่างไร ฉันเดาว่าโพสต์นี้ได้กลายเป็นเรื่องอื้อฉาวใหญ่ แต่โปรดบอกฉันว่ามันไม่เหมือนกันสำหรับนักพัฒนาทุกคน PS เงินเดือนของฉันเกือบเท่ากันถ้าไม่ต่ำกว่าแคชเชียร์ที่ซุปเปอร์มาร์เก็ต
368 maintenance 

6
รหัสลบคืออะไร?
ฉันอ่านบทความ Wikipedia เกี่ยวกับ Douglas McIlroyและพบข้อความที่กล่าวถึง "ฮีโร่ที่แท้จริงของการเขียนโปรแกรมคือผู้ที่เขียนโค้ดเชิงลบ" นั่นหมายความว่าอย่างไร?

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

20
ฉันจะประพฤติตนเป็นผู้พัฒนาในโครงการที่มุ่งหน้าสู่ความล้มเหลวได้อย่างไร
ฉันเป็นนักพัฒนาในทีม 5 คนและฉันเชื่อว่าโครงการของเรามุ่งเน้นไปที่ภัยพิบัติ ฉันจะอธิบายว่าทำไมในอีกสักครู่ แต่คำถามของฉันคือ: ฉันจะทำงานได้อย่างไร กำหนดเส้นตายใน 1.5 เดือนและฉันรู้สึกว่าไม่ว่าเราจะทำอะไรโครงการนี้จะล้มเหลว ฉันเห็นว่าเราควรยุติโครงการและหยุดการสูญเสียเวลา แต่ในทางการเมืองฉันคิดว่ามันเป็นไปไม่ได้ที่ผู้จัดการของเราจะทำเช่นนั้น ฉันควรทำอย่างไรในกรณีนี้? ฉันควรจะใช้ความพยายามพิเศษหรือควรใช้ง่ายไหม? และฉันควรพูดกับผู้จัดการอย่างไร เหตุผลที่โครงการนี้มุ่งหน้าไปสู่ความล้มเหลว: ด้วยกำหนดเส้นตายที่กำลังจะมาถึงคุณสมบัติที่ต้องมีมากมายยังไม่เสร็จสิ้น แอปพลิเคชันไม่เสถียรและใช้งานยากมาก ระบบมีความซับซ้อนมากรหัสยากที่จะเข้าใจยากมากที่จะเปลี่ยนแปลง - โมเดลข้อมูลถูกขับเคลื่อนโดยฐานข้อมูลเชิงสัมพันธ์ที่ซับซ้อน (100+ ตาราง) ความเป็นผู้นำที่ไม่ชัดเจน ผู้จัดการตอบกลับข้อมูลใหม่พร้อมการเปลี่ยนแปลงครั้งสำคัญ เกือบจะไม่มีการทดสอบอัตโนมัติหรือการทดสอบหน่วย อย่างหนักขึ้นอยู่กับระบบอื่น ๆ แต่ยังไม่มีการทดสอบการรวม ในความเป็นจริงเราเพิ่งได้รับโครงการนี้ (พร้อมกับระเบียบ) ประมาณ 1-2 เดือนที่ผ่านมาจากทีมพัฒนาอื่นภายใต้ผู้จัดการเดียวกันซึ่งทำงานในโครงการนี้มาสองสามเดือน

30
4-5 ปีของ“ Midlife Crisis” สำหรับการเขียนโปรแกรมหรือไม่?
ฉันเขียนโปรแกรม C # อย่างมืออาชีพมานานกว่า 4 ปีแล้ว ในช่วง 4 ปีที่ผ่านมาฉันได้ทำงานกับ บริษัท ขนาดเล็ก / ขนาดกลางสองสามแห่งตั้งแต่ "ตัวแทนโฆษณาผ่านเว็บ /" ร้านค้าซอฟต์แวร์อุตสาหกรรมขนาดเล็กไปจนถึงการเริ่มต้นเล็ก ๆ ฉันได้ทำ "แอพทางธุรกิจ" ที่เกี่ยวข้องกับการใช้ภาษาการเขียนโปรแกรมระดับสูง (เก็บขยะ) และประสบการณ์โดยรวมของฉันคือการทำงานทั้งหมดที่ฉันทำอาจเป็นมืออาชีพมากขึ้น หลายสิ่งถูกทำอย่างไม่ถูกต้อง (เร่งด่วน) ส่วนใหญ่เนื่องจากปัจจัยด้านต้นทุนที่ผู้คนมักต้องการบางสิ่ง "ตอนนี้" และด้วยเงินจำนวนน้อยที่สุดที่สามารถใช้จ่ายได้ ฉันยังคงคิดอยู่เสมอว่าถ้าฉันสามารถทำงานให้กับ บริษัท ที่ใหญ่กว่าหรือ บริษัท ที่เหมาะสำหรับโปรแกรมเมอร์หรือที่อื่นที่ ' มีเงินและเวลาที่จะสร้างสิ่งที่จริงในระยะยาวและสามารถรักษาได้มากขึ้นฉันอาจมีความสุขในอาชีพของฉัน ฉันไม่เคยมี "ผู้ให้คำปรึกษา" ที่นำทางฉันตลอดอาชีพการทำงาน 4 ปีของฉัน ฉันเป็นนักเขียนบล็อก / google / self ค่อนข้างมากนอกจากปริญญาตรีแล้ว ฉันได้สังเกตเห็นปัญหาอื่นที่โปรแกรมเมอร์ส่วนใหญ่ที่เรียกว่า“ อาวุโส” ใน“ สภาพแวดล้อมการทำงานของฉัน” นั้นไม่ได้มีทักษะระดับสูงอย่างชาญฉลาด …

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