Ngôn ngữ nào để bắt đầu trên Linux? [đóng cửa]


19

Tôi sắp bắt đầu bằng cấp bảo mật thông tin 4 năm tại Purdue. Bằng cấp không gọi cho bất kỳ khóa học lập trình. Vì vậy, lần duy nhất tôi có thể lấy một lần là tự chọn thỉnh thoảng. Vì vậy, hầu hết việc học của tôi sẽ là của riêng tôi. Vào đầu năm cấp ba, tôi quyết định chuyển hoàn toàn sang Linux. Cho đến nay tôi đã học được một số thứ về Linux và bảo mật. Tuy nhiên, tôi cũng tin rằng việc học một vài ngôn ngữ lập trình cũng rất quan trọng.

Về cơ bản, tôi đang lên kế hoạch học lập trình song song với việc học cách sử dụng Vim. Vì vậy, nó rất có thể sẽ là một quá trình chậm. Cuối cùng, tôi nghĩ rằng nó sẽ có giá trị, mặc dù. Như tôi đã nói, tôi sẽ đi sâu vào bảo mật, vì vậy tôi chủ yếu sẽ tạo các ứng dụng liên quan đến bảo mật, hầu hết trong số đó sẽ liên quan đến mạng. Tôi cũng muốn bắt đầu phát triển các ứng dụng Android, nhưng điều đó sẽ muộn hơn.

Với những gì đã nói tôi có một vài ý tưởng. Tôi đã nghĩ đến việc bắt đầu với JavaScript, bởi vì nó là nền tảng chéo và tôi đã thấy nó được đề xuất trước đây. Tôi cũng đã được nghe rất nhiều về Ruby hoặc có thể đi theo con đường Linux tự nhiên với C. Tôi nên đi theo hướng nào?

Câu trả lời:


53

Đầu tiên và quan trọng nhất: bashcùng với các tiện ích dòng lệnh chung. Bashlà giao diện người dùng mặc định cho hệ điều hành và rất nhiều chương trình trên hệ thống Linux sẽ được gói trong một tập lệnh shell ở một mức nào đó. Nó có thể kỳ quặc, có một số đặc điểm riêng, và thường có vẻ hết sức ngu ngốc, nhưng đó là điều bạn sẽ phải đối phó, vì vậy hãy thoải mái với nó. Các công cụ tiêu chuẩn thích grep, diff, head, tail, sort, uniq, và như vậy, sẽ rất hữu ích không chỉ với kịch bản vỏ, nhưng với năng suất của bạn trên dòng lệnh.

Tìm hiểu ít nhất một số c. Đó là những gì các cấp thấp nhất của hệ thống được viết và nó sẽ giúp bạn hiểu rõ hơn về toàn bộ hệ thống.

Chọn bất kỳ ngôn ngữ cấp cao hơn mà bạn thích. Python, ruby, perl, java, Bất cứ điều gì - miễn là bạn sẽ thích nó. Đây là nơi bạn thực sự bắt đầu học cách "lập trình", và từ đây trở đi sẽ dễ dàng hơn để tiếp nhận nhiều ngôn ngữ hơn và tiếp tục học hỏi .


2
Tôi đồng ý với tất cả các điểm được liệt kê ở đây.
Joe

6
Nếu bạn đang đi để tìm hiểu bash thì bạn nên bao gồm tìm hiểu về awk, sed, người đứng đầu, đuôi, cắt, tr, diff, grep, tìm, ps, netstat, tcpdump, sắp xếp, uniq, vv, vv, vv
jftuga

2
@jftuga Đồng ý. Một tỷ lệ lớn trong bộ công cụ của tôi là các kỹ năng để thực hiện "trích xuất và tích hợp dữ liệu" - một cách hay để nói "thao tác với các tệp văn bản có định dạng". Khi bạn hiểu được đường ống dẫn và tìm hiểu các công cụ phổ biến, bạn sẽ không bị làm phiền với quy trình làm việc của bất kỳ phần mềm được cuộn sẵn nào. Tôi cũng là một fan hâm mộ lớn của MS Powershell, người đứng trên vai Bash trong nhiều khía cạnh.
AndyN

@jftuga - lưu ý. Mặc dù tôi nghĩ rằng những điều này rất quan trọng, tôi không nghĩ rằng một người mới sử dụng linux cần phải lo lắng về việc học những khẩu súng lớn như sed / awk chuyên sâu, nhưng họ nên có đủ hiểu biết để có thể giải mã mã hiện có nếu họ gặp phải nó .
JimB

