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.)
;)
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.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.
sumber
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.
sumber
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.
sumber
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.
sumber