Bỏ qua

Điểm khởi đầu

Trước khi bắt đầu

Nếu bạn muốn trở thành một phần của thế giới lập trình, bạn cần phải biết những kiến ​​thức cơ bản về lập trình.

Có một sự khác biệt không nhỏ giữa việc học lập trìnhhọc một số ngôn ngữ lập trình. Bạn có thể 'học' hai ngôn ngữ lập trình và có thể bạn vẫn không thực sự biết cách lập trình.

Học một ngôn ngữ lập trình cũng tương tự việc học một ngoại ngữ. Học lập trình cũng tương tự việc học cách suy nghĩ. Khả năng suy nghĩ không bị giới hạn hoặc quyết định bởi một ngôn ngữ nào cả. Nếu bạn học một ngôn ngữ mới, khả năng suy nghĩ của bạn sẽ không thay đổi chút nào. Lập trình cũng tương tự. Các khái niệm lập trình không phụ thuộc vào ngôn ngữ lập trình.

Bài đăng này sẽ tập trung vào các khái niệm lập trình giúp bạn có thể học bất kỳ ngôn ngữ lập trình nào. Học theo cách này nhanh hơn nhiều và bạn không bị phân tâm bởi cú pháp của ngôn ngữ lập trình.

Suy nghĩ như một lập trình viên

Ta có thể sử dụng phương pháp tiếp cận thuật toán để giải quyết vấn đề.

Lập trình máy tính là quá trình thiết kế và xây dựng một chương trình máy tính có thể thực thi. Một chương trình máy tính là tập hợp các hướng dẫn có thể được máy tính thực thi để thực hiện một nhiệm vụ cụ thể.

Nói một cách dễ hiểu, lập trình chỉ là cho máy tính biết nó cần làm gì. Để mô tả cho máy tính biết nó cần làm gì, các lập trình viên sử dụng nhiều ngôn ngữ lập trình khác nhau.

Giờ bạn hãy lấy bút và giấy hoặc trình soạn thảo văn bản bất kì và viết ra tất cả các bước bạn cần thực hiện để nấu một bát mì tôm thơm phức giá rẻ cho sinh viên đỗ nghèo khỉ. Đây là ví dụ của mình:

  • Đến tủ bếp và mở cửa tủ
  • Lấy từ tủ gói mì (Ở đây tôi lấy Hảo Hảo).
  • Đóng cửa tủ bếp.
  • Mở tủ dụng cụ bếp
  • Lấy thìa, đũa, chảo, xoong
  • Đóng tủ dụng cụ bếp
  • Mở tủ lạnh ra
  • Lấy các nguyên liệu khác: Xúc xích, trứng, giò.
  • Đóng tủ lạnh
  • Thái xúc xích, giò
  • Rán trứng
  • Rán xúc xích và giò
  • Đặt nước đun
  • Nấu mì
  • Cho nguyên liệu đã chế biến ở trên vào xoong mì

Và thế là xong.

Đây là cách các lập trình viên nghĩ. Bạn có thể thấy rằng không có gì phức tạp và ai cũng có thể làm được. Trong các bước trên có một số trường hợp bổ sung mà tôi đã bỏ qua để đơn giản hóa việc trình bày như nếu không có sữa trong tủ lạnh thì sao, nếu bạn hết sữa hoặc ngũ cốc thì sao, nếu bạn không có thìa hoặc bát sạch thì sao, nếu bạn làm rơi và vỡ bát, v.v.

Nhưng bạn đã hiểu ý rồi. Và trong video sau, bạn sẽ thấy điều gì xảy ra nếu bạn không cụ thể và chi tiết khi viết hướng dẫn (hoặc mã). Hãy xem video này:

https://www.youtube.com/watch?v=cDA3_5982h8

Đây là cách lập trình hoạt động hầu hết thời gian. Bạn biết mình phải làm gì, bạn viết code cho việc đó, sau đó bạn kiểm tra xem nó có hoạt động như những gì cần làm không. Nếu không, thì bạn biết rằng mình đã làm sai điều gì đó. Bạn thay đổi mã của mình và thử lại cho đến khi bạn có được giải pháp đúng.

