Apakah pemrograman tertanam lebih dekat dengan teknik listrik atau pengembangan perangkat lunak? [Tutup]

34

Saya didekati dengan pekerjaan untuk menulis embedded C pada pengontrol mikro. Pada awalnya saya akan berpikir bahwa pemrograman embedding terlalu rendah pada tumpukan perangkat lunak untuk saya, tetapi mungkin saya berpikir salah.

Biasanya saya akan mengabaikan kesempatan untuk menulis kode tertanam, karena saya tidak menganggap diri saya seorang insinyur listrik. Apakah ini asumsi yang buruk? Apakah saya dapat menulis perangkat lunak yang menarik dan bermanfaat untuk sistem tertanam, atau akankah saya menendang diri sendiri karena menjatuhkan terlalu rendah pada tumpukan perangkat lunak?

Saya pergi ke sekolah untuk ilmu komputer dan benar-benar menikmati menulis kompiler, berpikir tentang algoritma bersamaan, merancang struktur data, dan mengembangkan kerangka kerja. Namun, saat ini saya bekerja sebagai pengembang web, yang tidak meneriakkan hal-hal menarik yang baru saja saya jelaskan. (Saat ini saya menangani masalah seperti: "kotak centang ini harus 4 piksel ke kiri" dan "tanggal ini diformat salah".)

Saya menghargai masukan semua orang. Saya tahu saya harus membuat keputusan untuk diri saya sendiri, saya hanya ingin klarifikasi tentang apa artinya menjadi seorang programmer yang tertanam, dan jika itu cocok dengan apa yang saya temukan menarik.

Jeremy Heiler
sumber

Jawaban:

33

Jika Anda ingin pandai bekerja pada sistem embedded, maka ya, Anda perlu berpikir seperti EE beberapa waktu. Itu umumnya ketika Anda menulis kode untuk berinteraksi dengan berbagai periferal (bus serial seperti UART, SPI, I2C atau USB), timer 8 dan 16-bit, generator jam, dan ADC dan DAC. "Lembar Data" untuk mikrokontroler sering berjalan ke ratusan halaman saat mereka menggambarkan setiap bit dari setiap register. Ini membantu untuk dapat membaca skematik sehingga Anda dapat menyelidiki papan dengan osiloskop atau penganalisa logika.

Di lain waktu, itu hanya menulis perangkat lunak. Tetapi di bawah kendala ketat: sering kali Anda tidak akan memiliki OS formal atau kerangka kerja lain, dan Anda mungkin hanya memiliki beberapa KB RAM, dan mungkin 64 KB memori program. (Batasan-batasan ini mengasumsikan Anda memprogram pada mikro 8 atau 16-bit yang lebih kecil; jika Anda bekerja dengan Linux tertanam pada prosesor 32-bit, Anda tidak akan memiliki kendala memori yang sama tetapi Anda masih harus berurusan dengan kebiasaan apa pun perangkat periferal yang distro Linux Anda tidak menyediakan drivernya.)

