ทำไมการใช้ abstractions (เช่น LINQ) จึงเป็นเรื่องต้องห้าม? [ปิด]


60

ฉันเป็นผู้รับจ้างอิสระดังนั้นฉันจึงสัมภาษณ์ 3-4 ครั้งต่อปีเพื่อหากิ๊กใหม่ ๆ ตอนนี้ฉันอยู่ในรอบนั้นและกลับกลายเป็นโอกาสแม้ว่าฉันจะรู้สึกว่าการสัมภาษณ์เป็นไปด้วยดี สิ่งเดียวกันเกิดขึ้นกับฉันสองสามครั้งในปีนี้

ตอนนี้ฉันไม่ได้เป็นคนที่สมบูรณ์แบบและฉันไม่คาดหวังว่าจะเป็นแบบที่ดีสำหรับทุกองค์กร ที่กล่าวว่าแม่นเฉลี่ยของฉันต่ำกว่าปกติดังนั้นฉันถามผู้สัมภาษณ์สุดท้ายของฉันสำหรับข้อเสนอแนะที่สร้างสรรค์และเขาส่ง!

สิ่งสำคัญตามที่ผู้สัมภาษณ์กล่าวคือฉันดูเหมือนจะเอนตัวไปสู่การใช้ abstractions (เช่น LINQ) มากกว่าที่จะไปสู่อัลกอริทึมที่ต่ำกว่าและมีการเติบโตแบบออร์แกนิก

บนพื้นผิวสิ่งนี้ก็สมเหตุสมผล - ในความเป็นจริงมันทำให้คนอื่นปฏิเสธด้วยเช่นกันเพราะฉันพูดเรื่อง LINQ ในการสัมภาษณ์เหล่านั้นด้วยและดูเหมือนว่าผู้สัมภาษณ์รู้เรื่อง LINQ ไม่มากนัก (แม้ว่าพวกเขาจะเป็น. NET ผู้ชาย)

ดังนั้นตอนนี้ฉันเหลือคำถามนี้:ถ้าเราควรจะ "ยืนอยู่บนไหล่ของยักษ์" และใช้ abstractions ที่มีให้เรา (เช่น LINQ) แล้วทำไมบางคนคิดว่ามันต้องห้าม? มันไม่สมเหตุสมผลที่จะดึงรหัส "ปิดชั้นวาง" ถ้ามันบรรลุเป้าหมายเดียวกันโดยไม่มีค่าใช้จ่ายเพิ่มเติมหรือไม่

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

ฉันไม่ได้ตั้งใจจะให้ความสำคัญกับ LINQ ที่นี่ ฉันแน่ใจว่าโลกของ JAVA นั้นมีบางสิ่งที่คล้ายคลึงกันฉันแค่อยากจะรู้ว่าทำไมคนบางคนถึงรู้สึกอึดอัดใจกับความคิดที่จะใช้สิ่งที่เป็นนามธรรมที่พวกเขาไม่ได้เขียน

UPDATE

ตามที่ Euphoric ชี้ให้เห็นไม่มีอะไรเทียบได้กับ LINQ ในโลก Java ดังนั้นหากคุณกำลังพัฒนาบน. NET สแต็คทำไมไม่ลองและใช้ประโยชน์จากมันเสมอไป? เป็นไปได้ไหมที่คนเราไม่เข้าใจอย่างถ่องแท้ว่าทำอะไร?


8
ฉันคิดว่าคุณไม่รู้ว่า "นามธรรม" คืออะไรเพราะ LINQ ไม่มีส่วนเกี่ยวข้องกับมัน
ร่าเริง

8
"ฉันแน่ใจว่าโลกของ JAVA นั้นมีบางสิ่งที่สามารถเทียบเคียงได้" จริงๆแล้ว LINQ เป็นหนึ่งในไม่กี่อย่างที่. NET และ Java ไม่ได้ทำ
ร่าเริง

42
@ ร่าเริง - ไม่ LINQ ไม่นามธรรมไปการทำงานในระดับที่ต่ำกว่าของงานต่างๆเช่นการเรียงลำดับและกรองเช่น? ผมค่อนข้างแน่ใจว่าว่าจะมีบางรหัสพิเศษที่อยู่เบื้องหลังobjectCollection.Where(oc=>oc.price > 100)เช่น จะไม่เป็นการใช้สิ่งที่เป็นนามธรรมหรือไม่? บางทีคุณสามารถบอกฉันว่าฉันหายไปที่นี่ . .
Matt Cashatt

37
มีโอกาสเสมอที่พวกเขาไม่เข้าใจ LINQ และไม่เห็นคุณค่าในการเรียนรู้ ลักษณะการทำงานของการเขียนมันแตกต่างจากการเขียนโปรแกรมที่จำเป็นมาก ในฐานะผู้รับเหมาฉันได้เห็นเมื่อเร็ว ๆ นี้ในปี 2009 ผู้พัฒนา Java "อาวุโส"เห็นว่าไม่เข้าใจ SQL เพียงพอที่จะเขียนคำสั่งขั้นสูงดังนั้นพวกเขาจึงใช้รหัสเพิ่มประสิทธิภาพสัปดาห์ที่นำข้อมูลทั้งหมดไปยังฝั่ง Java และกรองด้วยรหัส Java แทน ฐานข้อมูลทำมัน ความไม่รู้เป็นอาละวาดในอุตสาหกรรมการพัฒนาซอฟต์แวร์

18
หากคุณเข้าใจ LINQ แต่ผู้สัมภาษณ์ของคุณไม่แสดงว่าคุณดีกว่านั้น ตั้งค่าสถานที่ท่องเที่ยวของคุณสูงขึ้น
Jay Bazuzi

คำตอบ:


74

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

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

หากคุณคิดว่าคุณจะมีความสุขในร้านที่ไม่ใช่ LINQ ลองถามว่าพวกเขาใช้อะไรและปรับคำตอบให้เหมาะสม แสดงให้พวกเขาเห็นว่าในขณะที่คุณชอบ LINQ คุณก็สามารถใช้เครื่องมืออะไรก็ได้


4
@MatthewPatrickCashatt คุณไม่สามารถแก้ไขและดำเนินการต่อในตัวแก้ไขข้อบกพร่องภายในวิธีที่มีคำสั่ง linq มันยังไม่เพียงพอสำหรับการเปิดตัวที่ฉันไม่ได้ใช้ แต่มันเป็นเหตุผลหลักที่ฉันลังเลในการทำเช่นนั้นชั่วครู่หนึ่ง
Dan Neely