8
Đồng ý với tất cả, nhưng tôi khuyên dùng Python hơn các ngôn ngữ khác như một ngôn ngữ cấp cao cụ thể vì nó đã trở thành ngôn ngữ cấp cao phổ biến nhất cho các công cụ quản lý máy chủ. Bạn sẽ chạy vào nó thường xuyên hơn nhiều so với ruby ​​hoặc java. Perl cũng phổ biến vì nó quá cũ, vì vậy tôi sẽ chọn cái tiếp theo.
tylerl

10

Bạn sẽ thấy rằng mọi người sẽ khá nhiều chỉ cần giới thiệu ngôn ngữ yêu thích của họ. Ngôn ngữ yêu thích của tôi là Perl vì vậy đó là những gì tôi khuyên dùng. :) Tuy nhiên, ngoài sở thích cá nhân của tôi, có một số lý do tuyệt vời khiến bạn nên cân nhắc sử dụng perl:

Đầu tiên, perl là một ngôn ngữ có mục đích chung tuyệt vời. Thật dễ dàng để bắt đầu perl bằng cách viết các tập lệnh đơn giản để thực hiện cùng loại việc bạn làm trong tập lệnh shell, như thao tác với tệp và đưa ra quyết định dựa trên đầu vào của người dùng. Điều này cung cấp một giới thiệu rất dễ dàng và dần dần cho các ý tưởng chung của lập trình. Perl đã xuất hiện khá lâu nên có rất nhiều tài nguyên (sách và trang web) để bắt đầu.

Thứ hai, perl là một ngôn ngữ cực kỳ mạnh mẽ và biểu cảm hỗ trợ tất cả các tính năng lập trình hiện đại. Tôi đã sử dụng nó trong hơn mười lăm năm và tôi vẫn đang học những cách mới để làm mọi việc hiệu quả hơn. Ví dụ, nếu bạn muốn khám phá lập trình hướng đối tượng, perl có điều đó (đặc biệt thông qua Moose ).

Thứ ba, perl đi kèm với sức mạnh và tính linh hoạt gần như vô hạn của kho lưu trữ bổ trợ chính thức, CPAN . Ví dụ, để làm theo ý tưởng viết phần mềm bảo mật, giả sử bạn muốn phát triển một số loại máy quét bảo mật mạng tùy chỉnh. Thay vì tự viết tất cả những điều đó, bạn có thể bắt đầu bằng cách sử dụng NMAP :: Scanner làm công cụ quét, sau đó viết các cải tiến và cải tiến của riêng bạn lên trên đó.

Cuối cùng, nếu bạn muốn khám phá lập trình web, Perl cũng có điều đó. Một cách hiện đại phổ biến để viết phần mềm web trong Perl là Catalyst , cung cấp khung web MVC hiện đại để nhanh chóng phát triển bất kỳ loại ứng dụng web nào.

Đặt tất cả những thứ đó lại với nhau, lợi thế của perl là nó cho phép bạn bắt đầu viết các tập lệnh và chương trình dòng lệnh nhỏ, và dần dần phát triển thành các ứng dụng hiện đại đầy đủ tính năng. Tất nhiên, giá của sự linh hoạt này là phức tạp. Tùy thuộc vào bạn để nghiên cứu và học cách làm mọi thứ đúng cách, perl không thực thi các thực hành tốt như cách các ngôn ngữ khác làm. Cá nhân tôi thích sự tự do này, đặc biệt là kết hợp với tất cả các tài nguyên tuyệt vời trên web để học cách sử dụng perl.


Perl là một ngôn ngữ kịch bản (chủ yếu); và hầu hết các hệ điều hành được lập trình trong C.
Chris S

Chắc chắn, nhưng tôi không nghĩ rằng điều đó quan trọng nhiều trong bối cảnh của câu hỏi này. Nghe có vẻ như OP thực sự muốn hoặc không cần phải tìm hiểu về lập trình cấp hệ điều hành.
Phil Hollenback

Tôi muốn đề xuất rằng Perl là một cách tốt để viết mã cho một ứng dụng bảo mật nhắm mục tiêu một thứ được viết bằng ngôn ngữ khác (thường là C) mà bạn đã hiểu. Do đó, nếu sự khác biệt này có ý nghĩa, tôi sẽ phân loại Perl là một công cụ bạn nên học cách sử dụng, thay vì ngôn ngữ bạn nên học (hoàn toàn) hiểu.
BMDan

6

