Showing posts with label kythuatlaptrinh. Show all posts
Showing posts with label kythuatlaptrinh. Show all posts

11/12/2021

C/C++ có thực sự cần thiết? Giới thiệu các IDE, Text Editor sử dụng cho lập trình C/C++


C/C++ có thực sự cần thiết?

C/C++ là ngôn ngữ dùng và giảng dạy trong hầu hết các môn học liên quan tới các môn cơ sở cốt lõi ngành CNTT như tin đại cương, cấu trúc dữ liệu, kỹ thuật lập trình, thuật toán ứng dụng,... tại Bách Khoa và hầu hết các trường đại học khác vì tính "nền tảng của C/C++".

Trong phần này mình sẽ giải thích cho các bạn vai trò của C/C++, và với sự phát triển mạnh mẽ của các ngôn ngữ lập trình bậc cao thì C/C++ có thực sự cần thiết?

- Câu trả lời của mình về C/C++ là cần thiết (*).

- Đầu tiên là mình muốn nói về C/C++ còn được các công ty sử dụng hay không?, chúng ta hãy xem danh sách các ngôn ngữ mà các công ty lớn đang sử dụng cho sản phẩm/dịch vụ của họ nha (Ảnh: Wiki - 2021): 

Như mọi người thấy C++ được hầu hết các ông lớn sử dụng ở phía server vì hiệu năng, tốc độ của nó là cực kì tốt.

- C/C++ gần với ngôn ngữ máy tính nhất nên qua đó, bạn có thể hiểu được bên dưới thật sự máy tính nó đang làm gì, cấp phát bộ nhớ ra sao, hoạt động như thế nào.

- C/C++ là cơ sở để xây dựng rất nhiều ngôn ngữ khác như Python, các thư viện hay core của Python đều được viết bằng C++, vì thế khi hiểu rõ bạn có thể tác động sâu hơn vào các ngôn ngữ này, cái này khá là hay mà khi mà mình đã bị bạn mình khuất phục bằng những thứ mình nghĩ là không thể nếu chúng ta chỉ là người giỏi ngôn ngữ Python mà không hiểu hệ thống bên dưới nó được chạy thế nào.

- Nhiều ngôn ngữ lập trình khác được phát triển dựa trên nền tảng C++, bao gồm C#, D, Java và các phiên bản mới hơn của C. Vậy nên các cấu trúc, câu lệnh, khai báo biến,... đều có phần giống với C/C++. Vì thế khi bạn học xong C/C++ thì tiếp cận các ngôn ngữ khác cũng dễ dàng hơn.

- Lập trình viên C/C++ được trả lương rất cao

Tuy nhiên chúng ta cần quay lại (*) ở bên trên, mình đã nói rằng C/C++ là cần thiết tuy nhiên chúng không phải là tất cả, bạn có thể bước vào và trở thành một lập trình viên mà không cần biết cũng như cần học qua C/C++. Với các bạn sinh viên và đặc biệt là sinh viên Bách Khoa thì C/C++ được sử dụng làm ngôn ngữ giảng dạy trong một số môn thì lời khuyên của mình là các bạn hãy cố gắng học cho tốt chú đừng cố kêu ca rằng nó đã lỗi thời và không còn được sử dụng.

Các IDE, Text Editor sử dụng cho lập trình C/C++

Khi năm nhất cũng mới học tin đại cương thôi, lúc ấy cũng là dân mới vào nghề, mình cũng không biết là dùng IDE gì để code C/C++, cũng đã thử cài vào rồi gỡ ra rất nhiều ứng dụng. Trong phần này mình sẽ chia sẻ tới mọi người một số IDE, Text Editor phổ biến cho lập trình C/C++ và các ưu, nhược điểm của nó để các bạn có thể chọn ra IDE, Text Editor phù hợp cho mình nha.

Dev-C/C++

Cái tên gạo cội thì phải nhắc tới Dev-C/C++, nó là IDE chính được sử dụng trong môn tin học đại cương, nó dễ cài đặt, dễ sử dụng và nhẹ tuy nhiên chưa phải là một IDE mạnh. Thường thì Dev-C/C++ sử dụng cho người mới bắt đầu.

Codeblocks