3
+1 โดยเฉพาะอย่างยิ่งสำหรับย่อหน้าที่สอง มันใช้กับฉันโดยสิ้นเชิงเนื่องจากฉันจะไม่มีความสุขอย่างสมบูรณ์ในการทำงานกับรหัส C # โดยไม่สามารถใช้ LINQ ได้
Arseni Mourzenko

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

6
+1 แต่มันสามารถทำงานในวิธีอื่นได้เช่นกัน หากมีคนบอกฉันว่าพวกเขาไม่ได้จ้างฉันเพราะฉันใช้ Yacc ในการสร้างเครื่องมือแยกวิเคราะห์แทนที่จะกลิ้งตัวเองมันก็ไม่ใช่ที่ที่ฉันอยากทำงาน
Spencer Rathbun

5
@MatthewPatrickCashatt: คำตอบนี้ (และความคิดเห็นของฉันเกี่ยวกับมัน) ไม่ได้เฉพาะเจาะจงกับ LINQ แต่เป็นคำสั่งทั่วไป แต่สำหรับ LINQ ต่อไปนี้เป็นข้อความที่ตัดตอนมาจาก C # 4.0 / 5.0 สั้น ๆ พูดถึงปัญหาเกี่ยวกับประสิทธิภาพของ LINQ กลับไปสู่ภาพรวม: ในหลาย ๆ กรณีประสิทธิภาพการทำงานจะคุ้มค่า 5% +/- ไม่เกี่ยวข้อง แต่บางครั้งมันก็จะใหญ่ขึ้นและบางครั้งแม้แต่ 0.1% ก็ไม่สามารถยอมรับได้ หากคุณไม่คิดว่าจะมีปัญหาหรือประสิทธิภาพนั้นเหมาะสำหรับ บริษัท อย่าง google ....
jmoreno

29

โปรแกรมเมอร์ NET บางคนโดยเฉพาะผู้ที่มาจาก VB / ASP หรือ C ++ แบบคลาสสิกไม่ชอบสิ่งใหม่ ๆ เช่น LINQ, MVC และ Entity Framework

จากสิ่งที่ฉันสังเกตเห็นอดีตผู้ VB'ers ในกลุ่มนี้มีแนวโน้มที่จะยังคงใช้เลเยอร์การเข้าถึงข้อมูลและรหัสอื่น ๆ ที่เขียนเมื่อ 10 ปีที่แล้ว พวกเขาจะใช้ buzzwords เก่า ๆ เช่น "n-tier" และสิ่งที่ชอบและไม่เข้าใจอะไรเลยเกี่ยวกับสิ่งใดนอกจากเลย. NET Framework 2.0 และพวกเขาไม่ต้องการเรียนรู้อะไรเกี่ยวกับมันเลย

ผู้ใช้ C ++ มีแนวโน้มที่จะเป็นนักเขียนโปรแกรมเชิงวิชาการที่รักการเขียนโปรแกรมที่ยอดเยี่ยมอัลกอริทึมแม้ว่ามันจะหมายถึงการคิดค้นวงล้อใหม่ พวกเขาเกลียดสิ่งที่พวกเขาไม่ได้เขียนด้วยตนเอง คนเหล่านี้บางคนยังดีใจที่ทำให้ผู้ถูกสัมภาษณ์รู้สึกด้อยกว่าโดยเฉพาะผู้ที่มีภูมิหลังแบบดั้งเดิมน้อยกว่า

คุณน่าจะเจอกับองค์กรแบบนี้เมื่อคุณสัมภาษณ์ แต่คุณจะพบกับบางคนที่ใช้วิธีการใหม่กว่า อย่าปล่อยให้การสัมภาษณ์ที่ไม่ดีมาทิ้งคุณไว้


2
ขอบคุณ jfrankcarr ฉันสงสัยว่าอาจเป็นเช่นนั้น - มีคำถามเกี่ยวกับการเปิดและปิดdatareaders!
Matt Cashatt

2
+1 สำหรับการเรียก MVC "สิ่งใหม่ ๆ " ทำให้ฉันหัวเราะออกมาดัง ๆ มันมีมาตั้งแต่ยุค 70 คุณอาจหมายถึง MVVM ซึ่งโดยหลักแล้วคือ MVP (ตัวแปร MVC) ซึ่งใช้การเชื่อมโยง

14
@ GlenH7 ฉันคิดว่ามันค่อนข้างชัดเจนจากบริบทที่เขาหมายถึงผลิตภัณฑ์ "ASP.NET MVC" ไม่ใช่แนวคิดพื้นฐานของ Model-View-Controller
Carson63000

4
@ GlenH7 - ฉันพูดทั้งหมดในบริบทของ. NET และ Visual Studio สายผลิตภัณฑ์และ buzzwords ผลิตภัณฑ์ของ Microsoft
jfrankcarr

6
พระเจ้าที่ดีมีร้านค้าที่คิดว่า Linq เป็น "ใหม่" หรือไม่? มันมีมานานกว่า 4 ปีแล้ว ฉันสามารถเข้าใจได้ว่าไม่ต้องคอยติดตามงานหรือใช้dynamic/ ExpandoObject/ ฯลฯ หรือไม่สนใจ Azure และทุกอย่างในระบบคลาวด์อื่น ๆ ... ฉันยังสามารถเข้าใจถึงการใช้มุมมอง WebForms แบบโรงเรียนเก่าต่อไป เอ็นจิ้นใน MVC หรือเว็บฟอร์มเองหรือเขียนรหัส WPF / WinRT โดยไม่มี MVVM ... แต่Linq? ถ้าคุณยังไม่เข้าใจว่ามันเป็นเวลาที่จะออกจากงานของคุณในฐานะนักพัฒนา. NET
Aaronaught

16

Microsoft มีประวัติยาวนานในการออกมาพร้อมกับเทคโนโลยีใหม่ ๆ ที่ร้อนแรงและจากนั้นก็ลืมพวกเขาเป็นเวลา 5, 10 หรือ 20 ปี LINQอาจมีลักษณะเหมือนกันกับบางคน พวกเขาจะทราบว่าไมโครซอฟท์ไม่สามารถเลิกใช้ SQL แต่ LINQ อาจจะต่อไปSilverlight ดังนั้นคุณสามารถเห็นความหวาดระแวงที่เกิดจากประสบการณ์ที่ยากลำบากหรือเพียงแค่คนที่ถูกทิ้งไว้ข้างหลังด้วยเทคโนโลยีที่ทันสมัยและผู้ที่ไม่พอใจมัน


