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

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

6
อะไรทำให้ระบบประเภท Haskell ได้รับการเคารพนับถืออย่างมาก (vs say, Java)
ฉันเริ่มที่จะเรียนรู้Haskell ฉันยังใหม่กับมันมากและฉันเพิ่งอ่านหนังสือออนไลน์สองสามเล่มเพื่อให้เข้าใจถึงโครงสร้างพื้นฐานของหนังสือเล่มนี้ หนึ่งใน 'มส์' ที่คนคุ้นเคยกับมันมักจะพูดถึงคือ "ถ้ามันรวบรวมมันจะทำงาน *" - ซึ่งฉันคิดว่าเกี่ยวข้องกับความแข็งแกร่งของระบบประเภท ฉันพยายามที่จะเข้าใจว่าทำไมตรง Haskell จะดีกว่าภาษาพิมพ์แบบคงที่อื่น ๆ ในเรื่องนี้ วางวิธีอื่นผมถือว่าใน Java คุณสามารถทำสิ่งชั่วร้ายเช่นฝังศพ จะมีอะไรบางอย่างที่มันควรจะเป็นArrayList<String>() ArrayList<Animal>()สิ่งที่ชั่วร้ายนี่คือสิ่งที่คุณstringมีelephant, giraffeฯลฯ และถ้ามีคนใส่เข้าไปMercedes- คอมไพเลอร์ของคุณจะไม่ช่วยคุณ ถ้าผมไม่ได้ทำArrayList<Animal>()แล้วในบางจุดในเวลาต่อมาถ้าผมตัดสินใจที่โปรแกรมของฉันไม่ได้จริงๆเกี่ยวกับสัตว์มันเป็นเรื่องของยานพาหนะแล้วฉันสามารถเปลี่ยนการพูด, ฟังก์ชั่นที่ผลิตArrayList<Animal>ในการผลิตArrayList<Vehicle>และ IDE ของฉันควรจะบอกฉันทุกที่มี เป็นการพักสะสม ข้อสันนิษฐานของฉันคือว่านี่คือสิ่งที่ผู้คนหมายถึงโดยระบบพิมพ์ที่แข็งแกร่งแต่ไม่ชัดเจนสำหรับฉันว่าทำไม Haskell ถึงดีกว่า อีกวิธีหนึ่งคุณสามารถเขียน Java ที่ดีหรือไม่ดีฉันคิดว่าคุณสามารถทำได้เหมือนกันใน Haskell (เช่นสิ่งต่าง ๆ เป็นสตริง / ints ที่ควรเป็นประเภทข้อมูลชั้นหนึ่ง) ฉันสงสัยว่าตัวเองขาดอะไร / สำคัญไป ฉันมีความสุขมากที่ได้เห็นข้อผิดพลาดในวิธีการของฉัน!

14
“ อย่าทำรหัสอะไรที่คุณสามารถทำให้เซิร์ฟเวอร์ SQL ทำงานได้ดีสำหรับคุณ” - นี่เป็นสูตรสำหรับการออกแบบที่ไม่ดีหรือไม่?
มันเป็นความคิดที่ฉันได้ยินซ้ำแล้วซ้ำอีกในหลาย ๆ ที่ บางคนยอมรับมากหรือน้อยว่าเมื่อพยายามแก้ปัญหาอย่างหมดจดใน SQL เกินระดับความซับซ้อนคุณควรจะจัดการมันในรหัส เหตุผลเบื้องหลังแนวคิดนี้ก็คือในกรณีส่วนใหญ่เอ็นจิ้นฐานข้อมูลจะทำงานได้ดีขึ้นในการค้นหาวิธีที่มีประสิทธิภาพสูงสุดในการทำงานให้สำเร็จมากกว่าที่คุณคิดในโค้ด โดยเฉพาะอย่างยิ่งเมื่อพูดถึงสิ่งต่าง ๆ เช่นการทำให้ผลลัพธ์มีเงื่อนไขในการดำเนินการกับข้อมูล เนื้อหาที่มีเครื่องยนต์ที่ทันสมัยอย่างมีประสิทธิภาพ JIT'ing + แคชรุ่นที่รวบรวมคำค้นหาของคุณมันจะทำให้รู้สึกบนพื้นผิว คำถามคือการใช้ประโยชน์จากเอนจินฐานข้อมูลของคุณด้วยวิธีนี้หรือไม่นั้นเป็นวิธีปฏิบัติที่ไม่ดีในการออกแบบ (และสาเหตุ) เส้นจะเบลอมากขึ้นเมื่อตรรกะทั้งหมดอยู่ในฐานข้อมูลและคุณเพียงแค่กดผ่าน ORM

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