Saya memiliki latar belakang di EE dan CS jadi saya menikmati kedua sisi mata uang. Saya juga melakukan beberapa pemrograman web (kebanyakan PHP), dan aplikasi desktop (C # dan Delphi), tetapi saya selalu menikmati bekerja pada proyek yang paling tertanam.

tcrosley
sumber
Terima kasih atas jawaban anda. Kendalanya tidak terlalu mengganggu saya. Saya hanya menganggap diri saya sebagai seorang pria perangkat lunak, dan bukan seorang insinyur listrik. Apakah Anda mengatakan "pemrograman tingkat rendah" sama dengan "teknik listrik tingkat tinggi"?
Jeremy Heiler
+1 untuk pengamatan 32-bit dan Linux - Saya dulu bekerja di telecomms dan peranti penangkap kerasnya seperti coding untuk versi Amiga (prosesor Motorla 68k). Memiliki beberapa waktu yang sangat bahagia - kadang-kadang ketinggalan.
Gary Rowe
3
@ Jeremy, ya, ketika Anda mencoba mencari tahu pengaturan untuk perangkat yang rumit, atau melihat aliran bit serial pada suatu ruang lingkup, kadang-kadang tampaknya Anda melakukan pemrograman tingkat rendah dan kadang-kadang Anda harus berpikir seperti yang tinggi tingkat EE. Anda mungkin menghabiskan banyak waktu melihat konten register di dalam jendela debugger dari suatu IDE. Pada tingkat itu, Anda melihat langsung ke perangkat keras.
tcrosley
20

@ tcrosley jawaban sangat bagus. Anda tidak perlu menjadi insinyur listrik, tetapi mengetahui dasar-dasarnya membantu.

Saya tidak berpikir Anda perlu takut menjadi "terlalu rendah pada tumpukan perangkat lunak". Saya harus menyelesaikan banyak masalah yang sangat menarik sebagai insinyur yang disematkan. Anda menyebutkan daftar tugas yang Anda nikmati:

  • Algoritma bersamaan - Berurusan dengan gangguan level perangkat keras asinkron memiliki banyak tantangan menarik seperti menggunakan model thread OS.

  • Merancang struktur data - Periksa. Desain untuk kekompakan dan akses yang efisien.

  • Mengembangkan kerangka kerja - Periksa. Pada sistem tulang gundul, Anda dapat merancang mini-OS.

  • Menulis kompiler - mungkin tidak, tetapi Anda akhirnya bisa melakukan optimasi kode tingkat rendah mirip dengan langkah pembuatan kompilator.

Saya akan memilih bekerja pada sistem tertanam daripada pengkodean UI setiap hari. Anda tidak akan pernah lupa saat pertama kali menyaksikan mesin mulai bergerak sesuai cara Anda memprogramnya. Ini jauh lebih memuaskan daripada mendorong piksel.

ASHelly
sumber
Terima kasih atas pemetaan 1-ke-1 AShelly. Tidak tahu apa-apa tentang lingkungan kerja yang tertanam, ada baiknya untuk mengetahui hal itu.
Jeremy Heiler
6

Sebagai seorang programmer yang tertanam, tugas saya adalah membuat perangkat keras kustom berfungsi. Biasanya, saya telah mengembangkan banyak perangkat lunak pada papan dev, atau versi perangkat keras sebelumnya. Ketika papan baru masuk, tugas saya adalah meletakkan perangkat lunak saya di papan tulis dan menunjukkan bahwa semuanya berfungsi.

Karena hampir selalu ada masalah, keterampilan debugging sangat penting. Jika periferal eksternal tidak berfungsi, apakah itu chip yang buruk, koneksi yang buruk ke chip, kode kereta atau penggunaan periferal on-chip yang salah? Satu-satunya cara untuk mengetahui adalah dengan debugging yang luas. Ini berarti merasa nyaman dengan osiloskop, penganalisa jaringan, penganalisa logika dan target debuggers. Proses debug hampir menjadi ilmiah. Saya mengembangkan hipotesis, merancang eksperimen untuk memberikan bukti untuk atau melawan hipotesis saya, dan menguji.

Saat mengevaluasi peserta magang atau insinyur baru yang tertanam, keterampilan ini adalah yang paling penting. Semua perangkat lunak memiliki masalah, tetapi begitu Anda mulai berinteraksi dengan dunia fisik, beragam masalah tersebut meningkat secara eksponensial. Inti dari pekerjaan saya adalah untuk memecahkan serangkaian panjang masalah antara konsep dan kenyataan.

Ben Gartner
sumber
Benar, debugging adalah keterampilan penting untuk seorang programmer yang tertanam - terutama jenis debugging yang melibatkan melihat tampilan ruang lingkup penyimpanan yang dilampirkan pada trek pada PCB untuk mendiagnosis masalah dengan perangkat lunak yang tertanam. :-) - Namun, kebajikan yang lebih besar dalam tim insinyur perangkat lunak tertanam adalah kemampuan untuk menangkap kesalahan secara otomatis melalui pengujian lanjutan dan teknik kontrol kualitas.
William Payne
5

