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

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

5
การฝึกลิงถือเป็นการฝึกเขียนโปรแกรมที่ดีหรือไม่?
ฉันได้รับความประทับใจแล้วการจับลิงนั้นเป็นประเภทแฮ็คที่รวดเร็วและสกปรกมากกว่าการฝึกเขียนโปรแกรมมาตรฐานที่ดี ในขณะที่ฉันใช้เป็นครั้งคราวเพื่อแก้ไขปัญหาเล็กน้อยกับ libs ของบุคคลที่สามฉันคิดว่าเป็นการแก้ไขชั่วคราวและฉันจะส่งปะที่เหมาะสมให้กับโครงการของบุคคลที่สาม แต่ผมเคยเห็นเทคนิคนี้มาใช้เป็น "วิธีปกติ" ในโครงการหลักเช่นใน Gevent ของโมดูลgevent.monkey การฝึกลิงกลายเป็นกระแสหลักปกติการฝึกเขียนโปรแกรมที่ยอมรับได้หรือไม่? ดูเพิ่มเติม: "Monkeypatching เพื่อมนุษย์"โดย Jeff Atwood

7
Scrum สามารถปรับให้เข้ากับสภาพแวดล้อมทางวิชาการได้อย่างไร?
ปัจจุบันฉันทำงานร่วมกับอาจารย์ที่มหาวิทยาลัยของฉันเพื่อพัฒนาหลักสูตรใหม่สำหรับหลักสูตรวิศวกรรมซอฟต์แวร์และการออกแบบ Capstone ที่เปิดสอนในวิทยาลัยของฉัน จนกระทั่งเมื่อไม่นานมานี้ทั้งสองหลักสูตรใช้โมเดลน้ำตกโดยเฉพาะและทำให้นักเรียนใช้เวลาส่วนใหญ่ในการเขียนรายงานยาว ๆ หลังจากแรงกดดันจากฉันมากอาจารย์ของฉันตัดสินใจที่จะรวม Scrum ในหลักสูตรวิศวกรรมซอฟต์แวร์ภาคการศึกษาที่ผ่านมานี้ ครึ่งแรกของภาคการศึกษายังคงเป็นน้ำตกมีนักเรียนเขียนรายงานการออกแบบ 40 หน้าและเอกสารข้อกำหนดซอฟต์แวร์ กลางภาคเรียนทุกทีมจะต้องปล่อยตัวอย่างของแอปพลิเคชัน เมื่อถึงจุดนั้นเส้นทางก็เปลี่ยนไปเป็น Scrum พร้อมกับการวิ่ง 3 สัปดาห์สองครั้ง ตอนนี้เรากำลังพยายามหาวิธีกำจัดน้ำตกทั้งหมดและสร้างหลักสูตรที่ใช้การแย่งชิงกันโดยเฉพาะ น่าเสียดายที่เราพบความไม่ลงรอยกันระหว่าง Scrum และนักเรียน: การประชุมการต่อสู้รายวันแทบเป็นไปไม่ได้สำหรับนักเรียน แม้ในระหว่างชั้นเรียนมันไม่สะดวกสำหรับนักเรียนที่จะจัดการประชุม Scrum เนื่องจากอาจารย์มักจะบรรยาย การประมาณคะแนน / ชั่วโมงนั้นยากเนื่องจากนักเรียนไม่มีประสบการณ์ดังนั้นจึงไม่สามารถทำนายได้อย่างแม่นยำว่าจะต้องใช้เวลานานแค่ไหน การต่อสู้ทำงานได้ดีที่สุดกับนักพัฒนาแบบเต็มเวลาที่ทำงานร่วมกัน แต่นักเรียนไม่ใช่ ส่วนใหญ่นักเรียนใช้เวลา 15-20 ชั่วโมงต่อสัปดาห์ในการจัดหลักสูตรและการจัดงานประชุมอาจเป็นเรื่องยากมาก ทีมสามารถมีนักเรียนได้มากถึง 10 คน (และจะมีคนขี้เกียจหนึ่งหรือสองคน) อาจารย์ต้องการเอกสาร! ฉันไม่เคยได้ยินรายงานการแย่งชิงใด ๆ - เพียงแบ็คล็อกและชาร์ตการเผาไหม้ (ซึ่งฉันไม่แน่ใจว่าจะเพียงพอที่จะเอาใจนักวิชาการ) นักเรียนมักคิดว่าเปรียวหมายถึง "กระโดดเข้าและเริ่มเขียนโค้ดโดยไม่หันกลับมามอง" สิ่งนี้นำไปสู่โค้ดที่น่ากลัวที่สุดที่จินตนาการได้ ดังนั้นฉันกำลังมองหาวิธีในการบังคับใช้การออกแบบที่เหมาะสมโดยไม่ต้องใช้เอกสาร 50 หน้าหรือกองของไดอะแกรม UML …

