Linux'ta başlamak için hangi dil? [kapalı]


19

Purdue'da 4 yıllık bilgi güvenliği diplomasına başlamak üzereyim. Derecesi herhangi bir programlama dersi gerektirmez. Yani bir tane alabileceğim tek zaman zaman zaman seçmeli. Bu yüzden öğrenmem çoğu kendi başıma olacak. Lise son sınıfımın başında tamamen Linux'a geçmeye karar verdim. Şimdiye kadar bazı Linux ve güvenlik şeyleri öğreniyorum. Bununla birlikte, birkaç programlama dili öğrenmenin benim için önemli olacağına inanıyorum.

Temel olarak Vim'in nasıl kullanılacağını öğrenerek yan yana programlamayı öğrenmeyi planlıyorum. Bu yüzden büyük olasılıkla yavaş bir süreç olacaktır. Sonunda buna değer olacağını düşünüyorum. Söylediğim gibi, güvenliğe giriyorum, bu yüzden çoğunlukla ağ ile ilgili olacak güvenlikle ilgili uygulamalar oluşturacağım. Ayrıca Android uygulamaları geliştirmeye başlamak istiyorum, ancak bu daha sonra yolda olacak.

Bununla birlikte birkaç fikrim var. JavaScript ile başlamayı düşünüyordum, çünkü çapraz platform ve daha önce önerdiğini gördüm. Ayrıca Ruby hakkında çok şey duyuyorum ya da C ile doğal Linux yoluna gidebilirim. Hangi yöne gitmeliyim?

Yanıtlar:


53

İlk ve en önemlisi: bashortak komut satırı yardımcı programlarıyla birlikte. Bashişletim sisteminin varsayılan kullanıcı arabirimidir ve Linux sistemindeki birçok program bir düzeyde bir kabuk betiğine sarılacaktır. İlginç olabilir, bazı deyimler vardır ve genellikle düpedüz aptal gibi görünür, ancak başa çıkmanız gereken bir şeydir, bu yüzden rahat olun. Standart araçlar sever grep, diff, head, tail, sort, uniq, vb, kabuk komut dosyası ile, ancak komut satırında sizin verimlilik ile sadece çok yararlı olacaktır.

En azından biraz öğrenin c. Sistemin en düşük seviyeleri yazılır ve sistemi bir bütün olarak daha iyi anlamanıza yardımcı olur.

İstediğiniz herhangi bir üst düzey dili seçin. Python, ruby, perl, java, Ne olursa olsun - sürece zevk olarak. Burası gerçekten "programlamayı" öğrenmeye başladığınız yerdir ve buradan itibaren daha fazla dil seçmek ve öğrenmeye devam etmek daha kolay olacaktır .


2
Burada listelenen tüm noktalara katılıyorum.
Joe

6
Eğer bash öğreneceğiz o zaman vs vs, sed, awk hakkında vs. sıralama kafa, kuyruk, kesme, tr, diff, grep, bulmak, ps, netstat, tcpdump, uniq, öğrenme içermelidir
jftuga

2
@jftuga Kabul etti. Araç setimin büyük bir yüzdesi, "veri çıkarma ve entegrasyon" yapma becerileridir. Boru hattını anladıktan ve ortak araçları tanımaya başladıktan sonra, önceden haddelenmiş herhangi bir yazılımın iş akışından etkilenmezsiniz. Ayrıca birçok açıdan Bash'ın omuzlarında duran büyük bir MS Powershell hayranıyım.
AndyN

@jftuga - not edildi. Bunların önemli olduğunu düşünmeme rağmen, linux için yeni birisinin sed / awk gibi büyük silahları derinlemesine öğrenmek konusunda endişelenmesi gerektiğini düşünmüyorum, ancak karşılaşacaklarsa mevcut kodu deşifre edebilmek için yeterli anlayışa sahip olmalılar. .
JimB

8
Herkese katılıyorum, ancak Python'u diğerlerine göre özellikle üst düzey bir dil olarak öneriyorum çünkü sunucu yönetim araçları için en yaygın üst düzey dil haline geldi. Yakut veya java'dan çok daha sık karşılaşacaksınız. Perl de çok yaygın çünkü çok eski, bu yüzden bir sonraki seçerdim.
tylerl

