W jakim języku zacząć na Linuksie? [Zamknięte]

19

Mam zamiar rozpocząć czteroletni stopień bezpieczeństwa informacji w Purdue. Stopień nie wymaga żadnych kursów programowania. Tak więc jedyny raz, kiedy będę mógł to zrobić, będzie okazjonalny. Więc większość mojej nauki będzie odbywać się na własną rękę. Na początku mojego liceum postanowiłem całkowicie przejść na Linuksa. Do tej pory uczyłem się trochę o Linuksie i bezpieczeństwie. Uważam jednak, że dla mnie ważne będzie również nauczenie się kilku języków programowania.

Zasadniczo planuję nauczyć się programować równolegle z nauką korzystania z Vima. Więc najprawdopodobniej będzie to powolny proces. W końcu myślę, że będzie warto. Jak powiedziałem, zajmę się bezpieczeństwem, więc będę głównie tworzył aplikacje związane z bezpieczeństwem, z których większość dotyczy sieci. Chciałbym również zacząć tworzyć aplikacje na Androida, ale będzie to później.

Powiedziawszy to, mam kilka pomysłów. Myślałem o rozpoczęciu pracy z JavaScriptem, ponieważ jest on wieloplatformowy i widziałem go wcześniej sugerowany. Dużo słyszałem także o Ruby lub mogłem pójść naturalną ścieżką Linuksa z C. W jakim kierunku powinienem iść?

JD Davis
źródło

Odpowiedzi:

53

Przede wszystkim: bashwraz ze wspólnymi narzędziami wiersza poleceń. Bashjest domyślnym interfejsem użytkownika dla systemu operacyjnego, a wiele programów w systemie Linux będzie na pewnym poziomie opakowanych w skrypt powłoki. Może być dziwaczny, ma pewne dziwactwa i często wydaje się wręcz głupi, ale jest to coś, z czym będziesz musiał sobie poradzić, więc poczuj się dobrze. Standardowe narzędzia, takie jak grep, diff, head, tail, sort, uniq, i tak dalej, będzie bardzo pomocne nie tylko ze skryptów powłoki, ale ze swojej wydajności na linii poleceń.

Dowiedz się co najmniej c. Właśnie w tym są zapisywane najniższe poziomy systemu, a to pozwoli lepiej zrozumieć system jako całość.

Wybierz dowolny język wyższego poziomu, który ci się podoba. Python, ruby, perl, java, Cokolwiek - tak długo jak Ci się spodoba. W tym miejscu naprawdę zaczynasz uczyć się, jak „programować”, i odtąd łatwiej będzie wybrać więcej języków i kontynuować naukę .

JimB
źródło
2
Zgadzam się ze wszystkimi punktami wymienionymi tutaj.
Joe
6
Jeśli masz zamiar nauczyć się bash, powinieneś zapoznać się z awk, sed, head, tail, cut, tr, diff, grep, find, ps, netstat, tcpdump, sort, uniq itp. Itd. Itd.
jftuga,
2
@jftuga Zgoda. Ogromny procent mojego zestawu narzędzi to umiejętności „ekstrakcji i integracji danych” - fantazyjny sposób powiedzenia „manipulowanie sformatowanymi plikami tekstowymi”. Po zapoznaniu się z potokiem i poznaniu popularnych narzędzi nie ma ograniczeń w przepływie pracy dowolnego z wcześniej zainstalowanych programów. Jestem także wielkim fanem MS Powershell, który pod wieloma względami stoi na barkach Bash.
AndyN
@jftuga - odnotowano. Chociaż uważam, że są one ważne, nie sądzę, aby ktoś nowy w Linuksie musiał się martwić o naukę dużych pistoletów, takich jak sed / awk, ale powinien mieć wystarczającą wiedzę, aby móc odszyfrować istniejący kod, jeśli go napotka .
JimB,
8
Zgadzam się ze wszystkimi, ale polecam Python nad innymi jako język wysokiego poziomu, szczególnie dlatego, że stał się najpopularniejszym językiem wyższego poziomu dla narzędzi do zarządzania serwerami. Będziesz na nią natrafiał znacznie częściej niż ruby ​​czy java. Perl jest również powszechny, ponieważ jest tak stary, więc wybrałbym ten następny.
tylerl
10

