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

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

6
การทำงานกับตัวสร้างสแตติกใน Java
ฉันไม่ได้รับความเข้าใจที่สมบูรณ์ของตัวสร้างแบบคงที่ใน Java หากได้รับอนุญาตทำไมถึงได้รับอนุญาต คุณจะใช้มันในสถานการณ์อะไร มันจะมีจุดประสงค์อะไร ใครช่วยยกตัวอย่างง่ายๆให้ฉันได้ไหม
12 java 

3
แค่ได้รับการว่าจ้างในฐานะนักพัฒนาอาวุโสไม่เคยเป็นนักพัฒนารุ่นเยาว์เลยฉันควรคาดหวังอะไรบ้าง [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเป็นนักแปลอิสระและเป็นผู้เขียนรหัสในตอนกลางคืนและเมื่อไม่นานมานี้ฉันได้รับการว่าจ้างหลังจากการสัมภาษณ์หลายระดับใน บริษัท NY ที่น่ารักแม้ว่าฉันจะขาดบางสาขาก็ตาม นี่เป็นเรื่องธรรมดาสำหรับ บริษัท ที่จะจ้างผู้สูงอายุที่มีประสบการณ์น้อยกว่าหรือไม่? พวกเขาจะรอสักครู่เพื่อเคารพเส้นโค้งการเรียนรู้หรือไม่? ฉันไม่รู้อะไรเลยเกี่ยวกับการทำงานใน บริษัท ดังนั้นฉันจึงกังวล หลังจากหนึ่งสัปดาห์ฉันยังคงตรวจสอบและสำรวจแหล่งข้อมูล แต่หลังจากหนึ่งสัปดาห์ของการทำงานดูเหมือนว่าเพื่อนร่วมงานบางคนกำลังพิจารณาว่าฉันช้า ฉันเก่งด้านคณิตศาสตร์ฟิสิกส์อัลกอริธึม แต่ก็ยังต้องเรียนรู้เกี่ยวกับเทมเพลตทั้งหมดที่ใช้ใน บริษัท นี้ ทุกคนที่นี่ได้รับสมาชิกอาวุโสที่มีประสบการณ์น้อยกว่าในทีมของเขาหรือไม่ เป็นที่ยอมรับหรือไม่? ฉันวางแผนที่จะพบกับหัวหน้าของฉันเพื่อหยุดกังวลเกี่ยวกับเรื่องนั้น ฟังดูเหมือนความคิดที่ดี? [แก้ไข] ขอบคุณสำหรับคำตอบเหล่านี้ ฉันเป็นนักพัฒนาอาวุโส - ใหม่แน่นอน ฉันกลับไปที่สำนักงานด้วยความมั่นใจมากขึ้นในวันจันทร์ ฉันเดาว่าเป็นเรื่องปกติที่จะรู้สึกไร้ความสามารถเล็กน้อยต่อหน้าเทมเพลต / แหล่งที่ไม่รู้จักในช่วงสัปดาห์แรกเมื่อคุณได้รับผลตอบแทนที่ดี

2
ซ้อนห้องสมุดคงที่เป็นไปได้?
ฉันกำลังทำงานใน QT ไลบรารีแบบสแตติกสามารถขึ้นอยู่กับไลบรารีแบบสแตติกอื่นได้หรือไม่ (Static Lib ถูกสร้างโดยการเชื่อมโยงแบบสแตติกแบบอื่น) ถ้าใช่เป็นไปได้ไหมว่าหลังจากเชื่อมโยงไปยัง lib2 แล้ว lib ที่สร้างขึ้น (lib1) จะไม่ประกอบด้วยรหัสทั้งหมดของ lib2 หรือไม่ ในโครงการ Qt ของฉันฉันใช้ไลบรารีแบบสแตติกซึ่งขึ้นอยู่กับหลายไลบรารี ฉันต้องเพิ่มไลบรารีทั้งหมด (โดยมีส่วนหัวทั้งหมดในโครงการของฉัน) แม้ว่าฉันต้องการเพียงหนึ่ง lib (และหนึ่ง .h ของคลาสนั้น) ในรหัสของฉัน กรุณาอธิบายสถานการณ์
12 c++  qt  static-linking 

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

2
เราสามารถสร้างคอมพิวเตอร์ที่ใช้งานได้หรือไม่?
ในท้ายที่สุดแล้วโปรแกรมทั้งหมดของเรามีโครงสร้าง นั่นคือมันไม่สำคัญว่าเราจะสร้างมันให้บริสุทธิ์หรือใช้ประโยชน์ได้อย่างไร - พวกมันถูกแปลเป็นชุดประกอบเสมอดังนั้นสิ่งที่จริง ๆ แล้วสิ่งที่วิ่งอยู่หลังหมวกคือคำแนะนำรัฐและลูป พวกเราเลียนแบบ FP ในฐานะที่เป็นฮาร์ดแวร์ noob คำถามของฉันคือ: ทำไมเราไม่ใช้สถาปัตยกรรมคอมพิวเตอร์ที่คำนวณสิ่งต่าง ๆ ในรูปแบบที่ใช้งานได้จริง? ตัวอย่างเช่นคอมพิวเตอร์อาจประกอบด้วย "functional chips" ดั้งเดิมเช่น "concat", "map" และ "ลด" และโปรแกรมจะบอกคอมพิวเตอร์ว่าจะไหลของข้อมูลระหว่างชิปเหล่านั้นอย่างไรเพื่อคำนวณผลลัพธ์ที่ต้องการ เช่นในภาษาที่ต่อกัน สิ่งนี้ไม่สมเหตุสมผล แต่อาจแสดงสิ่งที่ฉันคิด

2
วงเล็บเหลี่ยมและเครื่องหมายปีกกาใน Clojure ยังคงเป็น S-expressions หรือไม่
ฉันพยายามที่จะเรียนรู้ Lisp และมองดู Lisps ทั้งหมดที่นั่นและความแตกต่างของพวกเขา ฉันเห็นว่าในการใช้งานบางส่วนของ Scheme คุณสามารถใช้วงเล็บเหลี่ยมสลับกันได้กับวงเล็บเหลี่ยมเพื่อความสะดวกในการอ่านดังนั้นเนื่องจากพวกเขาได้รับการปฏิบัติเหมือนกันฉันถือว่าพวกเขายังคงเป็นแค่ อย่างไรก็ตามใน Clojure ฉันเห็นว่ามีการใช้วงเล็บเหลี่ยมและเครื่องหมายปีกกาเพื่อแสดงชนิดข้อมูลต่าง ๆ เช่นเวกเตอร์เป็นต้น สิ่งเหล่านี้ยังคงเป็นนิพจน์ S ที่ถูกต้องหรือไม่หรือจะต้องพิจารณาว่าเป็นอะตอมหรือไม่ สิ่งนี้ "ทำลาย" แนวคิดทั้งหมดของ S-expressions หรือไม่ทำให้ Clojure กลายเป็น "ไม่บริสุทธิ์" ชัด ๆ
12 lisp  clojure 

2
ทำไมต้องใช้ typedefs สำหรับ structs
ใน C (ANSI, C99 ฯลฯ ) structs อาศัยอยู่ในเนมสเปซของตนเอง struct สำหรับรายการที่เชื่อมโยงอาจมีลักษณะเช่นนี้: struct my_buffer_type { struct my_buffer_type * next; struct my_buffer_type * prev; void * data; }; ดูเหมือนว่าเป็นเรื่องที่ค่อนข้างเป็นธรรมชาติ แต่สำหรับโปรแกรมเมอร์ C ส่วนใหญ่จะพิมพ์ struct เหล่านั้นโดยอัตโนมัติดังต่อไปนี้ typedef struct tag_buffer_type { struct tag_buffer_type * next; struct tag_buffer_type * prev; void * data; } my_buffer_type; และจากนั้นอ้างอิง struct …

6
อะไรคือข้อเสียของประเภทที่ไม่เปลี่ยนรูป?
ฉันเห็นตัวเองโดยใช้ประเภทมากขึ้นและเปลี่ยนรูปมากขึ้นเมื่อกรณีของชั้นไม่ได้คาดว่าจะมีการเปลี่ยนแปลง ต้องใช้งานมากขึ้น (ดูตัวอย่างด้านล่าง) แต่ทำให้การใช้ประเภทในสภาพแวดล้อมแบบมัลติเธรดง่ายขึ้น ในเวลาเดียวกันฉันไม่ค่อยเห็นประเภทที่ไม่เปลี่ยนรูปในแอปพลิเคชั่นอื่น ๆ แม้ว่าความไม่แน่นอนจะไม่เกิดประโยชน์ก็ตาม คำถาม:ทำไมประเภทที่ไม่เปลี่ยนรูปแบบจึงไม่ค่อยถูกใช้ในแอปพลิเคชันอื่น เป็นเพราะมันนานกว่าที่จะเขียนโค้ดสำหรับประเภทที่ไม่เปลี่ยนรูป หรือฉันกำลังพลาดบางสิ่งบางอย่างและมีข้อบกพร่องที่สำคัญเมื่อใช้ประเภทที่ไม่เปลี่ยนรูปแบบ? ตัวอย่างจากชีวิตจริง สมมติว่าคุณได้รับWeatherRESTful API เช่นนั้น: public Weather FindWeather(string city) { // TODO: Load the JSON response from the RESTful API and translate it into an instance // of the Weather class. } สิ่งที่เราจะเห็นโดยทั่วไปคือ (บรรทัดใหม่และความคิดเห็นถูกลบออกเพื่อย่อรหัส): public sealed class Weather { public City …
12 c#  immutability 

2
อาจเริ่มต้นตัวแปร / สมาชิกด้วยปริศนาขีดเส้นใต้คอมไพเลอร์?
ฉันได้รับการสอนมาตั้งแต่มัธยมซึ่งกำหนดตัวแปรเช่นนี้: int _a; หรือ int __a; ควรพิจารณาการปฏิบัติที่ไม่ดีเพราะในที่สุดนี้จะไขปริศนาคอมไพเลอร์ที่ใช้ตัวแปรที่เริ่มต้นด้วยการขีดเส้นใต้เพื่อตั้งชื่อตัวแปรชั่วคราว เท่าที่ฉันรู้ว่านี่คือเหตุผลว่าทำไมบางคนชอบที่จะย้ายขีดเส้นใต้ในตอนท้ายของชื่อเช่น: int a_; อย่างไรก็ตามฉันเห็นโค้ดจำนวนมากรอบตัวที่ใช้ประโยชน์จากตัวแปรเริ่มต้นขีดล่าง และรหัสนั้นสร้างค่อนข้างดีทั้ง Visual Studio 2010 และ g ++ 4.x ดังนั้นฉันจึงสงสัยว่า: นี่ไม่ใช่ปัญหาทุกวันนี้หรือไม่? คอมไพเลอร์สมัยใหม่ฉลาดกว่าเกี่ยวกับการตั้งชื่อการประชุมหรือไม่?

5
ทิ้งข้อยกเว้นรันไทม์ในแอปพลิเคชัน Java
ฉันทำงานเป็นผู้รับเหมาออกแบบองค์กร Java แอปพลิเคชันสำหรับลูกค้าของฉันในบทบาทของลูกค้าเป้าหมายทางเทคนิค แอปพลิเคชันจะถูกใช้โดยผู้ใช้ปลายทางและจะมีทีมสนับสนุนที่จะสนับสนุนแอปพลิเคชันเมื่อเราออกจาก โอกาสในการขายด้านเทคนิคอื่น ๆ ที่ฉันทำงานอยู่ภายใต้ความประทับใจที่การจัดการข้อยกเว้นจะทำให้โค้ดสกปรก ระบบควรโยนข้อยกเว้นที่ตรวจสอบจากระดับบริการและส่วนที่เหลือของรหัสควรโยนข้อยกเว้นรันไทม์จากระดับอื่น ๆ ทั้งหมดเพื่อให้ไม่จำเป็นต้องจัดการกับข้อยกเว้นที่ไม่ได้ตรวจสอบ จำเป็นต้องมีข้อยกเว้นที่ไม่ จำกัด ในแอปพลิเคชันธุรกิจอย่างไร จากประสบการณ์ของฉันในอดีตเกี่ยวกับข้อยกเว้นรันไทม์: 1) ข้อยกเว้นที่ไม่ได้ตรวจสอบทำให้โค้ดไม่สามารถคาดเดาได้เพราะจะไม่แสดงแม้แต่ใน Javadoc 2) การโยนข้อยกเว้นที่ไม่ได้ตรวจสอบในแอปพลิเคชันทางธุรกิจนั้นไม่มีความหมายเพราะเมื่อคุณโยนทิ้งและมันตรงไปที่ใบหน้าของผู้ใช้คุณจะอธิบายให้ผู้ใช้ทราบได้อย่างไร ฉันเคยเห็นเว็บแอปพลิเคชันเพียงพอซึ่งแสดง500 -Internal Error. Contact Administratorว่าไม่มีความหมายสำหรับผู้ใช้หรือทีมสนับสนุนที่จัดการแอปพลิเคชัน 3) การโยนข้อยกเว้นรันไทม์บังคับให้ผู้ใช้ของคลาสโยนข้อยกเว้นเพื่อเดินผ่านซอร์สโค้ดเพื่อตรวจแก้จุดบกพร่องและดูสาเหตุที่ข้อยกเว้นถูกโยน สิ่งนี้สามารถหลีกเลี่ยงได้หาก Javadoc ของข้อยกเว้นรันไทม์มีการบันทึกไว้อย่างดีเยี่ยมซึ่งฉันพบว่าไม่มีกรณี

