Membuktikan masa depan sendiri ketika belajar program [ditutup]

10

Saya ingin belajar memprogram dengan cara 'masa depan-bukti', jika Anda mau. Sementara Windows mendominasi pasar OS desktop (untuk saat ini), jelas ada banyak nilai dalam mempelajari bahasa / kerangka / API dan sebagainya - ini dapat berubah sewaktu perangkat baru muncul atau Windows menembak sendiri di kaki (lebih Pratinjau ramah Windows 8 tidak terlihat terlalu menarik ...).

Apakah saya benar dalam berpikir bahwa memiliki pengetahuan yang kuat tentang C / C ++ untuk logika back-end / pemrograman tingkat rendah dan sejenisnya, dikombinasikan dengan bahasa yang sangat portabel seperti Java untuk GUI dan seterusnya, akan menjadi dasar yang baik untuk pengembangan perangkat lunak yang akan terbukti bermanfaat pada sebagian besar sistem? - Saya berbicara tentang PC desktop, tablet, ponsel.

Anonim
sumber
11
Tidak ada hal seperti itu
Ayub
Bangun sarang dan isi dengan buku.
Edward Strange
4
Bangun sarang dan isi dengan makanan kaleng. Programmer yang paling tahan masa depan adalah programmer yang masih hidup setelah kiamat.
Tom Anderson
1
Jangan belajar bahasa pemrograman atau pengkodean, tetapi kebanyakan belajar pemrograman dan itu membutuhkan waktu bertahun-tahun , hampir sepuluh tahun, dan Anda harus terus belajar seluruh hidup Anda
Basile Starynkevitch

Jawaban:

31

Jika Anda ingin menjadi bukti di masa depan, saran terbaik yang bisa saya berikan kepada Anda adalah jangan menyertakan diri Anda pada teknologi.

Jadi jangan belajar API secara membabi buta. Pelajari bagaimana mereka dikandung. Apa filosofi di balik layar? Apa kelebihan dan kekurangan mereka? Pikirkan perangkat lunak secara umum, bukan teknologi spesifik.

Anda juga dapat bekerja pada konsepsi program yang baik, pergi ke OOP dan AOP adalah pilihan IMO yang baik. Tapi jangan hanya memahami mekanismenya, benar-benar bekerja pada filosofi di balik mekanismenya.

Jangan abaikan ilmu komputer umum, seperti struktur data dan algoritma, karena mereka adalah pengetahuan lintas teknologi yang selalu berguna.

Ikutilah praktik yang baik. Anda sering memiliki selusin cara untuk melakukan sesuatu, tetapi kebanyakan dari mereka adalah omong kosong: rawan bug, sulit untuk dipelihara, sulit untuk dipahami nanti atau oleh programmer lain, dll. . . Biasanya, kode lebih sulit dibaca daripada menulis. Jadi pelajari cara meluangkan sedikit lebih banyak usaha untuk menulis agar lebih mudah membaca (karena Anda akan membaca kode lebih dari yang Anda tulis).

Pelajari teknik yang efektif untuk debug (penggunaan log dan debugger yang cerdas) dan tes (cara menulis kode yang dapat diuji unit dengan mudah dan cara mengotomatiskan tes ini).

Maka, Anda akan membutuhkan latar belakang teknologi umum. Saya berbicara tentang pengetahuan yang sangat luas, seperti bagaimana cara kerja prosesor (cache miss atau prediksi cabang merupakan awal yang baik), tentang sistem UNIX, tentang protokol jaringan seperti IP, TCP dan Ethernet, dll. . .

Pada akhirnya, pelajari cara belajar. Jika Anda tahu cara belajar, maka Anda bisa beradaptasi.

Anda akan membutuhkan pengetahuan yang kuat dalam teknologi spesifik untuk dapat menemukan pekerjaan, tetapi itu sudah sangat cepat usang (pikirkan COBOL misalnya, atau pemrograman web pada saat perang IE / Netscape). Jadi jangan mengandalkan mereka sebagai bukti masa depan. Mereka akan menjadi kunci untuk dipekerjakan, tetapi jelas bukan apa yang membuat seorang programmer hebat dan apa yang akan membuat keterampilan Anda tahan lama.

EDIT: Jika Anda baru memulai, Anda harus menyelesaikan sesuatu secara pasti. Apa saja, sungguh. Gim seperti Tetris atau ular adalah awal yang bagus, dan menyenangkan. Jika Anda tidak menyelesaikan sesuatu, Anda akan menghabiskan banyak waktu untuk belajar dan benar-benar tidak mendapatkan pengalaman yang diperlukan untuk sepenuhnya memahami apa yang Anda pelajari.