Thuật toán

Thuật toán là một tập hợp các quy trình từng bước được xác định, cung cấp câu trả lời đúng cho một vấn đề cụ thể.

Thuật toán cần đáp ứng các điều kiện sau để hợp lệ:

  • luôn có cùng đầu vào

ys cần tạo ra cùng một đầu ra - phải có nghĩa rõ ràng được định nghĩa rõ ràng và chỉ có một cách diễn giải có thể có - phải có nghĩa hữu hạn nghĩa là cần phải thực hiện trong thời gian hữu hạn và sử dụng không gian hữu hạn

Ví dụ tốt nhất về thuật toán mà bạn đã thấy trong cuộc sống của mình là công thức nấu ăn. Bạn biết phải mất bao lâu để nấu bữa ăn đó, bạn cần những loại thực phẩm nào và bạn cần chuẩn bị chúng theo thứ tự nào. Và nếu bạn làm theo công thức đó hai lần và chế biến bữa ăn theo cùng một cách chính xác thì cả hai lần bạn sẽ có được cùng một bữa ăn.

Để giải quyết các nhiệm vụ bằng lập trình, điều đầu tiên chúng ta cần làm là thiết kế một thuật toán. Khi bạn làm điều đó, bạn nên viết nó ra. Có hai cách để viết thuật toán - bằng sơ đồ luồng và bằng mã giả.

Sơ đồ luồng

Sơ đồ luồng hay Flowchart là một loại sơ đồ biểu diễn quy trình làm việc hoặc quy trình. Sơ đồ luồng cũng có thể được định nghĩa là biểu diễn sơ đồ của một thuật toán, một cách tiếp cận từng bước để giải quyết một nhiệm vụ.

Mỗi sơ đồ luồng bao gồm các khối xây dựng của nó. Để hiểu sơ đồ luồng, trước tiên bạn cần biết ý nghĩa của từng khối xây dựng. Tôi đã tạo bảng đơn giản này để bạn luôn có thể quay lại đây cho đến khi bạn học hết tất cả.

https://www.marinsborg.com/wp-content/uploads/2022/04/symbols-table.jpg.webp

Như bạn thấy, không có nhiều biểu đồ luồng. Một số biểu đồ luồng khác tồn tại nhưng hiện tại chúng không quan trọng. Tôi sẽ chỉ cho bạn cách giải quyết các nhiệm vụ chỉ bằng các ký hiệu này. Hãy bắt đầu bằng các ví dụ.

Trình tự

Các hướng dẫn trong chương trình được thực thi theo trình tự mà chúng được viết. Hãy tạo sơ đồ luồng cho một nhiệm vụ đơn giản trong đó người dùng sẽ nhập hai số và chương trình sẽ in ra tổng của hai số đó.

https://www.marinsborg.com/wp-content/uploads/2022/04/sequence-diagram.jpg.webp

Phân nhánh

Nếu một phần mã nào đó trong thuật toán mà chúng ta cần thực thi chỉ trong trường hợp một số điều kiện được đáp ứng thì chúng ta cần sử dụng phân nhánh. Với phân nhánh, chúng ta có thể chia mã thành hai hoặc nhiều đường dẫn. Để hiển thị một ví dụ về phân nhánh, hãy tạo sơ đồ luồng cho một chương trình lấy đầu vào của người dùng là một số và in ra "Số là số dương" hoặc "Số là số âm".

https://www.marinsborg.com/wp-content/uploads/2022/04/branching.jpg.webp

Vòng lặp

Đôi khi trong mã, chúng ta cần thực hiện cùng một việc nhiều lần. Chúng ta luôn có hai lựa chọn. Một là viết cùng một mã nhiều lần và cách còn lại là sử dụng vòng lặp. Vấn đề với việc viết cùng một mã nhiều lần là không sạch và tốn thời gian. Đó là lý do tại sao chúng ta nên sử dụng vòng lặp.