Przekonasz się, że wszyscy będą po prostu polecać swój ulubiony język. Moim ulubionym językiem jest Perl, więc to właśnie polecam. :) Jednak poza moimi osobistymi preferencjami istnieje kilka wspaniałych powodów, dla których warto rozważyć użycie perla:

Po pierwsze, perl to wspaniały język ogólnego przeznaczenia. Łatwo jest zacząć w Perlu, pisząc proste skrypty, aby wykonywać te same czynności, co w skryptach powłoki, np. Manipulować plikami i podejmować decyzje na podstawie danych wprowadzonych przez użytkownika. Zapewnia to bardzo łatwe i stopniowe wprowadzenie do ogólnych pomysłów programowania. Perl istnieje już od dłuższego czasu, więc na początek jest mnóstwo zasobów (książek i stron internetowych).

Po drugie, perl jest niezwykle potężnym i ekspresyjnym językiem, który obsługuje wszystkie nowoczesne funkcje programowania. Używam go od ponad piętnastu lat i wciąż uczę się nowych sposobów wydajniejszego działania. Na przykład, jeśli chcesz eksplorować programowanie obiektowe, Perl ma to (szczególnie poprzez Moose ).

Po trzecie, perl ma prawie nieskończoną moc i elastyczność swojego oficjalnego repozytorium dodatków, CPAN . Na przykład, aby podążać za ideą pisania oprogramowania zabezpieczającego, powiedz, że chcesz opracować niestandardowy skaner bezpieczeństwa sieciowego. Zamiast pisać to wszystko sam, możesz zacząć od użycia NMAP :: Scanner jako silnika skanowania, a następnie napisać własne poprawki i ulepszenia.

Wreszcie, jeśli chcesz poznać programowanie sieciowe, Perl też to ma. Jednym z popularnych nowoczesnych sposobów pisania oprogramowania sieciowego w Perlu jest Catalyst , który zapewnia nowoczesną platformę internetową MVC do szybkiego tworzenia dowolnej aplikacji internetowej.

Podsumowując, zaletą perla jest to, że pozwala on na rozpoczęcie pisania małych skryptów i programów wiersza poleceń i stopniowe przekształcanie się w pisanie w pełni funkcjonalnych nowoczesnych aplikacji. Oczywiście ceną tej elastyczności jest złożoność. Od ciebie zależy, aby uczyć się i uczyć, jak robić rzeczy we właściwy sposób, Perl nie egzekwuje dobrych praktyk, tak jak robią to inne języki. Osobiście podoba mi się ta wolność, szczególnie w połączeniu ze wszystkimi wspaniałymi zasobami w sieci do nauki używania perla.

Phil Hollenback
źródło
Perl jest (przede wszystkim) językiem skryptowym; a większość systemu operacyjnego jest programowana w C.
Chris S
Jasne, ale nie sądzę, żeby miało to duże znaczenie w kontekście tego pytania. Nie wygląda na to, że OP naprawdę chce lub musi się uczyć programowania na poziomie systemu operacyjnego.
Phil Hollenback,
Sugerowałbym, że Perl to dobry sposób na napisanie kodu dla aplikacji zabezpieczającej, której celem jest coś napisanego w innym języku (często C), który już rozumiesz. Dlatego jeśli to rozróżnienie ma sens, sklasyfikowałbym Perla jako narzędzie, którego powinieneś nauczyć się używać, a nie język, którego powinieneś (całkowicie) rozumieć.
BMDan
6

