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

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

8
การใช้ Make ถือว่าล้าสมัยหรือไม่ [ปิด]
ดังนั้นฉันจึงเจอหลายความคิดเห็น / โพสต์ / อื่น ๆ เกี่ยวกับการสร้าง makefiles โดยตรงและมันเป็นเรื่องโง่ที่ต้องทำในปี 2015 ฉันรู้เครื่องมือต่าง ๆ เช่น CMake และฉันใช้ CMake บ่อยครั้งมาก CMake กำลังสร้าง Makefile ให้คุณและช่วยในการลบความน่าเบื่อของการทำมันด้วยตัวคุณเอง แน่นอนว่ามันเพิ่มคุณสมบัติที่ยอดเยี่ยมอื่น ๆ อีกมากมาย ... แต่มันก็ยังเป็น Makefile ในที่สุด ดังนั้นคำถามของฉันคือการพูดคุย 'ล้าสมัย' เกี่ยวกับการอ้างอิงถึงยูทิลิตี้ Make ทั้งหมดหรือเพียงแค่ความคิดในการเขียน Makefiles ของคุณเองหรือไม่ ฉันไม่ได้ใช้ IDE สำหรับการพัฒนา C / C ++ เลย (แค่ emacs) ดังนั้นฉันจึงเขียน Makefiles เสมอ ถ้า Make …
31 c++  c  builds  make  cmake 