Ba ngôn ngữ sẽ giữ bạn tốt thay. Theo thứ tự quan trọng giảm dần (nghĩa là thứ nhất là quan trọng nhất):

  1. Mã giả . Thông thường, việc triển khai mà bạn đang làm việc sẽ là một sự pha trộn của nửa tá ngôn ngữ và công cụ, chỉ một số trong đó bạn sẽ biết trực tiếp. Tuy nhiên, nếu bạn biết mô hình nào đang được triển khai, bạn có thể tìm ra đầu vào nào đang được trao cho một mảnh và đầu ra nào sẽ cung cấp, kiểm tra loại trừ đó và tìm hiểu xem đó có phải là mảnh vỡ không.
  2. C . Dù tốt hơn hay tồi tệ hơn, đó là thứ vận hành vũ trụ (Linux) và nó mang đến cho bạn cái nhìn gần gũi với mọi thứ mà bạn có thể hiểu bất kỳ ngôn ngữ cấp cao nào đang thực sự làm gì (ví dụ: PHP tham chiếu qua hoặc mô hình luồng của Java).
  3. Chỉ cần về bất cứ điều gì khác ngoại trừ C ++ . Một ngôn ngữ chức năng như SQL hay, tốt hơn là Haskell, hoặc một thứ không hoàn toàn như C-ey, nếu tất cả đều thất bại, Java có thể hoạt động cho việc này, nhưng nó vẫn mang tính thủ tục rất cao ở đây; ý tưởng là bọc bộ não của bạn xung quanh một cái gì đó hoàn toàn khác biệt với những gì bạn đã làm trước đây mà bạn không thể không nhận ra những hạn chế của những gì bạn đã làm trước đây. Về mặt tiện ích tuyệt đối, bash có lẽ cũng thuộc danh sách này, nhưng nếu bạn không có cơ sở nào khác, cuối cùng bạn sẽ viết C bằng cú pháp bash thay vì thực sự khám phá sức mạnh của nó.

1
+1 cho mã giả. Tôi thích mã giả trong các bình luận và sau đó viết mã xung quanh các bình luận
sreimer

2
+1 cho mã giả và "Bất cứ điều gì khác ngoại trừ C ++". Trong thế giới linux, bạn nên học ít nhất một script language, như pythonhoặc PHP.
yegle

2
Tôi không biết nếu mã giả là một khuyến nghị tốt cho người mới bắt đầu. Mã giả sẽ có thể hiểu được sau khi học hầu hết mọi ngôn ngữ kiểu c, vậy người ta có thực sự nên nỗ lực để tự học một mã giả không? Chưa kể, không có cú pháp mã giả duy nhất, có khả năng gây nhầm lẫn cho người mới bắt đầu.
JimB

@JimB: Quan điểm là học cách suy nghĩ logic, bất kể ngôn ngữ. ERD, UML và tương tự là các công cụ tháp ngà để làm điều này, nhưng bạn không phải học bất cứ thứ gì khá trang trọng. Ý tưởng là học cách lập biểu đồ suy nghĩ của bạn và sau đó so sánh điều đó với kết quả mong đợi. Khi bạn nhận ra rằng, ví dụ, cơ sở dữ liệu không có cách (vốn có) để biết tiêu đề HTTP nào được gửi như một phần của yêu cầu đến máy chủ Web, bạn có thể loại bỏ một biến khỏi xem xét. Tương tự như vậy, khi bạn viết mã giả cho một hàm, bạn thường phát hiện ra các trường hợp cạnh và góc mà bạn sẽ không làm.
BMDan

Tôi hoàn toàn đồng ý, tôi chỉ nghĩ rằng việc chỉ người mới bắt đầu vào "mã giả" sẽ gây nhầm lẫn, vì đó không phải là một điều chính thức. Hầu hết mã giả của mọi người sẽ là sự hợp nhất của các ngôn ngữ kiểu c mà họ cảm thấy thoải mái nhất, cộng với một số cú pháp đặc biệt.
JimB

4

Bạn nên học một vài ngôn ngữ. Tôi sẽ đề nghị bắt đầu với Python. Nó được khuyến khích rộng rãi vì dễ học và rất hữu ích, rất nhiều tài liệu tự học tuyệt vời có sẵn miễn phí và tôi thu thập nó được sử dụng rộng rãi bởi các chuyên gia bảo mật CNTT. Hầu như mỗi khi tôi thấy mã trình diễn ưu điểm bảo mật, đó là Python.


+1 cho python và Python không chỉ phổ biến trong thế giới Linux.
xiao

4

Tôi sắp bắt đầu bằng cấp bảo mật thông tin 4 năm tại Purdue. Bằng cấp không gọi cho bất kỳ khóa học lập trình.

Tôi có phải là người duy nhất nghĩ OMG không !!!! tại điểm này?

