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

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

13
ทำไมเราไม่เก็บแผนผังไวยากรณ์แทนรหัสต้นฉบับ?
เรามีภาษาโปรแกรมมากมาย ทุกภาษามีการแยกวิเคราะห์และตรวจสอบไวยากรณ์ก่อนที่จะแปลเป็นรหัสเพื่อสร้างแผนผังไวยากรณ์นามธรรม (AST) เรามีต้นไม้ไวยากรณ์นามธรรมนี้ทำไมเราไม่เก็บต้นไม้ไวยากรณ์นี้แทนที่จะเป็นรหัสที่มา (หรือถัดจากซอร์สโค้ด)? โดยใช้ AST แทนซอร์สโค้ด โปรแกรมเมอร์ทุกคนในทีมสามารถลำดับต้นไม้นี้เป็นภาษาใด ๆ ที่พวกเขาต้องการ (ด้วยไวยากรณ์ที่เหมาะสมตามบริบทที่เหมาะสม) และแยกกลับไปที่ AST เมื่อเสร็จแล้ว ดังนั้นสิ่งนี้จะขจัดข้อถกเถียงเกี่ยวกับคำถามสไตล์การเข้ารหัส (ตำแหน่งที่จะใส่ {และ} ตำแหน่งที่จะวางช่องว่างการเยื้อง ฯลฯ ) อะไรคือข้อดีข้อเสียของวิธีการนี้?

15
เส้นทางอาชีพสำหรับนักพัฒนาที่ไม่ชอบการจัดการคืออะไร?
หากคุณเป็นนักพัฒนาซอฟต์แวร์ (ผู้พัฒนาอาวุโสหรือหัวหน้าฝ่ายพัฒนา) และคุณต้องการใช้รหัส / การออกแบบมากกว่าการประกอบอาชีพด้านการจัดการเส้นทางอาชีพที่มีอยู่ใน บริษัท ของคุณหรือที่คุณเคยได้ยินมาคืออะไร? ไกลแค่ไหนที่คุณสามารถไป? มันเป็นไปได้ไหมที่จะทำตัวต่อไปจนกว่าคุณจะกัดฝุ่นหรือว่าไร้เดียงสาเกินไป? คนอย่าง Uncle Bob นั้นยังถือว่าเป็นนักพัฒนาเช่นที่พวกเขาอ้าง?
110 management  coding 

30
คำพูดที่คุณชื่นชอบเกี่ยวกับการเขียนโปรแกรมคืออะไร? [ปิด]
คำพูดที่คุณชื่นชอบเกี่ยวกับการเขียนโปรแกรมคืออะไร? หนึ่งคำพูดต่อคำตอบและโปรดตรวจสอบรายการที่ซ้ำกันก่อนโพสต์!
110 quotations 

5
เหตุใดผู้คนจึงแยกที่เก็บบน GitHub [ปิด]
ฉันสังเกตเห็นว่าบัญชีGitHubจำนวนมากมีที่เก็บซึ่งแยกจากบัญชีอื่นเท่านั้น นอกจากนี้คนที่ทำสิ่งนี้มักจะไม่ให้ความช่วยเหลือใด ๆ กับที่เก็บแยก ฉันเคยได้ยินคนเก็บแสตมป์และเปลือกหอย แต่ทำไมทุกคนถึงต้องการเก็บที่เก็บ โดยส่วนตัวแล้วฉันจะแยกที่เก็บเฉพาะถ้าฉันต้องการเปลี่ยนแปลงบางอย่าง

