Là ngôn ngữ python cấp thấp?

Các ngôn ngữ cấp cao như JavaScript và Python có thể là ngôn ngữ lập trình phổ biến nhất hiện nay, nhưng không có gì phải bàn cãi khi nói rằng các ngôn ngữ này đang làm rất nhiều việc cho nhà phát triển, từ quản lý bộ nhớ đến giải thích thời gian chạy. Mặt khác, lập trình cấp thấp có rất ít tính trừu tượng – bạn đang viết mã gần với máy tính hơn nhiều. Vậy tại sao bạn lại muốn học lập trình cấp thấp?

Những gì bạn cần biết

  • Cấp độ thấp đề cập đến mã được viết trực tiếp cho máy tính – tức là. Mã máy và lắp ráp

  • C có phải là ngôn ngữ cấp thấp không?

  • Tại sao cấp thấp? . Trên hết, việc hiểu những gì đang diễn ra bên trong sẽ giúp bất kỳ ai trở thành nhà phát triển tốt hơn.  

Gặp gỡ các chuyên gia

  • Olivier là cố vấn tại Trường Holberton, nơi ông giúp học sinh khi họ có câu hỏi liên quan đến lập trình cấp thấp. Anh ấy cũng là Kiến trúc sư phần mềm trưởng tại FutureOn trong ngành dầu mỏ. Trước đây, anh ấy đã lãnh đạo việc phát triển các thư viện GIS (bản đồ) cho các trò chơi video được xây dựng và di động như Age of Conan.  

  • Arthur Damm đã có 7 năm làm gia sư riêng về toán, khoa học và lập trình (và có một năm thực tập kỹ thuật hợp đồng phát triển Java Android). Arthur đã chọn Trường Holberton vì khả năng tiếp cận của ISA, khuôn viên mát mẻ ở San Francisco và chương trình giảng dạy toàn diện nghiêm ngặt (tất nhiên bao gồm cả lập trình cấp thấp). Arthur hiện đang trong giai đoạn Chuyên ngành cuối cùng của Trường Holberton

Lập trình cấp thấp là gì?

Arthur. Trong thời hiện đại, lập trình cấp thấp là bất kỳ ngôn ngữ nào mà bạn xử lý việc quản lý bộ nhớ. Bất kỳ ngôn ngữ nào mà việc quản lý bộ nhớ hoặc thu gom rác được thực hiện cho bạn, hiện là hầu hết các ngôn ngữ, đều được coi là “cấp độ cao”. ”

Olivier. Lập trình cấp thấp về cơ bản là mọi thứ gần với phần cứng mà bạn đang chạy mã của mình trên đó. Nó có thể có ý nghĩa khác nhau tùy thuộc vào mục tiêu của bạn. Nếu bạn xây dựng một tòa nhà, bạn luôn bắt đầu với nền móng và xây dựng trên đó. Phát triển cấp thấp là nền tảng đó – nếu bạn bắt đầu với lập trình cấp cao, thì bạn không hiểu điều gì đang diễn ra bên dưới

Mẹo chuyên nghiệp. Thu gom rác là khi hệ thống dọn dẹp cho bạn. Trong lập trình C, bạn phải tự dọn dẹp.  

Ví dụ về ngôn ngữ lập trình cấp thấp

Arthur. Ngày xưa, C được coi là ngôn ngữ cấp cao. Ngày nay, nhiều kỹ sư có thể cười vì C quá thấp. C và C++ hiện được coi là ngôn ngữ cấp thấp vì chúng không có quản lý bộ nhớ tự động.  

Olivier. Định nghĩa về mức độ thấp đã thay đổi khá nhiều kể từ khi bắt đầu khoa học máy tính. Tôi sẽ không coi C là ngôn ngữ cấp thấp hay cấp cao, mà giống ngôn ngữ trung gian hơn. Lập trình cấp thấp thực sự duy nhất là mã máy hoặc hợp ngữ (asm). Hợp ngữ càng gần càng tốt với những gì CPU (bộ xử lý của máy tính) có thể thực thi, vì nó thực sự là một bản dịch văn bản của mã nhị phân mà CPU hiểu được. Ví dụ: các thư viện nén thường được xây dựng bằng C và các phần rất cụ thể sẽ được xây dựng bằng cách sử dụng hợp ngữ, nhưng số lượng hợp ngữ ngày càng ít hơn vì trình biên dịch đang tối ưu hóa tốt hơn rất nhiều.  