Tôi cũng tin rằng điều quan trọng đối với tôi là học một vài ngôn ngữ lập trình

Tôi sẽ nói như vậy. Mặc dù bạn không thực sự mong muốn trở thành một lập trình viên thành thạo, nhưng có lẽ bạn cần các kỹ năng cần thiết để mô phỏng / tái tạo các cuộc tấn công và hiểu cách thức hoạt động của quy trình lập trình. Bạn cũng sẽ cần các kỹ năng để phân tích dữ liệu và trích xuất thông tin từ các nguồn hàng loạt (như nhật ký). JimB đã đề cập đến bash - và trong khi bạn chắc chắn sẽ sử dụng điều này - chỉ mất khoảng vài giờ để tìm hiểu các bit thiết yếu. Thực tế là nơi duy nhất bạn có thể thấy bash là trên các hệ thống Linux - nhưng các shell khác rất giống nhau.

Tôi khuyên bạn nên học awk và / hoặc Perl để xử lý dữ liệu. Đừng bận tâm về bất kỳ yêu cầu nào để đánh dấu vào một hộp hướng đối tượng - nhưng tôi cũng khuyên bạn nên xem xét các langau không thủ tục.

Học C cũng sẽ cho bạn thấy rất nhiều thông tin về cách mã biến thành một chương trình thực thi (biên dịch chỉ là một bước trong một quy trình rất phức tạp).

Sự lựa chọn rõ ràng cho người quan tâm đến phát triển Android / di động sẽ là java - nhưng java rất cố gắng để bảo vệ nhà phát triển khỏi phải đối phó với thực tế của hoạt động và giao thức - đó là kinh nghiệm của tôi rằng đây là vấn đề bảo mật với Java ứng dụng. tức là nó có thể giúp bạn đạt được mục tiêu cuối cùng của mình và nó sẽ trông rất đẹp trên CV của bạn nhưng đừng mong đợi việc học Java để bổ sung kiến ​​thức bảo mật của bạn nhiều.


1
Bạn không phải là người duy nhất. : -o
Keith

2

Lời khuyên của tôi:

  • bash(và ilk của nó) không phải là ngôn ngữ lập trình mục đích chung. Mặc dù có thể thực hiện một số kịch bản phức tạp trong bashđó không phải là cách tốt nhất để học lập trình nói chung. Đó là cách tự nhiên nhất để hoàn thành các nhiệm vụ quản trị hệ thống, chủ yếu xoay quanh việc thực thi các chương trình khác, xử lý các tệp và thư mục dữ liệu của chúng và sắp xếp đầu vào và đầu ra vào và từ chúng. Nếu bashlà một cái búa, hãy dự trữ nó cho các vấn đề thực sự trông giống như móng tay. Học cách làm bất cứ điều gì không tầm thường bashsẽ dễ dàng hơn đáng kể nếu bạn học một số tập con rất nhỏ sedawk(vì thao tác chuỗi trong bashphần lớn được lấy cảm hứng từ cú pháp của các hoạt động tương tự trong các ngôn ngữ "nhỏ" này).
  • Đối với lập trình mục đích chung trong Linux, bạn sẽ nghe thấy nhiều đối số vô tư. Hai ứng cử viên tốt nhất là PerlPython . Đây là cả hai ngôn ngữ kịch bản cấp rất cao, là mục đích chung, cho thấy đủ chức năng cấp thấp để thực hiện hầu hết mọi hoạt động có thể truy cập được đối với bất kỳ quy trình không gian người dùng nào trên hệ thống của bạn và với các bộ sưu tập lớn các mô-đun và thư viện được viết sẵn.

Tôi khuyên bạn nên đọc một văn bản giới thiệu về C và dành chút thời gian chạy straceltracelệnh trên một số lệnh tiện ích đơn giản như lsmkdir/bin/echovv (Trên thực tế những ngày này tôi muốn đề nghị ltrace -Sthay stracenhưng đột phá vào đầu ra từ cả các lệnh và vào các ltraceđầu ra như tăng cường bởi các -Stùy chọn sẽ cực kỳ giáo dục).