Trzy języki zapewnią ci dobrą pozycję. W kolejności malejącej ważności (tzn. Pierwsza jest najważniejsza):

  1. Pseudokod . Często implementacja, z którą pracujesz, będzie połączeniem pół tuzina języków i narzędzi, z których tylko niektóre będziesz wiedzieć bezpośrednio. Jeśli jednak wiesz, jaki wzorzec jest wdrażany, możesz dowiedzieć się, jaki wkład jest przekazywany do elementu i jaki wynik powinien dać, przetestuj go w wykluczeniu i dowiedz się, czy to element łamie się.
  2. C . Na dobre lub na złe, to jest to, co rządzi wszechświatem (Linux), i daje ci wystarczająco blisko z ziemi widok rzeczy, które możesz zrozumieć, co faktycznie robi każdy z języków wyższego poziomu (np. PHP pass-by-reference lub model wątków Java).
  3. Prawie wszystko inne oprócz C ++ . Funkcjonalny język, taki jak SQL lub, jeszcze lepiej, Haskell, lub coś nie do końca podobnego do C-ey - jeśli wszystko inne zawiedzie, Java może na to popracować, ale nadal jest bardzo proceduralne - uzyskuje wysokie noty; Chodzi o to, aby owinąć swój mózg wokół czegoś zupełnie innego niż to, co zrobiłeś wcześniej, abyś nie mógł nie zrozumieć ograniczeń tego, co robiłeś wcześniej. Jeśli chodzi o czystą użyteczność, bash prawdopodobnie również należy do tej listy, ale jeśli nie masz podstawy w czymś innym, po prostu skończysz pisać C ze składnią bash zamiast naprawdę odkrywać jego moc.
BMDan
źródło
1
+1 dla pseudokodu. Lubię pseudokod w komentarzach, a następnie kodować wokół komentarzy
sreimer,
2
+1 dla pseudokodu i „Wszystko inne oprócz C ++”. W świecie linuxa powinieneś nauczyć się przynajmniej jednego script language, takiego jak pythonlub PHP.
yegle
2
Nie wiem, czy pseudokod jest dobrą rekomendacją dla początkującego. Pseudokod będzie zrozumiały po nauczeniu się większości języków w stylu c, więc czy naprawdę należy włożyć wysiłek w naukę samego pseudokodu? Nie wspominając o tym, że nie ma pojedynczej składni pseudokodu, która może pomylić początkującego.
JimB
@JimB: Chodzi o to, aby nauczyć się logicznego myślenia, niezależnie od języka. ERD, UML i tym podobne są narzędziami z wieży z kości słoniowej, ale nie musisz uczyć się niczego tak formalnego. Chodzi o to, aby nauczyć się przedstawiać swoje myśli, a następnie porównać je z oczekiwanym rezultatem. Kiedy zdasz sobie sprawę, że na przykład baza danych nie ma (nieodłącznego) sposobu na sprawdzenie, które nagłówki HTTP zostały wysłane w ramach żądania do serwera WWW, możesz wyeliminować zmienną z rozważań. Podobnie, gdy piszesz pseudokod funkcji, często dostrzegasz przypadki krawędzi i narożników, których inaczej byś nie zrobił.
BMDan
Zgadzam się całkowicie, myślę tylko, że wskazanie początkującego na „pseudokod” spowoduje zamieszanie, ponieważ nie jest to formalne. Pseudokod większości ludzi będzie połączeniem języków w stylu c, w których są najwygodniejsi, oraz dodatkowej składni ad-hoc.
JimB
4

Powinieneś nauczyć się kilku języków. Sugerowałbym zacząć od Pythona. Jest powszechnie zalecane, ponieważ jest łatwy do nauczenia i bardzo przydatny, wiele doskonałych materiałów do samodzielnej nauki jest dostępnych za darmo i, jak sądzę, jest szeroko stosowany przez specjalistów ds. Bezpieczeństwa IT. Prawie za każdym razem, gdy widzę, że specjaliści od bezpieczeństwa publikują kod demonstracyjny, jest to Python.

bgvaughan
źródło
+1 dla Pythona, a Python jest popularny nie tylko w świecie Linuksa.
xiao
4

Mam zamiar rozpocząć czteroletni stopień bezpieczeństwa informacji w Purdue. Stopień nie wymaga żadnych kursów programowania.

Czy jestem jedyną osobą, która myśli OMG !!!! w tym momencie?