12
สุจริตในขณะที่ฉันเห็นจุดพื้นฐานฉันไม่คิดว่า Linq จะหายไปทุกเวลาเร็ว ๆ นี้ Linq2SQL ใช่พวกเขาเลิกใช้มันเพื่อประโยชน์ของ EF ที่ทรงพลังกว่ามาก แต่ Linq เองก็เป็นรากฐานสำหรับความแปลกใหม่อื่น ๆ อีกมากมายในช่วง 3 NET ล่าสุดที่ปล่อยออกมาหากพวกเขาเลิกใช้งานพวกเขาจะเลิกทำครึ่งหนึ่งของเทคโนโลยีการคงอยู่ของเลเยอร์ใหม่อย่าง Azure และ EF เพื่อไม่พูดอะไรเลย ออกมีและการประมวลผลรายการในหน่วยความจำมากมาย
KeithS

6
รอ ... "กลัวที่จะย้ายออกไปจากเทคโนโลยีเก่า ๆ ที่ล้าสมัยเพราะใช้งานได้" ... WTF เราได้มาถึงจุดที่สิ่งที่ทำงานที่พยายามทดสอบเข้าใจและบำรุงรักษาและเป็นผู้ใหญ่ไม่ดี
gbjbaanb

7
@ gbjbaanb - ไม่มี แต่ - ในฐานะที่เป็นเรื่องเล็ก ๆ น้อย - คุณต้องการให้แพทย์วินิจฉัยอาการเจ็บหน้าอกด้วยเอ็กซเรย์ทรวงอกเพราะวิธีนั้นคือ 'ลอง, ทดสอบ, เข้าใจได้' ​​หรือคุณต้องการ fMRI ที่ใหม่กว่า แต่มาพร้อมความละเอียดสูงกว่า การพยากรณ์โรคที่ดีขึ้นและข้อมูลเพิ่มเติมหรือไม่ ไม่มีใครบอกว่าจะหันหลังให้กับหลักการคลาสสิคที่นี่ ค่อนข้างตรงข้าม คุณจะเห็นว่า LINQ (เป็นตัวอย่าง) ถูกสร้างขึ้นบนหลักการเหล่านั้น ฉันคิดว่าอย่างที่คนอื่น ๆ พูดถึงมันคือการเรียนรู้ชิ้นส่วนที่ทำให้ LINQ และการใช้งานที่เหมาะสมซึ่งทำให้ช่วงเวลา 'WTF' เป็นของคุณ
Matt Cashatt

2
@MatthewPatrickCashatt: ขึ้นอยู่กับว่าหากแพทย์ไม่ได้รับการฝึกฝนให้อ่านผล fMRI ฉันจะใช้เอ็กซ์เรย์แทนการคาดเดาจากการวินิจฉัย ถ้าฉันป่วยในน้ำนิ่งฉันอยากจะมีแพทย์ที่สามารถวินิจฉัยอะไรได้มากกว่าฟังเสียงของแพทย์มากกว่าที่จะไม่สามารถรับมือได้โดยไม่ต้องใช้เครื่องมือใหม่ล่าสุด
gbjbaanb

2
@ MatatewPatrickCashatt ฉันเห็นประเด็นของคุณแล้ว แต่ปัจจัยที่มีความสมดุลคือคุณไม่ต้องการที่จะติดตามเทรนด์ทุกครั้งเพราะมันใหม่กว่า ฉันจะติดตามเทคโนโลยีใหม่อย่างมีความสุขที่เหมาะกับหนึ่งในสองหมวดหมู่ 1. มันทำให้ฉันตื่นเต้นและฉันยินดีที่จะใช้เวลาว่างกับมัน 2. มันพิสูจน์ตัวเองว่าดีกว่าจริง ๆ และดูเหมือนว่ามันจะนานพอที่จะทำให้คุ้มค่ากับการลงทุน แนวโน้มที่ไม่เข้ากับหนึ่งในสองประเภทนั้นเป็นการเดิมพันที่ดีที่สุด
TimothyAWiseman

15

มันไม่สมเหตุสมผลที่จะดึงรหัส "ปิดชั้นวาง" ถ้ามันบรรลุเป้าหมายเดียวกันโดยไม่มีค่าใช้จ่ายเพิ่มเติมหรือไม่

มีค่าใช้จ่ายเพิ่มเติมอยู่เสมอ

เส้นโค้งการเรียนรู้สำหรับสิ่งนอกชั้นวางอยู่ที่นั่นเสมอ ความเจ็บปวดในการรับการอัปเดต (และการอ้างอิง) อยู่ที่นั่นเสมอ ไม่สามารถที่จะหมุนไปรอบ ๆ พร้อมกับความกล้าได้

สำหรับ LINQ สิ่งแรกที่นำไปใช้จริงเท่านั้น หลายคนมองว่าโค้ดที่ดูแปลก ๆ นั้นยากที่จะอ่านและยากที่จะทำการดีบัก ไวยากรณ์ที่คล้ายกับ sql นั้นค่อนข้างเป็นตัวอักษรที่ไม่ใช่ grata ทุกอาชีพกิ๊กที่ฉันทำงานมาตั้งแต่มันออกมา LINQ ไปยัง SQL (และแหล่งข้อมูลอื่น ๆ ) มีจำนวน gotchas และตัวเลือกการเพิ่มประสิทธิภาพที่ จำกัด

เหล่านี้เป็นข้อโต้แย้งทั่วไปกับเครื่องมือของบุคคลที่สามและ LINQ โดยเฉพาะ ทั้งหมดที่กล่าวมา LINQ เป็นเครื่องมือที่มีประโยชน์และควรได้รับความนิยมในสถานการณ์ส่วนใหญ่ ร้องไห้ไม่ได้คิดค้นที่นี่และนามธรรมไม่ควรได้รับการสนับสนุนอย่างมากรสชาติของความไม่ลงรอยกัน Cognative

พวกเขาไม่รู้ / เรียนรู้ LINQ ไม่ได้ แต่พวกเขาเป็น "ผู้พัฒนาที่ดี" อย่างชัดเจนดังนั้น LINQ จะต้องไม่คุ้มค่า มันเป็นกับดักทั่วไป


1
จุดที่ดี เห็นด้วยกับค่าใช้จ่ายที่คุณพูดถึงและเป็นการชี้แจงที่ดี อย่างไรก็ตามในวงกว้างมากขึ้นการพัฒนาชั้นเรียนพื้นบ้านที่ไม่มีพนักงานใหม่ที่สามารถคุ้นเคยเพราะพวกเขาไม่ได้อยู่นอกองค์กรที่นำเสนอความท้าทายเดียวกันนอกเหนือไปจากค่าใช้จ่ายของการพัฒนาหลัก
Matt Cashatt

