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

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

4
นักพัฒนาส่วนหน้าควรระบุรูปแบบ JSON สำหรับนักพัฒนาส่วนหลังหรือไม่
ฉันใช้บทบาทส่วนหน้าในโครงการ ฉันควรระบุเพื่อนร่วมทีม back-end ของฉันในรูปแบบที่แน่นอนของ JSON ที่ PHP ของพวกเขากลับไปที่ JavaScript ของฉันหรือไม่ ตัวอย่างเช่นฉันควรบอกพวกเขาว่าพวกเขาควรใช้รูปแบบคล้ายกับที่อธิบายไว้ที่นี่: วิธีที่เหมาะสมในการจัดโครงสร้าง JSON สำหรับการใช้งานส่วนหน้า หรือฉันควรจะรักษาบทบาทของตัวเองให้ปลอดเชื้อมากที่สุดและอธิบายด้วยคำพูดที่ว่าอินพุตและเอาท์พุตที่ฉันต้องการจากอินเทอร์เฟซส่วนหลัง (แน่นอนถ้าเกิดเหตุการณ์นี้มันอาจเป็นเรื่องยากสำหรับฉันในการจัดการรูปแบบโครงสร้างข้อมูลที่แตกต่างกัน)

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

7
เหตุใดการสร้างอินสแตนซ์จึงเป็นแบบนี้
ฉันได้เรียนรู้ C # ในช่วงหกเดือนที่ผ่านมาและตอนนี้ฉันกำลังขุดหา Java คำถามของฉันเกี่ยวกับการสร้างอินสแตนซ์ (ในทั้งสองภาษาจริง ๆ ) และมีมากกว่า: ฉันสงสัยว่าทำไมพวกเขาถึงทำแบบนั้น นำตัวอย่างนี้ Person Bob = new Person(); มีเหตุผลที่ระบุวัตถุสองครั้งหรือไม่ เคยมีsomething_else Bob = new Person()บ้างไหม? ดูเหมือนว่าถ้าฉันทำตามจากการประชุมมันจะเป็นเหมือน: int XIsAnInt; Person BobIsAPerson; หรืออาจเป็นหนึ่งในสิ่งเหล่านี้: Person() Bob; new Person Bob; new Person() Bob; Bob = new Person(); ฉันคิดว่าฉันอยากรู้ว่าถ้ามีคำตอบที่ดีกว่า "นั่นเป็นเพียงวิธีที่มันทำ"

1
ความคิดในการ 'เรียก' ฟังก์ชั่นมาจากไหน?
ฉันสงสัยอยู่เสมอว่าเพราะเหตุใดคนหนึ่งจึงเรียกใช้ฟังก์ชั่นซึ่งตรงข้ามกับการใช้งานมัน การค้นหาของ Google สำหรับการfunction call etymologyและเงื่อนไขที่คล้ายกันผลัดกันขึ้นไม่มีอะไรที่มีประโยชน์, วิกิพีเดียไม่ได้พูดถึงมันพจนานุกรมออนไลน์มีทั้งรายการที่ทุกคนหรือไม่ส่วนนิรุกติศาสตร์ ความคิดในการ 'เรียก' ฟังก์ชั่นมาจากไหน?

2
ในการเรียงตัวอักษรสตริงที่อยู่ติดกัน
C และ C ++ รวบรวมตัวอักษรสตริงที่อยู่ติดกันเป็นตัวอักษรสตริงเดียว ตัวอย่างเช่นนี้ "Some text..." "and more text" เทียบเท่ากับ: "Some text...and more text" ในภาษาตระกูล C อื่น ๆ เช่น C # หรือ Java นี่เป็นข้อผิดพลาดทางไวยากรณ์ (ซึ่งก็ดีมาก BTW) เหตุผล / เหตุผลทางประวัติศาสตร์สำหรับ C และ C ++ คืออะไร

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

