Code thì cứ code nhưng đã bao giờ bạn dành thời gian khai phá tư duy lập trình của mình chưa?

Code thì cứ code nhưng đã bao giờ bạn dành thời gian khai phá tư duy lập trình của mình chưa?

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Đây! Một vấn đề mà từ xưa đến nay mình cứ thắc mắc mãi, và cho đến hôm qua thì mọi thứ đã sáng tỏ.

    Bình thường mọi người dùng height: 100vh để đặt chiều cao bằng với viewport của màn hình. Trên máy tính thì không vấn đề gì, thậm chí giả lập kích thước của điện thoại thông minh thì mọi thứ vẩn ổn. Nhưng khi mở trên điện thoại thì height 100vh lúc nào cũng vượt quá viewport. Ủa!? Là sao???

    Lý giải cho điều này là do trên thiết bị di động có cách tính viewport khác với máy tính. Nó thường bị can thiệp hay ảnh hưởng bởi thanh địa chỉ, thanh điều hướng của nền tảng mà bạn đang sử dụng. Vậy nên nếu muốn 100vh trên di động đúng bằng viewport thì cần phải làm thêm một bước thiết lập lại viewport.

    Dễ lắm, đầu tiên cần tạo một css variable --vh ở ngay thẻ script đầu trang.

    function updateViewportHeight() { const viewportHeight = globalThis.innerHeight; document.documentElement.style.setProperty('--vh', `${viewportHeight * 0.01}px`); } updateViewportHeight(); window.addEventListener('resize', updateViewportHeight);

    Sau đó thay vì dùng height: 100vh thì chuyển thành height: calc(var(--vh, 1vh) * 100). Thế là xong.

    » Xem thêm
  • Cả ngày hôm nay mình dành thời gian để làm giao diện tiếp thị cho gói hội viên của 2coffee.dev. Vậy là cuối cùng thì cũng chính thức đi vào vào con đường mà 5 năm trước cũng không ngờ đến được: "Bán một cái gì đó". Người ta thường nói "Cho đi để nhận lại", bên cạnh đó cũng có câu "Nếu giỏi một cái gì đó, đừng làm nó miễn phí". Nếu theo dõi đủ lâu, bạn đọc sẽ thấy chẳng có gì mình giấu giếm. Biết gì viết nấy, và đôi khi nhờ viết ra mà nhận lại được sự góp ý của độc giả. Từ đó giúp mình hoàn thiện bản thân nhiều hơn.

    Membership là tính năng mà mình sắp sửa giới thiệu. Trở thành hội viên của blog, bạn sẽ có một số đặc quyền nhất định, ví dụ như truy cập vào các bài viết chỉ dành riêng cho hội viên. Các bài viết này về các chủ đề chuyên sâu và được hệ thống hoá sao cho dễ đọc và dễ nắm bắt nhất. Qua đó cung cấp thêm nhiều kiến thức và trau dồi kỹ năng cho bạn đọc.

    Để đạt được đến ngày hôm nay là công rất lớn của các bạn đọc giả, của những người yêu mến 2coffee.dev. Nhờ các bạn mà blog mới có ngày hôm nay. Bên cạnh đó, bản thân mình cũng phải thay đổi liên tục, phải vượt ra khỏi vùng an toàn, làm những điều mà trước nay không dám. Dù sao đi nữa thì đây cũng mới là khởi đầu cho mọi sự gian nan. Nhưng đừng bao giờ nản nha các bạn ơi 😄

    » Xem thêm
  • Ngày nay, 1 triệu (1M) tác vụ đồng thời sẽ tiêu tốn bao nhiêu bộ nhớ? Đó là câu hỏi của hez2010 và anh đã quyết định đi tìm câu trả lời, bằng cách thử nghiệm một chương trình đơn giản trên nhiều ngôn ngữ lập trình khác nhau: How Much Memory Do You Need in 2024 to Run 1 Million Concurrent Tasks?

    Tóm tắt lại thì Rust vẫn vô đối, nhưng vị trí thứ 2 mới làm tôi cảm thấy ngạc nhiên 😳

    » Xem thêm

Vấn đề

Chúng ta chắc hẳn ai cũng mong muốn kĩ năng code của mình ngày một tốt hơn. Bằng cách học nhiều hơn, làm nhiều hơn để tích luỹ thêm nhiều kinh nghiệm trong xử lý vấn đề. Sau này khi đối mặt với một vấn đề cũ thì có thể giải quyết nó một cách dễ dàng, đơn giản vì khi đó chúng ta đã có kinh nghiệm xử lý chúng.