2
@ MatthewPatrickCashatt - โอ้อย่างแน่นอน รหัสบ้านที่ปลูกที่ควรจึงมักจะเป็นความพยายามมากขึ้นสำหรับผู้ชนะเหมือนกัน แต่ไม่จำเป็นต้องเป็น เช่นเดียวกับสิ่งอื่น ๆ , ค่าใช้จ่าย / รางวัลควรจะประมาณและการปฏิบัติที่ดีที่สุดที่แนะนำไม่ได้ตามสุ่มสี่สุ่มห้า
Telastyn

@Telastyn รหัสที่ปลูกในบ้านก็ดีเพราะคุณรู้ว่ามันทำอะไรได้บ้างและสามารถแก้ไขได้ในเวลาอันสั้น นอกจากนี้คุณสามารถปรับให้เหมาะสมสำหรับสถานการณ์เฉพาะตามการใช้งานของคุณเองไม่ใช่ค่าเฉลี่ยของทุกคน
Hawken

13

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

คุณต้องการแสดงทัศนคติที่บอกว่า "ไม่ว่าคุณจะทำอะไรฉันต้องการช่วยคุณให้สำเร็จ" แทนที่จะให้คำบรรยายที่บอกว่า "คุณอาจจะทำสิ่งต่าง ๆ ในทางที่ไม่ดี มัน."


+1 - รวมทั้งบอกพวกเขาถึงสิ่งที่คุณรู้ถามพวกเขาว่าพวกเขากำลังทำอะไรและพวกเขามีความเชี่ยวชาญอย่างไร
Kirk Broadhurst

12

ใช้เวลาของฉันเกี่ยวกับเรื่องนี้ (และ TBH ฉันคาดเดาเพราะไม่มีเราสามารถบอกได้ว่าผู้สัมภาษณ์ผู้ที่มีความคิด) คือการที่คุณมักจะไปที่การให้สัมภาษณ์เพื่ออธิบายว่าทำไมพวกเขาควรจะจ้างคุณให้พอดีกับทีมของพวกเขาทางของพวกเขาในการทำงาน

คุณสามารถเป็นนักพัฒนาที่สมบูรณ์แบบเป็นเทพเจ้าแห่งการเริ่มต้นที่สมบูรณ์แบบ แต่นั่นไม่ได้หมายความว่าอะไรถ้าคุณต้องการทำ (เน้นที่คุณพูดมากเกินไปและกระตือรือร้นเกินไปเกี่ยวกับ gubbins เทคโนโลยีเจ๋ง ๆ ) เพียงแค่บอกพวกเขาเกี่ยวกับตัวคุณ สอดคล้องกับสิ่งที่พวกเขาต้องการ หากพวกเขามีระบบการเข้าถึงข้อมูลแบบเก่าที่ไม่สามารถอัพเกรดได้ไม่ว่าด้วยเหตุผลใดพวกเขาไม่ต้องการคนที่ลืมวิธีการดูแลรักษา หากพวกเขากำลังพัฒนาสิ่งใหม่ ๆ และคุณต้องการนำเทคโนโลยีใหม่ที่ยอดเยี่ยมมาใช้ในทุกที่จริง ๆ แล้วมันชัดเจนว่าพวกเขาจะมีปัญหาใหญ่กับการบำรุงรักษารหัสในอนาคตและ / หรือการฝึกอบรมพนักงาน

ในฐานะที่เป็นอิสระนี่เป็นปัญหาที่มากขึ้นหากพวกเขาจ้างเพอร์มี ด้วย Permie การฝึกอบรมและพัฒนาวิธีการทำงานใหม่ไม่ใช่สิ่งเลวร้ายภายในขอบเขตของรหัสและแนวทางปฏิบัติที่มีอยู่คุณจะอยู่ที่นั่นเป็นเวลานานเพื่อทำให้สิ่งต่าง ๆ ดีขึ้น เมื่อใช้งานฟรีแลนพวกเขาไม่ให้บีบแตรในสิ่งที่คุณต้องการคุณอยู่ที่นั่นเพียงเพื่อทำงานในแบบที่พวกเขาต้องการและไม่ใช่งานของคุณที่จะทำอย่างอื่น (ไม่เห็นด้วย - เป็นพนักงานประจำ)

มันอาจจะไม่มีอะไรเกี่ยวข้องกับ LINQ ตัวเองฉันได้ปฏิเสธผู้สมัครที่ปรากฏตัวขึ้นและอธิบายว่าทุกอย่างจะดีกว่ามากที่จะเขียนใน Haskell เราไม่ทำ Haskell เช่นเดียวกับเทคโนโลยีใด ๆ ที่ไม่ได้ใช้โดย บริษัท มักจะไม่เป็นปัญหาหากคุณพูดถึงว่าเป็นสิ่งที่ดี ปัญหาเกิดขึ้นเมื่อคุณกระตือรือร้นและกระตือรือร้นกับมันมากเกินไป


2
ฉันเห็นด้วยกับสิ่งนี้ แต่ฉันสังเกตเห็นผู้คนจำนวนมากที่ใช้ทัศนคตินี้เพื่อยกเลิกแนวคิดที่ดีที่พวกเขาไม่เข้าใจ (เช่นการทดสอบรูปแบบการออกแบบ ORM) ดังนั้นในขณะที่ฉันเห็นด้วยว่าการเป็นแบบที่ดีสำหรับทีมนั้นเป็นสิ่งที่ดีสิ่งสำคัญคือการตระหนักว่าคุณอาจจะดีกว่าคนอื่น ๆ ในทีมและควรจะหาคนที่มีใจเดียวกันซึ่งไม่ใช่เรื่องเลวร้ายที่จะรู้ดี นามธรรม
Wayne Molina

1
@WayneM แน่นอน แต่ OP เป็นอิสระดังนั้นมันจึงไม่สำคัญว่าเขาจะเป็นเทพเจ้าแห่งการเข้ารหัสเว้นแต่ว่าพวกเขากำลังเตรียมที่จะจ้างเขาอย่างถาวรเพื่อรักษารหัสส่วนที่เหลือของทีมไม่เข้าใจ (อืม) จากนั้น เขาต้องการทำสิ่งที่พวกเขาต้องการไม่ใช่สิ่งที่เขาต้องการ
gbjbaanb