Trong lập trình máy tính, vòng lặp là một chuỗi các lệnh được lặp lại liên tục cho đến khi đạt được một điều kiện nhất định. Hầu hết thời gian, chúng ta viết một vòng lặp với một loại bộ đếm nào đó để vòng lặp biết cần thực hiện cùng một mã bao nhiêu lần và khi nào thì dừng. Hãy tạo sơ đồ luồng cho một chương trình lấy một số làm đầu vào của người dùng và in ra tất cả các số (nguyên) giữa 0 và số đó.

https://www.marinsborg.com/wp-content/uploads/2022/04/loop.jpg.webp

Như bạn thấy, vòng lặp lặp lại ba bước: kiểm tra xem biến A có nhỏ hơn biến Counter không, in giá trị của biến Counter và tăng giá trị của biến Counter thêm một.

Bây giờ hãy thử tự giải quyết nhiệm vụ này: Tạo một chương trình lấy đầu vào của người dùng và kiểm tra xem đó có phải là số 0 không. Nếu không phải, hãy in bình phương của số đó và nếu bằng 0 thì kết thúc chương trình.

Bạn có thể kiểm tra giải pháp trên Reddit.

Biến

Trong các bài tập trước, tôi luôn đề cập đến biến nhưng chưa bao giờ giải thích biến là gì. Biến là các vị trí trong bộ nhớ có tên và là nơi chúng ta lưu dữ liệu từ đầu vào. Giá trị của mỗi biến có thể thay đổi trong quá trình thực thi chương trình. Để truy cập giá trị của một biến, chúng ta chỉ cần viết tên của biến đó.

Mỗi biến có tên, giá trị và kiểu. Tôi sẽ nói về kiểu dữ liệu sau. Để gán giá trị cho một biến, chúng ta cần viết tên biến, sau đó là dấu bằng '=' và sau đó là giá trị.

Ví dụ:

Để gán giá trị 10 cho một biến có tên 'tuổi', chúng ta chỉ cần viết tuổi = 10.

Nếu muốn thay đổi giá trị của biến 'tuổi', chúng ta có thể thực hiện theo cách tương tự tuổi = 30. Điều đó được gọi là gán lại.

Luôn là một ý tưởng hay khi đặt tên biến theo cách mô tả thay vì chỉ sử dụng một chữ cái như 'A' hoặc 'x'.

Kiểu dữ liệu

Trong khoa học máy tính và lập trình máy tính, kiểu dữ liệu hay đơn giản là kiểu là một thuộc tính của dữ liệu cho máy tính biết cách lập trình viên định sử dụng dữ liệu. Tôi sẽ không làm phiền bạn với các chi tiết, bạn chỉ cần nhớ năm kiểu dữ liệu phổ biến sau:

  • Số nguyên (int) - kiểu dữ liệu này được sử dụng cho các số nguyên. Ví dụ int age = 20 hoặc int size = 10
  • Chuỗi - kiểu dữ liệu này được sử dụng cho văn bản hoặc chuỗi ký tự. Ví dụ string name = "John Doe" hoặc string sentence = "Today is a sunny day." Thông thường, một chuỗi luôn s được bao quanh bởi dấu ngoặc kép
  • Ký tự (char) - kiểu dữ liệu này được sử dụng cho một chữ cái duy nhất. char letter = 'a'
  • Float - kiểu dữ liệu này được sử dụng cho các số có chứa dấu thập phân. Ví dụ float number = 3.14
  • Boolean (bool) - kiểu dữ liệu này chỉ được sử dụng cho True hoặc False (có hoặc không, 0 hoặc 1). Ví dụ bool flag = True

Như tôi đã đề cập trước đây - Mỗi biến có một tên, một giá trị và một kiểu. Khi tôi viết

int age = 10

int là kiểu của biến, age là tên của biến và 10 là giá trị của biến đó.

Toán tử số học

Trong lập trình, bạn có thể sử dụng các toán tử số học giữa các biến hoặc một số giá trị cụ thể. Phép cộng, phép trừ, phép nhân giống như trong toán học và phép chia thì hơi khác một chút.

Ví dụ, bạn có thể viết như sau:

sum = a + b -> điều này sẽ lưu tổng của các giá trị a và b vào biến sum

c = d - 7 -> điều này sẽ lưu kết quả của phép trừ vào biến c

result = 15 * 3 -> điều này sẽ lưu 45 vào biến result

Có ba 'kiểu' phép chia:

x = a/b -> đây là phép chia thực

y = 13 DIV 5 -> đây là phép chia số nguyên và nó sẽ lưu 2 vào biến y

z = 13 MOD 5 -> đây là phần dư và nó sẽ lưu 3 vào biến z

Toán tử quan hệ

Trong khoa học máy tính, toán tử quan hệ là một cấu trúc hoặc toán tử ngôn ngữ lập trình dùng để kiểm tra hoặc định nghĩa một số loại quan hệ giữa hai thực thể. Bao gồm phép bằng nhau về số (ví dụ: 5 = 5) và phép bất đẳng thức (ví dụ: 4 ≥ 3).

Kết quả của phép đánh giá là đúng hoặc sai. Các toán tử quan hệ được sử dụng để phân nhánh mà tôi đã giải thích ở trên.

Các toán tử là: bằng (==), không bằng (≠), lớn hơn (>), nhỏ hơn (<), lớn hơn hoặc bằng (≥), nhỏ hơn hoặc bằng (≤).

Các phép toán Boolean

Các phép toán Boolean bắt nguồn từ Đại số Boolean trong đó các giá trị của các biến là đúng hoặc sai (1 hoặc 0). Tôi không muốn làm phiền bạn nhiều với đại số Boolean nhưng có ba phép toán chính mà bạn cần biết:

  • AND - phép hợp - kết quả của phép toán này chỉ đúng khi cả hai điều kiện đều đúng, nếu không thì sai
  • OR - phép phân tách - kết quả của phép toán này là đúng khi một trong hai điều kiện đúng
  • NOT - phép phủ định - phép toán này đảo ngược giá trị của điều kiện. Nếu điều kiện đúng thì phép phủ định sẽ cho kết quả là sai và ngược lại.

Các phép toán Boolean cũng chủ yếu được sử dụng để phân nhánh và có thể kết hợp với các toán tử quan hệ. Ví dụ, nếu bạn có một nhiệm vụ cần kiểm tra xem số đó có nhỏ hơn 50 hay không và không phải là 7 thì bạn sẽ thực hiện điều đó trong sơ đồ luồng như thế này:

https://www.marinsborg.com/wp-content/uploads/2022/04/branching-operator.jpg.webp

Và thế là xong. Nếu bạn đã hiểu mọi thứ cho đến giờ bạn có thể nói rằng BÂY GIỜ BẠN có thể suy nghĩ như một lập trình viên. Đây là kiến ​​thức tối thiểu bạn cần biết để bắt đầu lập trình. Đây là nền tảng mà bạn xây dựng ngày càng nhiều kiến ​​thức.

Bạn có thể nhận thấy rằng chúng ta không bắt đầu với bất kỳ ngôn ngữ lập trình nào. Đó là vì mọi thứ ở trên có thể áp dụng cho hầu hết các ngôn ngữ lập trình. Bây giờ khi bạn hiểu được nền tảng, bạn có thể dễ dàng bắt đầu với bất kỳ ngôn ngữ lập trình nào.

Nếu bạn không hiểu một phần nào đó hoặc cần giải thích thêm, bạn luôn có thể tìm kiếm trên Google hoặc bạn có thể hỏi tôi trên Reddit

Tôi sẽ giao cho bạn một số bài tập để thực hành, giống như bài tập về nhà. Tôi sẽ công bố các giải pháp và giải thích cho các bài tập đó trên Reddit trong tương lai gần.

Bài tập về nhà

