EE vs Ilmu Komputer: Efek pada Pendekatan Pengembang, Gaya? [Tutup]

11

Adakah perbedaan sistematis antara pengembang perangkat lunak (insinyur sw, arsitek, jabatan apa pun) dengan elektronik atau latar belakang teknik lainnya, dibandingkan dengan mereka yang memasuki profesi melalui ilmu komputer?

Dengan latar belakang elektronik, maksud saya gelar EE, atau pengotak elektronik otodidak, tipe insinyur dan fisikawan eksperimental lainnya.

Saya bertanya-tanya apakah datang ke profesi pembuat perangkat lunak dari pengetahuan yang kuat tentang sandal jepit, buffer tristate, waktu kenaikan jam dan sebagainya, biasanya mengarah ke pendekatan yang berbeda untuk masalah, pola pikir, atau keterampilan unggul pada spesialisasi tertentu dan kekurangan keterampilan pada orang lain, jika dibandingkan dengan tipe ilmu komputer yang penuh konsep seperti tipe data abstrak, orientasi objek, normalisasi database, yang berbicara tentang "penutupan" dalam bahasa pemrograman - hal-hal yang tidak masuk akal bagi kerumunan besi penyolderan sampai mereka belajar pemrograman yang cukup.

Dunia nyata, saya yakin, menawarkan berbagai pengecualian individu, tetapi sebagian besar, dapatkah Anda mengatakan ada perbedaan secara keseluruhan? Apakah ini memiliki implikasi mempekerjakan misalnya (untuk membuat sesuatu) "tidak pernah menyewa pengatur elektron untuk melakukan desain database"? Bisakah mengetahui tentang perbedaan membantu pencari kerja menemukan sesuatu yang sesuai lebih efektif? Atau memberikan pencerahan atau nasihat praktis bagi mereka yang merasa dirinya tidak cocok dalam peran pekerjaan tertentu?

(Btw, saya tidak pernah mengambil kelas ilmu komputer; kesan saya tentang apa yang mereka bahas kabur. Saya seorang elektronik / fisika / tipe seni, saya sendiri.)

DarW
sumber

Jawaban:

5

Memiliki EE minor dan CS mayor, saya telah bekerja dengan kedua kelompok secara akademis. Saya tidak pernah memegang pekerjaan di mana saya mendesain produk-produk gaya EE, tetapi saya telah mengkonsumsi banyak dari mereka melakukan pekerjaan untuk perusahaan dengan hal-hal seperti PLC, dan karena itu dapat memahami (dari latar belakang pendidikan) apa yang terjadi itu bagus . Jadi saya tidak bisa mengatakan bahwa saya tahu 100% tentang perilaku dan karakteristik di tempat kerja, tetapi saya bisa menggambarkan academicperbedaan antara keduanya sampai batas tertentu.

Orang-orang EE cenderung fokus pada detail, dan mereka cenderung mengetahui implementasi yang tepat. Jika tidak 100% dapat dipetakan, mereka tidak menyukainya. Orang-orang EE akan mengoptimalkan turun untuk menghapus detail yang tidak perlu jika mereka bisa.

Orang-orang SE cenderung menyukai lapisan dan kompartementalisasi logika. Orang-orang SE tidak keberatan dengan proyek yang membengkak. Orang-orang SE cenderung sangat berorientasi pada matematika. Mereka cenderung berpikir dalam hal persamaan dan bagaimana menyelesaikan masalah dari konsep pola. Bergabung lebih intuitif untuk grup ini, seperti pekerjaan basis data. Semakin jauh SE Anda semakin Anda cenderung melihat orang-orang yang fasih dengan hal-hal seperti Pemrograman Fungsional. Itu bukan tempat yang aman bagi orang EE.

Kedua orang tahu tentang hal-hal seperti peta Karnaugh sehingga ada banyak tumpang tindih di daerah tersebut. Pengurangan logika, hal semacam itu.

Ok, jadi itu jawaban subjektif saya. Semoga ini bisa membantu.

