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

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

6
"Mapper" เป็นรูปแบบการออกแบบที่ถูกต้องหรือเป็นรูปแบบของ "โรงงาน" หรือไม่
รูปแบบทั่วไปที่ฉันเห็นคือสิ่งที่เรียกว่าMapperรูปแบบ (เพื่อไม่ให้สับสนDataMapperซึ่งเป็นอย่างอื่นทั้งหมด) ซึ่งใช้เป็นอาร์กิวเมนต์แหล่งข้อมูล "ดิบ" บางชนิด (เช่น ADO.NET DataReaderหรือDataSet) และแมปเขตข้อมูลไปยัง คุณสมบัติบนวัตถุธุรกิจ / โดเมน ตัวอย่าง: class PersonMapper { public Person Map(DataSet ds) { Person p = new Person(); p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString(); // other properties... return p; } } แนวคิดเป็นเกตเวย์ / DAO / Repository / ฯลฯ ของคุณ จะโทรเข้าไปใน Mapper ก่อนที่จะส่งคืนดังนั้นคุณจะได้รับวัตถุทางธุรกิจที่หลากหลายเมื่อเทียบกับที่เก็บข้อมูลพื้นฐาน อย่างไรก็ตามดูเหมือนว่าจะเกี่ยวข้องกันหากไม่เหมือนกันกับแพทเทิร์น Factory (ใน …

16
การเรียนรู้ภาษาการเขียนโปรแกรมจำนวนมากเป็นเรื่องเจ็บปวดหรือไม่?
ฉันเริ่มอาชีพการเขียนโปรแกรมของฉันกับ BASIC ในช่วงเกรด 9 ฉันเรียนรู้ BASIC เล็กน้อยโดยการเขียนโปรแกรมง่าย ๆ เพื่อเพิ่มลบและพิมพ์ จากนั้นฉันไปมหาวิทยาลัยและรับข้อมูลคอมพิวเตอร์และวิศวกรรมระบบ ในปีแรกฉันได้รับการสอน C และฉันมีความสามารถที่ดี ต่อไปฉันเรียนรู้ C ++ ในปีที่สอง มันเพิ่งสอนความรู้เกี่ยวกับ OOP ให้ฉัน ตอนนี้ฉันกำลังทำ PHP (พร้อมด้วย HTML) ฉันยังไม่เชี่ยวชาญ C ++, BASIC หรือ PHP ตอนนี้ฉันวางแผนที่จะย้ายไปที่การพัฒนาอุปกรณ์พกพา แต่ฉันรู้สึกว่าฉันไม่ได้ครอบคลุมทุกอย่างในภาษาที่ฉันเรียนรู้ มันสำคัญจริงๆหรือ
37 php  c++  c  basic 

8
รูปแบบที่ยอมรับสำหรับการใช้คำหลัก `this 'ใน Java คืออะไร
ฉันมาจากภาษาต่าง ๆ เช่น Python หรือ Javascript (และอื่น ๆ ที่ไม่ค่อยมีวัตถุประสงค์เชิงวัตถุ) และฉันพยายามปรับปรุงความรู้การทำงานของ Java ซึ่งฉันรู้เพียงแค่ผิวเผินเท่านั้น มันถือว่าเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะผนวกthisเข้ากับแอ็ตทริบิวต์อินสแตนซ์ปัจจุบันเสมอ? ฉันรู้สึกเป็นธรรมชาติมากขึ้นที่จะเขียน ... private String foo; public void printFoo() { System.out.println(this.foo); } ... กว่า ... private String foo; public void printFoo() { System.out.println(foo); } ... มันช่วยให้ฉันแยกแยะแอตทริบิวต์ของอินสแตนซ์จากตัวแปรโลคอล แน่นอนในภาษาอย่าง Javascript มันสมเหตุสมผลมากกว่าที่จะใช้เสมอthisเนื่องจากมีหนึ่งฟังก์ชันที่สามารถซ้อนฟังก์ชันได้ดังนั้นตัวแปรท้องถิ่นจึงมาจากขอบเขตที่กว้างขึ้น ใน Java เท่าที่ฉันเข้าใจไม่มีการทำรังแบบนี้เป็นไปได้ (ยกเว้นคลาสภายใน) ดังนั้นอาจไม่ใช่ปัญหาใหญ่ ในกรณีใด ๆ thisฉันชอบที่จะใช้ มันจะรู้สึกแปลกและไม่สำนวนหรือไม่?

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

9
ทารกเป็นขั้นตอนลูกน้อยของคุณใน TDD อย่างไร
วันนี้เรากำลังฝึกอบรม TDD และพบประเด็นต่อไปนี้ของความเข้าใจผิด งานสำหรับอินพุต "1,2" ผลรวมของตัวเลขซึ่งคือ 3 สิ่งที่ฉันเขียน (ใน C #) คือ: numbers = input.Split(','); return int.Parse(numbers[0]) + int.Parse(numbers[1]); //task said we have two numbers and input is correct แต่คนอื่นชอบที่จะทำอย่างอื่น ก่อนอื่นสำหรับการป้อน "1,2" พวกเขาได้เพิ่มรหัสต่อไปนี้: if (input == "1,2") return 3; จากนั้นพวกเขาแนะนำการทดสอบอีกหนึ่งครั้งสำหรับอินพุต "4,5" และการใช้งานที่เปลี่ยนแปลง: if (input == "1,2") return 3; else if …
37 testing  tdd 

17
คุณสามารถสร้างรหัสที่มีคุณภาพสูงได้จริงหรือไม่หากคุณไม่ได้นอนหลับ [ปิด]
ผมเคยได้ยินเกี่ยวกับการเขียนโปรแกรมการเขียนโปรแกรมเป็นเวลาสองวันโดยไม่ต้องนอนและดื่มกาแฟและกระทิงแดง นอกจากนี้ในภาพยนตร์อย่างThe Social Networkในฉากที่พวกเขาแสดงให้เห็นว่าMark Zuckerbergได้เขียนโปรแกรมมา 36 ชั่วโมงแล้ว ฉันยังอ่านที่ไหนสักแห่งที่ใน บริษัท เช่น Facebook, Google, foursquareฯลฯ พวกเขาสามารถเขียนโค้ดได้นานกว่า 24 ชั่วโมงโดยไม่ต้องนอนหลับ นี่เป็นเรื่องจริงหรือ คุณสามารถสร้างรหัสคุณภาพสูงได้จริงหรือไม่หากคุณไม่ได้นอนหลับ สิ่งต่าง ๆ เช่น Red Bull ประกอบขึ้นเพื่อการนอนหลับได้หรือไม่?

9
ฉันจะเอาชนะอัมพาตโดยการวิเคราะห์ได้อย่างไรเมื่อเขียนโค้ด?
เมื่อฉันเริ่มโครงการใหม่ฉันมักจะเริ่มคิดเกี่ยวกับรายละเอียดของการดำเนินการทันที "ฉันจะวาง DataBaseHandler ไว้ที่ไหนฉันควรใช้มันอย่างไรคลาสที่ต้องการใช้มันขยายจาก Abstractclass superclass บางส่วน .. ฉันควรใช้อินเทอร์เฟซหรือไม่ฉันจะใช้อินเทอร์เฟซในระดับใด วิธีในการส่งคำขอและการแยกวิเคราะห์ข้อมูล " ฉันสิ้นสุดการถ่วงเวลานานเพราะฉันต้องการรหัสสำหรับความสามารถในการขยายและการนำกลับมาใช้ใหม่ แต่ฉันรู้สึกว่าแทบจะเป็นไปไม่ได้เลยที่จะคิดถึงอดีตเกี่ยวกับวิธีการนำไปใช้อย่างสมบูรณ์ แล้วถ้าฉันพยายามจะพูดว่า "ขันมันให้เสร็จแล้ว!" ฉันก็ชนกำแพงอิฐอย่างรวดเร็วเพราะรหัสของฉันไม่ได้จัดระเบียบฉันผสมระดับนามธรรมต่าง ๆ เป็นต้น คุณมีเทคนิค / วิธีการอะไรบ้างในการเปิดตัวโครงการใหม่ในขณะที่ตั้งค่าโครงสร้างแบบลอจิคัล / แบบแยกส่วนที่จะขยายได้ดี - -แก้ไข - - นี่เป็นประเภทของคำถามที่ตอบรับยากแล้ว แต่ต้องการได้รับคำติชมเพิ่มเติมดูว่ามีฉันทามติบ้างไหม TDD ฟังดูเจ๋งจริงๆและตรงไปตรงมาฉันหมายถึงการเพิ่มความเร็วในการใช้ JUnit ฯลฯ ในเวลาเดียวกันแฟน ๆ ของ TDD คิดอย่างไรเกี่ยวกับความจริงที่ว่าจุดที่ถูกต้องตามกฎหมายที่เกี่ยวข้องกับการแก้ไข TDD ของฉัน ปัญหาเฉพาะคือ TDD ไม่ได้ตอบคำถามการออกแบบ แน่นอนว่าฉันเห็นด้วยกับ TDD จะช่วยฉันกำหนดสิ่งที่ฉันต้องการจะทำและจากนั้นฉันสามารถค่อยๆทำตามวิธีได้ แต่มีรูปแบบ / โครงสร้างการออกแบบโดยรวมที่แตกต่างกันมากมายที่ทุกคนสามารถผ่านการทดสอบหน่วยได้ นั่นเป็นเพียงแค่มันทดสอบหน่วยเดียว …

11
คลาส / เมธอดนามธรรมล้าสมัยหรือไม่?
ฉันเคยสร้างคลาส / วิธีการที่เป็นนามธรรมจำนวนมาก จากนั้นฉันก็เริ่มใช้อินเตอร์เฟส ตอนนี้ฉันไม่แน่ใจว่าอินเทอร์เฟซไม่ทำให้คลาสนามธรรมล้าสมัยหรือไม่ คุณต้องการคลาสที่เป็นนามธรรมอย่างสมบูรณ์หรือไม่ สร้างส่วนต่อประสานแทน คุณต้องการคลาสนามธรรมที่มีการใช้งานบางอย่างหรือไม่ สร้างอินเตอร์เฟสสร้างคลาส รับชั้นเรียนใช้อินเตอร์เฟซ ประโยชน์เพิ่มเติมคือบางคลาสอาจไม่ต้องการคลาสพาเรนต์ แต่จะใช้อินเตอร์เฟส ดังนั้นคลาส / เมธอด abstract ล้าสมัยหรือไม่?

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

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

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

8
ฉันควรคาดหวังอะไรจากงานเขียนโปรแกรมครั้งแรก [ปิด]
ฉันเพิ่งได้รับการว่าจ้างสำหรับงานเขียนโปรแกรมแรกของฉัน! ฉันอายุ 25 ปีและใช้ภาษาจาวาเป็นระยะเวลา 6 ปี ตอนนี้ฉันได้รับการว่าจ้างฉันกังวลใจว่าทักษะของฉันจะไม่เป็นอย่างที่นายจ้างคาดหวัง ฉันกลัวว่าฉันจะได้รับมอบหมายให้ทำโครงการและต้องถามคำถามมากมายที่เพื่อนร่วมงานของฉันจะรู้สึกว่าเป็นมือสมัครเล่น นี่เป็นความกลัวที่มีเหตุผลหรือไม่ ประสบการณ์การเขียนโปรแกรมครั้งแรกของคุณคืออะไร ฉันควรคาดหวังอะไร คุณให้คำแนะนำอะไรแก่ฉัน ขอบคุณ

11
“ blub paradox” และ c ++
ฉันอ่านบทความที่นี่: http://www.paulgraham.com/avg.htmlและส่วนหนึ่งเกี่ยวกับ "blub paradox" นั้นน่าสนใจเป็นพิเศษ ในฐานะที่เป็นคนที่ใช้รหัสใน c ++ เป็นหลัก แต่มีการสัมผัสกับภาษาอื่น ๆ (ส่วนใหญ่เป็น Haskell) ฉันรู้ว่ามีบางสิ่งที่มีประโยชน์ในภาษาเหล่านี้ซึ่งยากที่จะทำซ้ำใน c ++ คำถามส่วนใหญ่สำหรับคนที่มีความเชี่ยวชาญทั้งใน c ++ และภาษาอื่น ๆ มีคุณสมบัติภาษาที่ทรงพลังหรือสำนวนที่คุณใช้ในภาษาที่ยากที่จะคิดหรือนำไปใช้ถ้าคุณเขียนเฉพาะใน c ++? โดยเฉพาะอย่างยิ่งคำพูดนี้ดึงดูดความสนใจของฉัน: โดยอุปนัยผู้เขียนโปรแกรมเพียงคนเดียวที่สามารถเห็นความแตกต่างของอำนาจระหว่างภาษาต่าง ๆ คือผู้ที่เข้าใจผู้ที่มีอำนาจมากที่สุด (นี่อาจเป็นสิ่งที่ Eric Raymond มีความหมายเกี่ยวกับ Lisp ทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้น) คุณไม่สามารถไว้วางใจความคิดเห็นของผู้อื่นได้เนื่องจาก Blub Paradox: พวกเขาพอใจกับภาษาใดก็ตามที่พวกเขาใช้เพราะมันกำหนด วิธีที่พวกเขาคิดเกี่ยวกับโปรแกรม หากปรากฎว่าฉันเป็นเทียบเท่าโปรแกรมเมอร์ "Blub" โดยอาศัยการใช้ c ++ สิ่งนี้ทำให้เกิดคำถามต่อไปนี้: มีแนวคิดหรือเทคนิคที่มีประโยชน์ที่คุณพบในภาษาอื่นที่คุณคิดว่ายากที่จะทำให้เป็นแนวคิดได้หรือไม่ เคยเขียนหรือ "คิด" ใน c …

12
ถ้า XML แย่มาก ... ทำไมผู้คนมากมายถึงใช้มัน [ปิด]
ฉันเข้าใจวัตถุประสงค์ของ XML แต่ฉันมักจะได้ยินคนบ่นว่ามันแย่แค่ไหน? ฉันไม่เข้าใจว่ามันแย่ขนาดนั้นจริงเหรอ? ฉันมักจะได้ยินคำว่า "ป่อง" และ "ช้า" โยนไปรอบ ๆ แต่ฉันคิดว่าในฐานะโปรแกรมเมอร์คุณจะใช้อะไรเป็นหลัก? และคุณคิดว่ามัน "แย่" จริง ๆ หรือไม่ .... เพราะถ้าเป็นเช่นนั้นมีผู้คนมากมายที่ใช้มันเพื่อส่งข้อมูล ...

17
ฉันจะรู้สึกมั่นใจมากขึ้นเกี่ยวกับทักษะการเขียนโปรแกรมของฉันได้อย่างไร [ปิด]
การเขียนโปรแกรมไม่ใช่คนต่างด้าวสำหรับฉัน ฉันเริ่มทำมาร์กอัพ (HTML ตอนนี้โปรดอย่าหัวเราะเยาะฉัน) เมื่อฉันอายุได้ 12 ปีและ BASIC เล็กน้อยเมื่อฉันอายุ 13 (ฉันรู้มากเกี่ยวกับ Flowcharts, Pseudocodes ณ จุดนี้) แต่แล้วฉันก็ถูกตักเตือนเป็น ชีววิทยาในโรงเรียนมัธยมและด้วยเหตุนี้จึงพลาดความรู้ด้านการเขียนโปรแกรม "ของจริง" ของภาษาเช่น C, Java, etcetera ฉันใช้ CS กับ UG BE ของฉัน (คล้ายกับ BS แต่เป็นไปตามทฤษฎีมากกว่า) ฉันเรียน C & C ++ (ในระดับที่น้อยกว่า) ด้วยตัวเอง (ศาสตราจารย์ของฉันเจ็บปวดมากและชั้นเรียนเต็มไปด้วย code-jocks (ที่เรียนมาแล้วในโรงเรียนและด้วยเหตุนี้ไม่สนใจห้องเรียน) ให้ปุถุชนน้อยกว่าอย่างฉันให้ความสนใจกับชั้นเรียนด้วย) และสามารถชักนำโปรแกรมการบวกหรือการคูณที่ยอดเยี่ยม (อันที่ตอนนี้แม้แต่ผู้ทำสวนเองก็ใจดีด้วย) ปัญหาหลักของฉันคือฉันรู้สึกไม่ดีและบีบคอด้วยทักษะการเขียนโปรแกรมที่ จำกัด ของฉันและดูหมิ่นโดย code-jocks (เชื่อฉันสิฉันเจอเว็บไซต์นี้มานานแล้ว แต่ตอนนี้อาจสร้างความกล้าหาญที่จะโพสต์จริง …

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