4
ฉันสามารถใช้ซอฟต์แวร์ GPL ในแอปพลิเคชันเชิงพาณิชย์ได้หรือไม่
ฉันมีคำถาม 3 ข้อเกี่ยวกับ GPL ที่นี่: หากฉันใช้ซอฟต์แวร์ GPL ในแอปพลิเคชันของฉัน แต่ไม่ได้แก้ไขหรือแจกจ่ายซอฟต์แวร์ฉันต้องเผยแพร่แอปพลิเคชันของฉันภายใต้ GPL หรือไม่ จะเกิดอะไรขึ้นถ้าฉันแก้ไขซอฟต์แวร์บางอย่างที่แอปพลิเคชันของฉันใช้ จากนั้นฉันต้องเผยแพร่แอปพลิเคชันของฉันภายใต้ GPL หรือฉันสามารถจัดหาซอฟต์แวร์ที่แก้ไขแล้วภายใต้ข้อกำหนดของ GPL ได้ และถ้าฉันใช้ซอฟต์แวร์ GPL แต่ไม่ได้ทำการแก้ไขฉันสามารถแจกจ่ายให้กับแอปพลิเคชันของฉันได้หรือไม่ ในกรณีของฉันคือฉันมีกรอบ PHP ที่ฉันใช้ห้องสมุด GeSHi เพื่อเน้นผลลัพธ์บางอย่าง เนื่องจาก GeSHi เป็น GPL กรอบงานของฉันต้องเป็น GPL หรือไม่ ฉันสามารถแก้ไข GeSHi สำหรับกรณีการใช้งานเฉพาะของแอปพลิเคชันของฉันได้หรือไม่ถ้าฉันจัดหาการแก้ไขกลับไปยังผู้ดูแลระบบ GeSHi ฉันสามารถแจกจ่ายเฟรมเวิร์กของฉันกับ GeSHi อีกครั้งได้ไหม

10
MVC คืออะไรจริงเหรอ?
ในฐานะโปรแกรมเมอร์ที่จริงจังคุณจะตอบคำถามMVC คืออะไรได้อย่างไร ในใจของฉัน MVC เป็นหัวข้อที่คลุมเครือและด้วยเหตุนี้หากผู้ชมของคุณเป็นผู้เรียนดังนั้นคุณสามารถอธิบายได้ในแง่ทั่วไปที่ไม่น่าจะเป็นข้อโต้แย้ง อย่างไรก็ตามหากคุณกำลังพูดคุยกับผู้ชมที่มีความรู้โดยเฉพาะผู้สัมภาษณ์ฉันมีความลำบากในการคิดทิศทางที่จะไม่เสี่ยงกับปฏิกิริยาของ "ดีไม่ถูกต้อง! ... " เราทุกคนมีประสบการณ์ในโลกแห่งความเป็นจริงที่แตกต่างกันและฉันก็ไม่ได้พบกับรูปแบบการใช้ MVC เดียวกันสองครั้ง โดยเฉพาะดูเหมือนว่าจะมีข้อขัดแย้งเกี่ยวกับความเข้มงวดคำจำกัดความส่วนประกอบการแยกชิ้นส่วน (ชิ้นส่วนใดที่เหมาะกับที่) ฯลฯ ดังนั้นฉันจะอธิบาย MVCในวิธีที่ถูกต้องกระชับและไม่ขัดแย้งได้อย่างไร