Codeblocks là IDE mà mình thấy là phù hợp cho việc học thuật toán và nó cũng được các thầy/cô giáo trong môn thuật toán ứng dụng gợi ý sử dụng. Codeblocks cũng rất dễ cài đặt, sử dụng và nhẹ. Với góc độ thuật toán thì Codeblocks là một IDE khá mạnh, tuy nhiên với project lớn phải chia các mô-đun thì mình thấy là Codeblocks chưa đủ mạnh.

Eclipse / Netbeans

C/C++ như là nghề tay trái khi nhắc tới 2 IDE này. Netbeans hay Eclipse đều là các IDE mạnh mẽ hỗ trợ Java và thường sử dụng cho các lập trình viên Java (Eclipse thì có cả 1 hệ sinh thái các ứng dụng của riêng chúng). 

Điểm mạnh của 2 IDE này là mã nguồn mở, hoàn toàn free cho người dùng và rất mạnh mẽ. Tuy nhiên thì việc sử dụng 2 IDE này trong 2 môn tin đại cương hay thuật toán ứng dụng có vẻ là hơi to và nặng.

Clion

Clion là một sản phẩm của Jetbrains và như mình đã viết trong một số bài viết thì các sản phẩm của Jetbrains là miễn bàn, ngon khỏi chê. 

Tuy nhiên Clion rất nặng, như với Netbeans và Eclipse thì Clion dành cho các project lớn. Còn nữa, Clion là không có bản miễn phí, nhưng với sinh viên chúng ta hoàn toàn có thể sử dụng miễn phí Clion mà không tốn một đồng nào từ mail edu của các bạn, bạn có thể xem lại bài hướng dẫn Mail edu của trường làm được gì để nhận và sử dụng miễn phí tất cả các sản phẩm của Jetbrains.

VSCode / Sublime Text

VSCode hay Sublime Text đều là các Text Editor, và muốn sử dụng chúng cho bất cứ ngôn ngữ hay framework nào thì các bạn phải cài thêm các extension hỗ trợ, và việc mày mò cài thêm  các extension cho từng ngôn ngữ là rắc rối. Thường thì những pro mới dùng editor để code, lời khuyên của mình nếu các bạn là newbie thì hãy lựa chọn Dev-C hoặc Codeblocks chứ đừng bem ngay vào 2 editor này.

Một editor nữa mình giới thiệu luôn ở phần này đó là vim, cũng giống như VSCode hay Sublime Text, bạn muốn sử dụng chúng cho các ngôn ngữ hay framework nào thì phải cài thêm các extension hỗ trợ. Vim thì sử dụng rất khó, cài đặt thêm các extension cũng khó. Thường thì các super-pro mới dùng vim để code.

replit

Cái này là một IDE online hỗ trợ khá nhiều các ngôn ngữ. Vì là online nên rất tiện vì các bạn không cần phải cài đặt, chỉ cần một trình duyệt có mạng là có thể vào code luôn, dùng mọi nơi chỉ cần là có máy tính nối mạng không cần phải cài môi trường hay gì cả. 

Tuy nhiên vì là online nên có rất nhiều hạn chế như các thư viện không đủ, các trình gợi ý code chưa đủ mạnh,...

Tham khảo: https://en.wikipedia.org/https://codelearn.io/

7/04/2021

Thuật toán có thực sự quan trọng? | Blogging


Thuật toán là gì? Theo wiki, trong toán học và khoa học máy tính, một thuật toán, còn gọi là giải thuật, là một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính.

Vậy học thuật toán để làm gì? Và tại sao gần như mọi trường đại học và điển hình tại Bách Khoa Hà Nội thì thuật toán là môn học không thể thiếu? Cùng nghe về chia sẻ của mình nha, nếu bạn có những ý kiến khác thì hãy comment để mọi người cùng biết nha.

Tại sao cần dùng thuật toán?

Bạn chỉ cần search trên Google là 'Tại sao cần dùng thuật toán' thì sẽ ra cả tá bài viết viết về vấn đề này, hoặc tiêu biểu bạn có thể xem bài viết Đôi chút về cấu trúc dữ liệu và thuật toán, bài viết này mình sẽ tóm gọn lại nhanh vấn đề nha.