Để giải các bài tập này, bạn sẽ sử dụng kiến ​​thức ở trên. Đối với mỗi bài tập, bạn cần vẽ sơ đồ luồng. Bạn có thể vẽ sơ đồ luồng trực tuyến trên diagrams.net

  1. Tạo một chương trình cho phép người dùng nhập ba số và in tích của ba số đó.
  2. Tạo một chương trình cho phép người dùng nhập một số. In ra nếu số đó là số lẻ hay số chẵn. Gợi ý - bạn cần sử dụng toán tử phần dư.
  3. Tạo một chương trình cho phép người dùng nhập một số. Nhân số đó với 2 và in ra. Lặp lại phép nhân và in cho đến khi kết quả của phép nhân không lớn hơn 1000.
  4. Tạo một chương trình in ra tất cả các số từ 1 đến 100 không chia hết cho 7 và chia hết cho 5.
  5. Tạo một chương trình cho phép người dùng nhập một số. Nếu số đó là 0, hãy kết thúc chương trình và in ra "Kết thúc". Nếu không, hãy nhân số đó với chính nó và kiểm tra xem số mới đó có lớn hơn 1000 không. Nếu có thì hãy in ra "Số cực lớn". Nếu số đó lớn hơn 500 thì hãy in ra "Số lớn", nếu không thì hãy in ra "Số nhỏ"

Các bước tiếp theo

Sau khi hoàn thành các bài tập thực hành ở trên, bạn có thể tự hỏi điều tiếp theo cần làm hoặc học là gì. Rõ ràng là bạn không thể làm được nhiều nếu chỉ biết vẽ sơ đồ luồng công việc.

Bây giờ bạn có thể chọn một ngôn ngữ lập trình và học cú pháp của nó. Tôi khuyên bạn nên học Python hoặc JavaScript. Cả hai ngôn ngữ đều dễ cài đặt trên máy tính của bạn và cú pháp thì đơn giản. Để biết, nếu bạn đang ở giai đoạn này của kinh nghiệm lập trình, tôi khuyên bạn nên chọn Python hoặc JavaScript chứ không phải C#, Java hoặc bất kỳ ngôn ngữ lập trình hướng đối tượng nào.

Nếu bạn muốn học JavaScript và khám phá phát triển web bằng JavaScript, bạn có thể bắt đầu với The Odin Project. Đây là trang web hướng dẫn bạn cài đặt các công cụ phù hợp, giải thích cách thức hoạt động của web, cách sử dụng git và có những kiến ​​thức cơ bản về HTML, CSS và JavaScript. Nếu bạn thích xem video, bạn có thể tìm thấy nhiều hướng dẫn JavaScript hay trên YouTube.

Nếu bạn muốn học Python, một ngôn ngữ lập trình tốt cho nhiều thứ, bạn có thể làm theo cuốn sách này - Tự động hóa những thứ nhàm chán bằng Python. Cuốn sách bắt đầu với những kiến ​​thức cơ bản về Python và tiến triển thành một số vấn đề thực tế dễ dàng giải quyết bằng Python. Nếu bạn không thích, bạn luôn có thể tìm video trên YouTube.

Kết luận

Trong bài đăng này, tôi đã giải thích cho bạn những điều cơ bản mà bạn cần biết để bắt đầu lập trình. Những điều cơ bản này áp dụng cho hầu hết các ngôn ngữ lập trình và bây giờ bạn cần chọn một ngôn ngữ và học cú pháp của ngôn ngữ đó.

Lập trình không khó như bạn nghĩ. Bạn cần kiên nhẫn với bản thân, dành thời gian và công sức để hiểu những điều cơ bản.

Tôi chỉ muốn chỉ ra tầm quan trọng của việc bắt đầu với các nhiệm vụ dễ hơn và sau đó tiến tới một số dự án lớn hơn mà bạn có thể muốn xây dựng. Bạn không thể học một ngôn ngữ nước ngoài nào đó chỉ sau một đêm nhưng bạn sẽ ngày càng giỏi hơn theo thời gian - lập trình cũng vậy.

Khi bạn học cú pháp của một số ngôn ngữ lập trình, hãy thử giải các nhiệm vụ từ chương bài tập về nhà bằng ngôn ngữ lập trình đó.

!!! info "Nguồn bài viết" Được dịch và viết lại từ một bài đăng trên Reddit của marinsborg