14
เหตุใดแอปเดสก์ท็อปที่เขียนด้วย Qt ไม่มากขึ้น [ปิด]
เท่าที่ฉันรู้และเข้าใจในประสบการณ์ของฉันกับ Qt มันเป็นห้องสมุดที่ดีและง่ายต่อการเรียนรู้ มันมี API ที่ออกแบบมาเป็นอย่างดีและข้ามแพลตฟอร์มและนี่เป็นเพียงสองคุณสมบัติที่ทำให้มันน่าสนใจ ฉันสนใจที่จะรู้ว่าทำไมโปรแกรมเมอร์มากขึ้นจึงไม่ใช้ Qt มีข้อบกพร่องที่พูดกับมันหรือไม่? ฟีเจอร์ใดที่ทำให้ไลบรารี่อื่นดีกว่า Qt ปัญหาเกี่ยวข้องกับการออกใบอนุญาตหรือไม่
202 api  libraries  qt 

17
“ ตอนนี้คุณมีปัญหาสองประการ” หมายความว่าอย่างไร
มีคำพูดยอดนิยมโดยJamie Zawinski : บางคนเมื่อเผชิญกับปัญหาคิดว่า "ฉันรู้ฉันจะใช้สำนวนปกติ" ตอนนี้พวกเขามีสองปัญหา ควรเข้าใจคำพูดนี้อย่างไร

10
ภาพควรถูกเก็บไว้ในที่เก็บคอมไพล์หรือไม่?
สำหรับทีมกระจายที่ใช้ Git และ Github เป็นตัวควบคุมเวอร์ชันรูปภาพควรถูกเก็บไว้ในที่เก็บ git หรือไม่? ส่วนใหญ่ภาพจะไม่เปลี่ยนแปลง โฟลเดอร์ที่บรรจุไว้จะมีขนาดใหญ่ขึ้นเมื่อมีการเพิ่มรูปภาพ สิ่งที่น่าเป็นห่วงคือโฟลเดอร์รูปภาพอาจมีขนาดใหญ่ขึ้นเมื่อเวลาผ่านไปด้วยการรวมรูปภาพขนาดใหญ่เข้าด้วยกันหรือเป็นจำนวนมาก นี่ถือว่าเป็นการปฏิบัติที่ดีที่สุดหรือไม่? มีทางเลือกอื่นอะไรอีกบ้างในการแบ่งปันไฟล์ไบนารีที่จำเป็นในโครงการที่ทีมกระจายสามารถเข้าถึงได้ง่าย?

30
พ่อของฉันใจร้อนกับการเรียนรู้ที่จะก้าวไปสู่ ฉันจะทำอย่างไร [ปิด]
ดังนั้นพ่อของฉันซื้อหนังสือ 5 เล่มให้ฉันเกี่ยวกับการเขียนโปรแกรม (C ++, Java, PHP, Javascript, Android) ประมาณหนึ่งเดือนที่แล้ว เขาเป็นสถาปนิกและเขารู้ว่าไม่มีอะไรเกี่ยวกับการเขียนโปรแกรม เขาซื้อมาให้ฉันเพราะฉันบอกว่าการเขียนโปรแกรมสนุกและฉันต้องการเรียนรู้มัน อย่างที่คุณอาจรู้ว่าการเป็นเด็ก (ฉันอายุ 14 ปี) และได้รับคำสั่งให้เรียนรู้การเขียนโปรแกรมจากหนังสือที่ไม่น่าเบื่อไม่ใช่สิ่งที่ง่ายที่สุด ฉันมักจะไขว้เขว .. ฉันบอกเขาก่อนว่าฉันไม่จำเป็นต้องซื้อหนังสือและฉันก็แค่ดูบทเรียนออนไลน์ .. แต่ไม่เลยเขาล้าสมัยมาก เขาให้ฉันใช้หนังสือเท่านั้น เมื่อเร็ว ๆ นี้เขาเริ่มถามฉันว่าฉันได้ทำอะไรไปแล้วและฉันแสดงโปรแกรม C ++ ที่ฉันทำตามสิ่งที่คุณพิมพ์แล้วกำหนดค่าให้กับตัวอักษรแต่ละตัว (A เป็นตัวอักษรตัวแรกในตัวอักษรเพื่อให้ได้ค่า ของ 1) .. และอื่น ๆ จากนั้นจะเพิ่มค่าทั้งหมดและบอกให้คุณทราบ ดังนั้นคำว่า "เพิ่ม" จะมีค่าเท่ากับ 9 ^^ นั่นไม่ค่อยน่าประทับใจสำหรับเขา เขาตะโกนใส่ฉันและบอกฉันว่าฉันทำไปแล้วนั่นคือการคาดคั้น ที่ไม่เป็นความจริง. เขาเป็นคนดั้งเดิมและดื้อรั้นมากและไม่ฟังสิ่งที่ฉันพูด ฉันควรบอกอะไรเขา PS: หากคุณมีเคล็ดลับในการแบ่งเขตในหนังสือแจ้งให้เราทราบ แก้ไข: …
200 java  learning  c++ 

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