1
@WayneM ในทำนองเดียวกันผู้คนจำนวนมากจะใช้สิ่งที่คล้ายกับสิ่งที่คุณเพิ่งพูดเพื่อส่งเสริมความคิดของพวกเขากับคนอื่น (มั่นใจว่าผู้ที่พวกเขาพูดถึงไม่ได้รับมัน) ในท้ายที่สุดทั้งสองฝ่ายมีอคติ แต่ OP กำลังจะได้รับการว่าจ้างไม่ได้รับชัยชนะจากสงคราม DIY / นามธรรมที่ยิ่งใหญ่ ทุกคนจะมีความคิดเห็นของตัวเอง แต่ใครบางคนจะต้องผ่านมันไป ฉันเดาว่ามันจะไม่ใช่นายจ้างในกรณีนี้ :(
Hawken

10

มีข้อกังวลที่ถูกต้องอย่างหนึ่งที่ฉันได้ยินจากผู้ที่ไม่ได้ใช้ Linq และสิ่งที่ฉันคำนึงถึง: "เพียงเพราะคุณไม่สามารถเห็นการใช้งานไม่ได้หมายความว่ามันไม่แพงเลย"

ใช้ตัวอย่างต่อไปนี้:

var resultList = inputList.Where(i=>otherInputList.Count(o=>o.Property == i.OtherProperty) > 0);

LINQ เริ่มต้นที่นี่กำลังประจบประแจง ทำไม? เพราะเพียงเพราะรหัสนี้ดูดีและสง่างามไม่ได้หมายความว่ามันไม่มีประสิทธิภาพอย่างน่ากลัว Count () พร้อมเพรดิเคตจะประเมินทุกอิลิเมนต์ของพาเรนต์ที่นับได้และสรุปจำนวนครั้งที่เพรดิเคตส่งกลับค่าจริง ดังนั้นไม่เพียง แต่จะเป็น N ^ 2 นี้ (เมื่อ inputList และ otherInputList มีความสำคัญเท่ากับ cardinality N) มันเป็นกรณีที่เลวร้ายที่สุดอย่างแน่นอน N ^ 2; ทุกองค์ประกอบของ otherInputList ถูกสำรวจสำหรับองค์ประกอบทุกอย่างของอินพุต แต่ขั้นตอนแรกคือการใช้ Any () แทน Count เพราะนั่นคือสิ่งที่คุณต้องการทราบจริง ๆ และจะหยุดทันทีที่คำตอบนั้นเป็น "ใช่" การตั้งค่า HashSet ที่เก็บค่าต่าง ๆotherInputListObject.OtherPropertyอาจช่วยคุณได้เช่นกัน การเข้าถึงกลายเป็น O (1) แทน O (N)เลวร้ายที่สุดกรณีซับซ้อนแทนการกำลังสองที่ดีที่สุดในกรณีที่ซับซ้อน

ดังนั้นเราจะเห็นว่าวิธีการที่สง่างามเหล่านี้มีค่าใช้จ่ายสูงมากและหากคุณไม่ทราบว่าค่าใช้จ่ายเหล่านั้นคืออะไรคุณสามารถเขียนรหัสO (GD ของฉัน) - อัลกอริธึมที่ซับซ้อนได้อย่างง่ายดายหรือหน้า Landing Page หลักในครั้งต่อไปที่พวกเขาอาจต้องปรับแต่ง การยิงคุณหลังจากที่คุณทำนั้นไม่ได้เลิกทำในสิ่งที่คุณทำ แต่ไม่จ้างคุณถ้าพวกเขาคิดว่าคุณจะทำมันจะเป็นการป้องกัน ดังนั้นเพื่อหลีกเลี่ยงสิ่งนี้คุณต้องพิสูจน์พวกเขาผิด หารือเกี่ยวกับวิธีการเหล่านั้นทำ (หมายถึงคุณต้องรู้จักตัวเอง) และความซับซ้อนของพวกเขาและวิธีตอบคำถามในเวลาที่มีประสิทธิภาพ (NlogN หรือดีกว่า)

ข้อกังวลอีกประการคือข้อโต้แย้ง "เมื่อเครื่องมือเดียวของคุณคือค้อน" ร่วมแข่งขันเพื่อสัมภาษณ์ผู้สัมภาษณ์ Linq fanboy คนนี้ ผู้สมัครชอบ Linq ต้องการใช้คิดว่าเป็นสิ่งที่ดีที่สุด อาจเป็นไปได้ว่าผู้สมัครไม่สามารถเขียนโค้ดได้หากไม่มีปัญหาในการเขียนโปรแกรมทุกครั้งที่แก้ไขด้วย Linq จะเกิดอะไรขึ้นหากไม่สามารถใช้งานได้ ยังมีโค้ด. NET 2.0 อีกมากมายถ้าหากมีการอัพเกรดจะต้องมีการอัพเกรดเซิร์ฟเวอร์เซิร์ฟเวอร์เวิร์คสเตชั่นของผู้ใช้ ฯลฯ เพื่อให้คุณสามารถใช้วิธีการขยายแบบแฟนซีได้ ในฐานะผู้สัมภาษณ์ฉันพยายามให้คุณแสดงให้เห็นว่าคุณสามารถเขียนเรียงลำดับอย่างมีประสิทธิภาพหรือใช้วิธีการเรียงลำดับ 2.0 หากคุณต้องใช้ไม่ว่าฉันจะเห็นด้วยกับคุณมากเพียงใดว่าห้องสมุด Linq และวิธีการขยายที่คล้ายกัน หวาน. ผู้สัมภาษณ์ที่ไม่เห็นประเด็นอาจไม่สนใจที่จะให้คุณแสดงความถนัดเพื่อสิ่งอื่น พวกเขาจะสมมติว่าคุณไม่มีและไปต่อ


ทำไมคุณไม่ลองเขียนแบบสอบถามดูvar resultList = inputList.Select(i=>i.Property).Intersect(otherInputList.Select(o=>o.Property));? ฉันอาจจะไม่เรียบร้อย แต่ประเด็นของฉันคือ LINQ มีวิธีที่ดีกว่าในการดำเนินการแบบสอบถามที่คุณกล่าวถึงข้างต้น (.Join () เป็นอีกวิธีหนึ่ง) ฉันรู้ว่ามีวิธีที่จะใช้ LINQ ที่อาจไม่ชำนาญเท่าวิธีอื่น ๆ แต่นั่นไม่ได้หมายความว่าคุณต้องพึ่งพาการใช้งานที่ไม่ดีเหล่านั้น
Matt Cashatt

4
@ MatatewPatrickCashatt ฉันไม่คิดว่าประเด็นของเขานั้นมากนักเพื่ออ้างว่า LINQ ไม่มีประสิทธิภาพเสมอ - ในขณะที่คุณสามารถเอาชนะการสืบค้น LINQ ที่กำหนดได้การใช้งานบางอย่างให้ประสิทธิภาพที่ดีกว่าต่อนักพัฒนา - ชั่วโมงมากกว่าวิธีการที่ไม่ใช่ LINQ แต่ก็สามารถจะค่อนข้างง่ายที่จะเขียนแบบสอบถาม LINQ ที่เป็นไม่มีประสิทธิภาพและไม่ได้ตระหนักถึงมันเพราะความไร้ประสิทธิภาพจะไม่เป็นที่เห็นได้ชัด
Jon Hanna

3
@ จอนฮันนา: บางทีอาจจะมากกว่าประเด็นคุณค่าของสิ่งที่เป็นนามธรรมจะลดลงอย่างมากหากเราต้องตรวจสอบว่ารหัสกำลังทำอะไรจริงๆเพื่อพิจารณาว่าสถานการณ์ที่ผิดปกติ แต่มีเหตุผลอาจทำให้ประสิทธิภาพแย่ลงกว่าที่คาดไว้ หากการเปลี่ยนแปลงจากโครงสร้างข้อมูลหนึ่งไปยังอีกโครงสร้างหนึ่งจะทำให้โค้ดทำงานช้าลง 10,000 เท่าความสามารถในการเปลี่ยนแปลงดังกล่าวโดยไม่ต้องแก้ไขโค้ดอื่น ๆ อาจไม่เป็นสิ่งที่ดีเสมอไป
supercat

1
@supercat: ใช่และไม่ใช่ เพียงเพราะความรู้เกี่ยวกับวิธีการทำบางสิ่งในการใช้งานของบุคคลที่สามมีความสำคัญต่อการทำความเข้าใจผลกระทบของประสิทธิภาพและการหลีกเลี่ยงความไร้ประสิทธิภาพไม่ได้หมายความว่าห้องสมุดที่ห่อหุ้มเครื่องมือเหล่านี้มีค่าน้อยลง มันเป็นสองด้านของเหรียญเดียวกัน รู้ถึงลักษณะของการติดตั้งใช้งานและคุณสามารถใช้งานได้ด้วยการกดปุ่มเพียงไม่กี่ครั้งแทนที่จะใช้เวลาหนึ่งชั่วโมง แต่คุณต้องรู้ทั้งสองด้านและแฟนบอยของ Linq ที่คิดว่ามันสมบูรณ์แบบไม่มีอะไรผิดปกติใช้มันสำหรับทุกสิ่งที่อาจเป็นไปได้
KeithS

@ KeithS: สิ่งหนึ่งที่ฉันคิดว่าหายไปอย่างมากทั้งใน Java และ. net เป็นวิธีมาตรฐานในการถามสิ่งของหรือคอลเลกชันสิ่งต่าง ๆ เกี่ยวกับตัวเอง ตัวอย่างเช่นรหัสที่ได้รับคอลเลกชันที่นับได้อาจได้รับประโยชน์จากการรู้ว่าจำนวนของรายการและ / หรือลำดับของรายการที่มีอยู่สามารถเปลี่ยนแปลงได้หรือไม่ไม่ว่าจำนวนรายการนั้นจะมี จำกัด หรือไม่มีที่สิ้นสุด (หรือไม่ทราบด้วย) และไม่ว่าจะเป็นชุดสะสมรู้ว่ามีอยู่หลายรายการในนั้น เทคโนโลยีเช่น LINQ มักจะต้องตั้งสมมติฐานเกี่ยวกับสิ่งต่าง ๆ ที่อาจจะหรืออาจจะไม่ถูกต้องและ ...
supercat

10

อันนี้ยาวหน่อย แต่อาจเป็นประโยชน์กับใครบางคนดังนั้นฉันจะปล่อยให้มันเป็น

ฉันพบสิ่งที่คล้ายกันจริง ๆ ผ่านการสัมภาษณ์มากกว่า 20 ครั้งเมื่อเดือนที่แล้ว (มีโทรศัพท์และตัวต่อตัว) มีบางอย่างที่คาดไม่ถึงเกิดขึ้นที่ฉันไม่สามารถวางนิ้วได้

หนึ่งในสิ่งที่ฉันสังเกตเห็นคือสิ่งที่มักจะเป็นจุดศูนย์กลางของวงจรการสัมภาษณ์ของที่ผ่านมาห้าหรือหกปีที่ผ่านมาไม่ได้กล่าวถึงหรือได้รับการแตกสั้น สิ่งที่ต้องการพื้นฐานของการวิเคราะห์ / ออกแบบ OOP รูปแบบ (การออกแบบและสถาปัตยกรรมทั้งสอง) คุณลักษณะขั้นสูง / นามธรรมที่มุ่งเน้น. abstraction บางอย่าง (รวมถึง lambdas หรือ LINQ โดยเฉพาะ generics การทำให้เป็นอนุกรม / การผูกข้อมูลและอื่น ๆ ) และแม้แต่ มักจะเป็นหัวข้อร้อนของวิธีการที่นิยม (ไม่มีใครสนใจมากเกี่ยวกับเปรียว vs น้ำตกหรือรสชาติของเปรียว) และเครื่องมือหรือทางเลือกของ ORM หรือวิธีที่ต้องการของการทำงานร่วมกันหรือการจัดการควบคุมแหล่งที่มา ในบางกรณีไม่ได้กล่าวถึงเลยในเกือบทุกกรณีดูเหมือนจะไม่กังวล

สิ่งที่ได้รับความสนใจในการสัมภาษณ์หลายครั้งและ บริษัท ที่ไม่เกี่ยวข้องกันหลายแห่งในอุตสาหกรรมที่ไม่เกี่ยวข้องนั้นอยู่ในเส้นทางเหล่านี้:

  • การตรึงที่แปลกประหลาดของข้อตกลงที่ล้าสมัย / ล้าสมัยและข้อ จำกัด "ย้อนกลับไปถึงยุคหิน" เช่นเดียวกับการพัฒนาแอพพลิเคชั่นเว็บดั้งเดิมใน VS2003 พร้อมรายการข้อ จำกัด ที่ไร้สาระเพิ่มเติมห้ามการใช้คุณสมบัติที่ชัดเจนภายในยุคของ. net ... ราวกับว่ามันเป็นมาตรวัดจริงของความสามารถในการพัฒนาที่ทันสมัย ​​... ความสามารถในการจำ กระบวนทัศน์และข้อ จำกัด ของ 9 ปีที่ผ่านมาพิการอีกโดยข้อ จำกัด ที่ไม่สมจริง / โดยพลการ สถานที่อื่นก็พากเพียรมากในเรื่องของคอลเลกชันที่กำหนดเองประมาณคอลเลกชันก่อนทั่วไป อีกสถานที่หนึ่งทำตัวอย่างรหัสของแบบจำลองคลาสที่ฉันเขียนออกมาเพราะฉันไม่ได้ใช้ตัวสร้างแบบเรียงซ้อน (ดูเหมือนว่าพวกเขาไม่ทราบถึงการสนับสนุนการเริ่มต้นคุณสมบัติในการประกาศซึ่งเพียงพอต่อความต้องการ)

  • มุ่งเน้นไปที่รายละเอียดการใช้งานเฉพาะอย่างยิ่งในพิภพเล็ก ๆ และ / หรือการตั้งค่าการกำหนดค่าแม้ในกรณีของเทคโนโลยีที่มุ่งเน้นไปที่แพลตฟอร์มหรือโปรโตคอลผู้ไม่เชื่อเรื่องพระเจ้า (เช่น .. จุดทั้งหมดคือการไม่ติดตั้ง ในการใช้ซ้ำ / การกำหนดใหม่ / การเพิ่มความสามารถ / ตามการรวมที่จำเป็น)

  • ความเต็มใจที่จะระบุ / ดูแล / ตรวจสอบโค้ด / และสปูลอื่น ๆ ทำงานออกจากทีมนอกฝั่งและทักษะการเขียนโปรแกรมที่ไม่เกี่ยวข้องกับการทำเช่นนั้น

  • การใช้งานผลิตภัณฑ์ / แพลตฟอร์ม / โมดูล / ฯลฯ รุ่นที่เฉพาะเจาะจงในระดับที่ไร้สาระบางครั้ง; "ดังนั้น ... คุณเคยใช้เวอร์ชัน 1, 2 และ 4 หรือไม่ แต่ไม่ใช่ 3 ใช่มั้ยอืม ... {อธิบายประวัติย่อของคุณด้วย" no v3 !!!} "ระดับการใช้งานดูเหมือนจะไม่สำคัญ เฉพาะที่คุณมีหรือไม่ได้ใช้อะไรเลยและสิ่งที่เฉพาะเจาะจงที่พวกเขาขอด้วย ... ดูเหมือนจะไม่มีการทดแทนใด ๆ แม้แต่ผลิตภัณฑ์คู่แข่งที่ใช้กันอย่างแพร่หลายและมีคุณลักษณะครบถ้วน

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

  • บริษัท ในเวลานี้ดูเหมือนว่าจะให้ความสำคัญกับการแก้ปัญหาทางเทคนิคน้อยมากเริ่มโครงการสีเขียวหรือโครงการพัฒนาขนาดใหญ่ 2.0 ใหม่หรือการนำผลิตภัณฑ์เฉพาะออกสู่ตลาดเพื่อใช้ประโยชน์จากแนวโน้มหรือโอกาสที่เกิดขึ้นใหม่ . ชุดรูปแบบซ้ำที่ฉันสังเกตเห็นอย่างน้อย 15 แห่งคือกลุ่มเล็ก ๆ ของนักพัฒนา 3-5 คนซึ่งส่วนใหญ่เป็นผู้รอดชีวิตจากความผิดพลาดของตลาดในปี 08 สามารถบดผลิตภัณฑ์ในช่วง 3 ปีที่ผ่านมา และพบว่าประสบความสำเร็จหรือ บริษัท ของพวกเขากำลังเฟื่องฟูและพวกเขากำลังจ้างคนใหม่เพื่อให้ทันกับความต้องการคุณสมบัติที่เพิ่มขึ้นหรือเพื่อแก้ไขข้อบกพร่องด้านการออกแบบที่พวกเขาสร้างขึ้นในระบบเหล่านี้หรือเข้ายึดแพลตฟอร์มดังกล่าวฟรี ตั้งทีมหลักที่สร้างขึ้นเพื่อทำ "โครงการอื่น ๆ "