10

Herkesin sadece favori dilini tavsiye edeceğini göreceksiniz. En sevdiğim dil Perl, bu yüzden tavsiye ederim. :) Ancak, kişisel tercihimin ötesinde, perl kullanmayı düşünmeniz için bazı harika nedenler var:

İlk olarak, perl harika bir genel amaçlı dildir. Dosyaları yönetmek ve kullanıcı girdisine dayalı kararlar vermek gibi kabuk komut dosyalarında yaptığınız aynı şeyleri yapmak için basit komut dosyaları yazarak perl'e başlamak kolaydır. Bu, programlamanın genel fikirlerine çok kolay ve kademeli bir giriş sağlar. Perl bir süredir ortadadır, bu yüzden başlamak için birçok kaynak (kitap ve web sitesi) vardır.

İkincisi, perl, tüm modern programlama özelliklerini destekleyen inanılmaz derecede güçlü ve etkileyici bir dildir. On beş yılı aşkın bir süredir kullanıyorum ve hala işleri daha verimli bir şekilde yapmanın yeni yollarını öğreniyorum. Örneğin, nesne yönelimli programlamayı keşfetmek istiyorsanız, perl buna sahiptir (özellikle Moose aracılığıyla ).

Üçüncüsü, perl, resmi eklenti deposu CPAN'ın neredeyse sonsuz gücü ve esnekliği ile geliyor . Örneğin, güvenlik yazılımı yazma fikrini takip etmek için, bir tür özel ağ güvenliği tarayıcısı geliştirmek istediğinizi varsayalım. Tüm bunları kendiniz yazmak yerine, bir tarama motoru olarak NMAP :: Tarayıcı'yı kullanarak başlayabilir ve ardından bunun üzerine kendi ince ayarlarınızı ve geliştirmelerinizi yazabilirsiniz.

Son olarak, web programlamayı keşfetmek istiyorsanız, Perl'de de var. Perl'de web yazılımı yazmanın popüler bir modern yolu, her türlü web uygulamasını hızlı bir şekilde geliştirmek için modern bir MVC web çerçevesi sağlayan Catalyst'tir .

Tüm bunları bir araya getirerek, perl'in avantajı, küçük komut satırı komut dosyaları ve programları yazmaya başlamanıza ve yavaş yavaş tam özellikli modern uygulamalar yazmaya başlamanıza izin vermesidir. Tabii ki, bu esnekliğin fiyatı karmaşıklıktır. İşleri doğru şekilde nasıl yapacağınızı öğrenmek ve öğrenmek size kalmış, perl diğer dillerin yaptığı gibi iyi uygulamaları zorlamıyor. Ben şahsen bu özgürlüğü seviyorum, özellikle perl kullanmayı öğrenmek için web üzerindeki tüm büyük kaynaklarla birlikte.


Perl (öncelikle) bir betik dilidir; ve işletim sisteminin çoğu C'de programlanmıştır
Chris S

Tabii, ama bu soru bağlamında bunun çok önemli olduğunu düşünmüyorum. OP'nin işletim sistemi düzeyinde programlama hakkında gerçekten istediği veya öğrenmesi gerektiği gibi görünmüyor.
Phil Hollenback

Perl'in, zaten anladığınız başka bir dilde (genellikle C) yazılmış bir şeyi hedefleyen bir güvenlik uygulaması için kod yazmanın iyi bir yolu olduğunu öneririm. Bu nedenle, bu ayrım mantıklıysa, Perl'i (tamamen) anlamayı öğrenmeniz gereken bir dil yerine, kullanmayı öğrenmeniz gereken bir araç olarak sınıflandırırdım.
BMDan

6