Wierzę również, że ważne będzie dla mnie nauczenie się kilku języków programowania

Tak bym powiedział. Chociaż tak naprawdę nie spodziewasz się, że staniesz się biegłym programistą, prawdopodobnie potrzebujesz umiejętności wymaganych do symulacji / odtwarzania ataków i zrozumienia, jak działa proces programowania. Będziesz także potrzebował umiejętności analizy danych i wydobywania informacji ze źródeł zbiorczych (takich jak logi). JimB wspomniał o bashu - i chociaż bez wątpienia będziesz go używać - nauczenie się podstawowych elementów zajmuje tylko kilka godzin. W rzeczywistości jedynym miejscem, w którym możesz zobaczyć bash, jest system Linux - ale inne powłoki są bardzo podobne.

Polecam naukę awk i / lub Perla do kruszenia danych. Nie przejmuj się jakimkolwiek wymogiem zaznaczenia pola zorientowanego obiektowo - ale polecam również spojrzenie na nieprocesowe języki.

Nauka języka C udostępnia także wiele informacji o tym, jak kod zmienia się w program wykonywalny (kompilacja to tylko jeden krok w bardzo złożonym procesie).

Oczywistym wyborem dla osób zainteresowanych rozwojem Androida / urządzeń mobilnych byłaby java - ale java bardzo stara się izolować programistę przed koniecznością radzenia sobie z realiami działania i protokołami - z mojego doświadczenia wynika, że ​​to tutaj masz problemy z bezpieczeństwem w Javie aplikacje. tzn. może pomóc Ci osiągnąć swój ostateczny cel i będzie dobrze wyglądać w twoim CV, ale nie oczekuj, że nauka języka Java znacznie uzupełni Twoją wiedzę na temat bezpieczeństwa.

symcbean
źródło
1
Nie jesteś jedyny. : -o
Keith
2

Moja rada:

  • bash(i podobne) nie są językami programowania ogólnego przeznaczenia. Chociaż możliwe jest wykonanie skomplikowanych skryptów bash, nie jest to najlepszy sposób na naukę programowania w ogóle. Jest to najbardziej naturalny sposób na wykonywanie zadań związanych z administrowaniem systemami, które dotyczą głównie wykonywania innych programów, obsługi plików danych i katalogów oraz zbierania danych wejściowych i wyjściowych do nich. Jeśli bashjest to młotek, zarezerwuj go na problemy, które naprawdę wyglądają jak gwoździe. Nauka robienia czegokolwiek, co nie jest trywialne, bashbędzie znacznie łatwiejsza, jeśli nauczysz się bardzo małych podzbiorów sedi awk(ponieważ manipulowanie ciągami bashjest w dużej mierze inspirowane składnią podobnych operacji w tych „małych” językach).
  • Do programowania ogólnego zastosowania pod Linuksem usłyszysz wiele żarliwych argumentów. Dwaj najlepsi pretendenci to Perl i Python . Są to zarówno języki skryptowe wysokiego poziomu, które są ogólnego zastosowania, które ujawniają wystarczającą funkcjonalność niskiego poziomu, aby wykonać prawie każdą operację, która jest dostępna dla dowolnego procesu przestrzeni użytkownika w systemie, oraz z ogromną kolekcją wstępnie napisanych modułów i bibliotek.

Polecam lekturę tekstu wprowadzającego w sprawie C i spędzić trochę czasu uruchamiając stracei ltracepoleceń na kilka prostych poleceń użytkowych jak lsi mkdiri /bin/echoitd. (W rzeczywistości te dni Sugeruję ltrace -Szamiast straceale wypadów do wyjścia z obu komend i do ltracewyjścia jak zwiększona przez -Sopcją będzie niezwykle edukacyjnych).