8
เมื่อใดที่หนึ่งค่าข้อมูลจริงของฮาร์ดโค้ดในรหัสเมื่อเทียบกับการใช้ฐานข้อมูล
คำถามที่ยืนยาวสำหรับฉันคือ: ฉันจะเก็บข้อมูล (ค่าจริง) ในตารางฐานข้อมูลเมื่อใดและฉันจะเก็บไว้ในรหัสเมื่อใด ฉันทามติที่ยังไม่ได้บอกกล่าวมักจะเป็นเช่นนั้น (*): หากเป็นตัวแปรเดียวหรือโครงสร้างอย่างง่ายหรืออาเรย์ของค่าสองสามค่าให้ใส่ข้อมูลลงในโค้ด [* ฉันทามติได้ถกเถียงกันในความคิดเห็นและคำตอบ แต่โดยทั่วไปฉันต้องการหลักฐานบางอย่างเพื่อเริ่มคำถามดังนั้นอย่าลังเลที่จะท้าทายและพัฒนามัน ] ตัวอย่าง: $number = 44; $colors = array("blue", "yellow", ... "mauve"); หากมีข้อมูลมากกว่าร้อยแถวในประเภทเดียวกันให้ใช้ฐานข้อมูล แต่ดูเหมือนจะมีพื้นที่สีเทา แล้วกรณีไหนที่ไม่ชัดเจน? การพิจารณาและปัจจัยอะไรบ้างที่เราต้องให้ความสนใจในการตัดสินใจ ตัวอย่าง: สมมติว่า บริษัท ของคุณใช้เฟรมมอเตอร์ที่แตกต่างกัน 10-15 ประเภทซึ่งสามารถแสดงเป็น "412T" คุณมีพวกมันประมาณ 30 ตัวและพวกมันเปลี่ยนไม่ค่อย คุณสามารถสร้างตารางฐานข้อมูลสำหรับรหัสเหล่านั้นหรือฮาร์ดโค้ดในฐานข้อมูล ในกรณีนี้มอเตอร์คงที่สิ่งทางกายภาพที่ไม่น่าจะเปลี่ยนบ่อย ทำให้พวกเขาอยู่ในรหัสวิชาที่พวกเขาไปยังแหล่งควบคุมซึ่งในฐานข้อมูลการเปลี่ยนแปลงฐานข้อมูลมักจะไม่ถูกติดตาม แต่เก็บไว้ในฐานข้อมูลปลดปล่อยรหัส (แยก) จากข้อมูล อีกตัวอย่าง (จริง) ที่ฉันสามารถใช้ได้คือคำถามของฉัน: /programming/26169751/how-to-best-get-the-data-out-of-a-lookup-table (ปัจจุบัน 48 แถวของข้อมูลตัวเลือก)

5
อัลกอริทึมสำหรับเปอร์เซ็นต์โดยไม่ทราบจำนวนรวม
สมมติว่ามีnเส้นสำหรับสายด่วน เมื่อใดก็ตามที่ลูกค้าโทรสายด่วนสายจะถูกส่งต่อไปยังหนึ่งในnสาย และฉันต้องการกำหนดเปอร์เซ็นต์ของการโทรไปยังแต่ละบรรทัด n สมมติว่ามีสองบรรทัดและหนึ่งบรรทัดถูกกำหนด 60% และอื่น ๆ คือ 40% จำนวนการโทรทั้งหมดคือ 10 ดังนั้นสายแรกจะได้รับ 6 การโทรและครั้งที่สองจะได้รับการโทร 4 ครั้ง ฉันรู้เปอร์เซ็นต์ของการโทรไปยังแต่ละสายล่วงหน้า แต่ปัญหาคือฉันไม่รู้จำนวนการโทรที่จะได้รับในหนึ่งวัน ฉันจะกระจายจำนวนการโทรโดยไม่รู้การโทรทั้งหมดได้อย่างไร?

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

4
นักพัฒนาถูกบล็อกโดยรอรหัสเพื่อรวมจากสาขาอื่นโดยใช้ GitFlow
ทีมของเราเพิ่งเปลี่ยนจาก FogBugz & Kiln / Mercurial เป็น Jira & Stash / Git เรากำลังใช้โมเดล Git Flow สำหรับการแยกสาขาเพิ่มสาขาย่อยย่อยออกจากสาขาคุณลักษณะ (เกี่ยวข้องกับงานย่อย Jira ของคุณสมบัติ Jira) เรากำลังใช้ Stash เพื่อกำหนดผู้ตรวจสอบเมื่อเราสร้างคำขอดึงเพื่อรวมกลับเข้าไปในสาขาหลัก (โดยปกติจะพัฒนา แต่สำหรับงานย่อยกลับเข้าไปในสาขาคุณลักษณะ) ปัญหาที่เราพบคือแม้ว่าจะมีการวางแผนที่ดีที่สุดและพังทลายของกรณีคุณสมบัติเมื่อนักพัฒนาหลายคนทำงานร่วมกันในคุณสมบัติเดียวกันพูดบน front-end และ back-end หากพวกเขากำลังทำงานบนรหัสพึ่งพาซึ่งกันและกัน ในสาขาแยกต่างหากผู้พัฒนารายหนึ่งจะปิดกั้นอีกฝ่าย เราพยายามดึงระหว่างสาขาของกันและกันขณะที่เราพัฒนา นอกจากนี้เรายังพยายามสร้างการรวมสาขาในพื้นที่นักพัฒนาซอฟต์แวร์แต่ละคนสามารถดึงจากหลาย ๆ สาขาเพื่อทดสอบการรวมระบบที่พัฒนาขึ้น ในที่สุดและสิ่งนี้ดูเหมือนว่าจะทำงานได้ดีที่สุดสำหรับเราถึงแม้ว่าจะมีค่าใช้จ่ายเพิ่มขึ้นอีกเล็กน้อยเราได้ลองสร้างสาขาการรวมออกจากสาขาคุณลักษณะทันทีที่ค้างคาว เมื่อสาขาย่อยของภารกิจย่อย (ไม่อยู่ในสาขาฟีเจอร์) พร้อมสำหรับการร้องขอการดึงและการตรวจสอบโค้ดเรายังรวมการเปลี่ยนแปลงที่กำหนดไว้ในสาขาการรวมคุณลักษณะนี้ด้วยตนเอง จากนั้นผู้พัฒนาที่สนใจทุกคนสามารถดึงจากสาขาการรวมเข้ากับสาขาย่อยย่อยอื่น ๆ นี่เป็นการป้องกันไม่ให้ใครก็ตามที่รอสาขาที่พวกเขาต้องพึ่งพาเพื่อตรวจสอบรหัส ฉันรู้ว่านี่ไม่จำเป็นต้องเป็นปัญหา Git - มันเกี่ยวกับการทำงานกับการพึ่งพาซึ่งกันและกันของรหัสในหลายสาขาผสมผสานกับกระบวนการทำงานและวัฒนธรรมของเราเอง หากเราไม่มีนโยบายการตรวจสอบรหัสที่เข้มงวดสำหรับการพัฒนา (สาขาการรวมที่แท้จริง) นักพัฒนา 1 …