แต่ ... หากมีสิ่งหนึ่งที่ฉันรู้เกี่ยวกับธุรกิจนี้มันเป็นวัฏจักร ครั้งต่อไปที่ฉันกำลังมองหากิ๊กใหม่ฉันจะไม่แปลกใจถ้าเกมมีการเปลี่ยนแปลงอีกครั้ง คุณเพียง แต่ต้องมีความยืดหยุ่นทางจิตใจทำตัวรับฟังอย่างกระตือรือร้นหลีกเลี่ยงการทำงบเด็ดขาดหากไม่จำเป็น แต่ไม่ต้องเป็นพังพอนอย่างใดอย่างหนึ่งและไม่หลุดพ้นจากการเป็นมิติเดียว ความกระตือรือร้นไม่เป็นที่ต้องการ) หรือเป็นสิ่งที่ดีเกินไป (อาจเป็นการข่มขู่และเสียค่าใช้จ่าย)

เพียงปรับวิธีการของคุณและพยายามให้การตอบสนองที่วัดได้มากขึ้นในครั้งต่อไป ... พูดถึงวิธีการต่าง ๆ ที่คุณอาจเข้าถึงปัญหา ... แต่ถึงแม้ว่ามันจะเป็นการท่องจำความรู้ให้คุณทำราวกับว่าคุณกำลังคิดถึงมันอยู่ ให้เหตุผลออกทันที ดูเหมือนว่าจะอ่อนน้อมถ่อมตนและข่มขู่หรือโต้แย้งในลักษณะนั้นมากกว่า