jcolebrand
sumber
Jawaban ini memberi saya wawasan tentang proyek saya saat ini. Saya perlu beralih karier!
DarenW
1
Saya hampir 100% setuju dengan Anda, kecuali bagian tentang pemrograman fungsional. Sebagai contoh, saya percaya logika tangga murni hampir 100% sintaks deklaratif. Diagram blok fungsi juga populer dengan EE, yang juga, jelas, fungsional.
Scott Whitlock
@Scott W. ~ 2 pengalaman ... ;)itu jawaban subjektif, aku boleh salah ... dalam referensi untuk logika fungsional maksud saya seperti kode cadel ini ((lambda (arg) (+ arg 1)) 5)... mereka memang akan menggunakan sesuatu "sama" tapi akankah logika sama dengan EE? Tidak dalam pengalaman pribadi saya. Memang, saya tidak tahu bahwa banyak EE perancang chip profesional, sebagian besar yang saya tahu adalah lebih banyak petugas servis. Dan logika tangga yang mereka kunci ke terminal komputer terlihat seperti tangga literal di layar mereka. Sosok pergi.
jcolebrand
1
Saya pikir Anda berbicara tentang konstruksi fungsional seperti lambdas, dll, dan saya sedang memikirkan konsep fungsional seperti immutability dan sintaksis deklaratif. Saya setuju bahwa hal-hal seperti monad dan sejenisnya cukup abstrak. Saya tidak berpikir EE biasanya akan mengalami hal-hal seperti itu.
Scott Whitlock
Saya berpikir bahwa EE bertemu monad lebih sering daripada orang SE. Haskell bahkan memiliki ekstensi monad yang memungkinkan monad dimodelkan sebagai blok I / O, roti dan mentega dari insinyur DSP.
Aditya
12

Jika saya harus menggeneralisasi, inilah pengalaman saya:

  • Insinyur (atau hanya EE) cenderung melakukan lebih baik dalam "kesempurnaan yang kecil". Diberi tugas pemrograman kecil, mereka berpikir sangat panjang dan keras tentang semua kasus tepi, dan lebih cenderung akhirnya membangun perangkat lunak yang sangat kuat. Biasanya didorong dari pendekatan top-down desain-itu-semua-depan, karena itulah yang mereka terbiasa dengan perangkat keras. Biasanya melibatkan penggunaan mesin negara, karena mereka digunakan untuk merancang mereka untuk perangkat keras, dan itu cocok dengan pendekatan "desain besar". Di sisi lain, mereka tidak terlalu memikirkan skalabilitas atau rawatan.

  • Pengembang tradisional Anda lebih baik dalam mengelola kompleksitas yang besar, sebagian besar karena pelatihan mendorong pemecahan masalah menjadi bit yang lebih kecil dan lebih mudah dikelola. Mereka diajarkan untuk menghindari desain besar, dan hanya memisahkan masalah, menulis tes, dan lulus ujian. Biasanya ada banyak kasus tepi terjawab kecil, hanya karena kompleksitas & waktu, tetapi mereka akhirnya ditutup. Pengembang cenderung mengambil keuntungan dari fakta bahwa itu hanya perangkat lunak dan harus (atau) mudah diubah. Ketika EE bekerja dengan perangkat keras, mereka tidak memiliki keunggulan ini, dan saya pikir perlu waktu untuk melakukan transisi.

Seperti yang saya katakan, itu pengalaman umum saya. Itu tidak benar dalam setiap kasus.

Scott Whitlock
sumber
Jawaban yang bagus, dengan kontras di antara keduanya. Sekarang untuk melihat berapa banyak yang setuju bahwa ini benar atau mendekati, dengan upvoting
DarenW
3

Dalam pengalaman saya - jenis EE tampaknya merancang program linier dan tidak memasukkan lapisan abstraksi. Tipe CS sepertinya nyaman digunakan.

Tidak ada komentar tentang perbedaan kualitas atau ketiadaan.