Arthur. Tôi coi C là một ngôn ngữ cấp thấp ngày nay. Chắc chắn, đó là ngôn ngữ chính mà Holberton sử dụng trong chương trình giảng dạy cấp thấp. Vì vậy, đối với tôi, C là cấp thấp vì khi sử dụng nó, chúng tôi phải quản lý bộ nhớ ứng dụng của chính mình, nó không được quản lý bởi ngôn ngữ. Điều này đòi hỏi chúng tôi với tư cách là kỹ sư phải chịu trách nhiệm hoàn toàn về hành động của mình. Điều này có nghĩa là những sai lầm của chúng tôi sẽ có xu hướng trở nên thảm khốc nhưng phần thưởng là đáng kể về hiệu quả và mức tiêu thụ năng lượng trên bất kỳ thiết bị nào chạy mã của chúng tôi. Ngoài ra, trở thành một lập trình viên C có thể khiến bạn hài lòng nếu bạn muốn hiểu các chi tiết kỹ thuật trong công việc của mình.

Lập trình cấp thấp vs Lập trình cấp cao

Olivier. Nói chung, cấp độ cao có nghĩa là bạn có thể sử dụng nhiều trừu tượng để hoàn thành những gì bạn muốn làm. Ở cấp độ thấp, bạn sẽ chỉ có một bộ chức năng tiêu chuẩn. Ngôn ngữ cấp thấp cũng mang lại cho bạn rất nhiều tự do

Ví dụ về ngôn ngữ cấp cao.  

Arthur. Trong chín tháng đầu tiên ở trường Holberton, chúng tôi đã học hai ngôn ngữ cấp cao là Python và JavaScript. Tất cả các ngôn ngữ cấp cao hơn như Python, Javascript, v.v. đều được xây dựng từ C. Bằng cách hiểu cách chúng hoạt động bí mật, tôi có thể viết mã cấp cao của mình tốt hơn để hoạt động theo thiết kế bên trong của nó, mang lại hiệu suất ứng dụng vượt trội với nhận thức sâu hơn về lỗi. Ngoài ra, vì C rất khắt khe nên khi chuyển sang một ngôn ngữ cấp cao hơn, lập trình viên có cảm giác như trút được gánh nặng và trải nghiệm cảm giác dễ dàng diễn đạt

Mẹo chuyên nghiệp. Khi bạn muốn thêm các tính năng mới vào Python, đó gọi là tiện ích mở rộng. Và chúng thực sự được viết bằng C. Đối với một số bài tập nâng cao của Holberton, học sinh thực sự viết mã C bên dưới Python, sau đó kiểm tra chúng cùng nhau để xem nó có hoạt động không

Nếu hầu hết các ngôn ngữ cấp cao đang làm công việc quản lý bộ nhớ và thu gom rác cho bạn, thì biết lập trình cấp thấp để làm gì?

Arthur. Trong kỹ thuật, không có giải pháp hoàn hảo. Chỉ có sự đánh đổi. Khi một ngôn ngữ xử lý việc quản lý bộ nhớ, kỹ sư sẽ làm việc dễ dàng hơn. mớ hỗn độn của bạn được dọn dẹp cho bạn. Tuy nhiên, sự đánh đổi là điều này thường tạo ra mã kém hiệu quả hơn, đòi hỏi nhiều tính toán hơn. Trên thực tế, điều đó có nghĩa là điện thoại di động, máy tính xách tay, cảm biến thông minh hoặc các thành phần trong thiết bị thông minh sẽ tốn nhiều điện hơn. Lượng năng lượng mà một thiết bị sử dụng thực sự rất quan trọng trong các hệ thống nhúng và thiết bị đeo được

Lập trình cấp thấp trở nên đặc biệt quan trọng trong Internet vạn vật (IoT) và các thiết bị đeo được, trong đó hiệu quả tiêu thụ điện năng thực sự là yếu tố quan trọng nhất cần cân nhắc

Thứ hai, tất cả các ngôn ngữ cấp cao đều được xây dựng từ các ngôn ngữ cấp thấp. Bạn sẽ cần lập trình cấp thấp để duy trì và tiếp tục phát triển các ngôn ngữ cấp cao đó

Olivier. Mặc dù có một nỗ lực lớn để có thể sử dụng ngôn ngữ cấp cao để có thể viết những thứ cấp thấp như trình điều khiển cho cạc đồ họa, ngôn ngữ cấp thấp vẫn cần thiết cho hiệu suất. Ví dụ: mọi thứ liên quan đến mã hóa hoặc giải mã và mã hóa có thể sẽ sử dụng lập trình cấp thấp, với C và có thể là một số hợp ngữ để sử dụng hướng dẫn mở rộng (như AVX, SSE, v.v.). Về cơ bản, mọi thứ cần hiệu suất cao và tinh chỉnh sẽ yêu cầu lập trình cấp thấp một chút