Nhiều người thường dựa vào số năm kinh nghiệm để đánh giá một người code giỏi hay không. Điều này cũng khá hợp lý trong trường hợp chúng ta có quá ít thời gian để tiếp xúc và đánh giá họ, hay cũng có khả năng là không đủ năng lực để đánh giá. Thực tế vẫn có những người ít tuổi hơn nhưng vẫn có khả năng xử lý vấn đề rất giỏi. Số năm kinh nghiệm lúc này cũng chỉ mang tính tham khảo vì không chắc chắn rằng cứ code lâu hơn sẽ giỏi hơn người code ít hơn.

Như Malcolm Gladwell đã viết trong cuốn sách "Những kẻ xuất chúng" của ông về "10.000 giờ là con số kỳ diệu của sự vĩ đại" tức là bạn sẽ trở nên thực sự giỏi một vấn đề nào đó khi làm việc với nó ít nhất 10.000 giờ. Đến nay con số 10.000 giờ vẫn còn đang gây nhiều tranh cãi, liệu cứ phải trải qua một mốc thời gian đã định thì bạn sẽ giỏi lên hay là còn cách nào khác để vượt qua nỗi ám ảnh của con số này không?

Tư duy lập trình là gì?

Đơn giản đó là cách giải quyết vấn đề bạn gặp phải một cách hiệu quả. Nhưng thế nào là hiệu quả? Điều đó phụ thuộc vào vốn kiến thức và kinh nghiệm của mỗi người.

Nếu cho bạn lựa chọn giữa 3 thứ dao, kéo và liềm để mở một gói Snack bạn sẽ chọn cái nào? Chắc chắn bạn sẽ chọn kéo vì bạn biết kéo là cách đơn giản nhất để mở gói. Nhưng liệu một đứa trẻ sẽ biết lựa chọn thứ tốt nhất trong số chúng? Về cơ bản deo, kéo hay liềm đều có thể mở được gói snack nhưng bạn đã quá rõ về chúng nên bạn biết cách để sử dụng chúng sao cho hiệu quả.

Quay về thế giới của lập trình viên, việc bạn biết cách áp dụng một công cụ, phương pháp... để giải quyết một vấn đề sao cho phù hợp và chính xác nhất đó chính là tư duy lập trình của bạn.

Có một sai lầm phổ biến của những người mới học code là chăm chút vào học (thuộc) mã mà không rèn luyện khả năng tư duy. Có rất nhiều ngôn ngữ mà mỗi ngôn ngữ có rất nhiều cú pháp khiến bạn không thể nhớ hết được. Nhưng khả năng tư duy lại tồn tại xuyên suốt trong các ngôn ngữ.

Để đạt được điều đó đòi hỏi bạn phải bỏ ra một cơ số giờ để tìm hiểu và thực hành hết tất cả kiến thức. Điều đó sẽ mang đến cho bạn tư duy lập trình. Con số 10.000 giờ kia chỉ mang tính tham khảo khi bạn biết mình nên tập trung vào đâu để đến đích nhanh nhất.

Những người có tư duy lập trình tốt thường sẽ có suy nghĩ về cách giải quyết một vấn đề khá giống nhau. Ai cũng từng là thực tập sinh và khi nghe những người có kinh nghiệm hơn nói chuyện với nhau về cách giải quyết một vấn đề nào đó, trông họ có vẻ trao đổi rất trơn tru nhưng mình lại chẳng hiểu gì cả, đơn giản vì bạn chưa đạt đến trình độ của họ để có tư duy lập trình đó.

Làm sao để rèn luyện tư duy lập trình?

Làm sao để rèn luyện tư duy lập trình?

Lời khuyên: Cứ làm và làm cho đến khi bạn tìm ra được cách tốt nhất để giải quyết. Không bao giờ hài lòng với cách cách giải quyết vấn đề của bạn vì mỗi cách luôn luôn tồn tại những ưu nhược điểm khác nhau.

Để đạt được điều đó, chung quy có 4 bước để mô phỏng quá trình này đó là:

Hiểu

Đầu tiên bạn cần phải hiểu được chính xác yêu cầu là gì. Hầu hết các vấn đề khó là vì bạn chưa hiểu chúng. Vậy làm sao để bạn hiểu được? Hãy thử giải thích chúng, điều đó cũng góp phần hình thành nên phương pháp "vịt cao su" nổi tiếng. Mấu chốt của phương pháp là bạn giải thích vấn đề đó với vịt cao su, nếu hiệu quả bạn sẽ phát hiện ra những lỗ hổng trong kiến thức của bạn.