Dalam pengalaman saya, seseorang mendapatkan hasil yang lebih baik mendekati pengembangan perangkat lunak sistem tertanam dengan topi "pengembang perangkat lunak" daripada topi "insinyur elektronik". (praktik seperti TDD & CI kurang umum dalam rekayasa perangkat keras)

Di sisi lain, saya berpikir bahwa pengalaman mengembangkan untuk sistem embedded membuat seseorang menjadi lebih baik; lebih banyak pengembang perangkat lunak.

William Payne
sumber
2
Tepatnya, pengembang yang disematkan di sini, industri ini membutuhkan lebih banyak orang cs di sini, karena perangkat lunak semakin rumit, kami benar-benar buruk dalam praktik kualitas perangkat lunak yang baik.
Bjarke Freund-Hansen
Saya pikir orang-orang CS akan menikmatinya juga, karena menulis perangkat lunak yang disematkan adalah salah satu pekerjaan yang paling memuaskan (secara intelektual, jika tidak secara finansial) yang dapat dilakukan oleh pengembang perangkat lunak.
William Payne
3

Saya berada dalam situasi yang sama sekitar 8 tahun yang lalu. Saya telah pada saat itu 7 tahun pengembangan perangkat lunak di lingkungan aplikasi dan server. Satu-satunya pengalaman saya berurusan dengan tingkat rendah dengan perangkat keras sebelumnya telah menulis di assembler Z80 sebagai remaja pada spektrum ZX.

Itu tentu saja sebuah tantangan. Saya menemukan berurusan dengan set chip di assembler sangat menyenangkan dan saya pasti belajar banyak tentang perangkat keras. Sebagian besar peran saya adalah dalam menguji perangkat keras menggunakan perangkat lunak, jadi belajarlah untuk mengatasi pemrograman dan mengenali bahwa bug perangkat lunak Anda sebenarnya adalah bug perangkat keras. Sebenarnya kadang-kadang dibutuhkan sedikit kerja oleh perangkat lunak dan perangkat keras orang untuk mengidentifikasi apakah bug adalah perangkat keras atau perangkat lunak.

Satu aspek yang saya gagal lakukan adalah pekerjaan driver perangkat. Saya tidak pernah benar-benar memahami ini, yang merupakan satu hal yang saya dan direktur perusahaan tidak pernah mengerti mengapa. Itu hanya menjadi fakta yang diterima.

Menjadi terbiasa dengan occiloscope dan ion solder akan sangat penting. ingat bahwa ketika seorang pria perangkat keras mengatakan angka 26 ia SELALU berarti 0x26 berguna. Menyadari bahwa para insinyur perangkat keras merasa berurusan dengan perangkat lunak sangat membuat frustrasi, tetapi kemudian, proyek perangkat keras yang tidak melibatkan perangkat lunak disebut kabel.

Saya tetap dalam peran itu selama 4 tahun dan hanya pergi karena saya diburu untuk kesempatan yang sangat fantastis.

Michael Shaw
sumber
Terima kasih telah berbagi pengalaman Anda, Ptolemy. Saya menghargainya.
Jeremy Heiler
Saat ini cukup banyak kabel yang memiliki mikroprosesor di dalamnya. :-)
William Payne
2

Seperti semuanya, itu membutuhkan pendekatan yang seimbang. Saya suka bekerja dengan sistem tertanam di pekerjaan saya. Mereka membuat saya lebih baik di bidang teknik listrik. Komputasi fisik dan otomatisasi sangat mengasyikkan. Di sisi lain, membangun aplikasi web dan bermain-main dengan cloud computing sangat bagus.

Jika Anda melakukannya dengan benar, sisi perangkat lunak Anda akan mencari cara untuk melakukan hal-hal yang lebih cerdas dan lebih baik. Sisi perangkat keras Anda akan membuat Anda tetap memperhatikan sumber daya dan sangat efisien.

mcotton
sumber
Terima kasih atas jawaban anda. Saya melihatnya sebagai mampu menggeser bidang sedikit, jika tidak lain mempelajari tingkat yang lebih rendah dan kemudian naik kembali sedikit tumpukan.
Jeremy Heiler
2