Üç dil sizi iyi durumda tutar. Azalan önem sırasına göre (yani birincisi en önemlisidir):

  1. Sahte kod . Çoğu zaman, birlikte çalıştığınız uygulama, yalnızca bir kısmı doğrudan bileceğiniz yarım düzine dil ve aracın bir birleşimi olacaktır. Bununla birlikte, hangi desenin uygulandığını biliyorsanız, bir parçaya hangi girdinin verildiğini ve hangi çıktıyı vermesi gerektiğini, dışlamada test edin ve kırılan parça olup olmadığını anlayabilirsiniz.
  2. C . Daha iyisi ya da daha kötüsü, (Linux) evrenini yöneten şeydir ve üst düzey dillerden herhangi birinin gerçekte ne yaptığını anlayabileceğiniz şeylere yeterince yakın bir görünüm sağlar (örneğin PHP'nin referansla veya Java'nın iş parçacığı modeli).
  3. C ++ hariç hemen hemen her şey . SQL ya da daha iyisi Haskell gibi işlevsel bir dil ya da C-ey kadar olmayan bir şey - eğer her şey başarısız olursa, Java bunun için çalışabilir, ancak yine de çok prosedüreldir - burada yüksek notlar alın; fikir, beyninizi, daha önce yaptığınız şeylerden yeterince farklı bir şeyin etrafına sarmaktır, ancak daha önce yaptığınız şeylerin sınırlamalarını fark edemezsiniz. Saf yarar açısından, bash muhtemelen bu listeye aittir, ancak başka bir şeyde temeliniz yoksa, C'yi gerçekten gücünü keşfetmek yerine bash sözdizimi ile yazmanız yeterlidir.

1
Sahte kod için +1. Ben yorumlarda pseudocode ve sonra yorum etrafında kod gibi
sreimer

2
Sahte kod için +1 ve "C ++ dışında başka bir şey". Linux dünyasında, veya script languagegibi en az bir tane öğrenmelisiniz . pythonPHP
yegle

2
Sahte kod yeni başlayanlar için iyi bir tavsiye olup olmadığını bilmiyorum. Herhangi bir c-stili dili öğrendikten sonra sözde kod anlaşılabilir olacak, bu yüzden bir sözde kodun kendisini öğrenmek için gerçekten çaba göstermeli mi? Bahsetmemek gerekirse, yeni başlayanı karıştırması muhtemel tek bir sözde kod sözdizimi yoktur.
JimB

@JimB: Mesele, dilden bağımsız olarak mantıklı düşünmeyi öğrenmektir. ERD, UML ve benzerleri bunu yapmak için fildişi kule araçlarıdır, ancak bu resmi bir şey öğrenmek zorunda değilsiniz. Fikir, düşüncelerinizi grafikle çizmeyi ve sonra bunu beklenen sonuçlarla karşılaştırmayı öğrenmektir. Örneğin, veritabanının, Web sunucusuna isteğin bir parçası olarak hangi HTTP başlıklarının gönderildiğini bilmenin (doğal) bir yolunun olmadığını fark ettiğinizde, bir değişkeni göz ardı edebilirsiniz. Benzer şekilde, bir işlev için sözde kod yazdığınızda, genellikle başka türlü yapmayacağınız kenar ve köşe durumlarını tespit edersiniz.
BMDan

Tamamen katılıyorum, sadece yeni başlayanlara "sahte kod" u işaret etmenin karışıklığa neden olacağını düşünüyorum, çünkü bu resmi bir şey değil. Çoğu insanın sahte kodu, en rahat oldukları c tarzı dillerin bir araya getirilmesi ve bazı geçici sözdizimi olacaktır.
JimB

4

Birkaç dil öğrenmelisiniz. Python ile başlamayı öneririm. Öğrenmesi kolay olması ve çok kullanışlı olması için çok sayıda mükemmel kendi kendine çalışma materyali ücretsiz olarak sunulmaktadır ve BT güvenlik uzmanları tarafından yaygın olarak kullanıldığını topluyorum. Güvenlik uzmanları gösteri kodunu her gördüğümde Python.


Python için +1 ve Python sadece Linux dünyasında popüler değildir.
xiao

4

Purdue'da 4 yıllık bilgi güvenliği diplomasına başlamak üzereyim. Derecesi herhangi bir programlama dersi gerektirmez.

Ben OMG düşünmek için sadece bir tane miyim !!!! bu noktada?

Ayrıca birkaç programlama dili öğrenmenin benim için önemli olacağına inanıyorum

