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.
sumber
@ 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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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!
sumber