4
นักพัฒนาคาดหวังรายละเอียดเกี่ยวกับเรื่องราวของผู้ใช้ได้มากน้อยเพียงใด
ข้อเสียเปรียบที่ใหญ่ที่สุดของการพัฒนาแบบเปรียวที่ฉันเคยพบคือคนที่ไม่ได้มีส่วนร่วมในการพัฒนามุ่งเน้นไปที่มนต์ที่เรื่องราวของผู้ใช้ (3-10 วันในอุดมคติของคน) ไม่ควรมีมากกว่า 1-3 ประโยคเช่น: ในฐานะลูกค้าฉันสามารถใช้การค้นหาข้อความอิสระเพื่อหาผลิตภัณฑ์ที่ฉันกำลังมองหา ให้ประโยคนี้ผู้จัดการโครงการคาดหวังว่าฉันในฐานะนักพัฒนาเพื่อมอบความไว้วางใจในการประเมินและพัฒนาเรื่องราว พวกเขาคิดว่าการพัฒนาที่คล่องตัวหมายถึงประโยคเช่นนี้คือทั้งหมดที่พวกเขาต้องจัดหาให้นักพัฒนา ฉันจะไม่โทษพวกเขาเพราะวรรณกรรมที่รู้จักกันดีเกี่ยวกับการพัฒนาที่คล่องตัวสร้างความประทับใจว่าสิ่งนี้จะได้ผลจริง ฉันได้อ่านบางอย่างเช่น 2 หน้าในภาษาธรรมชาติต่อเรื่องใน "Planning XP" แต่นั่นคือ เนื่องจาก "ซอฟต์แวร์ที่ใช้ในการทำงาน" ได้รับการสนับสนุนมากกว่า "เอกสารที่ครอบคลุม" หัวข้อนี้จึงดูเหมือนจะหลีกเลี่ยงโดยทั่วไป แน่นอนว่าในความเป็นจริงแล้วหากผู้พัฒนาได้รับโอกาสให้ทำเช่นนั้นการสัมภาษณ์กับลูกค้าจะนำเสนอรายการข้อกำหนดจำนวนมากที่ลูกค้ามีเกี่ยวกับเรื่องราว: เราต้องการตัวดำเนินการบูลีนเช่น AND และ OR เราต้องการคำทั้งหมดคลุมเครือ เราจำเป็นต้องค้นหาด้วยคำเดียวเช่นเดียวกับวลี เราไม่ต้องการค้นหาผลิตภัณฑ์ที่ตรงตามเกณฑ์ X, Y และ Z เราต้องการเรียงลำดับผลลัพธ์ ผู้ใช้สามารถเลือกเกณฑ์การเรียงในกล่องคำสั่งผสมพร้อมตัวเลือก a, b และ c ดังนั้นคุณจะเห็นว่าฉันไม่ได้พูดถึงรายละเอียดทางเทคนิคหรือการออกแบบซอฟต์แวร์หรือแม้แต่รายละเอียดการใช้งาน มันเป็นข้อกำหนดที่บริสุทธิ์ ยิ่งเราคุยกันนานเท่าไหร่ลูกค้าก็ยิ่งตระหนักว่ามีอะไรมากมายที่จะพูดเกี่ยวกับสิ่งที่พวกเขาต้องการ แต่บ่อยครั้งที่ฉันพบว่าตัวเองอยู่ในสถานการณ์ที่ข้อมูลดังกล่าวไม่ได้รับการจัดเตรียมไว้ให้ เป็นไปได้หรือไม่ที่ฉันจะทำการสัมภาษณ์และบุคคลที่จะอยู่ในตำแหน่งที่จะทำการสัมภาษณ์ไม่ได้ให้ผลลัพธ์กับฉัน บางครั้งผู้จัดการอาจหารายละเอียดทางเทคนิคเช่น "เราต้องการค้นหา Lucene" แต่พวกเขาไม่ต้องการคิดว่าพวกเขาต้องการค้นหาเฉพาะชื่อผลิตภัณฑ์หรือคำอธิบายผลิตภัณฑ์ บางครั้งฉันคิดว่าพวกเขาขี้เกียจ;) สำหรับฉันนี่เป็นปัญหาอันดับต้น …

