Bahasa apa untuk memulai di Linux? [Tutup]

19

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?

JD Davis
sumber

Jawaban:

53

Pertama dan terpenting:, bashbersama dengan utilitas baris perintah umum. Bashadalah antarmuka pengguna default untuk sistem operasi, dan banyak program pada sistem Linux akan dibungkus dengan skrip shell pada tingkat tertentu. Ini dapat menjadi unik, memiliki beberapa keanehan, dan seringkali tampak benar-benar bodoh, tetapi itu adalah sesuatu yang harus Anda tangani, jadi merasa nyaman dengan itu. Alat-alat standar suka grep, diff, head, tail, sort, uniq, dan sebagainya, akan sangat membantu tidak hanya dengan shell scripting, tetapi dengan produktivitas Anda pada baris perintah.

Pelajari setidaknya beberapa c. Ini adalah level terendah dari sistem yang ditulis, dan itu akan memberi Anda pemahaman yang lebih baik tentang sistem secara keseluruhan.

Pilih bahasa tingkat tinggi yang Anda suka. Python, ruby, perl, java, Apa pun - selama Anda menikmatinya. Di sinilah Anda benar-benar mulai belajar cara "memprogram", dan mulai sekarang akan lebih mudah untuk mengambil lebih banyak bahasa, dan terus belajar .

JimB
sumber
2
Saya setuju dengan semua poin yang tercantum di sini.
Joe
6
Jika Anda akan belajar bash maka Anda harus memasukkan belajar tentang awk, sed, head, tail, cut, tr, diff, grep, find, ps, netstat, tcpdump, sortir, uniq, dll, dll, dll.
jftuga
2
@ jftuga Setuju. Persentase besar dari perangkat saya adalah keterampilan untuk melakukan "ekstraksi dan integrasi data" - cara yang bagus untuk mengatakan "memanipulasi file teks yang diformat". Setelah Anda memahami pipeline, dan mengenal alat-alat umum, Anda tidak akan terbebas dari alur kerja perangkat lunak apa pun yang sudah diputar. Saya juga penggemar berat MS Powershell, yang berdiri di atas bahu Bash dalam banyak hal.
AndyN
@ jftuga - dicatat. Meskipun saya pikir ini penting, saya tidak berpikir seseorang yang baru di linux perlu khawatir tentang mempelajari senjata besar seperti sed / awk secara mendalam, tetapi mereka harus memiliki pemahaman yang cukup untuk dapat menguraikan kode yang ada jika mereka harus menjumpainya .
JimB
8
Setuju dengan semua, tapi saya akan merekomendasikan Python atas yang lain sebagai bahasa tingkat tinggi secara khusus karena telah menjadi bahasa tingkat tinggi yang paling umum untuk alat manajemen server. Anda akan mengalami jauh lebih sering daripada ruby ​​atau java. Perl juga umum karena sangat tua, jadi saya akan memilih yang berikutnya.
tylerl
10

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.

Phil Hollenback
sumber
Perl adalah bahasa scripting (terutama); dan sebagian besar OS diprogram dalam C.
Chris S
Tentu, tetapi saya tidak berpikir itu penting dalam konteks pertanyaan ini. Itu tidak terdengar seperti OP benar-benar ingin atau perlu belajar tentang pemrograman tingkat OS.
Phil Hollenback
Saya sarankan Perl adalah cara yang baik untuk menulis kode untuk aplikasi keamanan yang menargetkan sesuatu yang ditulis dalam bahasa lain (sering C) yang sudah Anda pahami. Oleh karena itu, jika perbedaan ini masuk akal, saya akan mengklasifikasikan Perl sebagai alat yang harus Anda pelajari untuk digunakan, alih-alih bahasa yang harus Anda pelajari (sepenuhnya) mengerti.
BMDan
6

