จะเป็นโปรแกรมเมอร์ไดรเวอร์ Kernel / Systems / Device อย่างไร [ปิด]


40

ปัจจุบันฉันทำงานอย่างมืออาชีพในฐานะวิศวกรซอฟต์แวร์ที่ทำงานกับ Android OS เราทำงานที่รวมแพลตฟอร์มของเราเป็นดีมอนพื้นเมืองในแง่มุมอื่น ๆ ของโครงการ ฉันทำงานเป็นหลักใน Java การพัฒนาแอปพลิเคชัน SDK และ Android แต่รับความช่วยเหลือเกี่ยวกับแพลตฟอร์มใน C / C ++

อะไรก็ตามฉันมีความสนใจที่ดีในการทำงานอย่างมืออาชีพในการพัฒนาระดับต่ำสำหรับลินุกซ์ ฉันไม่พอใจในตำแหน่งปัจจุบันของฉันและจะไปเที่ยวตราบใดที่ บริษัท ให้ฉัน (อันที่จริงฉันค่อนข้างสนุกกับการทำงานที่นั่น!) แต่ฉันอยากทำงานในทิศทางนั้น ฉันทำงานผ่านการพัฒนาเคอร์เนล Linux (Robert Love) และ The Linux Programming Interface (Michael Kerrisk) (นอกเหนือจากการเสริมสร้างทักษะ C ของฉันในทุกโอกาสที่ฉันได้รับ) และการท่องเว็บสัตว์ประหลาดและเว็บไซต์ที่คล้ายคลึงกันโดยไม่ตั้งใจ

ปัญหาที่ฉันเห็นคือไม่มีตำแหน่งระดับรายการ หนึ่งจะบุกเข้าไปในสนามนี้ได้อย่างไร เมื่อใดก็ตามที่ฉันเห็น "Linux Systems Programmer" หรือ "Linux Device Driver Programmer" พวกเขาจำเป็นต้องมีประสบการณ์ที่เกี่ยวข้องอย่างน้อย 5-7 ปี พวกเขาต้องการคนที่รู้จักเชือกไม่ใช่โปรแกรมเมอร์ระดับต้น (ตอนนี้ฉันทำงานมา 7 เดือนแล้ว ... )

ดังนั้นฉันสมมติว่าคุณบางคนใน stackoverflow ทำงานในความสามารถระดับมืออาชีพทำสิ่งที่ฉันต้องการจะทำ คุณไปที่นั่นได้อย่างไร? คุณใช้แพลตฟอร์มใดในการทำงานที่นั่น ฉันจะมีช่วงเวลาที่ยากลำบากกว่านี้เพราะฉันมีปริญญาตรีใน CSC ซึ่งตรงข้ามกับวิศวกรคอมพิวเตอร์ (ซึ่งพวกเขาจะได้สัมผัสกับการฝังตัวเพิ่มขึ้นอีกเล็กน้อย asm ฯลฯ )?

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


6
ง่ายมาก. Linux เป็น opensource เพียงทำตามรายการการพัฒนาแก้ไขข้อบกพร่องบางอย่างหลังจากที่คุณรู้จักสิ่งของของคุณเริ่มเขียนสิ่งที่ใหญ่กว่าเช่นคุณสมบัติใหม่การเพิ่มประสิทธิภาพบางทีไดรเวอร์บางอย่าง ...
Let_Me_Be

2
แต่ก่อนที่จะเลือกพื้นที่ใด ๆ ใน Linux คุณควรมีความเข้าใจในการทำงานของ Linux และบางส่วน ให้บอกว่าคุณต้องมีความรู้เกี่ยวกับระบบไฟล์ Linux เป็นต้น
user29973

คำตอบ:


36

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

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

  1. นักพัฒนาเคอร์เนลมุ่งเน้นไปที่อินเตอร์เฟสโครงสร้างข้อมูลอัลกอริธึมและการปรับให้เหมาะสมที่สุดสำหรับแกนกลางของระบบปฏิบัติการ
  2. โปรแกรมเมอร์ระบบเขียน daemons, ยูทิลิตี้และเครื่องมืออื่น ๆ สำหรับงานทั่วไปหรืองานยาก
  3. ไดรเวอร์อุปกรณ์ใช้อินเทอร์เฟซและโครงสร้างข้อมูลที่เขียนโดยนักพัฒนาเคอร์เนลเพื่อใช้การควบคุมอุปกรณ์และ IO

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

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


3
ที่น่าสนใจ แต่อาจจะไม่ใช่กระสุนวิเศษ
Matt Joiner

7
กระสุนเวทย์มนตร์มีอยู่น้อยมาก
Ed S.

ขอบคุณสำหรับข้อมูลของคุณ! ฉันจะพยายามลดการมุ่งเน้นของฉัน (ในที่สุดฉันก็อยากจะเข้าใจทุกแง่มุม) ในตอนนี้ ความสามารถอะไร (ถ้าคุณมีเวลาว่างที่จะเปิดเผย) คุณทำงานก่อนที่จะกลายเป็น "go to guy" สำหรับผู้ขับขี่หรือไม่?
accordionfolder

4
เชื่อหรือไม่ แต่ฉันเป็นฝ่ายสนับสนุนด้านเทคนิคสำหรับลูกค้าที่ใช้ฮาร์ดแวร์และฝ่ายขายพยายามเข้าใจ: ฉันตอบอีเมลและโทรศัพท์ แต่ประสบการณ์ข้างเคียงของฉันในการพัฒนาเคอร์เนลและผู้ใช้งานที่ดินสำหรับ Linux ช่วยฉันได้มากขึ้น
Joe Friedrichsen

3

ฉันเป็นนักพัฒนาซอฟต์แวร์ที่มีประสบการณ์มากกว่า 15 ปีในการทำงานกับ Motorola และ บริษัท ไฮเทคอื่น ๆ ฉันมีระดับ BSCE ดังนั้นฉันไม่ใช่มือสมัครเล่น

คำถามนี้ ... วิธีเจาะ ... เป็นคำถามทั่วไปไม่ใช่เฉพาะสำหรับ Linux แต่สำหรับความเชี่ยวชาญเฉพาะด้าน วิศวกรรมซอฟต์แวร์กลายเป็นเหมือนยาในผู้ปฏิบัติงานที่ต้องชำนาญ แต่เมื่อ บริษัท ของคุณลดขนาดและเลิกจ้างหลังจาก 10 ปีของการเป็นผู้เชี่ยวชาญคุณจะพบว่าตลาดงานเปลี่ยนไปและคุณไม่ได้เป็นคนปัจจุบัน บริษัท ต่างๆมักจะไม่เลือกสรร - บ่อยครั้งที่ผู้สมัครคนเดียวที่มีทักษะทั้งหมดในสิ่งที่อยากได้คือ บริษัท ที่ทำงานให้กับ บริษัท นั้นหรือเป็นคู่แข่งโดยตรง! มันกลายเป็นเรื่องที่ค่อนข้างยาก

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

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

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

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

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

อันที่จริง "โปรแกรมเมอร์จูเนียร์" ที่มีประสบการณ์เพียง 7 เดือนมีข้อได้เปรียบมากกว่าผู้ชายอย่างฉันเมื่อพยายามที่จะได้รับการว่าจ้างให้ทำสิ่งใหม่ บริษัท รัก "fresh-outs" / "grads ใหม่" เพราะพวกเขารู้ว่าคุณจะไม่ขอเงินจำนวนมากและยินดีที่จะทำสิ่งที่พวกเขาถามรวมถึงการคุมขังยาวในต่างประเทศหากจำเป็น บริษัท ต่างๆจะไม่จ้างฉันให้ทำงานในตำแหน่งรองผู้จัดการถึงแม้ว่าฉันจะสมัครงานเพราะพวกเขารู้ว่าฉันจะมองหางานที่ดีกว่าทันที สถานการณ์ของคุณไม่เลว

โชคดี!

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