แน่นอนว่ากฎของเมอร์ฟีคือสิ่งที่มันเป็นบทสัมภาษณ์ถัดไปหลังจากที่คุณหยุด "หลงไหลเกี่ยวกับคนที่ชื่นชอบเทคโนโลยีปัจจุบันของฉัน" และใช้ท่าทางที่สมดุล / หนวดเครามากขึ้นคือกิ๊กที่คุณจะได้รับ คนที่กระตือรือร้น ;)


6

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

ฉันสงสัยอย่างจริงจังว่า บริษัท ห้ามการใช้งาน LINQ ทันที มีแนวโน้มมากขึ้นที่พวกเขาต้องการให้คุณแสดงทักษะของพวกเขาในระดับที่ลึกขึ้น

ตัวอย่างเช่นวิธีหนึ่งที่จะคิดออกว่าคุณรู้ตารางแฮชของคุณหรือไม่คือขอให้คุณใช้แบบดั้งเดิมในไวท์บอร์ด แบบฝึกหัดง่ายๆนี้เปิดเผยข้อมูลที่น่าประหลาดใจเกี่ยวกับความรู้ของคุณต่อผู้ตรวจทานเขาจะเรียนรู้ทันทีหากคุณรู้เกี่ยวกับรหัสแฮช / เท่ากับและสิ่งที่คุณรู้เกี่ยวกับการชนกันของแฮช ในขณะเดียวกันก็เป็นการยากที่จะจินตนาการว่าใครบางคนในใจที่ถูกต้องนำตารางแฮชกลับมาใช้ใหม่เพราะ Microsoft ทำงานได้ดีมาก เช่นเดียวกันกับอัลกอริธึมมากมายเช่นการเรียงลำดับและการค้นหาผู้สัมภาษณ์มักต้องการทราบว่าพื้นหลังของคุณเพียงพอที่จะเข้าใจการโต้ตอบระดับต่ำหรือไม่แทนที่จะตรวจสอบว่าคุณมีความรู้ในการทำงานกับไลบรารี. NET

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