3
ประโยชน์ของการบันทึกอย่างมีโครงสร้างเทียบกับการบันทึกขั้นพื้นฐาน
เรากำลังสร้างแอปใหม่และฉันต้องการรวมการบันทึกที่มีโครงสร้าง การตั้งค่าในอุดมคติของฉันจะเป็นสิ่งที่ต้องการSerilogสำหรับรหัส C # Bunyanของเราและสำหรับ JS ของเรา เหล่านี้จะป้อนเข้าสู่fluentdแล้วจะออกไปจำนวนของสิ่งใด ๆ elasticsearch + kibanaที่ผมคิดในตอนแรก เรามีฐานข้อมูล MySQL อยู่แล้วดังนั้นในระยะสั้นฉันสนใจที่จะติดตั้ง Serilog + Bunyan มากขึ้นและผู้ใช้สามารถใช้งานได้และเราสามารถเข้าสู่ระบบ MySQL ได้ในขณะที่เราใช้เวลาเพิ่มขึ้นเล็กน้อยและส่วนที่เหลือ อย่างไรก็ตามหนึ่งในนักเขียนโค้ดที่มีประสบการณ์มากกว่าของเราต้องการทำสิ่งที่ชอบ: การlog.debug("Disk quota {0} exceeded by user {1}", quota, user);ใช้log4netและจากนั้นก็เรียกใช้คำสั่งที่เลือกกับ MySQL เช่น:SELECT text FROM logs WHERE text LIKE "Disk quota"; ที่ถูกกล่าวว่าวิธีใดดีกว่าและ / หรือสิ่งใดที่เราต้องพิจารณาเมื่อเลือกประเภทของระบบบันทึก
110 c#  javascript  mysql  logging 

10
เหตุใดจึงใช้ตัวเลือกใน Java 8+ แทนการตรวจสอบตัวชี้โมฆะแบบดั้งเดิม
เราเพิ่งย้ายไปยัง Java 8 ตอนนี้ฉันเห็นแอปพลิเคชันที่เต็มไปด้วยOptionalวัตถุ ก่อน Java 8 (สไตล์ 1) Employee employee = employeeServive.getEmployee(); if(employee!=null){ System.out.println(employee.getId()); } หลังจาก Java 8 (สไตล์ 2) Optional<Employee> employeeOptional = Optional.ofNullable(employeeService.getEmployee()); if(employeeOptional.isPresent()){ Employee employee = employeeOptional.get(); System.out.println(employee.getId()); } ฉันไม่เห็นคุณค่าที่เพิ่มขึ้นของOptional<Employee> employeeOptional = employeeService.getEmployee();เวลาที่บริการกลับมาเป็นตัวเลือก: มาจากพื้นหลัง Java 6 ฉันเห็นสไตล์ 1 ชัดเจนกว่าและมีโค้ดน้อยกว่า มีข้อได้เปรียบที่แท้จริงที่ฉันหายไปที่นี่หรือไม่? รวบรวมจากความเข้าใจจากคำตอบทั้งหมดและการวิจัยเพิ่มเติมที่บล็อก
110 java  java8 