Công việc yêu cầu lập trình cấp thấp

Olivier. Bất kỳ công việc nào liên quan đến phát triển phần mềm nhúng và xây dựng mã cần chạy nhanh. Nếu bạn hiểu lập trình cấp thấp, có thể bạn sẽ hiểu mọi thứ ở trên. Khi tôi đang tuyển dụng và ứng viên gặp khó khăn với một vấn đề về React, tôi muốn thấy rằng nhà phát triển có thể đọc mã và hiểu những gì thư viện đang làm

Ngoài ra, nếu bạn muốn làm việc trong lĩnh vực lập trình GPU bằng các ngôn ngữ “cấp cao” như CUDA hoặc OpenCL, bạn sẽ cần hiểu về lập trình cấp thấp. Trong GPU (đơn vị xử lý đồ họa),  mọi thứ đều song song và cách bạn định dạng bộ nhớ cũng quan trọng như mã thực tế

Arthur. Tôi sẽ tìm việc làm trong Internet of Things hoặc các hệ thống nhúng. Mục tiêu của tôi là làm việc trong một dự án thú vị và tất nhiên là áp dụng các kỹ năng lập trình C cấp thấp của tôi.  

Cách học lập trình C hoặc cấp thấp

Bạn có nên học lập trình cấp thấp trước khi học một ngôn ngữ cấp cao như Python hay JavaScript hay Java?

Arthur. Câu trả lời cho điều đó sẽ phụ thuộc vào loại kỹ sư bạn muốn trở thành. Muốn tối ưu thời gian đào tạo ngắn nhất thì bỏ qua level thấp, học thẳng JavaScript hoặc Python và chỉ luyện cái đó cho đủ giỏi rồi bắt tay vào làm

Nhưng tôi đã thực sự đánh giá cao ý tưởng của Trường Holberton – chúng là một giải pháp thay thế cho bằng cấp khoa học máy tính bốn năm truyền thống, vốn dĩ là một cấp độ kỹ sư khắt khe và kỹ thuật hơn. Trong trường hợp đó, tôi nghĩ bắt đầu với C là lý tưởng nhất, bởi vì nó yêu cầu bạn hiểu tất cả các chi tiết theo cách rất phù hợp. Ví dụ: bằng cách học C trước, chúng ta thực sự trở nên có khả năng hơn nhiều khi chuyển sang Python

Olivier. Nếu bạn muốn cải thiện kỹ năng của mình với tư cách là nhà phát triển, bạn cần hiểu cách thức hoạt động của máy tính, ngay cả khi bạn không biết các chi tiết. Nếu bạn học cách lập trình bằng C trước, thì bạn sẽ có thời gian dễ dàng hơn nhiều với các ngôn ngữ cấp cao sau này.  

Bạn có cần biết toán để lập trình cấp thấp không?

Arthur. Khoa học máy tính chia thành các con số, vì vậy chúng ta không thể bỏ toán học trong lập trình cấp thấp. Bạn nên làm quen với đại số nâng cao. Bạn sẽ không cần toán ở cấp độ giải tích, nhưng bạn sẽ cần ít nhất là toàn bộ môn toán ở trường trung học phổ thông khi bạn giải quyết một số vấn đề nhất định với tư cách là một kỹ sư cấp thấp.  

Lập trình trình độ thấp tại trường Holberton

Arthur. Chín tháng đầu tiên của chúng tôi (được gọi là Nền tảng) là một chương trình giảng dạy đầy đủ, nghĩa là chúng tôi học các ngôn ngữ cấp thấp và cấp cao. Cơ sở là phần giới thiệu chung tuyệt vời cho tất cả các lớp của ngăn xếp, đó là. dự án cấp thấp, cấp cao, devops, cơ sở dữ liệu và danh mục đầu tư. Chúng tôi học lập trình C gần đúng ba tháng. Và sau đó trong Chuyên môn hóa, chúng tôi tiếp tục ở bất cứ nơi nào chúng tôi đã dừng lại trong phần đó của nền tảng. Trong trường hợp của tôi, chúng tôi tiếp tục lập trình hệ thống kỹ thuật bằng ngôn ngữ C cấp thấp. Vì vậy, chúng tôi học cách viết mã của mình theo cách được viết cho Linux, được coi là hệ điều hành tiêu chuẩn của thế giới kỹ thuật.  