Paul Nathan
sumber
1

Saya ragu Anda akan melihat banyak perbedaan dalam jenis bisnis atau aplikasi web yang biasa dilakukan kebanyakan orang, setelah keduanya memiliki pengalaman beberapa tahun di bawah ikat pinggang mereka. Semua hal yang Anda anggap membingungkan bagi "kerumunan besi solder" adalah keterampilan pemrograman normal. Intinya Anda menjawab pertanyaan Anda sendiri - seseorang tanpa latar belakang pemrograman dapat belajar pemrograman, tetapi sampai mereka melakukannya, mereka bukan seorang programmer. Seseorang dengan pikiran logis dan analitis akan merasa jauh lebih mudah untuk belajar memprogram dengan baik daripada seseorang yang tidak - itu akan menjadi satu-satunya keuntungan yang dapat saya pikirkan untuk seorang pengotak elektronik otodidak.

Ilmu Komputer (berlawanan dengan Teknik Komputer) pada umumnya adalah matematika, karena (pada tingkat yang lebih tinggi) adalah berbagai ilmu lain seperti fisika - tetapi ini adalah jenis matematika yang sangat berbeda. Jika Anda telah melakukan sains yang berbeda maka Anda juga akan melakukan matematika dan karenanya harus menemukan kemungkinan untuk naik ke kecepatan tidak seperti seseorang yang tidak memiliki latar belakang matematika. Tentu saja, sangat sedikit programmer yang benar-benar perlu tahu tentang teori himpunan, big-O, atau apa pun - tentu saja tidak pada level tinggi.

FinnNk
sumber
Jawaban yang menarik. Saya mungkin meremehkan keterampilan pemrograman orang elektronik - yang berpengalaman bisa berada di mana saja dalam skala dari dummy hingga bintang rock. Apakah Anda mengatakan itu benar bahwa EE dapat belajar pemrograman ke tingkat yang kompeten secara profesional, lebih mudah daripada orang perangkat lunak murni dapat mengambil elektronik?
DarenW
1

Saya mulai dengan BSEE, mulai bekerja mendesain sirkuit logika untuk laboratorium R&D telepon yang besar, dan (ini sekitar 40 tahun yang lalu) menyadari sebagian besar dari apa yang saya bangun pada akhirnya dapat dilakukan dengan program komputer. Jadi saya kembali dan mendapat gelar MSCS.

Saya selalu tertarik pada arsitektur komputer, dan apa yang terjadi pada tingkat perangkat keras. Sebagian besar karir saya dihabiskan untuk merancang sistem mikrokontroler tertanam, di mana saya mencoba menemukan kecocokan terbaik antara apa yang dilakukan dalam perangkat keras dan apa yang dilakukan dalam firmware. Namun, saya telah melakukan sedikit pemrograman web, dan beberapa desain basis data.

Tanpa latar belakang saya di CS, saya pikir saya akan memiliki lebih banyak masalah dalam memahami konsep yang lebih abstrak. Selain banyak bahasa assembler yang berbeda, saya telah menggunakan C, C ++, C #, Pascal, Delphi, Perl, PHP, dan beberapa Lisp. Saat ini saya mencoba mempelajari Ruby dan Python. OO design Saya cukup nyaman dengan. Pemrograman fungsional saya belum (belum).

Sama untuk basis data. Saya mengerti normalisasi. Saya memiliki masalah dengan beberapa GABUNGAN yang lebih esoteris dan menghindarinya. Saya tidak benar-benar nyaman dengan sesuatu kecuali saya mengerti apa yang terjadi di bawah tenda.

Saya ingin dapat "melihat" bagaimana komputer akan menjalankan program di kepala saya.

tcrosley
sumber
1
"Aku tidak benar-benar nyaman dengan sesuatu kecuali aku mengerti apa yang sedang terjadi di bawah tenda." - itu adalah tanda rekayasa yang bertanggung jawab. +1 untuk Anda, tuan.
luis.espinal