C jest podstawowym językiem programowania, w którym napisane jest jądro Linuksa i GNU libc. (Małe części są w zespole). Prawie wszystkie programy w systemie Linux (lub innym systemie podobnym do UNIX) są połączone z bibliotekami C (libc). Główne interpretery Perla i Pythona (i większość innych języków skryptowych) są również napisane w C. Programy te (jądro, wspólne biblioteki systemowe i różne interpretery języków skryptowych) są napisane przez programistów C, na ich projekt i cechy mają duży wpływ przez ich podstawowe wdrożenia. Zatem głębsze zrozumienie któregokolwiek z nich ostatecznie wiąże się ze zrozumieniem C. Nie musisz nic wiedzieć o C ++ ani Javie, aby zrozumieć programowanie na tym poziomie. (Każda z nich może być interesująca i niezbędna sama w sobie w zależności od twojej kariery zawodowej,

Jeśli więc zgadzasz się z moimi przesłankami, sprowadziliśmy to do wyboru między Perlem a Pythonem.

Tutaj zaczynają się prawdziwe wojny płomieniowe.

Radzę najpierw skupić się na Pythonie (2.x). Python ma stosunkowo prostą i spójną składnię. Możesz nauczyć się podstaw składni Pythona w ciągu kilku godzin i to jest ogromna większość składni, jaką kiedykolwiek spotkasz. Istnieje tylko kilka funkcji (wyrazy ze spisu, wyrażenia generatora, dekoratory), które są pomarszczeniem podstawowej składni. Tak więc większość twojego wysiłku w nauce Python zostanie poświęcona nauce obszernych bibliotek standardowych i próbowaniu znalezienia „najlepszego” sposobu ich używania (i ustaleniu, jakie są szczególne zestawy wyjątków, które warto obsługiwać, aby Twoje programy były niezawodne) i, co najważniejsze, w nauce podstawowych pojęć.

Myślę, że rozbudowane biblioteki Pythona i stosunkowo prosta składnia mają dwie wyraźne wady.

Po pierwsze, kiedy uczysz się, jak robić rzeczy na bardzo wysokim poziomie w Pythonie, możesz pomyśleć, że musisz pracować na niższym poziomie, aby być nudnym. Tam, gdzie pracuję, Perl jest standardem. Prototypuję swoją pracę w Pythonie, gdzie wiem, że mogę sprawić, by działała o wiele szybciej i niezawodnie niż w Perlu; potem boję się, że muszę przejść i przenieść go do Perla dla moich kolegów. (Byłem dość dobry w Perlu przez wiele lat, zanim użyłem Pythona --- więc nie jest to kwestia zwykłej znajomości).

Inną wadą jest to, że czasami trudno jest znaleźć najwyższy poziom sposobu wykonania danego zadania w Pythonie. Na przykład, aby pobrać stronę internetową, możesz początkowo spróbować zrobić to z gniazdami niskiego poziomu ... które będą działać. Powieliłbyś jednak sporo kodu, który już możesz znaleźć, w tym w modułach urllibi / lub urllib2. Sam fakt, że standardowe biblioteki, począwszy od wersji 2.7.1, zawierają obie te cechy, jest moim zdaniem. Tam, gdzie to możliwe, opiekunowie Pythona w przejrzysty sposób rozszerzają starsze moduły i interfejsy API; jednak istnieją dziesiątki przypadków, w których Python zachowuje dwa lub trzy moduły, w których przezroczyste rozszerzenie z jakiegoś powodu nie było możliwe. (Inny przykład można spojrzeć na opcje do analizowania opcje wiersza poleceń: argparse, optparse, igetopt. Pisanie programów przy użyciu getopt(najstarszego z nich) jest niewielkie . W przypadku bardzo prostych narzędzi z kilkoma opcjami i sztywną konwencją wywoływania (używanych na przykład przez niewielką grupę osób), nie ma nic złego w chodzeniu nad sys.argvsobą. Jednak zwykle warto uważnie przeczytać dokumentację i podążać za linkami u dołu starszych lub niższych modułów, które opisują dostępne funkcje nowszych lub wyższych poziomów.

Moja rada opiera się na mojej opinii, że chcesz skupić się na głębszych pojęciach i nie musisz poświęcać dużo czasu i wysiłku na problemy składniowe i specyficzne dla języka. Zrozumienie, kiedy należy użyć podprocesu, w porównaniu do wątku lub funkcji wieloprocesorowych zawartych w Pythonie, ma stosunkowo niewiele wspólnego z językiem i wszystko, co dotyczy biegłości programistycznej niezależnie od języka. (W punkcie, w którym można zrozumieć argumenty dotyczące modelu sterowanego zdarzeniami Twisted przez porównanie z wątkami i wieloprocesowością, prawdopodobnie opanujesz Python i będziesz gotowy do programowania w dowolnym języku).

Argument kontrpracy dla Perla jest prosty i praktyczny. Istnieje jeszcze kilka innych miejsc pracy, które będą wymagać od Perla umiejętności. Perl jest potężnym językiem i ma niezwykle rozbudowane biblioteki. (Rdzeń Perla dystrybuowany z większością systemów Linux obejmuje mniejszy zakres funkcjonalności niż standardowe biblioteki Pythona; zakłada się, że zainstalujesz znaczną liczbę dodatkowych pakietów z twojej dystrybucji lub poprzez CPAN --- Comprehensive Perl Archive Sieć). (Dla kontrastu jest mniej modułów i pakietów Python, które muszę pobrać osobno ... są one dostępne z PyPI --- Indeks pakietów Python).

Jeśli więc nauczysz się Perla, będziesz miał dużą szansę na znalezienie pracy, szczególnie pracy sysadmin, w krótkim okresie. Jednak składnia Perla jest… cóż… słowami niektórych własnych entuzjastów… „patologicznie eklektyczna!” Perl może być bardzo zwięzły, a jego kod jest wypełniony sporą interpunkcją. Ci, którzy go uwielbiają, będą bez końca argumentować, że jest to „łatwe” i ma doskonały sens --- i będą mieli nieograniczone możliwości robienia tego na forach wypełnionych nieporozumieniami na temat dokładnej interpretacji danego fragmentu kodu. Składnia i język używany w dokumentacji oraz przez osoby, które wspierają ją na forach publicznych, są dopracowane do tego stopnia, że ​​można włożyć znaczny wysiłek, aby się ich nauczyć.

Pamiętajcie, że powyższy komentarz jest subiektywny i stronniczy. Możliwe, że wypróbujesz Perla i zauważysz, że jego składnia jest intuicyjna i przyjemna. Jeśli tak, to więcej mocy dla ciebie. Jednak osobiście uważam, że moje pojmowanie osobliwości Perla rozpada się bardzo szybko. Podstawy, które zachowuję, ale uważam, że jest to trudność, ilekroć muszę przełączyć się z powrotem na więcej niż kilka wierszy kodu.

Istnieje wiele innych języków do nauki, Java, Lisp i Scheme, TCL, Scala i tak dalej. Proponuję jednak zacząć od takiego, który oferuje najlepszą równowagę między użytecznością a prostotą.

Jim Dennis
źródło
1

W świecie Linuxa powinieneś znać dwie podstawowe rzeczy:

  1. Regular Expression. To jest konieczność. RegExto uniwersalny „język”, gdy już umiesz używać wyrażeń regularnych, twoje życie będzie znacznie łatwiejsze :-)
  2. quick & dirty” jest bardzo powszechne w świecie Linuksa. Jeśli możesz wykonać swoją pracę, bez względu na to, jak brzydkie jest twoje rozwiązanie, musisz ją wykonać.

Tak więc, jeśli chcesz nauczyć się języka w Linuksie, to NALEŻY wybrać script language, podobnie python, PHPalbo nawet bash scripting.

I polecam to PHP. To proste i brzydkie. Posiada szczegółową instrukcję online . Ma dobre RegExwsparcie. To wszystko.

czatować
źródło
2
To musi być najlepszy opis PHP, jaki kiedykolwiek słyszałem ... Kiedy zdejmiesz popularność, nie pozostanie po niej wiele: P
Gordon Gustafson
Trochę poza tematem, ale myślę, że głównym powodem popularności PHP jest wiele funkcji, które byłyby rozproszone po wielu bibliotekach / linkerach / pakietach w innych językach, są standardowe w PHP (trochę jak łączenie większości rzeczy, których kiedykolwiek potrzebujesz) libc)
Phil Lello,
1