3
Git: สาขาหรือทางแยก?
ฉันมีโครงการเกมที่จะมีสองเวอร์ชัน: เกมเวอร์ชั่นหลักที่เรียบง่าย เกมขั้นสูง ฉันมีรุ่นที่ 1 ในที่เก็บสาธารณะของฉันและฉันเท่านั้นที่จะทำงานกับมัน สำหรับรุ่นที่ 2 เพื่อนของฉันสองคนและฉันจะทำงานกับมัน ส่วนที่สำคัญคือฉันต้องการให้ทั้งสองเวอร์ชันอยู่ในที่เก็บของฉัน ฉันคิดว่าฉันอาจใช้กิ่งไม้เพื่อทำสิ่งนี้ แต่เมื่อพิจารณาคำถามและคำตอบของคำถามนี้มันไม่ใช่วิธีปฏิบัติที่ดีในการทำเวอร์ชัน เท่าที่ฉันได้พบการฟอร์กพื้นที่เก็บข้อมูลของคุณเองเป็นไปไม่ได้ ตัวเลือกของฉันที่นี่มีอะไรบ้าง ฉันจะเก็บทั้งสองเวอร์ชันไว้ในที่เก็บของฉันได้อย่างไร

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

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

4
การเขียนโปรแกรมเชิงฟังก์ชันเพิ่มความซับซ้อนในรหัสหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ตลอดปีที่ผ่านมาฉันเขียนโค้ดScala (มาจากพื้นหลัง Java) ฉันชอบวิธีที่คุณสามารถสร้างรหัสที่ง่ายและสะอาดยิ่งขึ้นด้วย vals คลาส case, ฟังก์ชัน map / filter / lambda, implicits และการอนุมานประเภท ฉันใช้มันเป็นส่วนใหญ่สำหรับแอปพลิเคชันAkka ปีนี้ฉันอยู่ในโปรเจค Scala กับทีมใหม่ที่ชอบการเขียนโปรแกรมที่ใช้งานได้จริง พวกเขาใช้Scalazอย่างหนักและรหัสจะถูกเติมเต็มทุกที่ด้วยผู้สมัครขอบเขตบริบทผู้อ่าน / นักเขียน / รัฐ monad แม้วิธีการหลักคือ "พัน" ใน I / O monad เหตุผลของพวกเขาคือสิ่งนี้ทำให้คอมไพเลอร์ "ทำงานเพื่อเรา" ในการยืนยันว่ารหัสถูกต้องและแต่ละฟังก์ชั่นเป็นอิสระจากผลข้างเคียง ถึงกระนั้นจากมุมมองของฉันทุกไวยากรณ์นี้จริงๆได้รับในทางของตรรกะทางธุรกิจ ตัวอย่างเช่นประเภทของ "MyBusinessObject" นั้นใช้ได้เช่นเดียวกับประเภทเช่น "รายการ [MyBusinessObject]", "ตัวเลือก [MyBusinessObject]" …

4
ข้อใดต่อไปนี้เกี่ยวกับฟังก์ชั่นที่ไม่ถูกต้อง
ดังนั้นในขณะที่ฉันทำการคอมไพล์ที่มีความยาวฉันตัดสินใจที่จะทำการทดสอบทั่วไป C ++ บน ODesk และเจอคำถามนี้ ถ้าฉันไม่ผิดให้ถ้อยคำ (หรือขาดมัน) สิ่งเหล่านี้อาจเป็นจริง a. int Foo() { } int Foo(int bar) { } ข ดีreturn void;จะไม่ถูกต้องความหมาย แต่ฟังก์ชั่นอย่างเห็นได้ชัดสามารถมีvoidประเภทผลตอบแทน void Foo() { } ค. นี่คือนิยามของฟังก์ชั่นอินไลน์ใช่ d โดยไม่ต้องลงรายละเอียดมากเกี่ยวกับการจัดวางองค์ประกอบต่อไปนี้ typedef void (*Func)(int); Func functions[2]; void Foo(int bar) { } void Bar(int foo) { } functions[0] = &Foo; functions[1] …
17 c++ 

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