Vịt cao su là một phương pháp nổi tiếng trong ngành lập trình trên thế giới. Về cơ bản việc bạn giải thích cho vịt cao su cũng chính là cách để kiểm tra xem bạn có thực sự hiểu vấn đề, vì chỉ khi hiểu bạn mới có thể giải thích lại được. Hơn thế trong quá trình giải thích bạn sẽ nhận ra được nhiều vấn đề mới phát sinh để từ đó tìm ra cách giải quyết chúng.

Có một câu nói nổi tiếng trong trường hợp này là "Nếu bạn không thể giải thích điều gì đó bằng những thuật ngữ đơn giản, bạn thực sự không hiểu nó". Khi nhận một yêu cầu hãy dành thời gian để "hiểu" chúng trước khi bắt tay vào làm. Đó cũng chính là nội dung của bước 2 dưới đây.

Lập kế hoạch

Đừng vội bắt tay vào code ngay lập tức mà hãy dành thời gian vạch ra cho mình một kế hoạch giải quyết vấn đề. Bạn có thể hiểu vấn đề nhưng nếu ghi ra từng bước giải quyết sẽ giúp bạn nhìn nhận vấn đề một cách rõ ràng hơn, có thể phát hiện ra được những trường hợp không ngờ tới.

Hãy lặp lại câu hỏi "Với đầu vào X, các bước cần thiết để trả về đầu ra Y là gì?" trong khi lên kế hoạch. Xác định được từng đầu vào với từng đầu ra đồng nghĩa với việc bạn biết mình đang cần gì để từ đó biết cách giải quyết chúng bằng cách nào.

Chia nhỏ vấn đề

Hãy chia nhỏ vấn đề càng bé càng tốt. Một vấn đề lớn nhìn qua có vẻ rất phức tạp nhưng khi chia nhỏ ra nó lại trở về những vấn đề đơn giản đến mức có khi bạn đã quá quen thuộc với chúng. Nếu chưa từng gặp một trong những vấn đề đó là một cơ hội cho bạn tìm hiểu.

Cuối cùng khi giải quyết được hết vấn đề nhỏ tự khắc vấn đề ban đầu sẽ được giải quyết. Hãy nhớ phương pháp chia để trị luôn hữu hiệu ở mọi mặt trong cuộc sống.

Bế tắc

Những vấn đề nhỏ ở trên có lúc bạn không hoàn toàn làm chủ được chúng. Đừng lo lắng, bất kì ai cũng từng gặp điều này. Sự khác biệt giữa người giải quyết vấn đề giỏi và người bình thường là tò mò về sự xuất hiện của lỗi hơn là khó chịu về chúng. Về cơ bản việc cần làm trong giai đoạn này là thực hành khả năng gỡ lỗi của bạn từ đó rút ra được kinh nghiệm khi đối mặt với những lỗi tương tự. Hiểu được bản chất của lỗi cũng là hiểu được cách tránh khỏi lỗi đó.

Giải quyết được bế tắc chưa phải là tất cả. Hãy áp dụng phương pháp "đánh giá quy lui" - Tức là lùi về bước trước đó xem có còn cách nào giúp bạn giải quyết được vấn đề nhanh hơn không? Kể cả khi bạn đã giải quyết được vấn đề thì hãy dành thời gian nhìn lại để đánh giá xem liệu chúng có thực sự hiệu quả? Có thể làm lại được gì để giúp giải quyết tốt hơn không.

Kết luận

Tư duy lập trình là thứ luôn tồn tại trong chúng ta. Bạn hoàn toàn có thể làm chủ được tư duy của mình bằng cách rèn luyện mỗi ngày. Hiểu được tầm quan trọng của tư duy lập trình giúp bạn tập trung hơn vào con đường phát triển bản thân và sự nghiệp sau này.

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.
Author

Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.

Bạn thấy bài viết này có ích?
Không

Bình luận (2)

Nội dung bình luận...
Avatar
Gin Na2 năm trước
Bài viết truyền động lực ghê
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
Nhớ ghé đọc thêm nhiều bài hơn nữa nhé bạn
Avatar
Nhí Nhố Tí2 năm trước
@gif [10uEX5kfeodYgo]
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
@gif [v4kSqUsNg9i1XxO6L7] Bạn đọc đến đâu rồi?
Avatar
Xuân Hoài Tống2 năm trước
@gif [xHnGkoz0KjGa0ixLzk]