10
มีเหตุผลหรือไม่ที่จะสมมติว่าปริมาณทางกายภาพใด ๆ ที่สามารถแทนด้วยจำนวนเต็ม 64- บิตโดยไม่ล้นหรือต่ำกว่า?
อัลกอริทึมการค้นหาแบบไบนารีดั้งเดิมใน JDK ใช้จำนวนเต็ม 32 บิตและมีข้อบกพร่องมากเกินไปหาก(low + high) > INT_MAX( http://googleresearch.blogspot.com/2006/06/extra-extra-extra-read-all-about-it-nearly.html ) . หากเราเขียนอัลกอริทึมการค้นหาแบบไบนารี่เดียวกันโดยใช้ (ลงนาม) 64- บิตเราสามารถสันนิษฐานได้ว่าlow + highจะไม่เกิน INT64_MAX เพราะเป็นไปไม่ได้ที่ร่างกายจะมีหน่วยความจำ 10 ^ 18 ไบท์หรือไม่ เมื่อใช้ (ลงนาม) จำนวนเต็ม 64- บิตเพื่อแสดงปริมาณทางกายภาพมันมีเหตุผลที่จะถือว่าอันเดอร์โฟล์และล้นไม่สามารถเกิดขึ้นได้?

7
เป็นไปได้หรือไม่ที่ตรรกะทางธุรกิจจะไม่คืบคลานเข้ามาในมุมมอง?
ฉันได้พัฒนาโครงการเว็บแอพพลิเคชั่นหลายโครงการในช่วง 3 ปีที่ผ่านมาทั้งที่ทำงานส่วนตัวและที่ทำงานและฉันไม่สามารถคิดออกได้ว่าเป็นไปได้อย่างน้อยตรรกะทางธุรกิจบางอย่างที่ไม่สิ้นสุดในมุมมองของแอปพลิเคชัน ในกรณีส่วนใหญ่จะมีปัญหาเช่น "ถ้าผู้ใช้เลือกตัวเลือก x ดังนั้นแอปพลิเคชันจะต้องเปิดใช้งานเขาสามารถให้ข้อมูลสำหรับ y ถ้าไม่เช่นนั้น s / เขาควรจะให้ข้อมูล z" หรือดำเนินการ AJAX ซึ่งควรใช้การเปลี่ยนแปลงบางอย่างกับโมเดล แต่ไม่ยอมรับจนกว่าผู้ใช้จะร้องขออย่างชัดเจน นี่เป็นปัญหาที่ง่ายที่สุดที่ฉันพบและฉันไม่สามารถเข้าใจได้ว่าจะหลีกเลี่ยงตรรกะที่ซับซ้อนในมุมมองได้อย่างไร หนังสือส่วนใหญ่ที่ฉันได้อ่านอธิบาย MVC มักจะแสดงตัวอย่างเล็ก ๆ น้อย ๆ อย่างเช่นการดำเนินการ CRUD ที่เพิ่งอัปเดตข้อมูลบนเซิร์ฟเวอร์และแสดง แต่ CRUD ไม่ใช่กรณีของแอปพลิเคชันที่ร่ำรวยที่สุด เป็นไปได้ไหมที่จะมีมุมมองโดยไม่มีเหตุผลทางธุรกิจเลย?

9
อธิบาย MVC ให้ผู้ที่ไม่ใช่โปรแกรมเมอร์ [ปิด]
ฉันต้องการอธิบาย MVC ให้ผู้ที่ไม่ใช่โปรแกรมเมอร์ คือผู้จัดการของแผนกอื่น ๆ ในบริบทของรายงานความคืบหน้า หนึ่งในสิ่งที่ฉันทำคือ refactor codebase ของเราไปสู่การแยก MVC พวกเขาอาจถามแยก MVC คืออะไร? ทำไมพวกเขาอาจจำเป็นต้องถาม? หลังจากอ่านคำตอบทางเทคนิคอย่างเป็นธรรมเช่นนี้ MVC คืออะไรจริง ๆ ฉันไม่พอใจอย่างสิ้นเชิงเนื่องจากฉันจะคุยกับโปรแกรมเมอร์ที่ไม่ใช่ พวกเขาอาจพยักหน้า แต่พวกเขาอาจจะไม่เข้าใจว่ามันคืออะไรและทำไมมันถึงต้องการ ในความเป็นจริงฉันไม่เข้าใจสิ่งที่ MVC เป็นอย่างอื่นนอกจาก "การแยกข้อกังวลหน้าที่ฟังก์ชั่นคลาสบล็อกงานสิ่งต่าง ๆ เพื่อปรับปรุงความยืดหยุ่นในการเปลี่ยนแปลงซอฟต์แวร์" การแยกฐานข้อมูลออกจากมุมมองและมุมมองจากตรรกะทางธุรกิจโดยใช้เทคนิคเช่นเครื่องมือ DI และ OO และเทคนิคเป็นสิ่งที่ฉันคิดว่าเป็นการแยก MVC ดังนั้นครั้งต่อไปที่คุณกำลังอธิบาย MVC ให้กับผู้ที่ไม่ใช่โปรแกรมเมอร์ที่มีพื้นฐานด้านการขายและการบัญชีเช่นคุณจะบอกอะไรพวกเขา
31 mvc 

3
ฉันสามารถใช้ปลั๊กอินลิขสิทธิ์ซอฟต์แวร์ Apache, เวอร์ชัน 2.0 และ GNU LGPL 3 ในเว็บแอปพลิเคชันเชิงพาณิชย์ของฉันได้หรือไม่?
ฉันมีสองปลั๊กอิน หนึ่งมีใบอนุญาต GNU LGPL 3 และอื่น ๆ มีใบอนุญาตซอฟต์แวร์ Apache รุ่น 2.0 ฉันสามารถใช้มันในแอพเพื่อการค้าของฉันได้ไหม? และถ้าใช่ฉันควรระวังอะไรบ้าง?

6
การทิ้ง RuntimeExceptions ใหม่ในโค้ดที่ไม่สามารถเข้าถึงได้เป็นสไตล์ที่ไม่ดีหรือไม่?
ฉันได้รับมอบหมายให้ดูแลรักษาแอปพลิเคชันที่เขียนเมื่อไม่นานมานี้โดยนักพัฒนาที่มีทักษะมากกว่า ฉันเจอโค้ดนี้แล้ว: public Configuration retrieveUserMailConfiguration(Long id) throws MailException { try { return translate(mailManagementService.retrieveUserMailConfiguration(id)); } catch (Exception e) { rethrow(e); } throw new RuntimeException("cannot reach here"); } ฉันอยากรู้ว่าการขว้างปาRuntimeException("cannot reach here")นั้นมีเหตุผลหรือไม่ ฉันอาจจะพลาดสิ่งที่เห็นได้ชัดว่ารู้ว่าโค้ดนี้มาจากเพื่อนร่วมงานที่มีประสบการณ์มากกว่า แก้ไข: นี่คือร่างใหม่ที่บางคำตอบเรียก ฉันถือว่ามันไม่สำคัญในคำถามนี้ private void rethrow(Exception e) throws MailException { if (e instanceof InvalidDataException) { InvalidDataException ex = (InvalidDataException) e; …

10
ฉันจะซ่อนลายเซ็นของฉันในโปรแกรมได้อย่างไร? [ปิด]
เรามีหลักสูตรการเขียนโปรแกรมของมหาวิทยาลัยและเพื่อนนักเรียนกำลังถามคำถามการเขียนโปรแกรมในกลุ่ม Facebook ของเรา ฉันลังเลเล็กน้อยที่จะแบ่งปันโปรแกรมทั้งหมดของฉันโดยเฉพาะอย่างยิ่งถ้ามันเป็นสิ่งที่ยอดเยี่ยมสำหรับการมอบหมายอย่างใดอย่างหนึ่งเนื่องจาก TAs เหล่านี้ดูที่และพวกเขาอาจสังเกตเห็นว่ามีบางคนมีโปรแกรมเดียวกันและเริ่มถามคำถามว่ามาที่ไหน จาก. ถึงกระนั้นบางครั้งฉันต้องการแบ่งปันรหัสของฉันเพื่อช่วยเหลือผู้อื่น แต่ฉันไม่ต้องการให้คนอื่นคว้างานของฉัน (ชี้แจง: เราได้รับอนุญาตให้ทำงานร่วมกับงาน)ซึ่งแน่นอนว่าเป็นเส้นบาง ๆ ในขณะที่ฉันต้องการช่วยเหลือบางคนฉันกังวลว่าพวกเขาอาจไม่มีความซื่อสัตย์ทางวิชาการในการเขียนรหัสด้วยตนเอง เพื่อนนักเรียนส่วนใหญ่ของฉันไม่ได้ก้าวหน้าในทักษะของพวกเขาดังนั้นฉันจึงออกไปพูดปิดบังชื่อของฉันในสตริง -64 เข้ารหัสที่สร้างขึ้นในสถานที่ที่ไม่ต่อเนื่อง ถึงกระนั้นมันก็อาจจะเห็นได้ชัดเกินไปว่าสายแบบสุ่มที่จะนั่งรอบ มีตัวเลือกอะไรบ้างในการซ่อนชื่อของฉันในโปรแกรมโดยที่ไม่สงสัย ฉันเคยเห็นที่ CodeGolf ว่าพวกเขาทำให้ศิลปะ ASCII กลายเป็นสิ่งอื่นเมื่อประเมิน มีกลยุทธ์ที่คล้ายกันที่ฉันสามารถใช้ประโยชน์ได้หรือไม่? ทางออกที่ดีที่สุดจะเป็นสิ่งที่ดูเหมือนสิ่งที่เหมาะสมอย่างรอบคอบ แต่ในความเป็นจริงมีฟังก์ชั่นเพื่อพิสูจน์ว่าฉันเขียนมันตั้งแต่ต้น การชี้แจง: (ขออภัยควรกล่าวก่อนหน้านี้)เราได้รับอนุญาตให้ทำงานร่วมกัน แต่ต้องอธิบายโปรแกรมของเราต่อ TAs เพื่อรับคะแนน มันเป็นเพียงความพึงพอใจที่จะซ่อนไข่อีสเตอร์บางส่วนไว้ในโค้ดของผู้อื่นถ้ามันรั่วไหลออกไปโดยเฉพาะอย่างยิ่งเนื่องจากมันอาจดึงดูดให้แลกเปลี่ยนโปรแกรมเพื่อตรวจสอบว่าคำตอบของปัญหาที่พวกเขาสร้างนั้นเทียบเท่ากันหรือเพื่อดูว่าคนอื่นแก้ปัญหาอย่างไร
31 copyright 

3
GCC กำลังจะตายโดยไม่มีเธรดรองรับบน Windows หรือไม่ [ปิด]
ฉันต้องการความคิดเห็น GCC เป็นคอมไพเลอร์ที่ดีอยู่เสมอ ฉันเพิ่งพบว่าบน Windows GCC ไม่มีstd::threadการสนับสนุนบังคับให้ผู้ใช้ Windows ใช้คอมไพเลอร์อื่นเพราะคุณสมบัติที่น่าตื่นเต้นที่สุดยังคงหายไป แต่ทำไม GCC ถึงยังไม่มีการรองรับเธรดใน Windows ปัญหาใบอนุญาต? ABI เข้ากันไม่ได้? (มีห้องสมุดข้ามแพลตฟอร์มหลายแห่งที่ใช้มัลติเธรด: บูสต์, POCO, SDL, wxwidgets เป็นต้นมันไม่ง่ายเลยที่จะใช้ที่มีอยู่แล้วและ MIT / libpng ที่ได้รับอนุญาตรหัสเพื่อให้พอดีกับหลุมนี้แทนที่จะส่ง GCC ไม่มีการสนับสนุนเธรด?) เมื่อเร็ว ๆ นี้เมื่อดูการเปรียบเทียบคอมไพเลอร์ GCC มีการรองรับคุณสมบัติ C ++ 11 ที่กว้างที่สุดในส่วนที่เกี่ยวกับคอมไพเลอร์อื่น ๆ ยกเว้นความจริงที่ว่าใน Windows นี้ไม่เป็นความจริงเพราะเรายังขาดอะตอมมิก mutexes และเธรด: ฉันต้องการทราบเพิ่มเติมเกี่ยวกับหัวข้อนี้ แต่สิ่งเดียวที่ฉันสามารถหาได้คือคนที่ขอความช่วยเหลือเพราะ: "thread" ไม่มีอยู่ใน std namespace ดูการติดตามตั๋วและการสนทนาทางไปรษณีย์ของ …

5
แนวทางปฏิบัติที่ดีที่สุดสำหรับการเรียกใช้โค้ดที่ไม่น่าเชื่อถือ
ฉันมีโครงการที่ฉันต้องการอนุญาตให้ผู้ใช้เรียกใช้รหัสหลามที่ไม่น่าเชื่อถือ ( เช่นนี้ ) กับเซิร์ฟเวอร์ของฉัน ฉันค่อนข้างใหม่สำหรับงูใหญ่และฉันต้องการหลีกเลี่ยงการทำผิดพลาดใด ๆ ที่แนะนำช่องโหว่ด้านความปลอดภัยหรือช่องโหว่อื่น ๆ เข้าสู่ระบบ มีแนวทางปฏิบัติที่ดีที่สุดให้อ่านแนะนำหรือตัวชี้อื่น ๆ ที่คุณสามารถให้บริการของฉันใช้งานได้ แต่ไม่สามารถใช้งานได้? นี่คือสิ่งที่ฉันพิจารณาแล้ว: ลบออก__builtins__จากบริบทที่จะห้ามการใช้งานของแพคเกจที่อาจเป็นอันตรายเช่นexec osผู้ใช้จะสามารถใช้แพ็คเกจที่ฉันให้ไว้ได้เท่านั้น ใช้เธรดเพื่อบังคับใช้การหมดเวลาที่เหมาะสม ฉันต้องการ จำกัด จำนวนหน่วยความจำทั้งหมดที่สามารถจัดสรรได้ภายในexecบริบท แต่ฉันไม่แน่ใจว่าเป็นไปได้หรือไม่ มีทางเลือกตรงไปตรงมาexecแต่ฉันไม่แน่ใจว่าสิ่งเหล่านี้จะเป็นประโยชน์ที่นี่: การใช้ast.NodeVisitorเพื่อตรวจจับการพยายามเข้าถึงวัตถุที่ไม่ปลอดภัย แต่ฉันควรห้ามวัตถุอะไร ค้นหาเครื่องหมายขีดล่างคู่ใด ๆ ในอินพุต (สง่างามน้อยกว่าตัวเลือกด้านบน) การใช้PyPyหรือสิ่งที่คล้ายกับรหัส sandbox หมายเหตุ:ฉันทราบว่ามีล่ามที่ใช้ JavaScript อย่างน้อยหนึ่งตัว ที่จะไม่ทำงานในสถานการณ์ของฉัน

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

2
การทดสอบหน่วย Guava สร้างขึ้นโดยอัตโนมัติอย่างไร
Guava มีกรณีทดสอบหน่วยสร้างขึ้นโดยอัตโนมัติ : Guava มีจำนวนยูนิตทดสอบที่มาก: ณ เดือนกรกฎาคม 2012 แพ็คเกจทดสอบ Guava มีมากกว่า 286,000 กรณีทดสอบรายบุคคล สิ่งเหล่านี้ส่วนใหญ่สร้างขึ้นโดยอัตโนมัติไม่ใช่เขียนด้วยมือ แต่ความครอบคลุมในการทดสอบของ Guava นั้นละเอียดมากโดยเฉพาะ com.google.common.collect มันถูกสร้างขึ้นมาได้อย่างไร? มีการใช้เทคนิคและเทคโนโลยีใดในการออกแบบและสร้างสิ่งเหล่านั้น

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

3
“ minimap” ของ Sublime ช่วยเพิ่มผลผลิตหรือไม่ [ปิด]
ฉันเป็นแฟนตัวยงของ Sublime หนึ่งในคุณสมบัติที่ฉันโปรดปรานคือความสามารถในการเลื่อนดูไฟล์ของคุณโดยใช้รูปภาพที่ถูกบีบอัดของข้อความของคุณที่มุมบนขวามือ (ย่อแผนที่) ความรู้สึกของฉันคือสิ่งนี้เป็นสิ่งที่ดีสำหรับการเพิ่มผลผลิต: การมีแผนที่ย่อนี้เพื่อเลื่อนดูปรับปรุงประสิทธิภาพการทำงานจริงหรือไม่? PS - คำถามด้าน: ประเสริฐได้คิดค้นแนวคิดนี้หรือไม่หรือพวกเขานำมาจากโปรแกรมแก้ไขข้อความอื่นได้หรือไม่?

8
เมื่อใดที่คุณจะต้องใช้ "กระทู้นับแสน"
Erlang, Go และ Rust อ้างสิทธิ์ทั้งหมดไม่ทางใดก็ทางหนึ่งซึ่งสนับสนุนการเขียนโปรแกรมพร้อมกันด้วย "threads" / coroutines ราคาถูก ไปคำถามที่พบบ่อยฯ : เป็นจริงในการสร้าง goroutines หลายแสนในพื้นที่ที่อยู่เดียวกัน The Rust Tutorialพูดว่า: เนื่องจากงานมีราคาถูกกว่าอย่างมากในการสร้างกว่าเธรดดั้งเดิม Rust สามารถสร้างงานพร้อมกันนับแสนในระบบ 32 บิตโดยทั่วไป เอกสารของ Erlangกล่าวว่า: ขนาดฮีพเริ่มต้นเริ่มต้นที่ 233 คำนั้นค่อนข้างอนุรักษ์นิยมเพื่อสนับสนุนระบบ Erlang ที่มีกระบวนการหลายแสนหรือหลายล้านกระบวนการ คำถามของฉัน: แอปพลิเคชั่นประเภทใดที่ต้องการเธรดการทำงานพร้อมกันจำนวนมาก? มีเพียงเว็บเซิร์ฟเวอร์ที่ยุ่งที่สุดเท่านั้นที่จะได้รับผู้เยี่ยมชมหลายพันคนพร้อมกัน แอปพลิเคชั่นประเภทบอส - คนงาน / การส่งงานที่ฉันเขียน Hit ลดลงส่งคืนเมื่อจำนวนเธรด / กระบวนการมากกว่าจำนวนแกนประมวลผลทางกายภาพมาก ฉันคิดว่ามันสมเหตุสมผลสำหรับแอปพลิเคชั่นตัวเลข แต่ในความเป็นจริงคนส่วนใหญ่มอบหมายให้ขนานกับไลบรารีของบุคคลที่สามที่เขียนใน Fortran / C / C ++ ไม่ใช่ภาษารุ่นใหม่กว่านี้

6
ทำไมภาษาการเขียนโปรแกรมอนุญาตให้แชโดว์ / การซ่อนตัวแปรและฟังก์ชั่น?
ภาษาการเขียนโปรแกรมที่นิยมมากที่สุด (เช่น C ++, Java, Python ฯลฯ ) มีแนวคิดของการซ่อน / แชโดว์ของตัวแปรหรือฟังก์ชั่น เมื่อฉันพบการซ่อนหรือเงาพวกเขาเป็นสาเหตุของข้อบกพร่องที่หายากและฉันไม่เคยเห็นกรณีที่ฉันพบว่าจำเป็นต้องใช้คุณสมบัติเหล่านี้ของภาษา สำหรับฉันมันจะเป็นการดีกว่าถ้าหากไม่อนุญาตให้ซ่อนและซ่อนเงา มีใครรู้บ้างเกี่ยวกับการใช้แนวคิดเหล่านี้ อัปเดต: ฉันไม่ได้อ้างถึงการห่อหุ้มของสมาชิกในชั้นเรียน (ส่วนตัว / สมาชิกที่ได้รับความคุ้มครอง)

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