2
ความแตกต่างพื้นฐานระหว่าง fn () และ fn ใหม่ () ใน javascript
ในทุกด้านการเรียกใช้ฟังก์ชันที่มีและไม่มีคำหลักใหม่แตกต่างกันในจาวาสคริปต์หรือไม่ ฉันหมายถึงทุกสิ่งที่แตกต่างกันอย่างไร testFn() VS new testFn()
12 javascript 

5
ฉันจะรู้ได้อย่างไรว่าคอมพิวเตอร์ของฉันเป็นสถาปัตยกรรมฮาร์วาร์ดหรือฟอนนอยมันน์
ฉันเข้าใจความแตกต่างระหว่างสถาปัตยกรรมทั้งสองคือการแยกคำสั่งจากข้อมูลในสถาปัตยกรรมฮาร์วาร์ด แต่ฉันจะรู้ได้อย่างไรว่าฉันใช้ระบบประเภทใด เป็นไปได้ไหมที่จะเขียนโปรแกรมเพื่อให้โปรแกรมพิจารณาว่าระบบเป็น von Neumann หรือ Harvard หรือไม่? อาจมีสถาปัตยกรรมอื่นหรือสถาปัตยกรรมเหล่านี้เป็นที่รู้จักกันเท่านั้น?

8
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะรวม enums ทั้งหมดไว้ในไฟล์เดียวและใช้มันในหลาย ๆ คลาส?
ฉันเป็นนักพัฒนาเกมที่ต้องการฉันทำงานกับเกมอินดี้เป็นครั้งคราวและในขณะที่ฉันได้ทำบางสิ่งบางอย่างซึ่งดูเหมือนเป็นการปฏิบัติที่ไม่ดีในตอนแรก แต่ฉันต้องการคำตอบจากโปรแกรมเมอร์ที่มีประสบการณ์บางคนที่นี่ สมมติว่าฉันมีไฟล์ชื่อenumList.hฉันประกาศทั้งหมด enums ที่ฉันต้องการใช้ในเกมของฉัน: // enumList.h enum materials_t { WOOD, STONE, ETC }; enum entity_t { PLAYER, MONSTER }; enum map_t { 2D, 3D }; // and so on. // Tile.h #include "enumList.h" #include <vector> class tile { // stuff }; แนวคิดหลักคือฉันประกาศ enums ทั้งหมดในเกมใน1 ไฟล์แล้วนำเข้าไฟล์นั้นเมื่อฉันต้องการใช้ enum ที่แน่นอนจากมันแทนที่จะประกาศในไฟล์ที่ฉันต้องการใช้ ฉันทำเช่นนี้เพราะทำให้ทุกสิ่งสะอาดฉันสามารถเข้าถึง enum …

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


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