Możesz wykonać prawie każde zadanie w prawie każdym języku, więc właściwy wybór zależy w dużej mierze od rozwiązania problemu.

Zdecydowanie warto znać języki z następujących kategorii:

  • Skompilowane języki (jak C / C ++ / Java). C / C ++ to dobre miejsce do odkrywania problemów bezpieczeństwa z przepełnieniem bufora, uszkodzeniem stosu itp.
  • Języki interpretowane (jak PHP). Dobre miejsce do odkrywania problemów z luźno zmiennymi typami i nie wykrywaniem niezdefiniowanych funkcji, dopóki ich nie wywołasz
  • Języki skryptowe (sh / bash / csh / ksh). Naprawdę przydatne do sklejenia wielu użytecznych narzędzi powłoki (patrz / bin i / usr / bin)

Postaram się nauczyć C / C ++, ponieważ pozwala to na uszkodzenie stosu i bezpośredni dostęp do pamięci. Jest to ważne, jeśli chcesz eksperymentować z problemami bezpieczeństwa. Wiele języków ma składnię podobną do C (w tym JavaScript), więc jest to dobra trampolina.

Jeśli dużo pracujesz w powłoce, którą, jak sądzę, uczysz się w vimie, skończysz uczyć się podstawowych skryptów powłoki jako efekt uboczny. UNIX Power Tools to dobra książka do nauki bardziej zaawansowanych rzeczy; Nie wiem czy nadal jest publikowany.