C là ngôn ngữ lập trình chính trong đó nhân Linux và libc GNU được viết. (Các bộ phận nhỏ đang lắp ráp). Hầu như tất cả các chương trình trên hệ thống Linux (hoặc giống UNIX khác) được liên kết với các thư viện C (libc). Các trình thông dịch Perl và Python chính (và hầu hết các ngôn ngữ script khác) cũng được viết bằng C. Các chương trình này (kernel, thư viện hệ thống chung và các trình thông dịch ngôn ngữ script khác nhau) đều được các lập trình viên C viết bởi thiết kế và các tính năng của chúng bị ảnh hưởng mạnh mẽ bằng cách thực hiện cơ bản của họ. Do đó, sự hiểu biết sâu sắc hơn về bất kỳ điều nào trong số này cuối cùng cũng đòi hỏi sự hiểu biết C. Bạn không cần biết gì về C ++ cũng như Java để hiểu lập trình ở cấp độ này. (Mỗi người có thể thú vị và cần thiết theo cách riêng của họ tùy thuộc vào bản vá nghề nghiệp của bạn,

Vì vậy, nếu bạn đồng ý với cơ sở của tôi cho đến nay, chúng tôi đã đưa ra lựa chọn giữa Perl và Python.

Đây là nơi bắt đầu cuộc chiến ngọn lửa.

Lời khuyên của tôi là tập trung vào Python (2.x) trước. Python có một cú pháp tương đối đơn giản và nhất quán. Bạn có thể tìm hiểu những điều cơ bản về cú pháp Python trong vài giờ và đó là phần lớn cú pháp bạn sẽ gặp phải. Chỉ có một vài tính năng (hiểu danh sách, biểu thức trình tạo, trang trí) là các nếp nhăn theo cú pháp cơ bản. Vì vậy, hầu hết nỗ lực của bạn trong việc học Python sẽ được dành cho việc học các thư viện tiêu chuẩn rộng lớn và cố gắng tìm ra cách "tốt nhất" để sử dụng chúng (và tìm ra các trường hợp ngoại lệ cụ thể nào đáng để xử lý để làm cho chương trình của bạn mạnh mẽ) và, quan trọng nhất, trong việc học các khái niệm cơ bản.

Tôi nghĩ rằng các thư viện rộng lớn và cú pháp tương đối đơn giản của Python có hai nhược điểm riêng biệt.

Đầu tiên, khi bạn học cách làm điều gì đó ở cấp độ rất cao trong Python, bạn có thể thấy suy nghĩ phải làm việc ở cấp độ thấp hơn là tẻ nhạt. Nơi tôi làm việc Perl là tiêu chuẩn. Tôi tạo nguyên mẫu cho công việc của mình bằng Python, nơi tôi biết tôi có thể khiến nó hoạt động nhanh hơn và đáng tin cậy hơn sau đó ở Perl; sau đó tôi sợ phải đi qua và chuyển nó cho Perl cho các đồng nghiệp của tôi. (Tôi khá giỏi ở Perl năm trước khi tôi sử dụng Python --- vì vậy đó không phải là vấn đề quen thuộc đơn giản).

Nhược điểm khác là đôi khi rất khó tìm ra cách cao nhất để hoàn thành một nhiệm vụ nhất định trong Python. Ví dụ: để tìm nạp một trang web, ban đầu bạn có thể thử làm nó với các ổ cắm cấp thấp ... sẽ hoạt động. Tuy nhiên, bạn sẽ sao chép khá nhiều mã mà bạn có thể tìm thấy bao gồm trong urllibvà / hoặc urllib2các mô-đun. Thực tế là các thư viện tiêu chuẩn, kể từ 2.7.1, bao gồm cả hai điều này làm cho quan điểm của tôi. Các nhà bảo trì Python có thể mở rộng các mô-đun và API cũ hơn một cách minh bạch; tuy nhiên, có hàng tá trường hợp Python giữ lại hai hoặc ba mô-đun trong đó không thể mở rộng trong suốt vì một số lý do. (Ví dụ khác, bạn có thể nhìn vào các tùy chọn cho phân tích tùy chọn dòng lệnh: argparse, optparse, vàgetopt. Có rất ít tác hại khi viết chương trình của bạn bằng cách sử dụng getopt(phần cũ nhất trong số này). Đối với các tiện ích rất đơn giản với một vài tùy chọn và quy ước gọi điện cứng nhắc (chỉ được sử dụng bởi một nhóm nhỏ người), thì không có gì sai khi sys.argvtự mình đi qua . Tuy nhiên, thường đáng để đọc tài liệu một cách cẩn thận và theo các liên kết ở dưới cùng của các mô-đun cấp cũ hoặc cấp thấp hơn mô tả các tính năng cấp mới hơn hoặc cao hơn có sẵn.

Lời khuyên của tôi dựa trên ý kiến ​​của tôi rằng bạn muốn tập trung vào các khái niệm sâu hơn và không phải dành nhiều thời gian và công sức cho các vấn đề cụ thể về cú pháp và ngôn ngữ. Hiểu khi nào nên sử dụng một quy trình con, so với một luồng hoặc các tính năng đa xử lý có trong Python có rất ít liên quan đến ngôn ngữ và mọi thứ liên quan đến trình độ thành thạo bất kể ngôn ngữ. (Tại thời điểm mà bạn có thể hiểu các đối số về mô hình hướng sự kiện của Twisted bằng cách so sánh với luồng và đa xử lý thì có lẽ bạn sẽ thành thạo Python và sẵn sàng lập trình bằng bất kỳ ngôn ngữ nào).

Đối số truy cập, đối với Perl, là đơn giản và thực tế. Có khá nhiều công việc ngoài kia sẽ gọi, đặc biệt, cho các kỹ năng với Perl. Perl là một ngôn ngữ mạnh mẽ và có thư viện cực kỳ rộng lớn. (Cốt lõi của Perl được phân phối với hầu hết hệ thống Linux có phạm vi chức năng nhỏ hơn so với các thư viện Python tiêu chuẩn; giả định rằng bạn sẽ cài đặt một số lượng đáng kể các gói bổ sung từ bản phân phối của mình hoặc thông qua CPAN --- Lưu trữ Perl toàn diện Mạng). (Ngược lại, có ít mô-đun và gói Python hơn mà tôi phải tìm nạp riêng ... chúng có sẵn từ PyPI --- Chỉ mục gói Python).

Vì vậy, nếu bạn học Perl, bạn sẽ nhanh chóng tìm được việc làm, đặc biệt là các công việc sysadmin, trong thời gian ngắn. Tuy nhiên, cú pháp của Perl là ... à ... theo cách nói của một số người đam mê nó ... "chiết trung bệnh lý!" Perl có thể cực kỳ ngắn gọn và mã của nó chứa đầy dấu chấm câu. Những người yêu thích nó sẽ tranh luận không ngừng rằng nó "dễ dàng" và có ý nghĩa hoàn hảo --- và sẽ có cơ hội vô tận để làm điều đó trong các diễn đàn chứa đầy sự nhầm lẫn về cách chính xác một đoạn mã được giải thích. Cú pháp và ngôn ngữ được sử dụng trong tài liệu và bởi những người hỗ trợ nó trong các diễn đàn công cộng có sắc thái đến mức bạn có thể dành nỗ lực đáng kể để tìm hiểu chúng.

Bây giờ, xin vui lòng nhận ra rằng bình luận trước đó là chủ quan và thiên vị. Có thể bạn sẽ thử Perl và thấy cú pháp của nó trực quan và dễ chịu. Nếu vậy, thêm sức mạnh cho bạn. Tuy nhiên, cá nhân tôi thấy rằng sự nắm bắt các đặc điểm riêng của Perl bị phân rã rất nhanh. Các nguyên tắc cơ bản tôi giữ lại nhưng tôi thấy nó là một cuộc đấu tranh bất cứ khi nào tôi phải chuyển trở lại nó trong hơn một vài dòng mã.

Có rất nhiều ngôn ngữ khác mà bạn sẽ học, Java, Lisp và Scheme, TCL, Scala, v.v. Tuy nhiên, tôi khuyên bạn nên bắt đầu với một thứ mang lại sự cân bằng tốt nhất giữa tiện ích và sự đơn giản.


1

Trong thế giới Linux, bạn nên biết hai điều cơ bản:

  1. Regular Expression. Đây là một điều bắt buộc. RegExlà một "ngôn ngữ" phổ quát, một khi bạn biết cách sử dụng biểu thức chính quy, cuộc sống của bạn sẽ dễ dàng hơn nhiều :-)
  2. " quick & dirty" Rất phổ biến trong thế giới Linux. Nếu bạn có thể hoàn thành công việc của mình, bất kể giải pháp của bạn xấu đến mức nào, bạn đã hoàn thành công việc của mình.

Vì vậy, nếu bạn muốn tìm hiểu một ngôn ngữ trên Linux, bạn NÊN chọn một script language, như python, PHPhoặc thậm chí bash scripting.

Và, đề nghị của tôi là PHP. Nó đơn giản và xấu xí. Nó có một hướng dẫn trực tuyến chi tiết . Nó có RegExhỗ trợ tốt . Đó là tất cả.


2
Đó phải là mô tả hay nhất về PHP mà tôi từng nghe ... Khi bạn nổi tiếng, sẽ không có nhiều thứ bị bỏ lại phía sau: P
Gordon Gustafson

Hơi lạc đề một chút, nhưng tôi nghĩ lý do chính cho sự phổ biến của PHP là nhiều hàm sẽ nằm rải rác trên nhiều gói / thư viện liên kết trong các ngôn ngữ khác là tiêu chuẩn trong PHP (giống như gói hầu hết mọi thứ bạn cần libc)
Phil Lello

1

Bạn có thể thực hiện hầu hết mọi nhiệm vụ trong hầu hết mọi ngôn ngữ, vì vậy lựa chọn đúng chủ yếu được quyết định bởi vấn đề bạn đang giải quyết.

Đó chắc chắn là giá trị biết ngôn ngữ từ các loại sau:

  • Các ngôn ngữ được biên dịch (như C / C ++ / Java). C / C ++ là một nơi tốt để khám phá các vấn đề bảo mật với lỗi tràn bộ đệm, tham nhũng ngăn xếp, v.v.
  • Các ngôn ngữ được giải thích (như PHP). Một nơi tốt để khám phá các vấn đề với các biến được gõ lỏng lẻo và không phát hiện các hàm không xác định cho đến khi bạn gọi chúng
  • Ngôn ngữ kịch bản (sh / bash / csh / ksh). Thực sự hữu ích để dán nhiều tiện ích shell hữu ích (xem / bin & / usr / bin) cùng nhau

Tôi sẽ nỗ lực để tìm hiểu C / C ++, vì điều này cho phép ngăn xếp tham nhũng và truy cập bộ nhớ trực tiếp. Điều này rất quan trọng nếu bạn muốn thử nghiệm các vấn đề bảo mật. Nhiều ngôn ngữ có cú pháp giống như C (bao gồm JavaScript), vì vậy đây là một bàn đạp tốt.

Nếu bạn đang làm việc trong một cái vỏ nhiều, mà tôi đoán bạn đang học vim, thì cuối cùng bạn sẽ học được các kịch bản cơ bản của shell như một tác dụng phụ. UNIX Power Tools là một cuốn sách tốt để tìm hiểu các công cụ nâng cao hơn; Tôi không biết nếu nó vẫn được xuất bản.

PHP cũng có thể là một ngôn ngữ tốt để học; lợi thế chính mà nó cung cấp cho các lập trình viên mới là có rất nhiều chức năng được tích hợp, thay vì trong thư viện mà bạn cần liên kết đến (đây không phải là một nhiệm vụ phức tạp). Bởi vì điều này, duyệt các tài liệu chính sẽ dạy cho bạn về nhiều điều.


1

Đầu tiên, một số lời khuyên tiêu cực:

Về cơ bản những gì tôi dự định làm là học lập trình song song với việc học cách sử dụng Vim.

Đừng làm thế. Tìm một biên tập viên thực sự thoải mái. Học cả ngôn ngữ và trình soạn thảo cũng khó như học theo thứ tự (rõ ràng trình soạn thảo nên đi trước :-))

