it-swarm-id.com

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

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 sangat 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-masalah seperti: "kotak centang ini harus 4 piksel ke kiri" dan "tanggal ini salah diformat".)

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 sesuai dengan apa yang menurut saya menarik.

35
Jeremy Heiler

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: seringkali Anda tidak akan memiliki OS formal atau kerangka kerja lain, dan Anda mungkin hanya memiliki beberapa KB RAM, dan mungkin 64 KB memori program. (Batas-batas 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), tapi saya selalu menikmati bekerja pada proyek yang paling tertanam.

33
tcrosley

@ 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 Majelis dari kompiler.

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.

20
AShelly

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.

6
Ben Gartner

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.

5
William Payne

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 belajar 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.

3
Michael Shaw

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 menjadi kode tanpa banyak bantuan.

Untuk semua hal yang saya perlukan untuk 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 memberikan Anda kemewahan lebih dari kompiler dasar dan Ouija-Board EE untuk membantu Anda.

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.

2
S.Robins

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 metode lama Java EE.

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 lampu meja yang dikendalikan oleh gerakan, penghitung waktu untuk mesin kopi untuk secara otomatis menyiapkan joe pagi Anda, dan sebagainya. Hal-hal yang menyenangkan!

2
Juha Untinen

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.

2
mcotton