Mari kita memberi contoh dengan pola desain. Pola desain sangat bagus dan Anda harus menggunakannya secara definitif. Tetapi jika terlalu sering digunakan akan membuat kode Anda rumit dan sulit dimengerti. Anda harus menghadapi masalah yang memecahkan pola desain dan kehilangan waktu untuk mencoba menyelesaikannya atau efek sampingnya untuk memahami sepenuhnya tentang pola desain. Pola desain harus digunakan sebagai refactoring kecil seiring waktu ketika kode tumbuh. Dan Anda akan tahu kapan pola desain diperlukan ketika manfaatnya lebih besar daripada kompleksitas kode yang disebabkan oleh penggunaannya. Ini membutuhkan pengalaman.

Jadi secara pasti, selesaikan semuanya, mereka belajar dari kesalahan Anda. Saya tidak bisa bersikeras: DAPATKAN HAL-HAL YANG DILAKUKAN !

deadalnix
sumber
Bagus ... Jawaban luar biasa * dan sesuatu yang saya mengerti - saya mengerti perlunya memahami topik 'pemrograman' secara keseluruhan, bukan masing-masing topik yang Anda sebutkan. Saya tidak terlalu khawatir tentang mencari pekerjaan di lapangan karena saya memiliki daftar gaji yang baik mengelola sebuah situs e-commerce yang pasti saya senang untuk yang dapat diperkirakan. Ketertarikan saya pada pemrograman saya diklasifikasikan sebagai hobi serius, meskipun saya ingin menggunakannya untuk meningkatkan alur kerja saya dan orang lain di tempat kerja.
Anonim
Menambahkan suntingan untuk membuat segalanya lebih jelas sebagai sudut pandang pemula.
deadalnix
4

Apa yang membedakan programmer baik dari yang buruk adalah kemampuan mereka untuk memprogram dalam bahasa APA PUN. Seperti yang telah dicatat oleh poster lain, mengetahui bahasa berorientasi objek yang signifikan akan memberi Anda alat untuk membuat program yang hebat dan diminati.

Juga jika Anda masih di sekolah, pastikan Anda mengambil beberapa kelas menulis. Insinyur dan programmer terbaik juga adalah orang-orang yang mengomunikasikan ide-ide mereka dengan baik.

Setelah Anda mulai bekerja, hal terbaik yang harus dilakukan untuk mencegah ketinggalan zaman adalah mengikuti tren saat ini. Jangan takut untuk meninggalkan pekerjaan untuk pekerjaan lain jika mereka tidak menggunakan teknologi saat ini atau memiliki proses yang buruk dll. Hal terburuk yang dapat Anda lakukan untuk karir Anda adalah mengambil pekerjaan yang membuat Anda bekerja dengan teknologi lama atau proses yang lemah.

Bill Leeper
sumber
Saya menghargai pengetahuan yang baik tentang konsep pemrograman sangat penting untuk menjadi baik dalam game ini, tetapi memiliki pengetahuan tentang sintaks bahasa aktual / perpustakaan standar dan apa yang masih belum terbukti penting untuk memanfaatkan semua fitur bahasa (jika perlu). Sayangnya saya masih di sekolah, saya bekerja - meskipun seperti yang saya katakan di komentar sebelumnya, saya dibayar cukup baik sehingga saya tidak terlalu khawatir tentang aspek itu. Terima kasih atas jawabannya. =)
Anonim
4

Jawaban dari @deadalnix bagus. Saya ingin menambahkan tiga hal:

  1. informasi yang dapat digunakan kembali berasal dari tengah, bukan ekstrem. Minsky menyajikan ini secara terperinci dalam bukunya, Society of Mind, jadi saya akan meringkasnya sebagai: lapisan atas terlalu dekat dengan solusi spesifik sehingga tidak dapat diterapkan pada masalah berikutnya, sedangkan lapisan bawah terlalu dekat dengan platform khusus untuk banyak dari itu berlaku untuk masalah selanjutnya. Lapisan tengah adalah tempat informasi yang dapat digunakan kembali ditemukan - algoritme, pola, taksonomi, taktik, strategi, teknik, organisasi, protokol, dan lain-lain yang umumnya berguna untuk menyelesaikan masalah serupa terlepas dari domain (lapisan atas) atau platform (lapisan bawah) ). Catatan: lapisan ini tidak ada hubungannya dengan arsitektur 3-tier, kita berbicara semantic masalah-ruang / solusi-ruang di sini.
  2. Anda tidak akan tahu apa yang umum / umum / dapat digunakan kembali sampai Anda telah melihat setidaknya dua contohnya. Jadi, pelajari bagaimana Windows bekerja secara internal, kemudian pelajari bagaimana linux / unix bekerja secara internal, dan bandingkan keduanya. Hal-hal umum dapat digunakan kembali. Hal-hal yang berbeda adalah keputusan desain, yang juga dapat menghasilkan wawasan yang dapat digunakan kembali.
  3. untuk situasi atau masalah apa pun, pikirkan bagaimana Anda dapat mengimplementasikan solusi, kemudian membandingkan solusi kursi Anda dengan solusi yang sebenarnya, dan mencoba memahami alasan yang mungkin di balik perbedaan.
Steven A. Lowe
sumber
Tambahan yang bagus!
deadalnix
2