PHP może być również dobrym językiem do nauki; Główną zaletą, jaką oferuje nowym programistom, jest to, że wbudowanych jest wiele funkcji, a nie biblioteka, do której należy utworzyć łącze (co nie jest złożonym zadaniem). Z tego powodu przeglądanie głównych dokumentów nauczy Cię o wielu rzeczach.

Phil Lello
źródło
1

Po pierwsze, kilka negatywnych porad:

Zasadniczo to, co planuję zrobić, to nauczyć się programować równolegle z nauką korzystania z Vima.

Nie rób tego. Znajdź edytor, który jest naprawdę wygodny. Nauka zarówno języka, jak i edytora jest trzy razy trudniejsza niż nauka ich w kolejności (oczywiście edytor powinien iść pierwszy :-))

Jak powiedziałem, przechodzę do zabezpieczeń, więc będę tworzyć głównie aplikacje związane z bezpieczeństwem. Większość z nich będzie związana z siecią.

Aplikacje bezpieczeństwa związane z siecią? C nie jest tutaj żadnym wyborem. Będziesz musiał uzyskać dostęp do sieci na poziomie interfejsu API systemu, co oznacza, że ​​C jest właściwą drogą. Oczywiście nie oznacza to, że wszystko musi znajdować się w C - biblioteka C + $favorite-high-level-languageopakowanie może zaoszczędzić Ci problemów związanych z C w częściach, które nie potrzebują C.

Powiedziawszy to, mam kilka pomysłów. Myślałem o rozpoczęciu pracy z JavaScriptem, ponieważ jest on wieloplatformowy i widziałem go wcześniej sugerowany.

Założę się, że zostało to zasugerowane w kontekście innym niż twój. JavaScript ma swoje mocne strony, ale jeszcze nie jest dobrym językiem ogólnego przeznaczenia. JS nie ma standardowych bibliotek porównywalnych z bibliotekami dostępnymi dla C, Python, Perl, Ruby, Java i firmy.

Mówiąc o $favorite-high-level-language- moja rada to iść z Pythonem. Ładnie współpracuje z C, jest dostarczany z wieloma przydatnymi bibliotekami i ma znacznie więcej bibliotek dostępnych jako dodatki.

Rafał Dowgird
źródło
0

Uczenie się Javascript nie ma nic złego, ale działa tylko w przeglądarce, więc programowanie będzie ograniczone do aplikacji związanych ze stronami internetowymi.

