Avatar's meofi

Ghi chép của meofi

[Hỏi LH] Tư duy lập trình là cái quái gì thế?

Xuất phát từ comment của @minister  với @laughing  Thấy nhiều người hay nói học lập trình để học tư duy lập trình. Không rõ tư duy lập trình là cái gì mà người ta lại cho nó quan trọng trong cuộc sống? So với học toán thì có gì khác nhau? Nhân tiện trên này nhiều cao thủ về code...và cả tư duy trừu tượng. Mình đưa ra câu hỏi để hỏi ý kiến của mọi người, cũng là để tranh luận.
Tag dạo mấy bác để xin hay: @ohisee, @thinker :D 

1416 ngày trước · Bình luận · Loan tin
SamSam , kekin3 người nữa
·  

55 bình luận

  • Cái gì chả thế, người ngoài bảo hay, người trong thấy chả có gì hay. Nhiều người bảo cho con đi học code. Mình thực sự chả hiểu vì sao code lại quan trọng hơn những kỹ năng khác trong cuộc sống.

    Kỹ năng quan trọng nhất là nghe nói đọc viết. Code chi cho mệt.
     
  • Lập trình sau này sẽ là một loại ngôn ngữ, người Việt thì cần học tiếng Việt, người của thế giới thì cần học tiếng Anh, người của thế giới hiện đại cần biết lập trình.
     
  • Tư duy lập trình hiểu đơn giản là tư duy có hệ thống - khoa học. Trong lập trình để xử lý 1 công việc nào đấy bác phải tư duy sẵn chỗ để nguyên vật liệu, cách thức nhào nặn đống nguyên liệu đấy và sản phẩm đầu ra. Công việc cứ lặp đi lặp lại hàng nghìn lần như vậy ngày tạo thành 1 thói quen, đến khi gặp 1 công việc trong cuộc sống cũng áp cái lối tư duy đấy vào, mọi việc logic rõ ràng đúng sai, thiệt hơn nó ra số hết
    Ý kiến cá nhân thôi, định nghĩa chuẩn chắc phải xem wiki bác ạ.
     
    • @samsam Nói vậy giống như cách tổ chức xắp xếp công việc hơn nhỉ.
       
    • @SamSam phải đọc cái cmt của Sam đến 3 lần, mình có học chút xíu lập trình Pascal để có thể hiểu chút nhưng nếu học lập trình để tư duy kiểu này thì đầy cách để hình thành tư duy chứ cần quái gì học lập trình @@
       
    • @Ngocxit0t Nó giống như được bonus thêm thôi, giống như làm sale sẽ dc trau dồi kỹ năng ăn nói, thuyết phục và chốt khách - Làm kế toán thì có kỹ năng với các con số ý bác, còn Lập trình viên thì tư duy logic 1+1=2
       
    • @samsam Bao năm nay người ta vẫn gọi là kiểu tư duy này là tư duy giải quyết vấn đề. Vận dụng các thông tin và công cụ có trong tay để giải quyết 1 nhu cầu nào đó. Gần đây có phong trào ca ngợi lập trình nên mới làm như cái đó là đặc trưng của lập trình ?
       
    • @samsam lập trình cũng giống như làm toán, phải có giả thuyết và kết luận , suy từ kết luận đến giả thuyết, phần lớn các bạn bây giờ cứ ập vào là làm, làm đã đời mới thấy đâm vào ngõ cụt
       
  • Tư duy lập trình là như này các bác ai chưa hiểu thì có thể ví dụ như sau:

    Đề bài 1: Cho 1 cái nồi, 1 lon gạo, bếp, nước, hãy nấu cơm, tư duy lập trình như sau
    - Vo gạo
    - Rửa sạch nồi
    - Cho gạo vào nồi đổ nước vừa đủ
    - Bật bếp lên
    - Cho nồi lên bếp đun
    - Theo dõi không sấp, tràn, đun nhỏ lửa đều
    - Cạn nước thì đảo cơm rồi đậy lại đun thêm chút rồi tắt bếp là cơm chín

    Đề bài 2: Cho 1 cái nồi có sẵn gạo, nước, bếp, hãy nấu cơm, tư duy lập trình như sau
    - Đổ hết nước và gạo ra
    - Đưa về đề bài 1 đã biết cách giải.
     
    • @vannhan Cái 2 là sử dụng API phải không bác?
       
    • @tttue Là tạo ra các chức năng cơ bản nhân chia cộng trừ rồi sau đó kế thừa thành các function phức tạp hơn, sau đó lại tiếp tục kế thừa tạo ra các sản phẩm phần mềm rồi chia sẻ dùng api của nhau.....
       
    • @vannhan Ngoài lề: trước thầy giáo dậy lập trình của mình cũng hay đưa cái ví dụ này
       
    • @vannhan Ví dụ cổ điển này ngày xưa các cụ nói về toán học. Riêng mình không ca ngợi ví dụ này, nó điển hình cho tư duy máy móc, gần gần như mấy bạn viêt code js sẵn sàng import nguyên 1 module có 1 hàm vài dòng.
       
    • @linpack08 Ừ mình troll thôi mà, vì ai cũng biết nó là funny trong ngành, mặc dù nó la trò đùa nhưng nó chỉ nhan mạnh ở phần kế thừa, đúng ra thực tế ngoài đời thì nó sẽ kế thừa là : Đưa lên bếp rồi đun thôi.
       
    • @linpack08, @vannhan Ví dụ này cũng có cái hay của nó.

      Nếu bạn có một cái máy chuyên nấu cơm, thì việc bạn đổ ra, sau đó cho vào máy nấu thì nhanh và hiệu quả hơn là tự tay thực hiện bước sau để nấu được nồi cơm. Ngoài việc tiết kiệm được do máy nấu nhanh và hiệu quả hơn, thì người bạn thuê đổ gạo ra và cho vào máy chỉ cần kỹ năng đơn giản hơn, với chi phí rẻ hơn.
  • Các đồng chí cứ quan trọng hóa nó lên, văn học hóa nó ra, trừu tượng hóa nó đi.
    Kiểu như đề cao toán hơn văn. Kiểu Jeffery Deaver cứ nghĩ là hay hơn truyện Tào Tuyết Cần vậy
    Em là em thấy Tư duy lập trình chẳng có cái mẹ gì đâu
     
  • Làn về phần mềm phải biết lập trình, làm cave phải biết làm tình, có thế thôi, sao phải xoắn.
     
  • Tư duy lập trình, không khác tư duy giải toán hay cái gì khác.
    Nó là cách suy nghĩ để giải quyết vấn đề, cách đặt câu hỏi và cách trình bày câu trả lời.
     
    • @pythongable Toán nó khác nhiều. Toán nặng về xây dựng mô hình, tìm ra quy luật, và biểu diễn nó dưới dạng công thức.
       
    • @tanng cái này mình hiểu là tư duy lâp trình chung, không phải là tư duy lập trình phần mềm
       
    • @pythongable Vấn đề là toán nó khác, không giống thứ bạn nêu trên.
       
    • @tanng không biết là khác cái gì ?
       
    • @pythongable, @tanng
      Cần tách 2 món ra, khoa học máy tính (computer science) và lập trình (software programming)
      Toán cơ bản - sơ cấp thì có điểm chung với lập trình phần mềm, cơ mà toán cao cấp thì gắn kết với computer science hơn.

      VD cách giải toán từ cấp 1-2, Toán các món như cho dữ liệu, tìm ra câu trả lời, có định luật rồi để chứng minh các kiểu là giống lập trình.

      Điểm khác biệt là lập trình thiên về tư duy logic , process maker , design pattern, giải quyết vấn đề theo quy trình và process logic.

      Lập trình bậc cao hay còn gọi là computer science thì liên quan chặt chẽ mật thiết với Toán.
      VD các thuật toán ứng dụng trong món này đều tới từ toán.

      Toán là 1 dạng concept hoặc lý thuyết để giải quyết 1 vấn đề cụ thể
      Còn lập trình đúng như tên gọi của nó, lập ra 1 quy trình / vận hành theo trình tự ... VD không bạn nào lập trình mà không biết diagram.

      Cách nền giáo dục VN giảng dạy toán cao cấp 1 cách phổ thông, trong khi cái cần thiết là tin học ứng dụng, lập trình là món của tương lai, rèn tư duy rất tốt thì ko đc mấy áp dụng ~> tính thực tiễn thấp, tính hàn lâm cao, ứng dụng thực tế không nhiều , đó là ý mình muốn nói với bạn @@meofi

      Không phải tự nhiên mà Singapore hay nhiều nc phương Tây đưa dạy lập trình vào rất sớm từ nhiều năm nay.
      http://tinyurl.com/y9hunhf4

      Nc giáo dục VN thì nặng về lý thuyết, không chỉ về toán, mình nhớ 1 thời văn đc thả cho cảm thụ, sau đấy 1 vài năm thì chấm văn theo ý, giáo viên cứ chấm ý mà cho điểm (~> mình chết đầu nước), đó là kiểu giáo dục áp đặt & bóp chết cảm thụ sáng tạo. Cải cách giáo dục nên tới từ nhu cầu thực tế của XH, còn học để rồi quên thì chả hiểu học để làm gì
       
    • @minister Lập trình hay computing science thì cũng sử dụng toán học như các môn khoa học tự nhiên khác thôi. Toán học có đặc điểm là nó abstract, không liên quan tới ứng dụng thực tế như thế nào trong các ngành khác.

      Bản chất toán cấp 1-3 nó cũng abstract, nhưng nó liên quan sâu tới ứng dụng thực tế tới độ người ta tưởng nó là thực tế.

      Nói đơn giản lại là mấy bạn đang mới hiểu toán học ứng dụng trong ngành cntt như thế nào, chứ không phải hiểu toán học nó ntn, vậy nên có sự nhầm lẫn.
       
    • @pythongable cũng không giống toán lắm bác ợ , nói chung nghề nào tư duy đó, nhưng e cũng đoán là tầm 50 năm thì ai cũng phải học lập trình ddeey
       
    • @minister Ví dụ của bạn so sánh hơi bị hời hợt. Mình thấy hai cái này không giống nhau về bản chất nhiều lắm, nó độc lập với nhau.
      Nói đơn giản là bạn không thể lập trình bậc cao (theo cách nói của bạn) được nếu không giỏi về toán từ cơ bản tới nâng cao. Dù bất kỳ cách nào thì toán vẫn là cái background phải đi đầu lót đường cho các môn khác.

      Cái lý do nước ngoài dạy lập trình từ sớm mình nghĩ nó là để chuẩn bị cho xã hội mà ai cũng biết lập trình như đánh văn bản bằng bàn phím giống bác @tanng nói thôi. Nếu ai cũng biết lập trình thì hiển nhiên sẽ cắt giảm được bước trung gian (thông qua những dịch vụ) để giao tiếp với máy tính. Cũng giống GUI là một dạng interface, thông qua đó các lệnh được hiển thị trực quan bằng nút bấm. Nó đơn giản hơn, nhưng cái giá của nó là bạn sẽ chỉ truy cập được những hàm mà người ta explore ra cho bạn sử dụng, trong khi nếu bạn viết lệnh thì toàn bộ tính năng của chương trình đó. Giai đoạn trung gian chuyển từ hàm viết bằng lệnh sang đồ thị cũng mất công sức xây dựng và tính linh hoạt cũng bị mất đi rất nhiều.
       
    • @meofi tùy bạn nghĩ thôi, 1 vài kiến của a Tân nói mình cũng nói ở trên, Toán học là concept , và mang tính lý thuyết.

      Nhưng rốt cuộc thì cũng không phủ nhận đc giáo dục VN là nặng về lý thuyết

      và việc bạn nói bắt buộc phải học toán cao cấp như ở VN vì nó rèn tư duy là giáo dục áp đặt và không khác gì dạy con cá leo cây như mình nói.

      2 là việc giảng dạy lập trình chuẩn bị cho XH mà ai cũng biết lập trình (ý này của anh @tanng) cũng là chưa đủ

      rảnh thì đọc bài này: http://tinyurl.com/y882xeul

      “Everybody in the country should learn how to program a computer... because it teaches you how to think.”


      Nó dạy bạn cách tư duy, mấy cái bạn nói, gõ phím, nhập liệu văn bản là tin học ứng dụng, không phải lập trình (programming) bạn ei.
       
  • Thế các bác có hiểu vòng lặp trong môn tin học pascal ko? Hiểu đc là 1 cách phát triển tư duy đấy.
     
  • Tư duy lập trình nói cách bình dân là tối ưu hóa mọi tình huống, công việc nhằm phục vụ mục đích đặt ra lúc đầu. Có một tình huống mình xem được đâu đó quên mất rồi cũng không nhớ chi tiết lắm, đại ý là:

    Bạn đang đi xe thì gặp 3 người đang ngồi đợi xe: Bà cụ đang bệnh cần nhập viện, thằng bạn tốt bụng từng giúp đỡ bạn và cô gái mà vừa nhìn bạn đã yêu cmnr. Bạn không thể chở hết cả 3 vì xe bạn chỉ chở được 1 người. Trong tình huống này bạn sẽ làm sao ?

    Tìm ra cách xử lý tối ưu cho tình huống này nghĩa là bạn đã có tư duy lập trình
     
    • Có thể có ai đó chưa biết: Ngày xưa thời cụ Hoàng Tụy nhà mình gọi môn tối ưu hóa này phiên âm theo tiếng hán là vận trù học. Tư duy lập trình cũng chỉ là buzzword thôi.
       
    • @ko_co_gi Ví dụ rất hay. Như thế lập trình giống như việc quản lý, sắp xếp các công việc để có kết quả tối ưu.
       
    • @ko_co_gi quan Chuẩn bác,

      Quan trọng nhất trong lập trình là đưa ra giải thuật (algorithm) tối ưu. Trước đó thì cần phân thích vấn đề (analysis), đưa vấn đề về dạng đơn giản nhất mà ngôn ngữ lập trình hiểu được (developing understanding)
      Cuối cùng mới tới đoạn viết mã (coding)
       
  • Thư viện nguồn mở càng nhiều thì AI học lập trình càng nhanh. 30-50 năm nữa thì dự là 90% công việc lập trình giao cho AI làm hết, con người chỉ đóng vai trò sáng tạo và xây dựngc cấu trúc, 10% còn lại là các kỹ sư nghiên cứu các ngôn ngữ mới.
     
  • Tư duy lập trình là tư duy hiểu đươc cơ chế để sao cho chỉ cần nhét 1 cái xúc xích, 9 tháng 10 ngày sau ra 1 đứa trẻ.
     
  • Chắc tư duy lập chình là loại tư duy biện trứng quá độ tiến lên trủ nghĩa sã hội chứ còn cái nồi gì nữa
     
  • Tư duy lập trình khác tư duy toán học chứ

    Toán là kiểu a = b; b < c , vậy a < c . Đó là tư duy logic (một phần quan trọng trong toán học)

    Còn trong lập trình mà viết a = b; b < c thì có thể mang ý nghĩa khác. Đó là bảo cái máy tính lấy cái giá trị bên trong của b, nhét vào bên trong của a; rồi sau đó thay đổi giá trị của b theo 1 "công thức" nào đó liên quan đến c.

    Một bên là "suy luận" còn một bên là "sai khiến"

    Boss giao việc cho nhân viên, còn lập trình viên giao việc cho máy, muốn giao được thì cần nói cho hiểu được và hiểu khá năng của nó, đó là tư duy lập trình
     
  • Tư duy lập trình chẳng khác gì tư duy toán học, tư duy văn học, tư duy tán gái, tư duy cá độ,... cả. Bản chất là giải quyết 1 vấn đề bằng cách mổ xẻ các bước thực hiện, phân tích các tình huống phát sinh ngoài các bước chính và cách nào xử lý nó một cách đơn giản, hiệu quả nhất. Xây dựng 1 cây ( hoặc vòng nhiều cây) quy trình xử lý vấn đề là bước đầu tiên trong lập trình và nó chiếm phần lớn trong khái niệm tư duy lập trình, còn sử dụng ngôn ngữ lập trình nào, hàm nào là do kỹ năng được tôi luyện ( cái này chả khác gì giải toán, có thêm chút lên đồng của văn). Tư duy ông nào tốt, độ phiêu hoặc lên đồng cao, thì xây dựng cây nhanh hơn, gần với sự hoàn hảo hơn, thế thôi.
    Gọi nó là tư duy khoa học đi cho lành.
     
Viết bình luận mới
Website liên kết