30
ทำไมโปรแกรมเมอร์เขียนแอปพลิเคชั่นที่มาปิดแล้วทำให้มันว่าง? [ปิด]
ในฐานะผู้ประกอบการ / โปรแกรมเมอร์ที่ทำมาหากินดีจากการเขียนและการขายซอฟต์แวร์ฉันรู้สึกงงงวยว่าทำไมนักพัฒนาจึงเขียนแอพพลิเคชั่นแล้ววางมันบนอินเทอร์เน็ตฟรี คุณพบว่าตัวเองอยู่ในหนึ่งในสาขาที่ร่ำรวยที่สุดในโลก ธุรกิจที่มีอัตรากำไร 99% ซึ่งคุณไม่มีผลิตภัณฑ์ทางกายภาพ แต่สามารถกำหนดราคาของคุณได้ ธุรกิจที่คุณสามารถจัดส่งผลิตภัณฑ์บั๊กกี้และลูกค้าจะยังคงซื้อมัน บางครั้งซอฟต์แวร์ของเราจะได้รับคู่แข่งฟรีและฉันคิดว่าผู้ชายคนนี้บ้า เขาสามารถทำมาหากินที่ดีจากเรื่องนี้ได้ แต่เลือกที่จะให้มันเป็นอิสระ คุณไม่ชอบกองเงินยักษ์หรือไม่? คุณไม่มั่นใจว่าคนจะจ่ายให้หรือไม่ คุณกลัวที่จะต้องสนับสนุนหรือไม่? มันไม่ดีสำหรับธุรกิจการเขียนโปรแกรมเพราะตอนนี้ลูกค้าคาดหวังว่าจะสามารถหาวิธีแก้ปัญหาฟรีทุกปัญหา (ฉันเห็นทวีตเช่น "มีซอฟต์แวร์ฟรีที่ดีสำหรับ XYZ หรือไม่หรือฉันต้องจ่าย $ 20 สำหรับสิ่งนั้น") มันก็ไม่ดีสำหรับลูกค้าด้วยเช่นกันเพราะโซลูชันฟรีแตกในที่สุด (เพราะระบบปฏิบัติการใหม่หรือมีคุณ) เนื่องจากไม่มีค่าใช้จ่ายนักพัฒนาจึงไม่มีเหตุผลที่จะแก้ไข ลูกค้าจบลงด้วยซอฟต์แวร์ฟรี แต่เก่าที่ไม่สามารถใช้งานได้อีกต่อไปและไม่เคยได้รับการอัพเดต ลูกค้าร้องไห้ นักพัฒนายังคงทำงานในวันทำงานในห้องเล็ก ๆ สิ่งที่ช่วยให้? PS: ฉันไม่ต้องการเริ่มต้นโอเพนซอร์ซ / ซอฟต์แวร์ควรเป็นการอภิปรายฟรี ฉันกำลังพูดถึงเมื่อนักพัฒนาสร้างแอปพลิเคชันที่มาปิดและทำให้เป็นอิสระ
199 pricing  freeware 

