Saya akan memulai gelar keamanan informasi 4 tahun di Purdue. Tingkat tidak memerlukan kursus pemrograman. Jadi satu-satunya waktu saya dapat mengambil satu adalah pilihan sesekali. Jadi sebagian besar pembelajaran saya akan saya lakukan sendiri. Pada awal tahun SMA saya, saya memutuskan untuk sepenuhnya beralih ke Linux. Sejauh ini saya telah mempelajari beberapa hal Linux dan keamanan. Namun, saya juga percaya bahwa penting bagi saya untuk juga belajar beberapa bahasa pemrograman.
Pada dasarnya saya berencana belajar memprogram berdampingan dengan mempelajari cara menggunakan Vim. Jadi kemungkinan besar akan menjadi proses yang lambat. Pada akhirnya saya pikir itu akan sia-sia. Seperti yang saya katakan, saya akan masuk ke keamanan, jadi saya sebagian besar akan membuat aplikasi yang berhubungan dengan keamanan, yang sebagian besar akan terkait dengan jaringan. Saya juga ingin mulai mengembangkan aplikasi Android, tetapi itu akan menjadi jalan nanti.
Dengan itu saya punya beberapa ide. Saya sedang berpikir untuk memulai dengan JavaScript, karena ini adalah lintas platform, dan saya telah melihatnya disarankan sebelumnya. Saya juga sudah banyak mendengar tentang Ruby atau bisa menggunakan rute Linux alami dengan C. Arah apa yang harus saya tempuh?
Anda akan menemukan bahwa setiap orang akan merekomendasikan bahasa favorit mereka. Bahasa favorit saya adalah Perl sehingga itulah yang saya rekomendasikan. :) Namun, di luar preferensi pribadi saya, ada beberapa alasan bagus mengapa Anda harus mempertimbangkan untuk menggunakan perl:
Pertama, perl adalah bahasa tujuan umum yang bagus. Sangat mudah untuk memulai dalam perl dengan menulis skrip sederhana untuk melakukan hal-hal yang sama yang Anda lakukan dalam skrip shell, seperti memanipulasi file dan membuat keputusan berdasarkan input pengguna. Ini memberikan pengantar yang sangat mudah dan bertahap untuk ide-ide umum pemrograman. Perl sudah ada cukup lama sehingga ada banyak sumber daya (buku dan situs web) untuk memulai.
Kedua, perl adalah bahasa yang sangat kuat dan ekspresif yang mendukung semua fitur pemrograman modern. Saya telah menggunakannya selama lebih dari lima belas tahun dan saya masih belajar cara-cara baru untuk melakukan sesuatu dengan lebih efisien. Misalnya, jika Anda ingin menjelajahi pemrograman berorientasi objek, perl memiliki itu (terutama melalui Moose ).
Ketiga, perl hadir dengan kekuatan yang hampir tak terbatas dan fleksibilitas repositori add-on resminya, CPAN . Misalnya, untuk mengikuti gagasan menulis perangkat lunak keamanan, katakan Anda ingin mengembangkan semacam pemindai keamanan jaringan kustom. Alih-alih menulis semuanya sendiri, Anda bisa mulai dengan menggunakan NMAP :: Scanner sebagai mesin pemindaian, dan kemudian menulis tweak Anda sendiri dan perbaikan di atas itu.
Akhirnya, jika Anda ingin menjelajahi pemrograman web, Perl juga memilikinya. Salah satu cara modern populer untuk menulis perangkat lunak web di Perl adalah Catalyst , yang menyediakan kerangka kerja web MVC modern untuk dengan cepat mengembangkan segala jenis aplikasi web.
Dengan menggabungkan semua itu, keunggulan perl adalah memungkinkan Anda untuk mulai menulis skrip dan program baris perintah kecil, dan secara bertahap berkembang menjadi penulisan aplikasi modern berfitur lengkap. Tentu saja, harga dari fleksibilitas ini adalah kompleksitas. Terserah kepada Anda untuk belajar dan belajar bagaimana melakukan hal-hal dengan cara yang benar, perl tidak menerapkan praktik-praktik yang baik seperti bahasa lainnya. Saya pribadi menyukai kebebasan ini, terutama ditambah dengan semua sumber daya hebat di web untuk mempelajari cara menggunakan perl.
sumber
Tiga bahasa akan menggantikan Anda. Dalam mengurangi urutan kepentingan (yaitu, yang pertama adalah yang paling penting):
sumber
script language
, sukapython
atauPHP
.Anda harus belajar beberapa bahasa. Saya akan menyarankan mulai dengan Python. Ini sangat direkomendasikan untuk mudah dipelajari dan untuk menjadi sangat berguna, banyak bahan belajar mandiri yang sangat baik tersedia secara gratis, dan saya mengumpulkannya banyak digunakan oleh para profesional keamanan TI. Hampir setiap kali saya melihat kode demonstrasi pos keamanan pro, itu Python.
sumber
Apakah saya satu-satunya yang berpikir OMG !!!! pada saat ini?
Saya akan mengatakan demikian. Meskipun Anda tidak benar-benar berharap untuk menjadi programmer yang mahir, Anda mungkin memerlukan keterampilan yang dibutuhkan untuk mensimulasikan / menciptakan kembali serangan dan memahami bagaimana proses pemrograman bekerja. Anda juga akan memerlukan keterampilan untuk menganalisis data, dan mengekstrak informasi dari sumber massal (seperti log). JimB telah menyebutkan bash - dan walaupun Anda pasti akan menggunakan ini - hanya perlu beberapa jam untuk mempelajari bagian-bagian penting. Sebenarnya satu-satunya tempat Anda pernah melihat bash adalah pada sistem Linux - tetapi cangkang lainnya sangat mirip.
Saya akan merekomendasikan belajar awk dan / atau Perl untuk mengolah data. Jangan repot-repot tentang persyaratan apa pun untuk mencentang kotak berorientasi objek - tapi saya akan merekomendasikan melihat langauges non-prosedural juga.
Belajar C juga akan memaparkan Anda pada banyak informasi tentang bagaimana kode berubah menjadi program yang dapat dieksekusi (kompilasi hanya satu langkah dalam proses yang sangat kompleks).
Pilihan yang jelas untuk seseorang yang tertarik dengan pengembangan Android / seluler adalah java - tetapi java berusaha sangat keras untuk melindungi pengembang agar tidak berurusan dengan realitas operasi dan protokol - ini adalah pengalaman saya bahwa di sinilah Anda mendapatkan masalah keamanan dengan Java aplikasi. yaitu mungkin membantu Anda mencapai tujuan akhir Anda, dan itu akan terlihat bagus di CV Anda tetapi jangan berharap belajar Java untuk menambah banyak pengetahuan keamanan Anda.
sumber
Saranku:
bash
(dan sejenisnya) bukan bahasa pemrograman tujuan umum. Meskipun dimungkinkan untuk menyelesaikan beberapa skrip canggih dibash
dalamnya bukan cara terbaik untuk belajar pemrograman secara umum. Ini adalah cara paling alami untuk menyelesaikan tugas-tugas administrasi sistem yang terutama berputar di sekitar menjalankan program lain, menangani file data dan direktori mereka dan mengatur input dan output ke dan dari mereka. Jikabash
palu, sisihkan untuk masalah yang benar-benar terlihat seperti paku. Belajar melakukan apa saja yang non-sepelebash
akan jauh lebih mudah jika Anda mempelajari beberapa himpunan bagian yang sangat kecilsed
danawk
(karena manipulasi stringbash
sebagian besar diilhami oleh sintaks operasi yang sama dalam bahasa "kecil" ini).Saya sarankan Anda membaca teks pengantar pada C dan menghabiskan beberapa waktu menjalankan
strace
danltrace
perintah pada beberapa perintah utilitas sederhana sepertils
danmkdir
dan/bin/echo
lain - lain (Sebenarnya hari ini saya akan menyarankanltrace -S
sebagai penggantistrace
tetapi terjun ke dalam output dari kedua perintah dan ke yangltrace
output sebagai ditambah dengan-S
opsi akan sangat pendidikan).C adalah bahasa pemrograman utama di mana kernel Linux dan libc GNU ditulis. (Bagian kecil dalam perakitan). Hampir semua program pada sistem Linux (atau UNIX-like lainnya) dihubungkan dengan C library (libc). Interpreter Perl dan Python primer (dan sebagian besar bahasa scripting lainnya) juga ditulis dalam C. Program-program ini (kernel, pustaka sistem umum dan berbagai penerjemah bahasa scripting) semuanya ditulis oleh programmer C karena desain dan fitur-fiturnya sangat dipengaruhi. oleh implementasi yang mendasarinya. Jadi, pemahaman yang lebih mendalam tentang semua ini pada akhirnya memerlukan pemahaman C. Anda tidak perlu tahu apa-apa tentang C ++ atau Java untuk memahami pemrograman pada tingkat ini. (Masing-masing mungkin menarik dan perlu tergantung pada karier Anda,
Jadi, jika Anda setuju dengan premis saya sejauh ini, kami telah merebusnya menjadi pilihan antara Perl dan Python.
Di sinilah perang api yang sebenarnya dimulai.
Saran saya adalah untuk fokus pada Python (2.x) terlebih dahulu. Python memiliki sintaks yang relatif sederhana dan konsisten. Anda dapat mempelajari dasar-dasar sintaksis Python dalam beberapa jam dan itulah sebagian besar sintaksis yang pernah Anda temui. Hanya ada beberapa fitur (daftar pemahaman, ekspresi generator, dekorator) yang merupakan kerutan pada sintaksis dasar. Jadi sebagian besar usaha Anda dalam mempelajari Python akan dikhususkan untuk mempelajari pustaka standar yang luas dan mencoba menemukan cara "terbaik" untuk menggunakannya (dan mencari tahu yang merupakan set pengecualian khusus yang layak ditangani untuk membuat program Anda kuat) dan, yang paling penting, dalam mempelajari konsep-konsep yang mendasarinya.
Saya pikir bahwa perpustakaan Python yang luas dan sintaksis yang relatif sederhana memang memiliki dua kelemahan berbeda.
Pertama, ketika Anda belajar bagaimana melakukan sesuatu dalam level yang sangat tinggi dengan Python, Anda mungkin merasa harus bekerja di level yang lebih rendah untuk menjadi membosankan. Tempat saya bekerja Perl adalah standarnya. Saya membuat prototipe pekerjaan saya di Python, di mana saya tahu saya bisa membuatnya bekerja lebih cepat dan andal di Perl; maka saya takut harus melalui dan port ke Perl untuk rekan-rekan saya. (Saya cukup baik di Perl tahun sebelum saya pernah menggunakan Python --- jadi itu bukan masalah keakraban sederhana).
Kerugian lainnya adalah kadang-kadang sulit untuk menemukan cara tingkat tertinggi untuk menyelesaikan tugas yang diberikan dengan Python. Misalnya untuk mengambil halaman web Anda mungkin awalnya mencoba melakukannya dengan soket tingkat rendah ... yang akan berfungsi. Namun, Anda akan menduplikasi sedikit kode yang sudah dapat Anda temukan termasuk di dalam
urllib
dan / atauurllib2
modul. Fakta bahwa pustaka standar, seperti 2.7.1, termasuk keduanya membuat poin saya. Jika memungkinkan, pengelola Python telah memperluas modul dan API yang lebih lama secara transparan; Namun ada banyak kasus di mana Python mempertahankan dua atau tiga modul di mana ekstensi transparan tidak dimungkinkan karena alasan tertentu. (Misalnya lain Anda bisa melihat pilihan untuk parsing opsi baris perintah:argparse
,optparse
, dangetopt
. Tidak ada salahnya menulis program Anda menggunakangetopt
(yang tertua). Untuk utilitas yang sangat sederhana dengan sedikit opsi dan konvensi pemanggilan yang kaku (hanya digunakan oleh sekelompok kecil orang, misalnya) maka tidak ada yang salah dengan berjalansys.argv
sendiri. Namun, biasanya perlu membaca dokumen dengan hati-hati dan mengikuti tautan di bagian bawah modul tingkat yang lebih tua atau lebih rendah yang menggambarkan fitur tingkat yang lebih baru atau lebih tinggi yang tersedia.Saran saya didasarkan pada pendapat saya bahwa Anda ingin fokus pada konsep-konsep yang lebih dalam dan tidak perlu menghabiskan banyak waktu dan upaya Anda untuk masalah khusus sintaksis dan bahasa. Memahami kapan harus menggunakan subproses, versus utas, atau fitur multi-pemrosesan yang disertakan dengan Python relatif tidak ada hubungannya dengan bahasa dan segala sesuatu yang berkaitan dengan kemahiran pemrograman terlepas dari bahasa. (Pada titik di mana Anda dapat memahami argumen tentang model yang didorong peristiwa Twisted dengan membandingkannya dengan threading dan multi-pemrosesan maka Anda mungkin telah menguasai Python dan siap untuk memprogram dalam bahasa apa pun).
Argumen balasan, bagi Perl, sederhana dan praktis. Ada beberapa pekerjaan lagi di luar sana yang akan memanggil, khususnya, untuk keterampilan dengan Perl. Perl adalah bahasa yang kuat dan memiliki perpustakaan yang sangat luas. (Inti dari Perl yang didistribusikan dengan sebagian besar sistem Linux mencakup cakupan fungsionalitas yang lebih kecil daripada pustaka Python standar; diasumsikan bahwa Anda akan menginstal sejumlah besar paket tambahan dari distribusi Anda atau melalui CPAN --- Comprehensive Perl Archive Jaringan). (Sebaliknya ada lebih sedikit modul dan paket Python yang harus saya ambil secara terpisah ... yang tersedia dari PyPI --- Indeks Paket Python).
Jadi, jika Anda mempelajari Perl Anda akan memiliki kaki untuk mencari pekerjaan, terutama pekerjaan sysadmin, dalam jangka pendek. Namun, sintaksis Perl adalah ... yah ... dalam kata-kata beberapa penggemar sendiri ... "patologis eklektik!" Perl bisa sangat singkat dan kodenya diisi dengan sedikit tanda baca. Mereka yang menyukainya akan berdebat tanpa henti bahwa itu "mudah" dan masuk akal --- dan akan memiliki kesempatan tanpa akhir untuk melakukannya di forum yang dipenuhi dengan kebingungan tentang bagaimana tepatnya potongan kode yang diberikan ditafsirkan. Sintaks dan bahasa yang digunakan dalam dokumentasi dan oleh mereka yang mendukungnya di forum publik diberi nuansa sampai pada titik di mana Anda dapat menghabiskan banyak upaya untuk mempelajarinya.
Sekarang, tolong sadarilah bahwa komentar sebelumnya ini adalah subyektif dan bias. Mungkin Anda akan mencoba Perl dan menganggapnya sintaks untuk menjadi intuitif dan menyenangkan. Jika demikian, lebih banyak kekuatan untuk Anda. Namun, saya pribadi menemukan bahwa pemahaman saya tentang keistimewaan Perl meluruh dengan sangat cepat. Dasar-dasar yang saya pertahankan tetapi saya merasa itu adalah perjuangan setiap kali saya harus kembali ke sana untuk lebih dari beberapa baris kode.
Ada banyak bahasa lain yang akan Anda pelajari, Java, Lisp and Scheme, TCL, Scala, dan sebagainya. Namun, saya sarankan mulai dengan yang menawarkan keseimbangan terbaik antara utilitas dan kesederhanaan.
sumber
Di dunia Linux, Anda harus tahu dua hal dasar:
Regular Expression
. Ini suatu keharusan.RegEx
adalah "bahasa" universal, setelah Anda tahu cara menggunakan ekspresi reguler, hidup Anda akan jauh lebih mudah :-)quick & dirty
" sangat umum di dunia Linux. Jika Anda dapat melakukan pekerjaan Anda, tidak peduli seberapa buruk solusinya, Anda tetap memiliki pekerjaan Anda.Jadi, jika Anda ingin belajar bahasa di Linux, Anda HARUS memilih
script language
, sepertipython
,PHP
, atau bahkanbash scripting
.Dan, rekomendasi saya adalah
PHP
. Sederhana dan jelek. Ini memiliki manual online yang terperinci . Ini memilikiRegEx
dukungan yang baik . Itu saja.sumber
Anda dapat melakukan hampir semua tugas dalam hampir semua bahasa, sehingga pilihan yang tepat sebagian besar ditentukan oleh masalah yang Anda selesaikan.
Pasti bermanfaat untuk mengetahui bahasa dari kategori berikut:
Saya akan berusaha untuk belajar C / C ++, karena ini memungkinkan tumpukan korupsi dan akses memori langsung. Ini penting jika Anda ingin bereksperimen dengan masalah keamanan. Banyak bahasa memiliki sintaks mirip C (termasuk JavaScript), jadi ini adalah batu loncatan yang baik.
Jika Anda banyak bekerja di shell, yang saya kira Anda sedang belajar vim, Anda akan berakhir mempelajari skrip dasar shell sebagai efek samping. UNIX Power Tools adalah buku yang bagus untuk mempelajari hal-hal yang lebih maju; Saya tidak tahu apakah masih diterbitkan.
PHP juga bisa menjadi bahasa yang baik untuk dipelajari; keuntungan utama yang ditawarkan pemrogram baru adalah banyak fungsi yang dibangun, daripada di perpustakaan yang harus Anda tautkan (yang bukan tugas kompleks). Karena itu, menjelajah dokumen utama akan mengajarkan Anda tentang banyak hal.
sumber
Pertama, beberapa saran negatif:
Jangan lakukan itu. Temukan editor yang benar-benar nyaman. Mempelajari bahasa dan editor sama sulitnya dengan mempelajarinya secara berurutan (jelas editor harus duluan :-))
Aplikasi keamanan terkait jaringan? C adalah pilihan yang tidak cerdas di sini. Anda perlu mengakses jaringan pada level API sistem, yang berarti C adalah cara untuk maju. Tentu saja ini tidak berarti bahwa semuanya harus ada di C - pustaka C +
$favorite-high-level-language
pembungkus mungkin menghemat kerepotan terkait C di bagian yang tidak perlu C.Saya yakin itu disarankan dalam konteks yang berbeda dari milik Anda. JavaScript memiliki kekuatannya tetapi itu bukan bahasa tujuan umum yang baik, belum. JS tidak memiliki perpustakaan standar yang sebanding dengan yang tersedia untuk C, Python, Perl, Ruby, Java & company.
Omong-omong
$favorite-high-level-language
- saran saya adalah menggunakan Python. Antarmuka yang baik dengan C, itu kapal dengan banyak perpustakaan yang bermanfaat dan memiliki lebih banyak perpustakaan yang tersedia sebagai tambahan.sumber
Tidak ada yang salah dengan mempelajari Javascript tetapi hanya berjalan di bawah browser, jadi pemrograman Anda akan terbatas pada aplikasi terkait halaman web.
Mungkin ada banyak jawaban untuk 'apa bahasa pemrograman yang baik untuk memulai' karena ada bahasa. Nilai pasokan saya adalah bahwa Anda dapat melakukan lebih buruk daripada memulai dengan skrip shell dasar, hanya melihat apa yang dapat Anda lakukan untuk mengotomatisasi tugas tanpa menggunakan apa pun di luar shell, kemudian memperluas menggunakan Perl, atau bahasa serupa yang tumbuh dari kebutuhan untuk melakukan tugas yang lebih kompleks daripada yang mampu dilakukan shell, setelah itu, dan jika Anda benar-benar tertarik, itu hanya akan memakan waktu beberapa minggu, mulailah menggunakan C atau turunan.
sumber
Rekomendasi saya? Hmmm. Nah, Anda mungkin harus memutuskan saat Anda pergi. Untuk rentang sehat, menyeluruh, Anda bisa pergi ke rute gelar CS biasa, mungkin tidak dalam urutan ini.
(1) C / C ++ - Anda bisa menurunkan barang yang Berorientasi Objek, dan setidaknya Anda akan mencobanya. C ++ adalah standar 'profesional'. (2) Majelis (hanya untuk sedikit - ini akan membantu Anda memahami cara kerja prosesor, memori, dll. - Anda tidak harus menikah dengannya.) (3) Python / Perl / Bash - Dapatkan ini scripting bahasa ke bawah, mereka akan sangat berguna untuk tingkat Linux Anda (4) PHP / Ruby, MySQL dan HTML - Dapatkan pemrograman Web Anda! Anda akan memahami seluruh proses interaksi server-klien, tingkat komputasi yang lebih tinggi.
Perlu konsep yang bermanfaat? AI, jaringan saraf. Ini akan melengkapi Anda.
Anda dapat memilih salah satu dari ini untuk dilakukan atau menyentuh semuanya. Bahasaku? Semua dari mereka, sesuai kebutuhan, tetapi saya sudah pemrograman sejak tahun 1984, dan memiliki gelar CS, game tertulis, dan semua jenis aplikasi sistem tertanam. Itu yang saya lakukan. Anda perlu mencari tahu siapa Anda dan apa yang ANDA lakukan. Pastikan Anda bersenang-senang.
Nikmati!
sumber
oops, salah membaca info-keamanan untuk sistem info ... oh well, sebagian besar ini masih berlaku
Jawa
Jujur, jika Anda bekerja di Linux dan mengambil kursus pemrograman awal di Jawa, dan kemudian mungkin menindaklanjuti dengan beberapa program pemrograman lagi, alat-alat lain seperti Bash sed / awk, dll ... harus semacam jatuh ke tempatnya. Jika Anda benar-benar masuk ke sistem, Anda mungkin mengambil beberapa C nanti, tapi saya tidak akan mengatakan itu dalam permintaan besar dan saya bahkan tidak akan mengatakan itu adalah persyaratan untuk menjadi seorang pria sistem - kecuali jika Anda benar-benar ke internal.
YMMV
sumber