Tiga bahasa akan menggantikan Anda. Dalam mengurangi urutan kepentingan (yaitu, yang pertama adalah yang paling penting):

  1. Kodesemu . Seringkali, implementasi yang Anda gunakan akan menjadi campuran dari setengah lusin bahasa dan alat, hanya beberapa yang akan Anda ketahui secara langsung. Namun, jika Anda tahu pola apa yang sedang diterapkan, Anda bisa mengetahui input apa yang diberikan pada sebuah karya dan output apa yang harus diberikan, mengujinya dalam pengecualian, dan mencari tahu apakah itu bagian yang melanggar.
  2. C . Baik atau buruk, inilah yang menjalankan semesta (Linux), dan memberi Anda pandangan yang cukup dekat dengan hal-hal yang dapat Anda pahami apa yang sebenarnya dilakukan oleh bahasa tingkat yang lebih tinggi (misalnya PHP). pass-by-reference, atau model utas Java).
  3. Hanya Tentang Apa Pun Kecuali C ++ . Bahasa fungsional seperti SQL atau, lebih baik lagi, Haskell, atau sesuatu yang tidak sesempurna C-ey — jika semuanya gagal, Java dapat bekerja untuk ini, tetapi masih sangat prosedural — dapatkan nilai tinggi di sini; idenya adalah untuk membungkus otak Anda dengan sesuatu yang benar-benar berbeda dari apa yang telah Anda lakukan sebelumnya sehingga Anda tidak dapat tidak menyadari keterbatasan dari apa yang telah Anda lakukan sebelumnya. Dalam hal utilitas semata, bash mungkin juga termasuk dalam daftar ini, tetapi jika Anda tidak memiliki dasar dalam hal lain, Anda hanya akan berakhir menulis C dengan sintaks bash daripada benar-benar menjelajahi kekuatannya.
BMDan
sumber
1
+1 untuk pseudocode. Saya suka kodesemu dalam komentar dan kemudian kode di sekitar komentar
sreimer
2
+1 untuk pseudocode dan "Apa pun selain C ++". Di dunia linux, Anda harus belajar setidaknya satu script language, suka pythonatau PHP.
yegle
2
Saya tidak tahu apakah kodesemu adalah rekomendasi yang bagus untuk pemula. Pseudocode akan dapat dimengerti setelah mempelajari sebagian besar bahasa gaya-c, jadi haruskah seseorang benar-benar berupaya mempelajari pseudocode itu sendiri? Belum lagi, tidak ada sintaks pseudocode tunggal, yang cenderung membingungkan pemula.
JimB
@ JimB: Poinnya adalah belajar berpikir secara logis, apa pun bahasanya. ERD, UML, dan sejenisnya adalah alat menara gading untuk melakukan ini, tetapi Anda tidak perlu mempelajari sesuatu yang formal. Idenya adalah belajar memetakan pemikiran Anda dan kemudian membandingkannya dengan hasil yang diharapkan. Ketika Anda menyadari bahwa, misalnya, database tidak memiliki cara (inheren) untuk mengetahui apa HTTP header dikirim sebagai bagian dari permintaan ke server Web, Anda dapat menghilangkan variabel dari pertimbangan. Demikian pula, ketika Anda menulis pseudocode untuk suatu fungsi, Anda sering menemukan casing edge dan corner Anda tidak akan sebaliknya.
BMDan
Saya setuju sepenuhnya, saya hanya berpikir bahwa menunjuk pemula ke "kodesemu" akan menyebabkan kebingungan, karena itu bukan hal formal. Kode pseudocode kebanyakan orang akan menjadi penggabungan dari bahasa c-style yang paling nyaman bagi mereka, ditambah beberapa sintaksis ad-hoc.
JimB
4

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.

bgvaughan
sumber
+1 untuk python, dan Python tidak hanya populer di dunia Linux.
xiao
4

Saya akan memulai gelar keamanan informasi 4 tahun di Purdue. Tingkat tidak memerlukan kursus pemrograman.

Apakah saya satu-satunya yang berpikir OMG !!!! pada saat ini?

Saya juga percaya akan penting bagi saya untuk juga belajar beberapa bahasa pemrograman

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.

symcbean
sumber
1
Kamu bukanlah satu - satunya. : -o
Keith
2

Saranku:

  • bash(dan sejenisnya) bukan bahasa pemrograman tujuan umum. Meskipun dimungkinkan untuk menyelesaikan beberapa skrip canggih di bashdalamnya 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. Jika bashpalu, sisihkan untuk masalah yang benar-benar terlihat seperti paku. Belajar melakukan apa saja yang non-sepele bashakan jauh lebih mudah jika Anda mempelajari beberapa himpunan bagian yang sangat kecil seddan awk(karena manipulasi string bashsebagian besar diilhami oleh sintaks operasi yang sama dalam bahasa "kecil" ini).
  • Untuk pemrograman tujuan umum di Linux Anda akan mendengar banyak argumen yang berapi-api. Dua pesaing terbaik adalah Perl dan Python . Ini adalah kedua bahasa scripting tingkat sangat tinggi yang bertujuan umum, yang memperlihatkan fungsionalitas tingkat rendah yang cukup untuk melakukan hampir semua operasi yang dapat diakses oleh setiap proses ruang pengguna di sistem Anda, dan dengan koleksi besar modul pra-tertulis dan perpustakaan yang tersedia.

