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

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

8
เบราว์เซอร์พิมพ์ลายนิ้วมือเป็นเทคนิคที่ใช้การได้เพื่อระบุผู้ใช้ที่ไม่ระบุตัวตนหรือไม่?
เบราว์เซอร์พิมพ์ลายนิ้วมือเป็นวิธีที่เพียงพอสำหรับการระบุผู้ใช้ที่ไม่ระบุชื่อหรือไม่? ถ้าคุณรวมข้อมูลไบโอเมตริกซ์เช่นท่าทางเมาส์หรือรูปแบบการพิมพ์ วันอื่น ๆ ผมวิ่งเข้าไปในการทดลองเอฟเอฟ Panopticlick กำลังทำงานบนเบราว์เซอร์ลายนิ้วมือ แน่นอนฉันคิดทันทีถึงผลสะท้อนความเป็นส่วนตัวและวิธีที่มันสามารถใช้เพื่อความชั่วร้ายได้ แต่ในทางกลับกันสิ่งนี้สามารถใช้เพื่อประโยชน์ที่ดีและอย่างน้อยก็เป็นปัญหาที่น่าดึงดูดในการทำงาน ในขณะที่ทำการค้นคว้าหัวข้อที่ฉันพบบาง บริษัท ใช้เบราว์เซอร์ลายนิ้วมือเพื่อโจมตีการฉ้อโกง และหลังจากส่งอีเมลไปสองสามฉบับฉันสามารถยืนยันได้ว่าเว็บไซต์หาคู่ใหญ่อย่างน้อยหนึ่งแห่งกำลังใช้การพิมพ์ลายนิ้วมือของเบราว์เซอร์ซึ่งเป็นกลไกหนึ่งในการตรวจสอบบัญชีปลอม (หมายเหตุ: พวกเขาพบว่ามันไม่ซ้ำกันมากพอที่จะทำตัวเป็นตัวตนเมื่อปรับขนาดผู้ใช้หลายล้านคน แต่สมองโปรแกรมเมอร์ของฉันไม่ต้องการเชื่อพวกเขา) นี่คือ บริษัท หนึ่งแห่งที่ใช้ลายนิ้วมือเบราว์เซอร์สำหรับตรวจจับและป้องกันการฉ้อโกง: http://www.bluecava.com/ นี่คือรายการสิ่งที่ครอบคลุมที่คุณสามารถใช้เป็นตัวระบุเฉพาะในเบราว์เซอร์ได้: http://browserspy.dk/

13
วิธีการเตือนโปรแกรมเมอร์อื่น ๆ ของการใช้งานในชั้นเรียน
ฉันกำลังเขียนชั้นเรียนที่ "ต้องใช้ในทางที่เฉพาะเจาะจง" (ฉันเดาว่าชั้นเรียนทั้งหมดต้อง ... ) ตัวอย่างเช่นผมสร้างfooManagerชั้นซึ่งต้องมีInitialize(string,string)การเรียกร้องให้พูดให้ และเพื่อผลักดันตัวอย่างต่อไปอีกเล็กน้อยชั้นเรียนจะไร้ประโยชน์หากเราไม่ฟังการThisHappenedกระทำของมัน ประเด็นของฉันคือชั้นเรียนที่ฉันเขียนต้องใช้วิธีการโทร แต่มันจะรวบรวมได้ดีถ้าคุณไม่เรียกวิธีการเหล่านั้นและจะจบลงด้วย FooManager ใหม่ที่ว่างเปล่า ในบางจุดมันอาจจะไม่ทำงานหรืออาจผิดพลาดขึ้นอยู่กับคลาสและสิ่งที่ทำ โปรแกรมเมอร์ที่ใช้ชั้นเรียนของฉันจะมองเข้าไปข้างในอย่างชัดเจนและตระหนักว่า "โอ้ฉันไม่ได้เรียก Initialize!" และมันก็ใช้ได้ แต่ฉันไม่ชอบมัน สิ่งที่ฉันต้องการนึกคิดคือรหัสที่จะไม่คอมไพล์หากไม่มีการเรียกใช้เมธอด ฉันเดาว่ามันเป็นไปไม่ได้ หรือบางสิ่งที่จะมองเห็นได้ชัดเจนทันที ฉันพบว่าตัวเองมีปัญหาด้วยวิธีการปัจจุบันที่ฉันมีที่นี่ซึ่งต่อไปนี้: เพิ่มค่าบูลีนส่วนตัวในชั้นเรียนและตรวจสอบทุกที่ที่จำเป็นหากมีการเริ่มต้นชั้นเรียน ถ้าไม่ฉันจะโยนข้อยกเว้นว่า "ชั้นไม่ได้เริ่มต้นคุณแน่ใจหรือว่าคุณโทร.Initialize(string,string)?" ฉันค่อนข้างโอเคกับวิธีการนี้ แต่มันนำไปสู่โค้ดจำนวนมากที่ถูกคอมไพล์และในที่สุดก็ไม่จำเป็นสำหรับผู้ใช้ปลายทาง นอกจากนี้บางครั้งรหัสก็ยิ่งมากขึ้นเมื่อมีวิธีการมากกว่าการInitiliazeโทร ฉันพยายามทำให้ชั้นเรียนของฉันมีวิธีการ / การกระทำสาธารณะไม่มากเกินไป แต่นั่นก็ไม่ได้แก้ปัญหา แต่ก็ทำให้มันสมเหตุสมผล สิ่งที่ฉันกำลังมองหาคือ วิธีการของฉันถูกต้องหรือไม่ มีดีกว่าไหม พวกคุณทำอะไร / ให้คำแนะนำ? ฉันพยายามที่จะแก้ปัญหาที่ไม่ใช่ปัญหาหรือไม่? ฉันได้รับการบอกเล่าจากเพื่อนร่วมงานว่าเป็นโปรแกรมเมอร์ที่จะตรวจสอบชั้นเรียนก่อนที่จะพยายามใช้ ฉันไม่เห็นด้วยอย่างเคารพ แต่นั่นเป็นอีกเรื่องที่ฉันเชื่อ พูดง่ายๆก็คือฉันกำลังพยายามหาวิธีที่จะไม่ลืมที่จะโทรออกเมื่อมีการนำคลาสนั้นมาใช้ในภายหลังหรือโดยคนอื่น การจำแนก: เพื่อชี้แจงคำถามมากมายที่นี่: ฉันไม่เพียง แต่พูดถึงส่วนเริ่มต้นของชั้นเรียนเท่านั้น แต่ยังเป็นตลอดชีวิต ป้องกันไม่ให้เพื่อนร่วมงานเรียกวิธีการสองครั้งตรวจสอบให้แน่ใจว่าพวกเขาเรียก X …

