Tại sao lập trình viên nên bắt đầu với ngôn ngữ lập trình C
September 18, 2021Có lần đi dạo quanh cộng đồng lập trình mình bắt gặp những câu hỏi “anh chị cho em hỏi nên bắt đầu lập trình với ngôn ngữ nào ạ?” Thật sự thì đúng là khi mới bắt đầu giữa một bể thông tin như vậy thì khó mà biết đâu là điểm bắt đầu cho bản thân.
Bạn có biết trên thế giới hiện giờ có khoảng 700 ngôn ngữ lập trình khác nhau không? Tuy nhiên trong ngành công nghiệp phần mềm nói chung thì lập trình viên thường chỉ sử dụng khoảng 20 ngôn ngữ lập trình khác nhau để xây dựng một hệ thống hay ứng dụng, trò chơi nào đó. Mặc dù ngôn ngữ lập trình được sử dụng cũng tùy mục đích khác nhau, có thể là desktop, mobile, web, nhúng… nhưng dù sao thì cũng chỉ có vài chục ngôn ngữ đáp ứng cho những nhu cầu trên. Vậy có nên học thẳng những ngôn ngữ này để làm việc được luôn không?
Lập trình viên thì đa số bắt đầu xuất phát điểm từ khi còn ngồi trên ghế nhà trường, có thể là cấp ba, cao đẳng hay đại học. Một số ít thì tay ngang, được đào tạo từ các trung tâm, trường dạy nghề. Lúc này sẽ chia ra thành 2 luồng ý kiến cho 2 hướng đi. Các trung tâm hay các trường dạy nghề thì giúp bạn nhanh chóng có thể làm được việc ngay nên họ sẽ hướng thẳng bạn tới ngôn ngữ công nghiệp bên trên để bạn có thể bắt tay vào công việc ngay khi tốt nghiệp. Phần còn lại là các trường cao đẳng đại học thì thường họ sẽ bắt đầu bằng ngôn ngữ lập trình C.
Vậy tại sao lại chọn ngôn ngữ C vậy?
Từ từ đã nào cùng mình thử phân tích so sánh sơ bộ chút. Mặc dù ngôn ngữ C vẫn được sử dụng trong một số lĩnh vực phần cứng liên quan đến phần mềm trong nền công nghiệp bên trên nhưng các ngôn ngữ như Java, C#, Javascript, Go, Python, Ruby, PHP hay một số ngôn ngữ bậc cao khác lại thường được chọn trong ngành công nghiệp phần mềm hơn bởi vì những lý do sau:
– Cú pháp và ngữ nghĩa thân thiện với con người
– Có nhiều thư viện hay chức năng có sẵn tiêu chuẩn và thường được sử dụng
– Cộng đồng hỗ trợ nhiều và đa dạng
– Hệ sinh thái nền tảng theo ngôn ngữ đó phong phú
Đâu đó cũng có một ý kiến so sánh khác khi mà họ không quyết định dùng C để triển khai trong dự án mình bởi vì có những ngôn ngữ xịn sò hơn, dễ học, dễ tiếp cận, linh hoạt trong mọi môi trường hơn C vậy tại sao lại phải tự làm khó mình vậy. Đúng là C vẫn là một sự lựa chọn tốt nhất cho một số dự án phần cứng liên quan hay còn gọi là các chương trình nhúng. Nhưng đa số lập trình viên lại làm việc với web, với mobile, với PC desktop cơ trong khi số ít lập trình nhúng. Thế là đa số lại cãi thắng thiểu số. Haizzz!
Quay trở lại vấn đề tại sao chọn C làm ngôn ngữ tiếp cận đầu tiên khi mới bắt đầu nhé. Dưới đây là một vài lý do mà cá nhân mình thấy
Ngôn ngữ C tạo cho bạn cách giải quyết vấn đề tốt hơn
Đa số các ngôn ngữ khác thường xây dựng sẵn các hàm, hay thư viện sẵn có để giải quyết những vấn đề hay gặp trong lập trình. Những thuật toán khó hiểu, cấu trúc dữ liệu hay giải thuật bí ẩn đều được đóng gói và gói gọn hết trong thư viện rồi. Bạn chỉ cần gắn thư viện vào và gọi hàm, đưa đầu vào rồi nhận kết quả thay vì hì hục xây dựng thuật toán bên trong. Khi này đúng là sướng cái đầu thật đó nhưng mà với những người bắt đầu học thì lại là một thứ gì đó ăn sẵn. Đối với ngôn ngữ C thì khác, thư viện nó hỗ trợ chỉ là những thứ căn bản như nhập xuất hay những thứ thô sơ hỗ trợ kiểu dữ liệu cơ bản mà thôi. Khi này muốn giải quyết vấn đề, bài toán đặt ra thì bạn phải tự xây dựng, tự nghĩ, tự làm mọi thứ. Khi này những thứ được đóng gói trong thư viện bậc cao kia bạn phải tự thân làm ra nó để sử dụng, điều này vô tình giúp bạn hiểu được nguyên lý hoạt động và tư duy giải quyết vấn đề tốt hơn.
Đây cũng là lý do các cuộc thi olympic và hackathons lại hay chọn ngôn ngữ C để ra đề cho người tham gia.
Ngôn ngữ C giúp bạn nắm rõ phần cứng hơn
Các ngôn ngữ lập trình cấp cao như Python, C# hay Java khá thân thiện với anh em lập trình thật đó, tuy nhiên chúng lại thường trừu tượng hóa những phần cứng vật lý bên dưới để nhằm mục đích giúp người dùng dễ sử dụng hơn. Với ngôn ngữ C thì khác, nó thực sự phải tìm hiểu rất nhiều tới bộ nhớ, hay các hành vi, cơ chế hoạt động của phần cứng máy tính thì bạn mới có thể xử lý chúng một cách tối ưu được. Từ heap, stack, pointer, vùng nhớ nọ, bộ đệm kia đều phải quan tâm trong ngôn ngữ lập trình này, tuy khổ sở vậy nhưng bạn lại học được rất nhiều từ nó. Nhưng lập trình viên nếu bỏ qua những kiến thức này có thể sau này sẽ đối mặt với những vấn đề về quản lý bộ nhớ, tối ưu hiệu năng. Khi bắt đầu từ C thì có lẽ đó là một điều khổ trước sướng sau vậy.
Đây cũng là lý do các ngành nghiên cứu khoa học hay khoa học máy tính lại dùng ngôn ngữ này làm cốt lõi. Họ muốn control tất cả đó mà
Ngôn ngữ C dạy cho bạn về hiệu năng và nền tảng hình thành
Lại một điểm ăn sổi nữa của ngôn ngữ bậc cao là nó hỗ trợ tận răng mọi thứ, nó trừu tượng hóa các cấu trúc và các kiểu dữ liệu để dễ dàng sử dụng. Những kiến trúc hạ tầng và cấu trúc dữ liệu được đóng gói lại chẳng khác nào hộp đen của một chiếc máy bay cả. Dùng thì sướng đó, nhưng đến khi đến giới hạn không xử lý được hay sự cố về cấu trúc ẩn sâu bên trong thì bạn lại mất thời gian nhiều vá lỗi nhiều hơn. Chứa kể phải hiểu, phải nắm rõ mới có thể chỉnh sửa tối ưu được. Về điểm này thì ngay ban đầu ngôn ngữ C như một tờ giấy trắng sẽ giúp bạn rèn luyện tư duy này. Hơn nữa C còn có thể giúp bạn can thiệp sâu hơn gần với mã máy nhất để có thể tối ưu được mọi thứ, nó vẫn đảm bảo chúng ta có thể hiểu mà không quá khó khăn như hợp ngữ hay mã máy.
Đây là lý do mà các lĩnh vực liên quan đến nhúng như điều khiển vi mạch, rô-bốt thiết bị IOT lại sử dụng C làm cốt lõi.
Ngôn ngữ C giúp bạn viết code sạch hơn
Bạn có thể phải mất rất nhiều dòng code C để có thể viết nên một chức năng nhưng chỉ mất một dòng với ngôn ngữ bậc cao khác. Điều bạn cần làm lúc này là làm sao phải tổ chức được mã nguồn của bạn để có thể gọn gàng sạch đẹp nhất, dễ hiểu và dễ thêm mới hay thay đổi nhất với số lượng dòng code nhiều hơn các ngôn ngữ khác nếu không muốn biến những tác phẩm của mình thành những đống sh*t và chỉ quên ngay sau 1, 2 tiếng code. Việc tổ chức này chính là tiền đề để bạn có thể tự tin đảm bảo code mình clean khi tiếp xúc với các ngôn ngữ cao khác vì cái khó còn học được huống chi cái dễ nhỉ 😄
Trên đây là một số lý do mà mình nhận thấy được, có thể bạn không đồng tình ở một số điểm nhưng đó là ý kiến cá nhân của mình khi cũng đi từ ngôn ngữ này đi lên.
Ngoài lề một chút là sau ngôn ngữ C sẽ là C++, thực ra thì 2 ngôn ngữ này khá tương đồng, điểm khác biệt lớn nhất của C++ so với C chính là lập trình hướng đối tượng (OOP) vậy nên cũng có một số trường hay một số người khuyên bạn là nhảy ngay vào ngôn ngữ C++ luôn cũng được. Với điểm này không sai, mình cũng đồng tình nếu bạn muốn nâng thêm cho bản thân một kiến thức mới mang tên lập trình hướng đối tượng mà C không hỗ trợ. Thực tế thì C++ cũng được sử dụng khác phổ biến trong một số lĩnh vực chuyên sâu như game hay mã nhúng, nếu bạn tiếp cận con đường này thì chọn ngôn ngữ này đầu tiên cũng khá ok.
Còn bạn bạn nghĩ sao về ngôn ngữ mở bát cho nghiệp lập trình của bạn? Để lại ý kiến bên dưới nhé!