Như tôi đã nói tôi sẽ đi sâu vào bảo mật nên tôi sẽ tạo ra các ứng dụng chủ yếu liên quan đến bảo mật. Hầu hết trong số đó sẽ được liên quan đến mạng.

Mạng ứng dụng bảo mật liên quan? C là một sự lựa chọn không có trí tuệ ở đây. Bạn sẽ cần truy cập mạng ở cấp API hệ thống, điều đó có nghĩa là C là con đường để đi. Tất nhiên, điều này không có nghĩa là mọi thứ cần phải có trong C - thư viện C + $favorite-high-level-languagetrình bao bọc có thể giúp bạn tiết kiệm những rắc rối liên quan đến C trong những phần không cần C.

Với những gì đã nói tôi có một vài ý tưởng. Tôi đã nghĩ đến việc bắt đầu với JavaScript, bởi vì nó là nền tảng chéo và tôi đã thấy nó được đề xuất trước đây.

Tôi cá là nó đã được đề xuất trong một bối cảnh khác với bạn. JavaScript có thế mạnh của nó nhưng nó không phải là một ngôn ngữ có mục đích chung tốt, chưa. JS không có thư viện chuẩn nào có thể so sánh với các thư viện có sẵn cho C, Python, Perl, Ruby, Java và công ty.