4
มันสมเหตุสมผลไหมที่จะเขียน build script ใน C ++?
ฉันใช้ CMake เพื่อสร้างโครงการ IDE / makefiles ของฉัน แต่ฉันยังต้องเรียก "สคริปต์" แบบกำหนดเองเพื่อจัดการไฟล์ที่คอมไพล์ของฉันหรือแม้แต่สร้างรหัส ในโครงการก่อนหน้านี้ฉันใช้ Python และมันก็โอเค แต่ตอนนี้ฉันมีปัญหาร้ายแรงในการจัดการการพึ่งพาจำนวนมากในสองโครงการขนาดใหญ่มากที่ฉันทำงานอยู่ดังนั้นฉันจึงต้องการลดการพึ่งพาทุกที่ มีคนแนะนำฉันให้ใช้ C ++ เพื่อเขียนสคริปต์สร้างของฉันแทนที่จะเพิ่มการพึ่งพาภาษาสำหรับสิ่งนั้น ชุดรูปแบบโครงการใช้ C ++ อยู่แล้วดังนั้นจึงมีข้อดีหลายประการที่ฉันเห็น: ในการสร้างโครงการทั้งหมดจะต้องใช้คอมไพเลอร์ C ++ และ CMake เท่านั้นไม่มีสิ่งอื่นใด (การอ้างอิงอื่น ๆ ทั้งหมดคือ C หรือ C ++) ความปลอดภัยประเภท C ++ (เมื่อใช้ C ++ ที่ทันสมัย) ทำให้ทุกอย่างง่ายขึ้นเพื่อให้ "ถูกต้อง"; เป็นภาษาที่ฉันรู้จักดีกว่าดังนั้นฉันจึงสบายใจได้แม้ว่าฉันจะสามารถเขียนรหัส Python ได้ดีก็ตาม ความเป็นไปได้ที่จะได้รับความเร็วในการประมวลผล (แต่ฉันไม่คิดว่ามันจะเข้าใจได้จริง); อย่างไรก็ตามฉันคิดว่าอาจมีข้อเสียบางอย่างและฉันไม่แน่ใจเกี่ยวกับผลกระทบที่แท้จริงเนื่องจากฉันยังไม่ได้ลอง: …

3
ทำไมเราจึงควรใช้คอลเลกชันชั้นหนึ่ง?
ตามกฎข้อที่ 4 ของObject Calisthenics โดย Jeff Bay (RTF)ใน The ThoughtWorks Anthology ขอแนะนำว่าควร " ใช้คอลเลกชันชั้นหนึ่ง " กฎข้อที่ 4: คอลเลกชันชั้นหนึ่ง แอ็พพลิเคชันของกฎนี้ง่าย: คลาสใด ๆ ที่มีคอลเล็กชันควรไม่มีตัวแปรสมาชิกอื่น คอลเลกชันแต่ละรายการจะถูกห่อหุ้มในคลาสของตัวเองดังนั้นตอนนี้พฤติกรรมที่เกี่ยวข้องกับคอลเลกชันจะมีบ้าน คุณอาจพบว่าฟิลเตอร์กลายเป็นส่วนหนึ่งของคลาสใหม่นี้ นอกจากนี้คลาสใหม่ของคุณสามารถจัดการกิจกรรมต่างๆเช่นการเข้าร่วมกลุ่มสองกลุ่มด้วยกันหรือใช้กฎกับองค์ประกอบของกลุ่มแต่ละกลุ่ม สิ่งที่ฉันสามารถเข้าใจได้จากสิ่งนี้คือเราควรใช้คลาสแยกการรวบรวมคอลเลกชันและด้วยวิธีการเพิ่มลบแก้ไขข้อมูลของคอลเลกชันนั้น และเราต้องการสิ่งนี้เพื่อให้เราแน่ใจว่าประเภทข้อมูลใดที่จะเข้าสู่การรวบรวมและสิ่งที่ออกมา ในกรณีที่เราใช้การรวบรวมทั่วไป (ในภาษาที่ใช้ได้) เราจำเป็นต้องปฏิบัติตามกฎนี้หรือไม่? หากฉันขาดความสำคัญที่สำคัญโปรดชี้แจง