Öyle derim ki. Yetkin bir programcı olmayı beklemeseniz de, muhtemelen saldırıları simüle etmek / yeniden oluşturmak ve programlama sürecinin nasıl çalıştığını anlamak için gerekli becerilere ihtiyacınız vardır. Ayrıca verileri analiz etme ve toplu kaynaklardan (günlükler gibi) bilgi çıkarma becerilerine de ihtiyacınız olacak. JimB bash'dan bahsetti - ve şüphesiz bunu kullanacak olsanız da - temel bitleri öğrenmek sadece birkaç saat sürüyor. Aslında bash'ı görmeniz gereken tek yer Linux sistemlerinde - ama diğer mermiler çok benzer.

Veri sıkışması için awk ve / veya Perl öğrenmenizi tavsiye ederim. Nesne yönelimli bir kutuyu işaretlemek için herhangi bir gereklilik hakkında endişelenmeyin - ancak prosedürel olmayan dillere de bakmanızı tavsiye ederim.

Öğrenme C ayrıca kodun çalıştırılabilir bir programa nasıl dönüştüğü hakkında bir sürü bilgiye de maruz kalacaktır (derleme çok karmaşık bir süreçte sadece bir adımdır).

Android / mobil geliştirmeyle ilgilenen biri için bariz bir seçim java olacaktır - ancak java, geliştiriciyi işletim ve protokollerin gerçekleriyle uğraşmaktan yalıtmak için çok uğraşmaktadır - bu benim deneyimim, Java ile güvenlik sorunlarını elde ettiğiniz yerdir. uygulamaların. yani, nihai hedefinize ulaşmanıza yardımcı olabilir ve özgeçmişinizde iyi görünecektir, ancak Java öğrenmenin güvenlik bilginizi pekiştirmesini beklemeyin.


1
Sadece sen değilsin. : -o
Keith

2

Benim tavsiyem:

  • bash(ve ilk) genel amaçlı programlama dilleri değildir. Bazı karmaşık komut dosyalarını gerçekleştirmek mümkün olsa da, bashgenel olarak programlamayı öğrenmenin en iyi yolu değildir. Öncelikle diğer programları yürütmek, veri dosyalarını ve dizinlerini işlemek ve bunlara giriş ve çıkışları birleştirmek gibi sistem yönetim görevlerini yerine getirmenin en doğal yoludur. Eğer bashbir çekiç, gerçekten çivi gibi göz yapmak problem olup olmadığı saklıdır. Şey önemsiz olmayan in yapmak Öğrenme bashsen bazıları çok küçük alt kümelerini öğrendikleri takdirde oldukça kolay olacaktır sedve awk(çünkü dize manipülasyon bashölçüde bu "küçük" dilde benzer operasyonların sözdizimi esinlenerek).
  • Linux altında genel amaçlı programlama için birçok ateşli argüman duyacaksınız. En iyi iki yarışmacı Perl ve Python . Bunlar, sisteminizdeki herhangi bir kullanıcı alanı işlemine erişilebilen hemen hemen her işlemi gerçekleştirmek için yeterli düşük düzey işlevselliği ortaya çıkaran ve çok sayıda önceden yazılmış modül ve kitaplık koleksiyonuyla genel amaçlı olan çok yüksek düzeyli komut dosyası dilleri.

Sana C bir giriş metni okumak ve koşma biraz zaman harcamak tavsiye ediyoruz straceve ltracebenzeri bazı basit yarar komutlar komutları lsve mkdirve /bin/echoben öneririm vb (Aslında bu günlerde ltrace -Syerine stracehem komutlar gelen ve içine çıkışı içine ancak baskınlarınızda ltracegüçlendirilecek şekilde çıkış -Sseçeneği) son derece eğitici olacaktır.