3
เหตุใดภาษาการเขียนโปรแกรมโดยเฉพาะ C ใช้วงเล็บปีกกาและไม่ใช่รูปสี่เหลี่ยมจัตุรัส
คำจำกัดความของ "ภาษา C-Style" สามารถทำให้ง่ายลงได้ถึง "ใช้วงเล็บปีกกา ( {})" ทำไมเราถึงใช้ตัวละครนั้น (และทำไมบางอย่างไม่สมเหตุสมผลมากกว่าอย่างเช่น[]ซึ่งไม่ต้องการปุ่ม Shift อย่างน้อยในคีย์บอร์ดของสหรัฐอเมริกา) มีประโยชน์จริงใด ๆ ต่อผลผลิตของโปรแกรมเมอร์ที่มาจากเครื่องหมายปีกกาหรือนักออกแบบภาษาใหม่ควรมองหาทางเลือกอื่น (เช่นคนที่อยู่เบื้องหลัง Python) Wikipediaบอกเราว่า C ใช้เครื่องหมายปีกกาดังกล่าว แต่ไม่ใช่เพราะอะไร คำแถลงในบทความ Wikipedia ในรายการภาษาโปรแกรม C-basedแสดงให้เห็นว่าองค์ประกอบไวยากรณ์นี้ค่อนข้างพิเศษ: ในวงกว้างการพูดภาษาตระกูล C เป็นภาษาที่ใช้ไวยากรณ์บล็อกแบบคล้าย C (รวมถึงเครื่องหมายปีกกาเพื่อเริ่มและจบบล็อก) ...

10
เหตุใด“ เลือก * จากตาราง” จึงถือว่าไม่เหมาะสม
เมื่อวานนี้ฉันกำลังคุยกับโปรแกรมเมอร์ "งานอดิเรก" (ฉันเป็นโปรแกรมเมอร์มืออาชีพ) เราเจองานบางอย่างของเขาและเขาบอกว่าเขามักจะค้นหาคอลัมน์ทั้งหมดในฐานข้อมูลของเขา (แม้ใน / ในเซิร์ฟเวอร์การผลิต / รหัส) ฉันพยายามโน้มน้าวเขาไม่ให้ทำ แต่ก็ยังไม่ประสบความสำเร็จ ในความคิดของฉันโปรแกรมเมอร์ควรถามสิ่งที่จำเป็นจริง ๆ เพื่อประโยชน์ของ "prettiness" ประสิทธิภาพและปริมาณการใช้งาน ฉันเข้าใจผิดกับมุมมองของฉัน?
96 database  sql  mysql  bad-code 

