Menurut Anda, seberapa bagus ide mengajar orang Majelis (beberapa varian) sebagai bahasa pemrograman pertama? Dibutuhkan lebih banyak usaha daripada belajar misalnya Java atau Python, tetapi orang akan memiliki pemahaman yang baik tentang mesin lebih atau kurang dari "pemrograman hari pertama" (dibandingkan dengan banyak bahasa tingkat yang lebih tinggi, setidaknya). Bagaimana menurut anda? Apakah ini ide yang realistis, setidaknya bagi mereka yang siap melakukan upaya ekstra? Keuntungan dan kerugian?
Catatan: Saya bukan guru, hanya ingin tahu
Jawaban:
Akan sulit untuk menginspirasi programmer baru dengan kode assembly. Halo yang dinamis, situs web pengguna jauh lebih keren dengan sedikit usaha. Saya tidak mengatakan bahwa pelajaran dasarnya sama, tetapi kursus pengantar akan memiliki konten inspirasional yang besar, jika tidak maka tidak akan ada kursus kedua.
Saya ingat kursus pemrograman awal saya diajarkan dalam Skema dan saya sebagian besar frustrasi bahwa saya tidak bisa dengan mudah mengkompilasi ke .exe dan "menjalankan" program saya (saya pikir MS Visual Basic adalah akhir dari semua pemrograman). Tidak sampai bertahun-tahun kemudian saya benar-benar memahami alat yang ampuh yang telah saya mainkan. Saya pikir saya akan lebih menghargainya dan mendapatkan pelajaran itu lebih baik jika saya memiliki pengalaman awal dalam sesuatu yang sedikit lebih pragmatis pada awalnya.
sumber
Saya pikir itu adalah ide yang buruk untuk Rekayasa Perangkat Lunak dan siswa CS, dan umumnya orang lebih tertarik pada pemrograman daripada elektronik.
Itu bisa dilakukan, tetapi itu tidak berarti harus dilakukan. Kembali pada hari itu, cara untuk melakukan hal-hal yang sangat keren dengan komputer di rumah adalah belajar perakitan terlebih dahulu. Itu karena keterbatasan perangkat keras awal - bahasa tingkat yang lebih tinggi tidak begitu kuat dan cukup cepat. Saat ini, Anda dapat melakukan banyak hal yang lebih keren, dalam waktu yang lebih singkat, dengan bahasa tingkat yang lebih tinggi.
Apa yang terdengar lebih menarik, menulis prototipe cepat untuk permainan sederhana dan bermain-main dengan variasi pada suatu algoritma, atau berjuang dengan register dan hal-hal tingkat rendah?
sumber
Saya tidak berpikir itu ide yang buruk, tetapi seberapa rumit program yang akan Anda berikan kepada para siswa ini? Majelis membutuhkan lebih banyak pekerjaan. Mungkin oke untuk memulainya dengan hal-hal yang sangat mendasar dan kemudian memindahkannya ke sesuatu yang lebih mudah untuk dikerjakan, begitu mereka mendapatkan penghargaan untuk bekerja di tingkat bawah. Siswa pertama kali kadang-kadang mendapatkan ide di kepala mereka akan mengkodekan Halo berikutnya, atau MS Office atau AutoCAD atau sesuatu, dan ketika mereka melihat berapa banyak pekerjaan yang masuk ke dalam bahasa assembly yang sederhana , mereka bisa takut, jadi jelaskan bahwa ada hal-hal yang lebih baik daripada perakitan dan kemudian memindahkannya ke hal itu begitu mereka telah melihat konsepnya. Anda juga bisa mencoba mengajar secara bersamaan dengan sesuatu yang lain seperti C.
Juga, bahasa rakitan mana? Saya agak ingat MIPS relatif mudah untuk dikerjakan, dan saya pikir itu berjalan dalam emulator sehingga tidak ada bahaya yang menyebabkan masalah pada mesin yang sebenarnya , meskipun mungkin ada alat yang lebih baik dari itu sekarang.
Ini bisa bekerja dengan baik, jika dilakukan dengan benar. Hati-hati...
sumber
Assembly adalah bahasa pertama yang kami pelajari di sekolah elektronik (pada 1900-an) dan sepertinya pilihan alami. Kami bekerja keras melalui kursus-kursus kami mulai dari komponen diskrit, hingga logika transistor-resistor, gerbang logika, sirkuit terintegrasi, prosesor, dan ke pemrograman dalam perakitan. Banyak siswa di kelas-kelas ini belum pernah memprogram dalam bahasa apa pun sebelumnya dan mereka mengambilnya.
Jadi perakitan dapat menjadi pilihan yang baik untuk bahasa pertama jika fondasi yang tepat diletakkan untuk siswa. Namun, bagi siapa pun yang tujuannya adalah menjadi aplikasi atau pengembang Web, saya pikir perakitan mungkin terlalu rendah sebagai titik awal.
sumber
Satu hal yang pasti, jika orang-orang, belajar Assembly terlebih dahulu, membuatnya, mereka akan menjadi programmer yang luar biasa.
Ini mengingatkan saya ketika saya belajar mengemudi. Ibuku bersikeras
Alasannya dia tidak ingin aku terganggu dengan lebih dari yang seharusnya, sekaligus.
Terapkan itu untuk mempelajari cara memprogram, apakah perlu untuk melemparkan semuanya pada pelajar sekaligus? Mereka belajar apa variabel itu pada saat yang sama mereka belajar berapa banyak data yang dapat mereka simpan dalam jenis register apa?
Lebih dari setengah kelas saya gagal kelas perakitan kami, dan ini adalah sekelompok orang yang, pada waktu itu, menganggap diri mereka memiliki pengetahuan pemrograman selama 2+ tahun.
Preferensi pribadi saya, jika saya harus mempelajari semuanya lagi, adalah memulai dengan bahasa yang dapat melakukan sebanyak mungkin untuk saya. Kemudian, ketika saya belajar, bergerak mundur menuju bahasa tingkat yang lebih rendah.
sumber
Tidak
Mengapa itu menguntungkan? Bisakah Anda memberikan contoh atau petunjuk bagaimana ini bisa bernilai?
Keuntungan: Tidak ada.
Kekurangan:
Sebuah kekacauan trivia acak tentang bendera dan negara bagian dan register dan skema pengalamatan memori yang kompleks dan perangkat I / O dan DMA serta interupsi dan siklus jam dan sebagainya. Tidak ada yang membantu memahami bahasa dan komputasi modern berbasis VM.
Putus dari pemecahan masalah aktual yang sebenarnya diterapkan komputer.
Sebuah perceraian dari pengguna akhir dan data praktis serta masalah pemrosesan yang harus mereka selesaikan.
Serangkaian penjelasan mesin dan mesin virtual serta kompiler dan interpreter yang tidak perlu dan seluruh tumpukan kura-kura memegang dunia.
Banyak perincian "ini adalah implementasi fisik dari 'objek'" dalam bahasa tingkat yang lebih tinggi yang akhirnya mereka dapatkan.
Banyak perincian "ini adalah bagaimana fungsi metode dikirim" dalam bahasa tingkat yang lebih tinggi yang akhirnya mereka dapatkan.
Banyak penjelasan "ini tidak berlaku untuk 80386 tetapi berlaku untuk chipset 80586".
Banyak panggilan API OS tingkat rendah untuk membuat program ASM melakukan apa pun yang tampaknya serupa dengan berguna oleh seseorang.
Inti dari bahasa pemrograman pertama bukanlah untuk menguasai chipset.
Inti dari bahasa pemrograman pertama adalah
Memahami cara berpikir tentang komputasi.
Memahami bagaimana melakukan pemrosesan data yang berguna.
Pahami cara menyelesaikan sesuatu. Desain - kode - tes.
sumber
Jika saya ditugaskan untuk merancang kurikulum, saya akan memiliki dua program yang berjalan pada saat yang sama semester pertama: asm + organisasi komputer dasar / arsitektur, dan kursus berbasis SICP yang didirikan di Skema. Semester kedua akan berorientasi pada struktur data dan algoritma dasar dalam Skema.
Tahun kedua akan menjadi proyek sepanjang tahun menggunakan salah satu dari Delphi, C ++ atau C #, yang berfokus pada desain perangkat lunak modern (desain OO, beberapa desain fungsional, rekayasa perangkat lunak, kontrol versi, dll).
Efeknya harus memberi landasan kuat dalam abstrak dan praktis, mengarah ke kursus mendalam di tahun ketiga dan keempat.
sumber
Saya terbiasa dengan TA kelas pengantar ilmu komputer, dan saya pikir itu ide yang buruk.
Karena itu, saya pikir perangkat keras perakitan / komputer harus kelas yang sangat awal - idealnya, kuartal pertama di jurusan. Mintalah siswa mendapatkan satu bahasa tingkat tinggi di bawah ikat pinggang mereka, kemudian lompat ke hal-hal perangkat keras tingkat rendah segera sebelum beralih ke struktur data - idealnya dalam bahasa yang membutuhkan pengelolaan memori.
sumber
Assembly adalah bahasa kedua saya, tepat setelah BASIC. Namun, ketika saya belajar itu adalah waktu yang berbeda. Commodore 64 saya memiliki bahasa lain yang tersedia, tetapi jika Anda ingin sesuatu tampak cepat, atau ingin melakukan lebih dari satu hal pada suatu waktu, Anda perlu belajar bahasa rakitan dan cara bekerja dengan interupsi. Sistem Operasi Lingkungan Grafis (GEOS) yang memberi Commodore sistem windowing juga semuanya perakitan. Itu pada umumnya API perakitan terbaik yang pernah saya lihat. Itu juga satu-satunya platform yang saya gunakan di mana Anda bisa mendesain kode Anda. Itu benar, Anda bisa menggunakan huruf miring dan ukuran font yang berbeda - sesuatu yang terbukti bermanfaat untuk membaca komentar.
Saya belajar banyak tentang bagaimana Commodore bekerja, tetapi chip Motorolla memiliki satu set opcode yang sangat sederhana. Tidak terlalu sulit untuk menyimpan kurang dari 255 opcodes yang terpisah satu sama lain. Saya tidak dapat membagi pengalaman saya pada chip Motorolla 6510 ke pemrograman untuk Intel 8086. Arsitektur chip dan sistem terlalu berbeda. Saya membayangkan saya akan mengalami kesulitan yang sama untuk naik ke chip Motorolla 68000 Amiga juga.
Singkatnya, saya harus dengan sepenuh hati tidak setuju dengan siapa pun yang mengatakan Majelis harus menjadi bahasa pertama yang baik. Inilah alasannya:
Saat ini bahasa assembly digunakan untuk mempercepat tindakan terbatas tertentu di mana perakitan kerajinan tangan akan lebih cepat daripada perakitan yang dihasilkan kompiler. Struktur utama aplikasi dilakukan dalam bahasa tingkat yang lebih tinggi seperti C, C ++, dll. Tentu saja, pemrograman perakitan akan menjadi sangat penting jika Anda mulai menulis kompiler. Berapa banyak dari kita yang melakukannya?
sumber
Saya mengikuti kebaktian di tahun SMA saya. Saya telah mengambil kelas di Jawa, Pascal, C dan C ++, dan tidak mahir di salah satu dari mereka dan saya benar-benar tersedot di Majelis - adalah satu-satunya orang yang mengambil kelas dalam program pembelajaran jarak jauh di community college, membawa saya satu atau dua bulan sebelum ada yang bisa membuat kompiler bekerja untuk saya.
Saya rasa tidak perlu atau bijak untuk mempelajari bahasa assembly terlebih dahulu, tetapi pintar untuk mempelajari hal-hal yang mereka ajarkan kepada Anda dalam beberapa minggu pertama perakitan, tentang cara kerja prosesor dan beberapa trik debug. Hal-hal yang saya temukan sangat menarik dan mencerahkan sebagai orang baru.
sumber
Saya tidak mengerti mengapa itu tidak bisa dilakukan, walaupun seberapa bagus ide itu benar-benar tergantung pada kerumunan yang akan Anda ajarkan juga. Seseorang yang tujuan akhirnya adalah menjadi pengembang web mungkin akan bosan dan mungkin berhenti karena itu tidak akan memberi mereka kepuasan dengan segera menciptakan sesuatu yang Python, Ruby, dll. Jika mereka ingin akhirnya bekerja pada perangkat keras atau proyek tingkat rendah lainnya maka saya pikir itu akan menjadi awal yang baik (asalkan Anda memberikan latar belakang arsitektur komputer yang cukup untuk masuk akal). Saya pikir itu bisa membantu orang-orang menulis kode yang lebih baik di masa depan, meskipun saya pikir itu akan lebih sulit daripada belajar bahasa lain untuk memulai.
sumber
Saya pikir bahasa assembly hanya akan masuk akal jika Anda fokus pada hal-hal seperti:
Tanpa fokus di bidang ini, hanya bahasa sederhana yang cenderung mengajarkan kebiasaan organisasi yang buruk. Pengodean tingkat mesin baik untuk dimiliki dalam kit alat untuk mengetahui cara kerja berbagai hal, tetapi itu bukan bahasa pertama yang baik.
Saya akan membuat seseorang tertarik pada bahasa tingkat yang lebih tinggi. Kemudian ajarkan C ++; kemudian perakitan dengan fokus pada bagaimana kompiler C ++ menghasilkan kode assembly. Memahami v-tables dan fitur bahasa tingkat tinggi lainnya akan membantu pengembang berpikir tentang bagaimana bahasa benar-benar bekerja daripada hanya memasukkan informasi di bawah 'sihir'.
sumber