Saya bukan Insinyur Listrik, namun saya telah melakukan sejumlah kecil pengembangan perangkat lunak tertanam. Masalah terbesar yang saya temukan adalah bahwa saya memiliki latar belakang yang jauh lebih mendasar dalam matematika, dan jadi saya tidak tahu bagaimana dengan mudah memecah serangkaian algoritma matematika canggih yang rumit ke dalam kode tanpa banyak bantuan.

Untuk semua hal di mana saya harus bermain dengan pensinyalan, membaca nilai dari input, mengirimkan data ke output, dan semua hal semacam itu, saya merasa sedikit berbeda secara konseptual dengan apa yang saya lakukan sehari-hari sebagai barang bagus. Pengembang Perangkat Lunak kuno. Menulis perangkat lunak benar-benar apa adanya. Justru ketika Anda perlu keluar dari perangkat lunak yang sebenarnya saya menemukan hal-hal menjadi tidak pasti karena saya tidak memiliki pengetahuan untuk mengacaukan langsung dengan perangkat keras. Ini biasanya terjadi ketika mencoba men-debug atau menguji kode. Jika Anda memiliki rantai alat yang hebat, Anda mungkin telah mengintegrasikan lingkungan debugging dan simulasi untuk menghilangkan sebagian besar rasa sakit, namun bahkan dengan semua itu untuk membantu Anda, Anda kadang-kadang perlu kembali ke dasar-dasar dan menguji kode Anda terhadap semacam analisa, dan kenyataannya adalah bahwa sebagian besar platform tertanam tidak

Dari perspektif ini, saya tidak berpikir bahwa menjadi insinyur listrik sangat penting untuk pemrograman tertanam jika tugasnya sederhana, dan persyaratan khusus perangkat keras aktual minimal. Lebih dari itu, saya pikir menjadi seorang EE akan membuat hidup lebih mudah ketika bekerja di lingkungan yang tertanam, terutama ketika sains nyata diperlukan untuk mencari tahu di mana masalahnya.

S.Robins
sumber
"EE's Ouija-Board" - brilian, saya tahu betul
Martin Beckett
2

Saya belum melakukan pemrograman tertanam tingkat bisnis, tetapi Sarjana saya kebanyakan tentang sistem tertanam, yang darinya saya memiliki beberapa tahun pengalaman nyata. Kami menggunakan C pada Atmel AVR dan menyentuh beberapa chip Texas Instruments dengan VHDL, dan memiliki beberapa hal teoritis tentang ARM.

Dalam apa yang kami miliki, kira-kira 50-60 persen pemrograman (C), 20 persen perencanaan / desain (UML), dan sisanya adalah elektronik fisik (penyolderan, pengukuran, pengkabelan, pembuatan kabel, dll). Saya juga setuju itu sangat menarik dan menyenangkan untuk dilakukan, dan saya benar-benar berharap saya juga akan memiliki karir di sistem embedded. Sayangnya, dengan pasar yang sangat kecil dalam sistem embedded, saya harus menggunakan Java EE lama.

Tapi saya ngelantur; Saya akan mengatakan persentase yang disebutkan di atas cukup dekat dengan pekerjaan di dunia nyata, karena guru kami memiliki usaha sendiri, dan juga menyebutkan bahwa mereka akan berusaha untuk membuatnya serealistis mungkin. Kami bahkan memiliki pergantian 180 derajat secara acak dalam persyaratan pertengahan proyek, heh heh.

Adapun tumpukan. Mengetahui pemrograman tertanam akan memberi Anda peluang besar untuk membuat produk perangkat keras Anda sendiri dan sangat nyata yang bisa Anda buat di pabrik nyata di Asia, kemudian merakitnya di tempat Anda (baik itu di rumah atau di perusahaan Anda sendiri). Sangat menarik! Anda juga dapat membuat banyak gadget yang akan membantu di rumah, seperti gerakan-gerakan yang dikendalikan oleh rumah tangga, pengatur waktu untuk mesin kopi untuk secara otomatis menyiapkan joe pagi Anda, dan sebagainya. Hal-hal yang menyenangkan!

Juha Untinen
sumber