Karena Anda berada di awal, saya akan mengatakan hanya belajar bahasa, tidak masalah yang mana. Kesulitannya bukan dalam bahasa (sintaksis) itu sendiri, tetapi dalam memahami konsep; dan konsep pemrograman umum ini berlaku untuk semua bahasa pemrograman, jadi mempelajari bahasa kedua dan ketiga dan keempat Anda akan jauh lebih mudah.

Jadi, pada awalnya jangan terlalu banyak berpikir tentang menjadi 'bukti masa depan'. Namun, saat Anda maju, cobalah untuk menjadi mahir dalam bahasa yang sangat berbeda satu sama lain. Pada dasarnya, (seperti yang Anda katakan), Anda harus terbiasa dengan bahasa tingkat rendah (-ish) seperti C / C ++, bahasa pemrograman tingkat tinggi seperti Java dan juga bahasa scripting (Python, Ruby, dll). Jika Anda ingin masuk ke hal-hal yang benar-benar canggih, Anda juga harus tahu Assembly.

Tetapi jangan terlalu menekankan diri Anda tentang hal ini sekarang. Belajar program butuh bertahun-tahun. Untuk saat ini, pilih saja bahasa seperti Java atau C # atau apa pun dan lakukan. :)

Paul
sumber
Saya suka 'memilih satu' dan mengambil sikap itu ... Saya mungkin akan mengadopsinya. Anda dapat memilih satu bahasa tingkat rendah (C), satu tingkat tinggi (Jawa) dan satu bahasa skrip (Python) dan mempelajari ketiganya secara bersamaan?
Anonim
Apakah Anda baru memulai pemrograman? Maka jangan belajar lebih dari satu bahasa pada satu waktu, itu hanya akan membuat Anda bingung. Apa yang perlu Anda pelajari di awal adalah konsep, bukan bahasa. Anda hanya harus pindah ke bahasa baru saat diminta. Sebagai contoh, saya baru-baru ini merasakan kebutuhan untuk masuk ke bahasa scripting, dan itu karena saya memutuskan untuk membuat game saya bisa ditulis dengan Python.
Paul
Saya tidak akan mengatakan baru mulai - Saya sudah tahu html / css selama bertahun-tahun (meskipun mereka tidak benar-benar memenuhi syarat / semacam tidak relevan) dan telah membangun situs web PHP / MySQL selama beberapa bulan. Pengembangan web yang bisa saya 'dapatkan' dengan, pengembangan perangkat lunak yang saya tangani. Saya akan memperhatikan apa yang Anda katakan.
Anonim
If you want to go into the really advanced stuff you must also know Assembly- Anda dapat melakukan ini di tingkat mana pun, tantangannya hanya berbeda.
sixtyfootersdude
1

Apakah saya benar dalam berpikir bahwa memiliki pengetahuan yang kuat tentang C / C ++ untuk logika back-end / pemrograman tingkat rendah dan sejenisnya, dikombinasikan dengan bahasa yang sangat portabel seperti Java untuk GUI dan seterusnya, akan menjadi dasar yang baik untuk pengembangan perangkat lunak yang akan terbukti bermanfaat pada sebagian besar sistem?

Saya berbicara tentang PC desktop, tablet, ponsel.

Tidak. Tidak ada yang akan membantu.

Pengetahuan yang kuat tentang struktur data dan algoritma - independen dari bahasa pemrograman tertentu - lebih berharga daripada "pemrograman tingkat rendah dan sejenisnya".

"Bahasa yang sangat portabel seperti Java" sama portabelnya dengan C dan tidak membantu. Hal Besar Berikutnya akan sangat berbeda dari bahasa-bahasa ini sehingga Java super-portable Anda akan menjadi liabilitas, bukan aset.

Mac OS (desktop, tablet, dan telepon) semuanya dilakukan di Objective C. Itu mungkin tempat untuk memulai.

Windows (desktop, tabel, dan telepon) semuanya dilakukan dalam C #. Itu mungkin tempat untuk memulai.

S.Lott
sumber
Saya membandingkan Java dengan C karena keduanya merupakan bahasa portabel - dengan Java menjadi level rendah dan level tinggi masing-masing, yang agak benar ... Seperti yang Anda katakan sendiri, Mac OS = Obj-C, Windows = C #, yang merupakan di mana saya tidak ingin berspesialisasi dalam satu dan memotong opsi saya, atau keduanya dan menjadi 'master of none' jika Anda mengetahui maksud saya. Saya menghargai apa yang Anda katakan, tetapi pengetahuan yang kuat tentang struktur data dan algoritma tanpa pengetahuan tentang bahasa pemrograman sama tidak berguna dengan pengetahuan tentang bahasa pemrograman tanpa yang terakhir.
Anonim
@ Chris Bridgett: Anda benar-benar salah paham. Ada dasar-dasar universal, dan bahasa pemrograman juga tidak. Pertama, pelajari dasar-dasarnya. Kemudian, bahasa (atau OS) hanya membekukan pada kue. Fundamental adalah kue dan bukti masa depan.
S.Lott