Saya sarankan Anda membaca teks pengantar pada C dan menghabiskan beberapa waktu menjalankan stracedan ltraceperintah pada beberapa perintah utilitas sederhana seperti lsdan mkdirdan /bin/echolain - lain (Sebenarnya hari ini saya akan menyarankan ltrace -Ssebagai pengganti stracetetapi terjun ke dalam output dari kedua perintah dan ke yang ltraceoutput sebagai ditambah dengan -Sopsi 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 urllibdan / atau urllib2modul. 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 menggunakan getopt(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 berjalan sys.argvsendiri. 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.

Jim Dennis
sumber
1

Di dunia Linux, Anda harus tahu dua hal dasar:

  1. Regular Expression. Ini suatu keharusan. RegExadalah "bahasa" universal, setelah Anda tahu cara menggunakan ekspresi reguler, hidup Anda akan jauh lebih mudah :-)
  2. " 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, seperti python, PHP, atau bahkan bash scripting.

Dan, rekomendasi saya adalah PHP. Sederhana dan jelek. Ini memiliki manual online yang terperinci . Ini memiliki RegExdukungan yang baik . Itu saja.

yegle
sumber
2
Itu pasti deskripsi terbaik dari PHP yang pernah saya dengar ... Ketika Anda menghapus popularitas, tidak banyak yang tertinggal: P
Gordon Gustafson
Sedikit topik, tapi saya pikir alasan utama untuk popularitas PHP adalah banyak fungsi yang akan tersebar di banyak linker-library / paket dalam bahasa lain adalah standar dalam PHP (seperti bundel kebanyakan hal yang Anda perlukan di libc)
Phil Lello
1

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:

  • Bahasa yang dikompilasi (seperti C / C ++ / Java). C / C ++ adalah tempat yang baik untuk mengeksplorasi masalah keamanan dengan buffer overflows, stack corruption, dll.
  • Bahasa yang ditafsirkan (seperti PHP). Tempat yang bagus untuk menjelajahi masalah dengan variabel yang diketik secara longgar, dan tidak mendeteksi fungsi yang tidak ditentukan hingga Anda memanggilnya
  • Bahasa skrip (sh / bash / csh / ksh). Sangat berguna untuk menempelkan banyak utilitas shell yang berguna (lihat / bin & / usr / bin) secara bersamaan

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.

Phil Lello
sumber
1

Pertama, beberapa saran negatif:

Pada dasarnya apa yang saya rencanakan untuk dilakukan adalah belajar memprogram berdampingan dengan mempelajari cara menggunakan Vim.

Jangan lakukan itu. Temukan editor yang benar-benar nyaman. Mempelajari bahasa dan editor sama sulitnya dengan mempelajarinya secara berurutan (jelas editor harus duluan :-))

Seperti yang saya katakan saya akan masuk ke keamanan jadi saya akan membuat sebagian besar aplikasi yang berhubungan dengan keamanan. Sebagian besar akan terkait jaringan.

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-languagepembungkus mungkin menghemat kerepotan terkait C di bagian yang tidak perlu C.

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 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.

Rafał Dowgird
sumber
0

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.

blankabout
sumber
3
Hanya di browser? Bukan Lagi .
EEAA
Terima kasih, saya berdiri dengan benar, tetapi saya masih tidak akan merekomendasikan Javascript sebagai lingkungan belajar, untuk pemula, mendapatkan dukungan untuk versi non-browser akan menjadi mimpi buruk.
blankabout
2
Saya selalu berpikir ECMAScript adalah bahasa pemrograman dan Javascipt berada di atas ECMAScript untuk menyediakan fungsi yang berguna untuk memanipulasi DOM. Javascript untuk browser.
Jonathan Mayhak
0

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!

Scott Foulk
sumber
0

oops, salah membaca info-keamanan untuk sistem info ... oh well, sebagian besar ini masih berlaku

Jawa

  1. Harus ada kursus pemrograman tingkat pemula berbasis java yang akan diperhitungkan untuk gelar Anda. Selalu senang mendapatkan kredit untuk hal-hal yang Anda pelajari.
  2. Ini akan memberi Anda beberapa pertumbuhan karier jika Anda bosan menjadi seorang pria sistem ... atau jika perusahaan tempat Anda bekerja kemudian memutuskan bahwa sistem itu seperti pemanggang roti dan begitu juga orang-orang yang menjalankannya.
  3. Berorientasi pada objek
  4. Anda bilang ingin melakukan pengembangan Android. Itu berarti 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

MLH
sumber