Olivier. Nền tảng của C rất quan trọng, vì nó mang lại cho học sinh Holberton cơ sở để xây dựng. Nếu bạn biết C, có khả năng cao là bạn sẽ có thể hiểu bất kỳ ngôn ngữ mệnh lệnh nào ném vào bạn. Ngoài ra, bạn sẽ hiểu cách hoạt động của bộ nhớ. Chương trình chuyên môn kéo dài 9 tháng của Trường Holberton về cơ bản là một bước khởi đầu cô đọng để giúp bạn trở nên giỏi hơn nhanh hơn trong lĩnh vực khoa học máy tính mà bạn yêu thích.  

Ví dụ về dự án lập trình cấp thấp

Arthur. Phần lớn cho đến nay, chúng tôi đã sao chép các thành phần tồn tại trong hệ điều hành Linux. Linux được coi là một tác phẩm nghệ thuật kỹ thuật. Hiện tại, chúng tôi đang làm việc trên trình bao hoặc dòng lệnh. Điều đó liên quan đến khá nhiều lập trình hệ thống tiên tiến.  

Tại Holberton, mặc dù chúng tôi không có giáo viên hướng dẫn thường xuyên nhưng chúng tôi được giao các dự án có kiểm thử tự động, và đây là một trong những dự án. Sau đó, sau này, chúng tôi sẽ có các dự án danh mục đầu tư của riêng mình, nơi chúng tôi có thể chọn những gì chúng tôi muốn tạo.  

Để thực hành thuật toán hàng tuần của chúng tôi, gần đây chúng tôi đã nghiên cứu một thuật toán so khớp mẫu rất thú vị được gọi là KMP, tìm kiếm chuỗi con Knuth–Morris–Pratt. Nó thực sự kỹ thuật, nhưng cũng dễ tiếp cận một cách đáng ngạc nhiên. Tôi luôn cảm thấy hơi hồi hộp khi lần đầu tiên tìm hiểu một thuật toán mới và thực sự bắt đầu hiểu nó

Làm thế nào một người nào đó có thể bắt đầu trong Lập trình cấp thấp?

Olivier. Chúng ta may mắn được sống trong thời đại mà thông tin ở khắp mọi nơi. Tôi giới thiệu một cuốn sách có tên là Ngôn ngữ lập trình C của Dennis M. Ritchie và Brian W. Kernighan (người tạo ra C).  

Lời khuyên của tôi cho mọi sinh viên là đọc mã. Ban đầu, điều này thật khó khăn, nhưng bạn sẽ trở nên giỏi hơn với nó. Nền tảng của tôi trong C đã giúp tôi rất nhiều trong những năm qua.  

Tìm hiểu thêm và đọc Trường Holberton trên Báo cáo Khóa học. Bài viết này được thực hiện bởi nhóm Báo cáo khóa học hợp tác với Trường Holberton

Python có được coi là cao không

Python là ngôn ngữ lập trình cấp cao, hướng đối tượng . Hướng đối tượng có nghĩa là ngôn ngữ này dựa trên các đối tượng (chẳng hạn như dữ liệu) chứ không phải chức năng và cấp cao có nghĩa là con người dễ hiểu.

Tại sao Python không phải là thấp

Những ngôn ngữ như vậy có bộ nhớ hiệu quả thấp . Vì vậy, nó tiêu tốn nhiều bộ nhớ hơn các ngôn ngữ cấp thấp. Chúng được sử dụng rất rộng rãi và phổ biến trong thời đại ngày nay. Java, C, C ++, Python, v.v. , là một vài ví dụ về ngôn ngữ cấp cao.

Python có phải là ngôn ngữ cấp thấp hơn C không?

Tóm lại, C là ngôn ngữ lập trình thủ tục, cấp thấp, cũ hơn, được biên dịch. Nó có nhiều quyền kiểm soát hơn đối với chính nó và máy tính, đồng thời nó chạy nhanh hơn. Python, mặt khác, là một ngôn ngữ lập trình hướng đối tượng, cấp cao và được thông dịch, dễ học hơn .

C ++ có thấp hơn Python không?

C++ đã trở nên phổ biến và vẫn là một trong những ngôn ngữ lập trình quan trọng nhất, đặc biệt là cho các hệ thống nhúng. C++ là ngôn ngữ lập trình cấp thấp hơn so với Python . Điều này có nghĩa là ngôn ngữ gần với máy hơn và nó có thể thao tác trực tiếp với phần cứng.