1ร้านหนึ่งไปไกลถึงการสร้างเครื่องมือสร้างของตัวเองค่อนข้างดั้งเดิม!


2
คะแนนทั้งหมดของคุณทำออกมาได้ดี แต่ฉันควรให้สีกับคุณในการสัมภาษณ์ครั้งสุดท้าย: ผู้สัมภาษณ์ยืนยันว่า LINQ กำลังถูก "คัดค้าน" ฉันถามว่า "คุณไม่ได้หมายความว่า MS จะไม่ลงทุนใน Linq-to-SQL อีกต่อไป แต่ Linq-to-Entities จะอยู่ใกล้ ๆ " และคำตอบของเขาก็คือเขาหมายถึงสิ่งที่เขาพูดว่า: LINQ กำลัง "เลิก" ดังนั้นไม่ฉันไม่คิดว่าเขารู้มากเกินไปเกี่ยวกับ LINQ หรือจะยืนยันเมื่อมีการใช้งาน
Matt Cashatt

1
@MatthewPatrickCashatt หากใครบางคนสับสน LINQ สำหรับ LINQ2SQL ในแง่ของเทคโนโลยีที่ถูกคัดค้านฉันได้ทำข้ออ้างโง่ ๆ ให้ออกจากการสัมภาษณ์เร็วและไม่เคยเรียก บริษัท นั้นกลับมา หากเป็นเช่นนั้นจริง ๆ คุณควรจะมีความสุขกับพวกเขาที่ไม่จ้างคุณ :)
dasblinkenlight

1
มั่นใจ 100% ในกรณีนี้ ในความเป็นจริงฉันไม่สามารถต้านทานการส่งลิงค์บางอย่างเพื่อให้เขาอยู่บนเส้นทางที่ถูกต้องในเรื่องไม่ใช่เป็นกระทุ้งเพราะฉันไม่ได้รับกิ๊ก แต่เพราะฉันรู้สึกอายจริง ๆ และหวังว่าฉันจะทำได้ ช่วยเขาที่จะไม่ทำผิดพลาดสองครั้ง;)
Matt Cashatt

4
จากนั้นสิ่งนี้ดูเหมือนจะน้อยกว่าที่ทำกับสแต็คเทคโนโลยีและอื่น ๆ ที่เกี่ยวข้องกับความจริงที่ว่าคุณแก้ไขเขา คนไม่ชอบที่จะได้รับการแก้ไข มันเป็นเพียงธรรมชาติของมนุษย์ เมื่อผู้คนตัดสินใจเช่นจ้างคน 99% จะไปด้วยสัญชาตญาณของพวกเขา พวกเขาไปโดยหรือไม่คุณทำให้พวกเขารู้สึกอารมณ์เชิงบวกหรือเชิงลบ การแก้ไขเขาอาจทำให้เขารู้สึกอารมณ์เสีย จากนั้นเขาก็เชื่อมโยงสิ่งที่ไม่ดีกับสถานการณ์
coder

1
ฉันไม่รู้ว่าแฮชเทเบิลทำงานอย่างไรภายใน การทดสอบทางเทคนิคอย่างลึกซึ้งเช่นนั้นทำให้ผู้ที่ได้รับการฝึกอบรมด้วยใจจริงนั้นเป็นผู้สมัครที่ดีอย่างไรก็ตาม การขอให้ผู้คนมีความรู้ระดับต่ำพวกเขาจะไม่เคยใช้ดูเหมือนจะไม่จำเป็นสำหรับฉัน หลักการออกแบบมีความสำคัญมากขึ้น!
Tjaart

4

ฉันคิดว่าคุณกำลังพูดถึงเรื่องบ้า ๆ บอ ๆ อยู่ที่ "ฉันเห็นวัวดำในสกอตแลนด์ดังนั้นวัวในสกอตแลนด์จึงเป็นสีดำ"

ถ้าฉันสัมภาษณ์คุณฉันจะผิดหวังถ้าคุณไม่สามารถตอบคำถาม linq ของฉัน

Linq เป็นคนที่มีเล่ห์เหลี่ยมผู้คนจำนวนมากมองว่ามันเป็นวูดูที่ไม่เป็นธรรมเพราะมันง่ายมากและฉลาดกว่าทั้งหมด


3

ในการเล่นผู้ให้การสนับสนุนของปีศาจเหตุผลก็คือผู้พัฒนาจำนวนมากไม่สนใจสิ่งใหม่และคิดว่าทุกอย่างจะต้องได้รับการแก้ไขด้วยเครื่องมือที่ผลิตเอง (มักจะด้อยกว่า) ไม่มีอะไรผิดปกติกับการใช้ abstractions นรกมักจะไม่มีเหตุผลที่ดีที่จะไม่ใช้สิ่งเหล่านี้

ดูเหมือนว่าคุณเพิ่งสัมภาษณ์กับผู้พัฒนาที่ไม่ดีซึ่งไม่ได้ติดตามข่าวสารต่าง ๆ และใช้ค้อนและเล็บเข้ากับทุกสิ่ง นี่คือประเภทของนักพัฒนาที่ไม่ทราบอะไรเกี่ยวกับเครื่องมือโอเพนซอร์สที่มีประโยชน์เช่น NUnit หรือ NHibernate หรือคอนเทนเนอร์ IoC ต่างๆ ผู้ที่พยายามที่จะแก้ปัญหาทุกปัญหาด้วย proc ที่เก็บไว้จำนวนมากในฐานข้อมูล คนที่ไม่รู้อะไรเลยเกี่ยวกับ MVC อย่างแน่นอนแม้จะเป็นเวลาหลายปีแล้วก็ตาม


คุณอาจโยน LINQ ลงในกลุ่มคำพ้องที่มี Nhibernate ฯลฯ ... ฉันจะไม่ทำเช่นนั้น ที่จริงฉันคิดว่า buzzwords เป็นตัวอย่างของเราไม่สามารถที่จะอธิบายนามธรรมในการแสดงออกที่เหมาะสม
AndreasScheinert

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