5
วิธีการที่มีประสิทธิภาพสำหรับการจัดเก็บวัตถุนับสิบล้านเพื่อการสืบค้นด้วยการแทรกจำนวนมากต่อวินาที?
นี่เป็นแอปพลิเคชั่นบันทึก / นับที่นับจำนวนแพ็กเก็ตและการนับประเภทของแพ็คเก็ต ฯลฯ ในเครือข่ายการแชท p2p ซึ่งเท่ากับประมาณ 4-6 ล้านแพ็กเก็ตในระยะเวลา 5 นาที และเนื่องจากฉันใช้เพียงแค่ "ภาพรวม" ของข้อมูลนี้ฉันจึงลบแพ็กเก็ตที่เก่ากว่า 5 นาทีทุกห้านาที ดังนั้นจำนวนสูงสุดของไอเท็มที่จะอยู่ในคอลเล็กชันนี้คือ 10 ถึง 12 ล้าน เนื่องจากฉันต้องทำการเชื่อมต่อ 300 กับ superpeers ที่แตกต่างกันจึงเป็นไปได้ที่แต่ละแพ็กเก็ตจะพยายามแทรกอย่างน้อย 300 ครั้ง (ซึ่งอาจเป็นเหตุผลว่าทำไมการเก็บข้อมูลนี้ไว้ในหน่วยความจำจึงเป็นตัวเลือกที่สมเหตุสมผลเท่านั้น) ปัจจุบันฉันใช้พจนานุกรมเพื่อจัดเก็บข้อมูลนี้ แต่เนื่องจากรายการจำนวนมากที่ฉันพยายามจัดเก็บฉันจึงพบปัญหากับกองวัตถุขนาดใหญ่และปริมาณการใช้หน่วยความจำเติบโตอย่างต่อเนื่องตลอดเวลา Dictionary<ulong, Packet> public class Packet { public ushort RequesterPort; public bool IsSearch; public string SearchText; public bool Flagged; public …

8
เชลล์สคริปต์มีข้อได้เปรียบอะไรบ้างในการใช้ภาษาโปรแกรมแปลความหมาย [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา (ฉันไม่แน่ใจว่าเป็นคำถามที่เหมาะสมหรือไม่ที่นี่) เชลล์สคริปต์เช่นเดียวกับที่เขียนไว้bashสามารถทำสิ่งต่างๆได้ พวกเขาสามารถเรียกโปรแกรม Unix, ไพพ์เอาท์พุท, เปลี่ยนเส้นทาง I / O จาก / ไปยังไฟล์, โฟลว์การควบคุม, ตรวจสอบว่ามีไฟล์อยู่หรือไม่ ฯลฯ แต่ภาษาการเขียนโปรแกรมที่ทันสมัยเช่นpythonและrubyสามารถทำสิ่งเหล่านี้ได้ และพวกเขา (ฉันคิดว่า) อ่านได้ง่ายขึ้นและบำรุงรักษาได้มากขึ้น bashสนุกกับการยอมรับอย่างกว้างขวาง แต่มีการแจกแจงจำนวนมากติดตั้งpythonล่ามเช่นกัน ดังนั้นข้อดีของเชลล์สคริปต์คืออะไร ถ้าฉันสามารถเขียนpython, rubyหรือperlเป็นมูลค่าที่จะเรียนรู้bash?

7
อะไรคือข้อดี / ข้อเสียของการใช้ C แทนชุดประกอบ? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ตอนนี้ฉันกำลังเรียนวิศวกรรมในสาขาโทรคมนาคมและอิเล็กทรอนิกส์และเราได้ย้ายจากแอสเซมเบลอร์ไปที่ C ในการเขียนโปรแกรมไมโครโปรเซสเซอร์ ฉันสงสัยว่านี่เป็นความคิดที่ดี อะไรคือข้อดีและข้อเสียของ C เมื่อเทียบกับการประกอบ? ข้อดี / ข้อเสียที่ฉันเห็นคือ: ข้อดี: ฉันสามารถบอกได้ว่าไวยากรณ์ C นั้นง่ายกว่าการเรียนรู้มากกว่า Assembler ไวยากรณ์ C ใช้งานง่ายขึ้นสำหรับการสร้างโปรแกรมที่ซับซ้อนมากขึ้น การเรียนรู้ C นั้นมีประสิทธิภาพมากกว่าการเรียนรู้ผู้ประกอบเนื่องจากมีสิ่งที่พัฒนารอบ C มากกว่าผู้ประกอบการ ข้อเสีย: Assembler เป็นภาษาการเขียนโปรแกรมระดับต่ำกว่า C ดังนั้นมันจึงเป็นสิ่งที่ดีสำหรับการเขียนโปรแกรมโดยตรงกับฮาร์ดแวร์ มีความยืดหยุ่นมากยิ่งทำให้คุณทำงานกับหน่วยความจำขัดจังหวะการลงทะเบียนขนาดเล็ก ฯลฯ
15 c  low-level  assembly 

2
วิธีแก้ปัญหา / เปลี่ยนรหัส Java ขณะที่โปรแกรมกำลังทำงาน
ฉันเพิ่งเห็นวิดีโอที่แสดงให้เห็นว่า Notch (จากชื่อเสียงของ Minecraft) กำลังดีบั๊กและเปลี่ยนแปลง Minecraft ในขณะที่มันกำลังทำงานอยู่ เขาหยุดเกมชั่วคราวเปลี่ยนบางอย่างในรหัสแล้วหยุดเกมที่การเปลี่ยนแปลงมีผลทันทีโดยไม่จำเป็นต้องเริ่มโปรแกรมใหม่ มันทำงานอย่างไร เทคนิคแบบไหนที่ใช้เพื่อให้บรรลุสิ่งนี้
15 java  debugging 

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

1
วิธีที่เหมาะสมในการแนะนำคุณสมบัติที่จะเพิ่มในภาษา C # คืออะไร?
วิธีที่เหมาะสมในการแนะนำคุณสมบัติที่จะเพิ่มในภาษา C # คืออะไร? ตัวอย่างเช่นฉันต้องการให้โอเปอเรเตอร์คล้ายกับ??แต่สำหรับการเลือกค่า min หรือ max ฉันต้องการที่a <? bจะขยายไปในa < b ? a : b ทำนองเดียวกันสำหรับ>?
15 c# 

14
จะทราบได้อย่างไรว่าการสะกดคำผิดในซอร์สโค้ดเป็นปัญหาร้ายแรงหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันพบข้อผิดพลาดในการสะกดคำที่ฉันพบทุกวันใน codebase ของเราซึ่งฉันจะทำซ้ำตัวอย่างสั้น ๆ แต่เป็นตัวแทน: ArgumnetCount Timeount Gor message from queue น่าเสียดายที่ไม่ จำกัด เพียงบุคคลเดียว มีผู้พูดภาษาอังกฤษที่ไม่ใช่เจ้าของภาษาจำนวนมากในทีมของเราที่สนับสนุนสิ่งนั้นอย่างไรก็ตามฉันยังสามารถระบุข้อผิดพลาดการสะกดที่เลวร้ายที่สุดให้กับสถาปนิกซอฟต์แวร์ของเราซึ่งเป็นชาวอเมริกันเกิดและเติบโต สิ่งเหล่านี้สามารถพบได้แม้กระทั่งในอีเมลงานนำเสนอเอกสารหรือข้อมูลที่เป็นลายลักษณ์อักษรใด ๆ ที่เรามีใน บริษัท พัฒนาซอฟต์แวร์ ฉันต้องการทราบวิธีการตรวจสอบว่ามันเป็นปัญหาร้ายแรงหรือไม่? ฉันพบข้อผิดพลาดในการสะกดคำเหล่านี้ด้วยความกังวลเสมอ แต่นโยบายส่วนบุคคลของฉันเองอย่างเป็นทางการคือเราไม่ได้รับค่าจ้างให้สะกดสิ่งที่ถูกต้องเราได้รับค่าจ้างให้ทำสิ่งต่าง ๆ ดังนั้นภายใน บริษัท ฉันไม่เคยวิจารณ์ใครเลย แต่ฉันได้ยกประเด็นนี้ขึ้นกับเพื่อนสนิทของฉันบางคนและไม่เคยตัดสินเรื่องนี้ให้ดี

4
จัดการกับตัวเลขจำนวนมากในภาษาที่ไม่สามารถ?
ฉันพยายามที่จะคิดเกี่ยวกับวิธีที่ฉันจะไปเกี่ยวกับการคำนวณในจำนวนมาก (เพื่อ infinitum - intergers ไม่ลอย) หากโครงสร้างภาษาไม่สามารถจัดการตัวเลขที่มีขนาดใหญ่กว่าค่าที่แน่นอน ฉันแน่ใจว่าฉันไม่ใช่คนแรกและคนสุดท้ายที่ถามคำถามนี้ แต่คำค้นหาที่ฉันใช้ไม่ได้ให้อัลกอริทึมแก่ฉันในการรับมือกับสถานการณ์เหล่านั้น คำแนะนำส่วนใหญ่จะเสนอการเปลี่ยนแปลงภาษาหรือการเปลี่ยนแปลงตัวแปรหรือพูดคุยเกี่ยวกับสิ่งที่ดูเหมือนจะไม่เกี่ยวข้องกับการค้นหาของฉัน ดังนั้นฉันต้องการไกด์เล็กน้อย ฉันจะร่างอัลกอริทึมแบบนี้: กำหนดความยาวสูงสุดของตัวแปรจำนวนเต็มสำหรับภาษา หากตัวเลขมีความยาวมากกว่าครึ่งของความยาวสูงสุดของตัวแปรที่แยกออกเป็นอาเรย์ (ให้ห้องเล่นเล็ก ๆ ) ลำดับ Array [0] = ตัวเลขที่อยู่ทางด้านขวา [n-max] = ตัวเลขที่อยู่ทางด้านซ้ายสุด อดีต Num: 29392023 Array [0]: 23, Array [1]: 20, array [2]: 39, array [3]: 29 เมื่อฉันสร้างความยาวครึ่งหนึ่งของตัวแปรเป็นจุดปิดมาร์คฉันก็สามารถคำนวณหาหนึ่งในสิบส่วนหนึ่งร้อย ฯลฯ วางผ่านเครื่องหมายครึ่งทางเพื่อที่ว่าถ้าความยาวสูงสุดของตัวแปรเท่ากับ 10 หลักจาก 0 ถึง 9999999999 ฉันรู้ว่า โดยครึ่งหนึ่งนั้นถึงห้าหลักทำให้ฉันมีห้องเล่น …

13
อัลกอริธึมในการเขียนโปรแกรมส่วนใดที่เป็นปัญหาสำคัญจริง ๆ
บางครั้งฉันได้ยินคนพูดว่าเนื่องจากความเร็วของโปรเซสเซอร์และจำนวนหน่วยความจำที่มีอยู่ประสิทธิภาพของอัลกอริทึมและรันไทม์ไม่ได้เป็นประเด็นหลัก แต่ฉันคิดว่ายังมีหลายพื้นที่ที่การพิจารณาดังกล่าวยังคงมีความสำคัญยิ่ง สองสิ่งที่อยู่ในใจคือการซื้อขายอัลกอริธึมโดยที่ธุรกรรมหลายพันรายการจะต้องดำเนินการในเสี้ยววินาทีและการเขียนโปรแกรมระบบฝังตัวซึ่งหน่วยความจำและพลังงานมักจะหายาก ฉันพูดถูกเกี่ยวกับตัวอย่างเหล่านี้ใช่ไหม และพื้นที่อื่น ๆ จะเป็นตัวอย่างได้อย่างไร
15 algorithms 

6
ข้ามไปยัง Android หรือเรียนรู้พื้นฐาน Java ก่อนหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันค่อนข้างเชี่ยวชาญใน C และรู้ C ++ บางอย่าง แต่ไม่เคยสัมผัส Java เมื่อเร็ว ๆ นี้ฉันมีไอเดียสำหรับแอพที่ฉันคิดว่ามีศักยภาพและฉันต้องการพัฒนามัน ฉันวางแผนที่จะไป Android ก่อนเพราะมันไม่จำเป็นต้องมี mac / iPhone ดังนั้นคำถามของฉันคือ: ฉันสามารถตรงไปที่การเรียนรู้การพัฒนา Android หยิบไวยากรณ์ Java ตามที่ฉันต้องการและมัน (หลังจากทั้งหมดฉันไม่คิดว่ามันจะแตกต่างจาก C / C ++) หรือฉันควรใช้เวลาสองสามชั่วโมง สัปดาห์เพื่อเรียนรู้พื้นฐานของ Java ก่อนแล้วเริ่มด้วยการพัฒนา Android?
15 java  android 

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