Nói về $favorite-high-level-language- lời khuyên của tôi là đi với Python. Nó giao diện độc đáo với C, nó cung cấp rất nhiều thư viện hữu ích và có nhiều thư viện hơn có sẵn dưới dạng tiện ích bổ sung.


0

Không có gì sai khi học Javascript nhưng nó chỉ chạy dưới một trình duyệt, vì vậy chương trình của bạn sẽ bị giới hạn trong các ứng dụng liên quan đến trang web.

Có lẽ có nhiều câu trả lời cho 'ngôn ngữ lập trình tốt để bắt đầu' là gì khi có ngôn ngữ. Điều đáng nói của tôi là bạn có thể làm tồi tệ hơn là bắt đầu với kịch bản shell cơ bản, chỉ cần nhìn thấy những gì bạn có thể làm để tự động hóa các tác vụ mà không cần sử dụng bất cứ thứ gì ngoài shell, sau đó mở rộng bằng cách sử dụng Perl hoặc một ngôn ngữ tương tự không cần phải làm các nhiệm vụ phức tạp hơn lớp vỏ có khả năng, sau đó, và nếu bạn thực sự quan tâm, nó sẽ chỉ mất vài tuần, bắt đầu sử dụng C hoặc một công cụ phái sinh.


3
Chỉ trên trình duyệt? Không phải Anymore .
EEAA