14
ภาษาการเขียนโปรแกรม C ยังคงใช้อยู่หรือไม่?
ฉันเป็นโปรแกรมเมอร์ C # และการพัฒนาส่วนใหญ่ของฉันสำหรับเว็บไซต์พร้อมกับแอปพลิเคชัน Windows บางตัว เท่าที่ C ไปฉันไม่ได้ใช้มันในเวลานานเนื่องจากไม่จำเป็นต้องทำ มันทำให้ฉันประหลาดใจเมื่อเพื่อนของฉันคนหนึ่งบอกว่าเธอต้องการเรียนรู้ C เพื่อทดสอบงานในขณะที่ฉันกำลังช่วยเธอเรียนรู้ C # ฉันคิดว่าใครบางคนจะเรียนรู้เฉพาะ C เพื่อทดสอบว่ามีการพัฒนาใน C หรือไม่จากความรู้ของฉันการพัฒนาทั้งหมดที่เกี่ยวข้องกับ COM และการออกแบบฮาร์ดแวร์ก็ทำใน C ++ เช่นกัน ดังนั้นการเรียนรู้ C จึงไม่สมเหตุสมผลถ้าคุณจำเป็นต้องใช้ C ++ ฉันไม่เชื่อในความสำคัญทางประวัติศาสตร์ด้วยเหตุใดจึงต้องเสียเวลาและเงินในการเรียนรู้ C C ยังคงใช้ในการพัฒนาซอฟต์แวร์ใหม่หรือสิ่งอื่นใดอีกหรือไม่?

25
โปรแกรมเมอร์ออกจากงานได้อย่างไร [ปิด]
ฉันกำลังคิดที่จะออกจากนายจ้างปัจจุบันของฉันและสงสัยว่าจะมีกระบวนการดำเนินการอย่างไรในโลกแห่งการเขียนโปรแกรม เรามีโครงการมากมายในขณะนี้และฉันเป็นนักพัฒนาเพียงคนเดียว เรามีโครงการ 4-5 โครงการที่ค่อนข้างใหญ่และต้องทำในอีกไม่กี่เดือนข้างหน้าและอีกต่อไป ฉันไปเพราะฉันเป็นพนักงานคนเดียวและนั่นก็ทำให้ฉันไม่ดี ฉันยังเด็กและต้องการเรียนรู้ดังนั้นทีมจะดี นอกจากนี้ยังทำงานมากเกินไปและ บริษัท มีการจัดการอย่างน่ากลัว ฉันไม่มีสัญญาที่จะต้องกังวลเกี่ยวกับเรื่องนี้ดังนั้นฉันสามารถเลิกในทางทฤษฎีและไม่กลับมาโดยไม่แจ้งล่วงหน้า เพียงแค่สงสัยว่าวิธีนี้ได้รับการจัดการตามปกติ ฉันควรเขียนจดหมายลาออกหรือไม่ ฉันควรแจ้งให้ทราบล่วงหน้าเท่าไหร่ ฉันควรให้เหตุผลในการจากไป ฉันควรไปหาเจ้านายของฉันซึ่งเป็นสาเหตุหลักที่ทำให้ฉันต้องจากไปหรือไปหาเจ้านายของเขาหรือไม่? ภาพรวมของการตอบกลับ จากคำติชมที่นี่ดูเหมือนว่าดีที่สุดที่จะแจ้งให้ทราบล่วงหน้า 2-4 สัปดาห์และนำเสนอการลาออกเป็นลายลักษณ์อักษร อย่าอธิบายรายละเอียดอย่างละเอียดว่าทำไมคุณถึงออกเดินทางในกรณีส่วนใหญ่ อย่าเผาสะพาน เป็นมืออาชีพ

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

9
เหตุใดฉันจึงควรใช้การฉีดพึ่งพา
ฉันมีช่วงเวลาที่ยากมองหาแหล่งข้อมูลเกี่ยวกับทำไมฉันจึงควรใช้ฉีดพึ่งพา ทรัพยากรส่วนใหญ่ที่ฉันเห็นอธิบายว่ามันเพิ่งผ่านอินสแตนซ์ของวัตถุไปยังอีกอินสแตนซ์ของวัตถุ แต่ทำไม? นี่เป็นเพียงสถาปัตยกรรม / รหัสที่สะอาดขึ้นหรือมีผลกระทบต่อประสิทธิภาพโดยรวมหรือไม่ ทำไมฉันต้องทำสิ่งต่อไปนี้? class Profile { public function deactivateProfile(Setting $setting) { $setting->isActive = false; } } แทนที่จะเป็นดังต่อไปนี้? class Profile { public function deactivateProfile() { $setting = new Setting(); $setting->isActive = false; } }

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