C, Linux çekirdeğinin ve GNU libc'nin yazıldığı birincil programlama dilidir. (Küçük parçalar montajda). Bir Linux (veya UNIX benzeri) sistemdeki hemen hemen tüm programlar C kütüphanelerine (libc) bağlıdır. Birincil Perl ve Python tercümanları (ve diğer birçok kodlama dili) de C dilinde yazılmıştır. Bu programlar (çekirdek, ortak sistem kütüphaneleri ve çeşitli kodlama dili tercümanları) hepsi C programcıları tarafından yazılmıştır ve tasarımları güçlü bir şekilde etkilenir. temel uygulamalarıyla Bu nedenle, bunlardan herhangi birini daha iyi anlamak, C'yi anlamayı gerektirir. Bu düzeyde programlamayı anlamak için C ++ veya Java hakkında hiçbir şey bilmenize gerek yoktur. (Kariyer yamalarınıza bağlı olarak her biri kendi başına ilginç ve gerekli olabilir,

Yani, şimdiye kadar olan binalarıma katılıyorsanız, onu Perl ve Python arasında bir seçim haline getirdik.

İşte gerçek alev savaşlarının başladığı yer.

Benim tavsiyem önce Python'a (2.x) odaklanmak. Python nispeten basit ve tutarlı bir sözdizimine sahiptir. Birkaç saat içinde Python sözdiziminin temellerini öğrenebilirsiniz ve bu, karşılaşacağınız sözdiziminin büyük çoğunluğudur. Temel sözdiziminin kırışıkları olan sadece birkaç özellik (liste kavrayışları, jeneratör ifadeleri, dekoratörler) vardır. Bu nedenle, Python'u öğrenme çabanızın çoğu kapsamlı standart kütüphaneleri öğrenmeye ve bunları kullanmanın "en iyi" yolunu bulmaya çalışacaktır (ve programlarınızı sağlamlaştırmak için ele almaya değer özel istisna kümeleri hangileri olduğunu bulmaya) ve en önemlisi, temel kavramları öğrenmede.

Python'un geniş kütüphanelerinin ve nispeten basit sözdiziminin iki farklı dezavantajı olduğunu düşünüyorum.

İlk olarak, Python'da çok yüksek bir seviyede nasıl yapıldığını öğrendiğinizde, sıkıcı olmak için daha düşük bir seviyede çalışmak zorunda kalma fikrini bulabilirsiniz. Çalıştığım yer Perl standart. Çalışmamı Perl'de çok daha hızlı ve güvenilir bir şekilde çalıştırabileceğimi bildiğim Python'da prototiplendiriyorum; sonra da meslektaşlarım için geçip Perl'e taşımak zorunda kaldım. (Python kullanmadan önce Perl yıllarında oldukça iyiydim --- bu yüzden basit bir aşinalık meselesi değil).

Diğer dezavantaj, Python'da belirli bir görevi yerine getirmenin en üst düzey yolunu bulmak zor olabilir. Örneğin, bir web sayfasını getirmek için başlangıçta düşük seviyeli soketlerle çalışmayı deneyebilirsiniz ... Bununla birlikte, urllibve / veya urllib2modüller dahil olmak üzere bulabileceğiniz kodun çoğunu çoğaltabilirsiniz . 2.7.1'den itibaren standart kütüphanelerin bunların her ikisini de içermesi benim açımdan. Mümkün olan yerlerde Python sahipleri eski modülleri ve API'leri şeffaf bir şekilde genişletmişlerdir; bununla birlikte Python'un şeffaf bir şekilde genişletmenin mümkün olmayan iki veya üç modülünü elinde tuttuğu düzinelerce vaka vardır. (Başka Örneğin komut satırı seçenekleri ayrıştırma için seçenekler bakabilir: argparse, optparse, vegetopt. getopt(Bunların en eskisini) kullanarak programlarınızı yazmanın çok az zararı vardır . Birkaç seçenek ve katı bir çağrı kuralı olan çok basit araçlar için (örneğin sadece küçük bir grup insan tarafından kullanılır), o zaman sys.argvkendinizin üzerinde yürümenin doğasında yanlış bir şey yoktur . Bununla birlikte, genellikle belgeleri dikkatli bir şekilde okumaya ve mevcut daha yeni veya daha yüksek seviye özelliklerini tanımlayan eski veya daha düşük seviye modüllerin altındaki bağlantıları izlemeye değer.

Benim tavsiyem, daha derin kavramlara odaklanmak istediğiniz ve zaman ve çabalarınızın çoğunu sözdizimsel ve dile özgü konular üzerinde harcamak zorunda olmadığınız fikrime dayanıyor. Ne zaman bir alt işlemin, bir iş parçacığının veya Python'un içerdiği çoklu işlem özelliklerinin ne zaman kullanılacağını anlamak, dil ile ve dilden bağımsız olarak programlama yeterliliği ile ilgili her şeyle nispeten az ilgilidir. (Twisted'ın olay güdümlü modeli hakkında argümanları iş parçacığı ve çoklu işleme ile karşılaştırarak anlayabileceğiniz noktada muhtemelen Python'da ustalaşacak ve herhangi bir dilde programlamaya hazır olacaksınız).

Perl için karşı argüman basit ve pratiktir. Dışarıda, özellikle Perl ile beceriler çağıracak birkaç iş daha var. Perl güçlü bir dildir ve çok geniş kütüphanelere sahiptir. (Çoğu Linux sistemiyle dağıtılan Perl'in çekirdeği, standart Python kitaplıklarından daha küçük bir işlevsellik kapsamını kapsar; dağıtımınızdan veya CPAN'dan önemli sayıda ek paket yükleyeceğiniz varsayılır --- Kapsamlı Perl Arşivi Ağ). (Aksine, ayrı ayrı getirmem gereken daha az Python modülü ve paketi var ... bunlar PyPI --- Python Paket Dizini'nden edinilebilir).

Yani, Perl öğrenirseniz, kısa vadede, özellikle sysadmin işlerini bulmak için bir bacağınız olacaktır. Ancak Perl'in sözdizimi ... iyi ... bazı meraklılarının sözleriyle ... "patolojik olarak eklektik!" Perl son derece kısa olabilir ve kodu biraz noktalama işareti ile doldurulur. Bunu sevenler sonsuza dek bunun "kolay" olduğunu ve mükemmel mantıklı olduğunu savunacaklar - ve belirli bir kod snippet'inin tam olarak nasıl yorumlandığı konusunda kafa karışıklığı olan forumlarda bunu yapmak için sonsuz fırsatlara sahip olacaklar. Belgelerde ve onu herkese açık forumlarda destekleyenler tarafından kullanılan sözdizimi ve dil, bunları öğrenmek için büyük çaba gösterebileceğiniz noktaya göre inceliklidir.

Şimdi, bu önceki yorumun öznel ve taraflı olduğunu lütfen unutmayın. Perl'i denemeniz ve sözdiziminin sezgisel ve hoş olduğunu bulmanız mümkündür. Eğer öyleyse, size daha fazla güç. Ancak şahsen Perl'in kendine özgü ifadelerini kavramanın çok hızlı bir şekilde azaldığını görüyorum. Elde ettiğim temeller, ancak birkaç satırdan daha uzun bir süre boyunca ona geri dönmek zorunda kaldığımda bir mücadele olduğunu düşünüyorum.

Çalışacağınız birçok dil var, Java, Lisp ve Scheme, TCL, Scala, vb. Ancak, fayda ve basitlik arasında en iyi dengeyi sunan biriyle başlamanızı öneririm.


1

Linux dünyasında iki temel şey bilmelisiniz:

  1. Regular Expression. Bu bir zorunluluk. RegExevrensel bir "dil", düzenli ifadeyi nasıl kullanacağınızı bildiğinizde, hayatınız çok daha kolay olacak :-)
  2. quick & dirtyLinux dünyasında " " çok yaygındır. Eğer işinizi yapabilirseniz, çözümünüz ne kadar çirkin olursa olsun, işinizi yaparsınız.

Eğer Linux üzerinde bir dil öğrenmek istiyorsanız Yani, GEREKEN bir seçim script languagegibi python, PHPhatta bash scripting.

Ve benim tavsiyem PHP. Çok basit ve çirkin. Ayrıntılı bir çevrimiçi el kitabı vardır . İyi bir RegExdesteği var. Bu kadar.


2
Şimdiye kadar duyduğum PHP'nin en iyi açıklaması olmalı ... Popülerliği çıkardığınızda geride çok fazla şey kalmadı: P
Gordon Gustafson

Biraz konu dışı, ama PHP'nin popülerliğinin ana sebebinin birçok linker-kütüphaneye dağılmış fonksiyonların birçoğu olduğunu düşünüyorum. libc)
Phil Lello

1

Hemen hemen her dilde neredeyse her görevi yapabilirsiniz, bu yüzden doğru seçim büyük ölçüde çözdüğünüz sorun tarafından belirlenir.

Aşağıdaki kategorilerden dil bilmek kesinlikle önemlidir:

  • Derlenmiş diller (C / C ++ / Java gibi). C / C ++, arabellek taşmaları, yığın bozulması vb. İle ilgili güvenlik sorunlarını keşfetmek için iyi bir yerdir.
  • Yorumlanan diller (PHP gibi). Gevşek tipte değişkenlerle ilgili problemleri keşfetmek ve siz tanımlayana kadar tanımlanmamış işlevleri tespit etmemek için iyi bir yer
  • Komut dosyası dilleri (sh / bash / csh / ksh). Birçok yararlı kabuk yardımcı programını (bkz. / Bin & / usr / bin) birbirine yapıştırmak için gerçekten yararlıdır

Yığın bozulmasına ve doğrudan bellek erişimine izin verdiği için C / C ++ öğrenmeye çalışıyorum. Güvenlik sorunlarını denemek istiyorsanız bu önemlidir. Birçok dilde C benzeri sözdizimi vardır (JavaScript dahil), bu yüzden iyi bir sıçrama tahtasıdır.

Eğer bir kabukta çok çalışıyorsanız, sanırım vim öğrenirken sizsiniz, kabuk temel komut dosyalarını yan etki olarak öğreneceksiniz. UNIX Elektrikli El Aletleri, daha gelişmiş şeyler öğrenmek için iyi bir kitaptı; Hala yayınlanıp yayınlanmadığını bilmiyorum.

PHP de öğrenmek için iyi bir dil olabilir; yeni programcılara sunduğu en büyük avantaj, bağlamanız gereken bir kitaplıktan ziyade (karmaşık bir görev değildir) bir çok işlevsellik yerleşik olmasıdır. Bu nedenle, ana dokümanlara göz atmak size birçok şey hakkında bilgi verecektir .


1

İlk olarak, bazı olumsuz tavsiyeler:

Temel olarak yapmayı planladığım, Vim'in nasıl kullanılacağını öğrenmekle yan yana programlamayı öğrenmek.

Böyle yapma. Gerçekten rahat bir editör bulun. Hem dili hem de editörü öğrenmek, onları sırayla öğrenmek kadar üç kat daha zor (editörün önce gitmesi gerekir :-))

Dediğim gibi güvenliğe giriyorum, bu yüzden çoğunlukla güvenlikle ilgili uygulamalar oluşturacağım. Çoğu ağ ile ilgili olacak.

Ağ ile ilgili güvenlik uygulamaları? C burada beyinsiz bir seçim değil. Ağa sistem API düzeyinde erişmeniz gerekir, bu da C'nin gideceği yol olduğu anlamına gelir. Tabii ki bu, her şeyin C'de olması gerektiği anlamına gelmez - bir C kütüphanesi + bir $favorite-high-level-languagesarıcı, C'ye ihtiyaç duymayan parçalarda C ile ilgili zorlukları kurtarabilir.

Bununla birlikte birkaç fikrim var. JavaScript ile başlamayı düşünüyordum, çünkü çapraz platform ve daha önce önerdiğini gördüm.

Eminim sizinkinden farklı bir bağlamda önerilmiştir. JavaScript'in güçlü yanları vardır, ancak henüz iyi bir genel amaçlı dil değildir. JS'nin C, Python, Perl, Ruby, Java ve şirketlerininkilerle karşılaştırılabilecek standart kütüphaneleri yoktur.

Konuşma $favorite-high-level-language- benim tavsiyem Python ile gitmek. C ile güzel bir şekilde arayüz oluşturur, çok sayıda yararlı kütüphaneyle birlikte gelir ve eklenti olarak çok daha fazla kütüphaneye sahiptir.


0

Javascript öğrenmekle ilgili hiçbir şey yanlış değil, sadece bir tarayıcı altında çalışır, bu nedenle programlamanız web sayfasıyla ilgili uygulamalarla sınırlı olacaktır.

Muhtemelen 'başlamak için iyi bir programlama dili nedir?' İfadesinin diller olduğu kadar çok yanıtı vardır. Benim tuppence değer, temel kabuk komut dosyası ile başlamaktan daha kötü yapabileceğiniz, sadece kabuğun ötesinde herhangi bir şey kullanmadan görevleri otomatikleştirmek için neler yapabileceğinizi görmeniz, daha sonra Perl'i veya yapılması gerekenden büyüyen benzer bir dili kullanmanızdır. Bundan sonra kabuğun yapabileceğinden daha karmaşık görevler ve eğer gerçekten ilgileniyorsanız sadece birkaç hafta sürecekse, C veya bir türev kullanmaya başlayın.


3
Sadece tarayıcılarda mı? Artık değil .
EEAA

Teşekkürler, düzeltilmiş duruyorum, ancak Javascript'i bir öğrenme ortamı olarak tavsiye etmem, yeni başlayanlar için, tarayıcı olmayan sürümler için destek almak bir kabus olurdu.
blankabout

2
Ben her zaman ECMAScript programlama dili olduğunu düşündüm ve Javascipt DOM manipüle için yararlı fonksiyonlar sağlamak için ECMAScript üstüne oturur. Javascript tarayıcı içindir.
Jonathan Mayhak

0

Önerilerim? Hmmm. Gittikçe karar vermen gerekebilir. Sağlıklı, çok yönlü menzil için, her zamanki CS derece rotasına gidebilirsiniz, belki bu sırayla değil.

(1) C / C ++ - Nesneye Yönelikleri indirebilir ve en azından denemiş olacaksınız. C ++ 'profesyonel' standarttır. (2) Montaj (sadece biraz - işlemcinin, belleğin vb. Gerçek işlerini anlamanıza yardımcı olacaktır - evlenmek zorunda değilsiniz.) (3) Python / Perl / Bash - Bunları alın script dilleri aşağı, onlar Linux seviyeniz için en yararlı olacaktır (4) PHP / Ruby, MySQL ve HTML - Sadece Web programlama olsun! Tüm sunucu-istemci etkileşim sürecini, başka bir bilgi işlem düzeyini anlayacaksınız.

Yararlı kavramlara mı ihtiyacınız var? Yapay zeka, sinir ağları. Bunlar seni bitirmeli.

Bunlardan birini seçebilir veya hepsine dokunabilirsiniz. Benim dilim? Hepsi gerektiği gibi, ama 1984'ten beri programlıyorum ve CS derecesi, yazılı oyunlar ve her türlü gömülü sistem uygulamaları var. Yaptığım şey bu. Kim olduğunuzu ve ne yaptığınızı bulmanız gerekir. Sadece eğlendiğinizden emin olun.

Zevk almak!


0

ayy, bilgi sistemleri için yanlış bilgi güvenliği ... ah bunların çoğu hala geçerli

Java

  1. Derecenize dahil olacak, java tabanlı bir giriş seviyesi programlama kursu olmalıdır. Öğrenmekte olduğunuz şeyler için kredi almak her zaman güzeldir.
  2. Kesinlikle sistemli bir adam olmaktan bıkarsanız veya daha sonra çalıştığınız şirket sistemlerin tost makinesi gibi olduğuna ve onları çalıştıran insanlara karar verirse size kariyer gelişimi sağlayacaktır.
  3. Nesne odaklı
  4. Android geliştirme yapmak istediğinizi söylediniz. Bu Java demek.

Dürüst olmak gerekirse, Linux'ta çalışıyorsanız ve Java'da bir başlangıç ​​programlama dersi alıyorsanız ve belki de birkaç programlama dersi daha takip ederseniz, Bash sed / awk, vb.Gibi diğer araçlar bir şekilde yerine düşmelidir. Gerçekten sistemlere girerseniz, daha sonra biraz C toplayabilirsiniz, ancak bunun çok talep edildiğini söyleyemem ve bir sistem adamı olmanın bir gerekliliği olduğunu söyleyemem - eğer gerçekten içselliğe girmediyseniz.

YMMV

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.