Cảm ơn, tôi đã sửa chữa, nhưng tôi vẫn không đề xuất Javascript như một môi trường học tập, đối với người mới bắt đầu, việc nhận hỗ trợ cho các phiên bản không có trình duyệt sẽ là một cơn ác mộng.
khoảng trống

2
Tôi đã luôn nghĩ ECMAScript là ngôn ngữ lập trình và Javascipt nằm trên ECMAScript để cung cấp các chức năng hữu ích để thao tác DOM. Javascript dành cho trình duyệt.
Jonathan Mayhak

0

Khuyến nghị của tôi? Hừm. Vâng, bạn có thể phải quyết định khi bạn đi. Đối với phạm vi toàn diện, tròn trịa, bạn có thể đi theo lộ trình bằng CS thông thường, có thể không theo thứ tự này.

(1) C / C ++ - Bạn có thể tải xuống các mục Hướng đối tượng và ít nhất bạn sẽ thử. C ++ là tiêu chuẩn 'chuyên nghiệp'. (2) Hội (chỉ một chút thôi - nó sẽ giúp bạn hiểu hoạt động thực sự của bộ xử lý, bộ nhớ, v.v. - bạn không cần phải kết hôn với nó.) (3) Python / Perl / Bash - Nhận những thứ này giảm ngôn ngữ, chúng sẽ hữu ích nhất cho trình độ Linux (4) PHP / Ruby, MySQL và HTML của bạn - Chỉ cần lập trình Web của bạn trên! Bạn sẽ hiểu toàn bộ quá trình tương tác giữa máy chủ và máy khách, một cấp độ tính toán khác.

Cần các khái niệm hữu ích? AI, mạng lưới thần kinh. Những thứ này sẽ làm tròn bạn ra.

Bạn có thể chọn một trong số này để làm hoặc chạm vào tất cả chúng. Ngôn ngữ của tôi? Tất cả trong số họ, khi cần, nhưng tôi đã lập trình từ năm 1984, và có bằng CS, trò chơi bằng văn bản và tất cả các loại ứng dụng hệ thống nhúng. Đó là những gì tôi làm. Bạn cần tìm ra bạn là ai và BẠN làm gì. Chỉ cần chắc chắn rằng bạn đang vui vẻ.

Thưởng thức!


0

Rất tiếc, bảo mật thông tin sai cho hệ thống thông tin ... ồ, hầu hết điều này vẫn được áp dụng

Java

  1. Phải có một khóa học lập trình cấp nhập cảnh dựa trên java sẽ được tính vào bằng cấp của bạn. Luôn luôn tốt đẹp để có được tín dụng cho những thứ bạn đang học.
  2. Nó sẽ giúp bạn phát triển sự nghiệp nếu bạn phát ốm vì trở thành một người làm hệ thống ... hoặc nếu công ty bạn làm việc sau đó quyết định rằng các hệ thống giống như lò nướng bánh và những người điều hành chúng cũng vậy.
  3. Hướng đối tượng
  4. Bạn nói rằng bạn muốn thực hiện một số phát triển Android. Điều đó có nghĩa là Java.

Thành thật mà nói, nếu bạn đang làm việc trong Linux và tham gia khóa học lập trình bắt đầu bằng Java, và sau đó có thể theo dõi thêm một vài khóa học lập trình, các công cụ khác như Bash sed / awk, v.v ... sẽ rơi vào vị trí. Nếu bạn thực sự tham gia vào các hệ thống, bạn có thể nhận được một số C sau đó, nhưng tôi sẽ không nói đó là nhu cầu lớn và thậm chí tôi sẽ không nói đó là yêu cầu của một người làm hệ thống - trừ khi bạn thực sự tham gia vào nội bộ.

YMMV

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.