14
ฉันจะรักษาคุณภาพของรหัสโดยไม่มี SCM ได้อย่างไร
ฉันทำงานในสถาบันของรัฐ เทคโนโลยีที่ใช้อยู่ที่นี่และวิธีการพัฒนาซอฟต์แวร์นั้นค่อนข้างล้าสมัย มีพื้นที่เก็บข้อมูลมากมาย แต่ไม่มีพื้นที่ที่เหมาะสมในการเก็บและบำรุงรักษาแอปพลิเคชันที่ใช้ในการทำงานส่วนใหญ่โดยอัตโนมัติที่นี่ สถาบันไม่อนุญาตให้ฉันใช้ซอฟต์แวร์ SCM เช่น GIT หรือ SVN อะไรจะเป็นวิธีที่ดีที่สุดในการรักษาคุณภาพรหัสและสามารถเพิ่มคุณสมบัติใหม่ในแอปได้ในภายหลัง ฉันจะจำการเปลี่ยนแปลงที่ทำกับรหัสโดยไม่ทำลายได้อย่างไร แก้ไข: ฉันลืมที่จะพูดถึงพวกเขามีไดรฟ์เครือข่ายสำหรับคอมพิวเตอร์แต่ละเครื่องและอย่างใดไดรฟ์เครือข่ายเหล่านี้ทำหรือบันทึกการสำรองข้อมูลในช่วงเวลา อย่างไรก็ตามหากฉันไม่ได้สร้างแผนของตัวเองเพื่อให้สามารถบันทึกงานของฉันและสามารถเพิ่มคุณสมบัติใหม่โดยไม่ทำลายโค้ดที่มีอยู่แล้วก็ไม่มีข้อได้เปรียบที่เหนือกว่าโซลูชัน SCM แก้ไข: เนื่องจากหลายคนแนะนำ Git พกพาฉันต้องเพิ่มข้อมูลเพิ่มเติม ฉันพยายามติดตั้งเซิร์ฟเวอร์ Visual SVN แต่ล้มเหลวเนื่องจากฉันไม่มีสิทธิ์ของผู้ดูแลระบบในการติดตั้ง ฉันพยายามดาวน์โหลด Git shell ปกติ แต่ไฟร์วอลล์หรือการตั้งค่าเครือข่ายไม่อนุญาตให้ฉันเข้าถึงหน้าดาวน์โหลด Git ฉันยังลองส่ง Git พกพาไปยังอีเมลซึ่งก็คือ Gmail Google ตรวจพบไฟล์ exe ในแพ็คเกจและมันก็ไม่อนุญาตให้ฉันดาวน์โหลด Git เวอร์ชั่นพกพาบนคอมพิวเตอร์ที่ทำงานของฉัน อีกสิ่งหนึ่งที่ฉันต้องพูดถึงคือนโยบายเครือข่ายที่ใช้กับคอมพิวเตอร์ที่สถาบันไม่อนุญาตให้ใช้การจัดเก็บ USB devces คุณสามารถใช้พอร์ต USB เพื่อชาร์จสมาร์ทโฟนหรือใช้พลังงานบางอย่างเช่นลำโพงขนาดเล็ก เช่นเดียวกับบางคนที่กล่าวถึงมีคอมพิวเตอร์ที่ไม่อนุญาตแม้แต่อินเทอร์เน็ต
110 git  code-quality  svn  scm 

7
การทดสอบการรวมระบบคืออะไรกันแน่?
เพื่อนของฉันและฉันได้รับการดิ้นรนเพื่อจำแนกว่าการทดสอบการรวมคืออะไร ตอนนี้ระหว่างทางกลับบ้านฉันเพิ่งรู้ว่าทุกครั้งที่ฉันพยายามยกตัวอย่างโลกแห่งความจริงของการทดสอบการรวมเข้าด้วยกันมันก็เป็นการทดสอบการยอมรับเช่น สิ่งที่นักธุรกิจจะพูดออกมาดัง ๆ ซึ่งระบุว่าระบบควรส่งมอบอะไร ฉันตรวจสอบเอกสาร Ruby on Rails สำหรับการจำแนกประเภทการทดสอบเหล่านี้และตอนนี้ก็โยนฉันจนหมด คุณสามารถให้คำอธิบายทางวิชาการสั้น ๆ เกี่ยวกับการทดสอบการรวมกับตัวอย่างในโลกแห่งความจริงได้หรือไม่?
110 testing  agile  tdd 