Thuật toán không giúp code của bạn ngắn hơn mà thậm chí nó phải dài hơn. Nhưng hiệu quả là vấn đề không phải bàn cãi, thuật toán giúp chương trình của bạn chạy nhanh hơn, với những thuật toán tối ưu chương trình của bạn còn có thể chạy nhanh hơn rất nhiều nữa. 

Học thuật toán sẽ giúp các bạn có một tư duy tốt hơn và có thể là tốt hơn rất nhiều để giải quyết vấn đề.

Am hiểu về thuật toán sẽ là một điểm cộng khi tham gia phỏng vấn. Với bạn nào mà muốn theo đuổi lập trình Game hay muốn làm việc tại 1 số tập đoàn lớn như VNG, Viettel, Samsung thì thuật toán là thứ không thể thiếu nay. Phỏng vấn đầu vào là thuật toán, tại Samsung nếu bạn muốn làm các chức vụ cao hơn thì bạn phải thi các cuộc thi về thuật toán nữa nha,... Vậy nếu các bạn có những định hướng về hướng đi giống như trên thì hãy học thuật toán ngay đi nha. 

...

Không học, không giỏi thuật toán có được không?

Mình không hề master thuật toán, và cũng không phải là fan cuồng thuật toán vậy nên nhận xét thật lòng thì không giỏi thuật toán chả sao, chúng ta vẫn có thể trở thành thành lập trình viên giỏi trên các lĩnh vực của mình.

Không cần thuât toán bạn vẫn sẽ đưa ra được cái giải pháp của mình, tuy nhiên nó có thể không tối ưu với vôn thuật toán hạn chế của lập trình viên nhưng nó chắc cũng sẽ là một giải pháp.

Nếu bạn là một lập trình viên viết những web thiên về nội dung. blog hay những app với những xử lý logic đơn giản có lẽ những djikstra, quick sort,... cũng không có nhiều đất dụng võ.

Bây giờ một số thuật toán kinh điển đều đã được cài đặt sẵn và xây dựng thành các thư viện và đã được tối ưu, kiểm thử lỗi,... nên lập trình viên muốn dùng chỉ cần gọi ra và sử dụng.

Có nhiều phần mềm, sự hiểu biết về thiết kế, tổ chức dữ liệu sẽ quan trọng hơn rất nhiều so với những thuật toán hay được sử dụng trong phần mềm.

Vậy thuật toán có thực sự quan trọng không?

Những người đọc bài viết này của mình chắc đa số đều là sinh viên Bách Khoa và chắc chắn dù muốn hay không thì các bạn đều phải học, thậm chí là cày ngày, đêm để còn qua môn cấu trúc dữ liệuthuật toán ứng dụng hay là để thi tuyển vào samsung,...

Một số bạn thì so sánh rằng, các trường như FPT họ không học thuật toán mà học thẳng trực tiếp các framework, thư viện, những thứ thực tế cần dùng hơn. Nhưng mình xin đính chính lại là FPT có học toán rời rạc, cấu trúc dữ liệu,... nha chỉ là họ học khá là nhẹ nhàng hơn so Bách Khoa mà thôi, nhưng cũng vì thế mà một người anh của mình tại FPT cũng từng nói với mình rằng là thật tiếc rằng ngày đó anh không được tiếp cận đồ thị sớm hơn khi còn học tại trường.

Không nhắc về các trường đại học nữa, vậy thì một số trung tâm, hệ thống đào tạo lập trình viên thì sao? Như APTECH. Nhưng cũng xin đính chính tiếp với các bạn, những lập trình viên mà APTECH đào tạo ra họ là những người thợ code, khi họ học thì họ thực hành là chủ yếu, code ngày code đêm và trình độ code của họ chắc chắn là hơn sinh viên đại học như chúng ta. Tuy nhiên, chúng ta không phải là những thợ code, chúng ta không thể chỉ biết code, chúng ta là những kỹ sư mà kỹ sư là phải giải quyết các vấn đề chứ không chỉ đơn giản là bạn được vứt cho một loạt mẫu có sẵn và code theo những mẫu này như những người thợ code thực thụ.