Prawdopodobnie jest tyle odpowiedzi na „co to jest dobry język programowania na początek”, ile jest języków. Moją wartością jest to, że możesz zrobić coś gorszego niż zacząć od podstawowego skryptu powłoki, po prostu widząc, co możesz zrobić, aby zautomatyzować zadania bez użycia niczego poza powłoką, a następnie rozszerzyć to za pomocą Perla lub podobnego języka, który wyrósł z potrzeby robienia zadania bardziej złożone niż jest w stanie wykonać powłoka, a jeśli jesteś naprawdę zainteresowany, zajmie to tylko kilka tygodni, zacznij używać C lub pochodnej.

blankabout
źródło
3
Tylko w przeglądarkach? Już nie .
EEAA
Dzięki, poprawiłem się, ale nadal nie polecam Javascript jako środowiska do nauki, dla początkujących uzyskanie wsparcia dla wersji nieobsługujących przeglądarki byłoby koszmarem.
blankabout
2
Zawsze myślałem, że ECMAScript jest językiem programowania, a Javcipt znajduje się nad ECMAScript, aby zapewnić przydatne funkcje do manipulowania DOM. Javascript jest dla przeglądarki.
Jonathan Mayhak,
0

Moje rekomendacje? Hmmm. Cóż, być może będziesz musiał zdecydować na bieżąco. Aby uzyskać zdrowy, dobrze zaokrąglony zasięg, możesz wybrać zwykłą trasę CS stopni, może nie w tej kolejności.

(1) C / C ++ - Możesz pobrać rzeczy zorientowane obiektowo, a przynajmniej będziesz próbował. C ++ to „profesjonalny” standard. (2) Montaż (tylko na chwilę - pomoże ci zrozumieć prawdziwe działanie procesora, pamięci itp. - nie musisz go ożenić.) (3) Python / Perl / Bash - zdobądź je języki skryptowe w dół, będą najbardziej przydatne dla twojego poziomu Linuxa (4) PHP / Ruby, MySQL i HTML - Po prostu włącz programowanie w sieci! Zrozumiesz cały proces interakcji serwer-klient, kolejny poziom informatyki.

Potrzebujesz pomocnych pojęć? AI, sieci neuronowe. To powinno Cię zaokrąglić.

Możesz wybrać jedną z tych czynności lub dotknąć ich wszystkich. Mój język? Wszystkie, w razie potrzeby, ale programuję od 1984 r., Mam dyplom z CS, gry pisane i wszelkiego rodzaju aplikacje na systemy wbudowane. Tak robię. Musisz dowiedzieć się, kim jesteś i co robisz. Tylko upewnij się, że dobrze się bawisz.

Cieszyć się!

Scott Foulk
źródło
0

oops, źle odczytane bezpieczeństwo informacji dla systemów informacyjnych ... no cóż, większość z nich nadal obowiązuje

Jawa

  1. Musi być kurs programowania na poziomie podstawowym, który będzie oparty na java, który będzie się liczyć do twojego stopnia. Zawsze miło jest zdobyć kredyty za rzeczy, których się uczysz.
  2. Zapewni ci to pewien rozwój kariery, jeśli będziesz miał dość bycia facetem od systemów ... lub jeśli firma, którą później pracujesz, zdecyduje, że systemy są jak tostery, podobnie jak ludzie, którzy nimi zarządzają.
  3. Obiektowy
  4. Powiedziałeś, że chcesz zrobić programowanie na Androida. To będzie oznaczało Javę.

Szczerze mówiąc, jeśli pracujesz w Linuksie i zaczynasz kurs programowania w Javie, a następnie może kontynuujesz kilka kolejnych kursów programowania, inne narzędzia, takie jak Bash sed / awk itp., Powinny się w pewnym sensie na miejscu. Jeśli naprawdę wejdziesz do systemów, możesz później odebrać trochę C, ale nie powiedziałbym, że jest to bardzo pożądane i nawet nie powiedziałbym, że jest to wymagane, aby być facetem systemowym - chyba że naprawdę interesujesz się wewnętrznymi.

YMMV

MLH
źródło