13
เราควรหลีกเลี่ยงคุณสมบัติภาษาที่ C ++ มี แต่ Java ไม่ได้หรือไม่
สมมติว่าฉันถูก จำกัด ให้ใช้ C ++ โดยสภาพแวดล้อมในโครงการ เป็นการดีหรือไม่ที่จะป้องกันการใช้คุณสมบัติภาษาบางอย่างที่ C ++ มี แต่ Java ไม่ได้มี (เช่น: การสืบทอดหลายตัว ฉันคิดว่าเหตุผลคือ: เนื่องจาก Java เป็นรุ่นใหม่กว่า C ++ หาก Java ไม่มีคุณสมบัติที่ C ++ มีหมายความว่าคุณลักษณะนั้นไม่ดีดังนั้นเราจึงควรหลีกเลี่ยงการใช้งาน รหัส C ++ พร้อมคุณสมบัติเฉพาะ C ++ (เช่น: ฟังก์ชั่นเพื่อนหลายมรดก) สามารถดูแลรักษาหรือตรวจสอบโดยโปรแกรมเมอร์ C ++ เท่านั้น แต่ถ้าเราเขียน C ++ เช่น Java (โดยไม่มีคุณสมบัติเฉพาะภาษา C ++) โค้ดนั้นสามารถรักษาหรือตรวจสอบได้โดยทั้งสอง โปรแกรมเมอร์ C …
110 java  c++  code-quality 

12
เหตุผลที่ต้องการตัวแปรท้องถิ่นมากกว่าตัวแปรอินสแตนซ์?
codebase ที่ฉันใช้บ่อยใช้ตัวแปรอินสแตนซ์เพื่อแชร์ข้อมูลระหว่างวิธีการต่าง ๆ นักพัฒนาดั้งเดิมยืนยันว่านี่เป็นไปตามแนวทางปฏิบัติที่ดีที่สุดที่ระบุไว้ในหนังสือClean Codeของลุงบ๊อบ / โรเบิร์ตมาร์ติน: "กฎข้อแรกของฟังก์ชั่นคือพวกเขาควรมีขนาดเล็ก" และ "จำนวนที่เหมาะสมของการขัดแย้งสำหรับฟังก์ชั่นคือศูนย์ (niladic) (... ) การโต้เถียงนั้นยากพวกเขาใช้พลังทางแนวคิดมากมาย" ตัวอย่าง: public class SomeBusinessProcess { @Inject private Router router; @Inject private ServiceClient serviceClient; @Inject private CryptoService cryptoService; private byte[] encodedData; private EncryptionInfo encryptionInfo; private EncryptedObject payloadOfResponse; private URI destinationURI; public EncryptedResponse process(EncryptedRequest encryptedRequest) { checkNotNull(encryptedRequest); getEncodedData(encryptedRequest); …
109 java  refactoring 

4
คำสั่งห้ามของ `long 'สมเหตุสมผลหรือไม่?
ในปัจจุบันข้ามแพลตฟอร์ม C ++ (หรือ C) โลกเรามี : Data model | short | int | long | long long | pointers/size_t | Sample operating systems ... LLP64/IL32P64 16 32 32 64 64 Microsoft Windows (x86-64 and IA-64) LP64/I32LP64 16 32 64 64 64 Most Unix and Unix-like systems, e.g. Solaris, Linux, …

7
คุณได้รับการว่าจ้างให้แก้ไขข้อบกพร่องเล็ก ๆ สำหรับไซต์ที่เน้นเรื่องความปลอดภัย ดูที่รหัสนั้นเต็มไปด้วยช่องโหว่ความปลอดภัย คุณทำอะไร? [ปิด]
ฉันได้รับการว่าจ้างจากใครบางคนที่จะทำงานเล็ก ๆ บนเว็บไซต์ มันเป็นเว็บไซต์สำหรับ บริษัท ขนาดใหญ่ มันมีข้อมูลที่ละเอียดอ่อนมากดังนั้นการรักษาความปลอดภัยจึงมีความสำคัญมาก เมื่อวิเคราะห์รหัสฉันพบว่ามันเต็มไปด้วยช่องโหว่ด้านความปลอดภัย - อ่านไฟล์ PHP จำนวนมากที่ส่งผู้ใช้รับ / โพสต์เข้าสู่คำขอ mysql และคำสั่งของระบบโดยตรง ปัญหาคือคนที่สร้างเว็บไซต์ให้เขาเป็นโปรแกรมเมอร์กับครอบครัวและเด็ก ๆ ที่ต้องพึ่งพางานนั้น ฉันไม่สามารถพูดได้ว่า: "เว็บไซต์ของคุณเป็นสวนสนุกตัวเล็กสคริปต์ให้ฉันทำซ้ำสำหรับคุณและคุณจะดี" คุณจะทำอะไรในสถานการณ์นี้ ปรับปรุง: ฉันทำตามคำแนะนำที่ดีที่นี่และรายงานอย่างสุภาพต่อผู้พัฒนาว่าฉันพบข้อบกพร่องด้านความปลอดภัยที่เป็นไปได้ในไซต์ ฉันชี้ให้เห็นสายและบอกว่าอาจมีช่องโหว่ที่เป็นไปได้สำหรับการโจมตีการฉีด SQL ที่นั่นและถามว่าเขารู้เกี่ยวกับเรื่องนี้หรือไม่ เขาตอบว่า: "แน่ใจ แต่ผมคิดว่าการที่จะใช้ประโยชน์จากมันโจมตีควรมีข้อมูลเกี่ยวกับโครงสร้างของฐานข้อมูลนั้นฉันต้องเข้าใจดีกว่า" อัปเดต 2: ฉันบอกว่านั่นไม่ใช่กรณีเสมอไปและแนะนำให้เขาติดตามลิงก์คำถาม Stack Overflow นี้เพื่อจัดการกับมันอย่างถูกต้อง: จะป้องกัน SQL injection ใน PHP ได้อย่างไร? เขาบอกว่าเขาจะศึกษาและขอบคุณฉันที่บอกเขามาก่อน ฉันคิดว่าส่วนของฉันเสร็จแล้วขอบคุณพวกคุณ

3
การแยก repo บน GitHub แต่การอนุญาตให้มีปัญหาใหม่ใน fork [ปิด]
ก่อนหน้านี้ฉันเคยแยก repos ของคนอื่นใน GitHub และฉันสังเกตเห็นว่าปัญหายังคงอยู่กับ repo ดั้งเดิมและฉันไม่สามารถยื่นปัญหาใน repo ที่มีการแยกได้ ตอนนี้ฉันมีงานต่อไปนี้ ฉันทำงานให้กับธุรกิจขนาดเล็กที่มีการพัฒนาโดยหนึ่งในผู้ว่าจ้างในบัญชีส่วนตัวของเขา เขาออกจากโครงการอย่างเป็นมิตรและเราต้องการย้ายโครงการนั้นออกจากบัญชีส่วนตัวของเขาไปยังบัญชี "บทบาท" ใหม่ใน GitHub โดยปกติฉันจะแยก repo เพื่อรักษาประวัติโค้ด แต่ฉันจะจบลงด้วย repo ที่เราไม่สามารถแก้ไขปัญหาใหม่ได้ซึ่งเป็นสิ่งที่ไม่พึงปรารถนา ฉันจะทำสำเนาของ repo ดั้งเดิมนี้ไปยังบัญชีใหม่ของเรายังคงรักษาประวัติรหัสได้อย่างดีเยี่ยม แต่สามารถยื่นปัญหาใหม่ภายในบัญชีใหม่นี้ได้อย่างไร

6
เหตุใดจึงไม่ควรขอข้อมูลการเปลี่ยนแปลง GET บนเซิร์ฟเวอร์
ทั่วอินเทอร์เน็ตฉันเห็นคำแนะนำต่อไปนี้: GET ไม่ควรเปลี่ยนแปลงข้อมูลบนเซิร์ฟเวอร์ - ใช้คำขอ POST สำหรับสิ่งนั้น พื้นฐานของความคิดนี้คืออะไร ถ้าฉันสร้างบริการ php ซึ่งแทรกข้อมูลในฐานข้อมูลและส่งผ่านพารามิเตอร์ในสตริงการสืบค้น GET ทำไมจึงเป็นเช่นนั้น (ฉันใช้คำสั่งที่เตรียมไว้เพื่อดูแล SQL Injection) คำขอ POST มีความปลอดภัยมากกว่าหรือไม่ หรือมีเหตุผลทางประวัติศาสตร์สำหรับเรื่องนี้? คำแนะนำนี้วันนี้มีความถูกต้องหรือไม่?
109 http  http-request 

14
ฉันจะจัดการกับทีมการต่อสู้แบบต่อต้านได้อย่างไร?
Backstory: ฉันทำงานเป็นส่วนหนึ่งของทีมนี้เป็นเวลาสามปีที่ผ่านมาและในเวลานี้เรามี Scrum Master สามคนที่แตกต่างกันไป เนื่องจากการเปลี่ยนแปลงใน Scrum Masters และวิธีการของพวกเขาในการแสดงมันทำให้ทีมของฉันมึนงงกับแนวคิดของ Scrum เพราะหลักการไม่ได้ถูกบังคับใช้อย่างสม่ำเสมอและหนึ่งใน Scrum Masters เป็นคนที่ไม่เชื่อในความคล่องแคล่ว การพัฒนาและเพิ่งเก็บเหตุการณ์และสิ่งประดิษฐ์เป็นสามเณรเพื่อให้สอดคล้องกับการตัดสินใจของ บริษัท ตอนนี้สมาชิกในทีมของฉันรู้สึกรำคาญและเบื่อเมื่อเราทำกิจกรรมการต่อสู้และโดยเฉพาะอย่างยิ่งบุคคลคนหนึ่งเป็นคำพูดเกี่ยวกับเรื่องนี้ ปัจจุบัน: สองเดือนที่ผ่านมา บริษัท ได้แต่งตั้งฉัน Scrum Master ให้กับทีมของฉันเนื่องจากความทุ่มเทของฉันต่อการทำงานที่คล่องตัวและหลักการของ บริษัท ฉันกำลังทุกข์ทรมานอย่างมากภายใต้ความกดดันบรรยากาศของสมาชิกในทีมของฉันที่ไม่เต็มใจที่จะทำการต่อสู้ ดังที่กล่าวมาพวกเขารำคาญกับกระบวนการทั้งหมดซึ่งทำให้ฉันเป็นเรื่องยากมากเพราะพวกเขาไม่ได้มีส่วนร่วมในการสนทนาที่จำเป็นเพื่อทำให้การวางแผนย้อนหลังและการแย่งรายวันมีประสิทธิภาพ สำหรับพวกเขาการวางแผนเป็นเพียงการเสียเวลาเพราะเราเพิ่งย้ายล้นไปสู่ ​​Sprint ใหม่และไม่ทำงานให้เสร็จสมบูรณ์ดังนั้นทำไมต้องกังวล ในช่วงหวนรำลึกความหลังฉันแค่รู้สึกว่าพวกเขาต้องการพูดว่า "หยุดทำการแย่งชิงกัน" คนคนหนึ่งทำ แต่คนอื่นเงียบและฉันต้องจัดการกับเรื่องนี้ทุกครั้ง การต่อสู้รายวันเป็นเพียงการเสียเวลาอีกครั้งสำหรับพวกเขาเพราะไม่มีใครรบกวนการพูดและวางแผนวัน พวกเขาเพิ่งพูดว่า "ฉันทำงานที่ X เมื่อวานนี้และจะทำงานอีกครั้งในวันนี้" และส่วนใหญ่พวกเขาเพียงแค่พูดเล่น ๆ จนกว่าฉันจะเข้มงวดขึ้น ฉันมีขนาดใหญ่มากเมื่อพูดถึงวิธีที่พวกเขาใช้เวลาระหว่างเหตุการณ์เหล่านี้ แต่ฉันกำลังจะตายข้างในเพราะฉันมีความหลงใหลในสิ่งนี้และพวกเขาไม่สนใจอีกต่อไป วันนี้คนที่ต่อต้านฉันเสมอบอกให้ฉันหยุดพูดว่า "พวกเขาบอกว่านี่คือสิ่งที่พวกเขามุ่งมั่นสำหรับ Sprint นี้" เพราะในคำพูดของเขา "เราไม่เคยทำ …

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