Vậy kết luận lại thì thuật toán cần không? Thuật toán cần, phải học, ít nhất là phải học để biết nhưng không phải là tất cả. Đó là những suy nghĩ của mình về vấn đề khá nan giải này. Còn bạn nghĩ gì thì hãy comment cho mọi người cùng biết nha.

2/01/2021

Kỹ thuật lập trình | Tài liệu, cơ sở ngành CNTT


Kỹ thuật lập trình là môn cơ sở ngành không chỉ của các ngành công nghệ thông tin mà một số ngành khác như tự động hóa, toán - tin,... cũng phải học môn này. Về cơ bản kỹ thuật lập trình nhắc lại những cấu trúc dữ liệu cơ bản mà trong học phần cấu trúc dữ liệu đã học, học về các thuật toán cơ bản, các tối ưu mã nguồn, kỹ thuật viết mã nguồn,...



Môn này là môn học lý thuyết trên lớp kết hợp với thực hành. Thực hành kỹ thuật lập trình thì mình thấy là các cô/ thầy giáo đa số là khá dễ tính, không khắt khe đâu. Trước mỗi buổi thực hành các bạn có thể đọc trước yêu cầu của bài thực để hôm sau tới lớp làm trơn chu hơn ( có thể thôi chứ mình thấy lên lớp đọc và làm cũng được, mỗi buổi thực hành chúng ta có 3 tiết, làm không hết thì về nhà có thể làm tiếp và nộp trong vòng 2 ngày tới), bài tập về nhà thì nộp trong vòng 2 tuần. 

Điểm của phần thực hành chấm điểm theo bài tập về nhà + báo cáo + bài tập trên lớp trong đó bài tập về nhà sẽ chiếm đa số điểm thực hành (70%). Các bạn cũng đừng tưởng là bài tập về nhà thì có thể chép code của nhau được nha, hệ thống có phần mềm kiểm tra trùng lặp xây dựng bằng AI ( cái này nghe các thầy cô nói thế thôi chứ không biết phải AI thật không, nhưng một số bài copy nhau quá lộ liễu vẫn có thể phát hiện bình thường, nên nếu muốn chép bài nhau thì phải tinh thế một chút nha, mình sẽ chia sẻ source các bài thực hành của mình ở phía dưới nha, đều đã full điểm, các bạn có thể tham khảo, mình nhấn mạnh là tham khảo thôi nha).

Học lý thuyết trên lớp thì nói chung là khá nhàm chán, toàn những kiến thức đã học rồi, đa số các thầy/ cô dạy về C/ C++ lại dạy về con trỏ, cấp phát động,... rồi lại học các cấu trúc dữ liệu đã học ở phần cấu trúc dữ liệu. Mình thấy có một phần mới là kiểm thử và tinh chỉnh mã nguồn thì cũng không có gì đặc sắc ( chỉ có phần này đi thi thì các thầy cho mò lên mò xuống để tinh chỉnh đoạn code thì tìm tới mỏi mắt). Lý thuyết có thi giữa kì hoặc từng kì các thầy/ cô trong bộ môn thống nhất với nhau lấy điểm thực hành để làm điểm quá trình thì sẽ được thông báo lại sau nhưng đa số sẽ là thi giữa kì nha.

Mình chia sẻ một số tài liệu mà mình sưu tầm được và các đoạn source code để mọi người tham khảo nha: 

PHẦN LÝ THUYẾT 

  • Slide giảng dạy môn kỹ thuật lập trình ( slide chính thức dùng chung của viện) : TẢI VỀ SLIDE   

  • Tổng hợp bài tập kỹ thuật lập trình qua các bài học ( nên xem để biết các dạng bài tập của môn này nha, tải về file PDF nha, file PPTX để mình lưu trữ thôi) : TẢI VỀ PDF   TẢI VỀ PPTX

  • Slide bài gỉảng kỹ thuật lập trình - thầy Vượng : TẢI VỀ SLIDE

  • Đề thi tham khảo kỹ thuật lập trình ( một số đề để tham khảo thôi, vì những năm gần đây viện mình đều thu đề khi thi xong nên hầu như sẽ không có đề tuồn ra ngoài được) : TẢI VỀ ĐỀ THI

PHẦN THỰC HÀNH