13
เราควรกำจัดตัวแปรท้องถิ่นถ้าทำได้หรือไม่?
ตัวอย่างเช่นเพื่อให้ซีพียูยังคงอยู่ใน Android ฉันสามารถใช้รหัสเช่นนี้: PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc"); wakeLock.acquire(); แต่ฉันคิดว่าตัวแปรท้องถิ่นpowerManagerและwakeLockสามารถกำจัดได้: ((PowerManager)getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag") .acquire(); ฉากที่คล้ายกันจะปรากฏในมุมมองการแจ้งเตือนของ iOS เช่นจาก UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [alertView release]; } ไปที่: [[[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" …

2
JavaScript คืออะไรจริงๆ
ทั้งหมดนี้เริ่มต้นเมื่อผมกำลังมองหาวิธีการทดสอบของฉันหน้าเว็บสำหรับอัจฉริยะ JavaScript เช่นW3C HTML Validator ฉันยังไม่พบ ถ้าอย่างนั้นคุณก็รู้ว่า ... ผมมองสำหรับหน้า JavaScript อย่างเป็นทางการและหาECMA สคริปต์ คนเหล่านี้มีภาษาสคริปต์ที่ได้มาตรฐาน (ฉันไม่รู้สึกว่าเรียกมันว่า JavaScript อีกต่อไป!) และเรียกมันว่า ECMA-262 ( Wikipedia ) ผลงานล่าสุดของพวกเขาคือรุ่น 5.1 JavaScript ได้รับการพัฒนาโดย Mozilla Corporation และรุ่นเสถียรล่าสุดของพวกเขาคือ 1.8.5 ( ดูที่นี่ ) ซึ่งอิงตามรุ่น 5.1 ของ ECMA หน้าวิกิพีเดียที่เชื่อมโยงกล่าวถึงภาษาถิ่น JavaScript 1.8.5 ของ Mozilla ถูกระบุว่าเป็นภาษาถิ่นพร้อมกับJScript 9 (IE) และ JavaScript (Chrome ของV8 [ Wiki …

2
รูปแบบ“ Free Monad + Interpreter” คืออะไร
ฉันเคยเห็นคนที่พูดถึงFree Monad กับ Interpreterโดยเฉพาะอย่างยิ่งในบริบทของการเข้าถึงข้อมูล รูปแบบนี้คืออะไร? ฉันควรใช้เมื่อใด มันทำงานอย่างไรและฉันจะใช้มันอย่างไร ฉันเข้าใจ (จากโพสต์เช่นนี้ ) ว่ามันเกี่ยวกับการแยกแบบจำลองจากการเข้าถึงข้อมูล มันแตกต่างจากรูปแบบพื้นที่เก็บข้อมูลที่รู้จักกันดีอย่างไร ดูเหมือนว่าพวกเขาจะมีแรงจูงใจที่เหมือนกัน


4
อลันเคย์หมายถึงอะไรโดย * คำว่า "เชิงวัตถุ" จริงๆ?
มีรายงานว่า Alan Kay เป็นผู้ประดิษฐ์คำว่า "เชิงวัตถุ" และเขาก็มักจะอ้างว่ามีการกล่าวว่าสิ่งที่เราเรียก OO วันนี้ไม่ใช่สิ่งที่เขาหมายถึง ตัวอย่างเช่นฉันเพิ่งพบสิ่งนี้บน Google: ฉันสร้างคำว่า 'เชิงวัตถุ' และฉันสามารถบอกคุณได้ว่าฉันไม่มี C ++ ในใจ - Alan Kay, OOPSLA '97 ผมคลับคล้ายคลับคลาได้ยินบางสิ่งบางอย่างที่ชาญฉลาดสวยเกี่ยวกับสิ่งที่เขาไม่ได้หมายความว่า บางสิ่งบางอย่างตามสายของ "การส่งข้อความ" คุณรู้ไหมว่าเขาหมายถึงอะไร? คุณช่วยกรอกรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เขาหมายและสิ่งที่แตกต่างจาก OO ทั่วไปของวันนี้? กรุณาแบ่งปันการอ้างอิงบางอย่างถ้าคุณมี ขอบคุณ

13
การใช้ try-catch ที่ซ้อนกันบล็อกการป้องกันรูปแบบหรือไม่
สิ่งนี้เป็นปฏิปักษ์หรือไม่? มันเป็นวิธีปฏิบัติที่ยอมรับได้? try { //do something } catch (Exception e) { try { //do something in the same line, but being less ambitious } catch (Exception ex) { try { //Do the minimum acceptable } catch (Exception e1) { //More try catches? } } }

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