9
ความแตกต่างระหว่างนักพัฒนาระดับเริ่มต้น / Jr / Sr คืออะไร? [ปิด]
นอกจากชื่อเรื่องและการจ่ายเงินแล้วอะไรคือความแตกต่าง? พวกเขามีความรับผิดชอบที่แตกต่างกันอย่างไร พวกเขามีความรู้ / ประสบการณ์มากแค่ไหน? มาตรการพื้นฐานในการพิจารณาว่าผู้พัฒนาเหมาะสมกับโครงสร้างพื้นฐานนี้อย่างไร
198 skills  experience 

16
เมื่อใช้หลักการความรับผิดชอบเดี่ยวสิ่งใดที่ถือว่าเป็น“ ความรับผิดชอบ?”
ดูเหมือนชัดเจนว่า "หลักการความรับผิดชอบเดี่ยว" ไม่ได้หมายความว่า "ทำเพียงสิ่งเดียวเท่านั้น" นั่นคือวิธีการที่ใช้ public Interface CustomerCRUD { public void Create(Customer customer); public Customer Read(int CustomerID); public void Update(Customer customer); public void Delete(int CustomerID); } บ็อบมาร์ตินกล่าวว่า "คลาสควรมีเหตุผลเดียวเท่านั้นที่จะเปลี่ยนแปลง" แต่นั่นเป็นเรื่องยากที่จะทำให้คุณคิดมากหากคุณเป็นโปรแกรมเมอร์ใหม่สำหรับ SOLID ฉันเขียนคำตอบสำหรับคำถามอื่นที่ฉันแนะนำว่าความรับผิดชอบเป็นเหมือนชื่องานและเต้นไปรอบ ๆ หัวเรื่องโดยใช้อุปมาอุปไมยในร้านอาหารเพื่ออธิบายประเด็นของฉัน แต่นั่นก็ไม่ได้เป็นชุดของหลักการที่บางคนสามารถใช้เพื่อกำหนดความรับผิดชอบของชั้นเรียนของพวกเขา แล้วคุณจะทำอย่างไร คุณจะกำหนดความรับผิดชอบอย่างไรในแต่ละชั้นเรียนและคุณกำหนดความรับผิดชอบอย่างไรในบริบทของ SRP

20
คุณควรเก็บสำเนาของรหัสทั้งหมดที่คุณเขียนหรือไม่? [ปิด]
ฉันรู้ว่า บริษัท ที่คุณทำงานเพื่อเป็นเจ้าของรหัสและเห็นได้ชัดว่าคุณจะถูกจับถ้าคุณพยายามขายมัน แต่มันเป็นเรื่องผิดปกติหรือเปล่าที่ผู้พัฒนาจะเก็บสำเนาส่วนตัวของรหัสที่พวกเขาเขียน (เพื่อใช้อ้างอิงในอนาคต) เห็นได้ชัดว่าผู้ชายคนนี้ถูกส่งไปยังคุกเพื่อคัดลอกซอร์สโค้ด
197 legal 

1
เหตุใด ES6 ดั้งเดิมจึงสัญญาว่าช้ากว่าและใช้หน่วยความจำมากกว่าบลูเบิร์ด
ในเกณฑ์มาตรฐานนี้ชุดใช้เวลานานขึ้น 4 เท่าในการดำเนินการกับสัญญา ES6 เมื่อเทียบกับสัญญา Bluebird และใช้หน่วยความจำ 3.6 เท่า ไลบรารี JavaScript จะเร็วและเบากว่าการใช้งานดั้งเดิมของ v8 ที่เขียนใน C ได้อย่างไร? สัญญาของ Bluebird นั้นมี API เดียวกันกับสัญญา ES6 ดั้งเดิม (รวมถึงวิธีการอรรถประโยชน์เพิ่มเติม) การใช้งานดั้งเดิมนั้นเขียนได้ไม่ดีหรือมีแง่มุมอื่น ๆ

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