Tag: blogging

  • Code thời AI

    Đây là một phần trong một project tay trái làm từ 2009 (chuyển sang git từ 2016).

    Hàng ngàn giờ code và hàng ngàn commit (trong hình chỉ thể hiện thông tin về một project trong solution), chuyển từ .NET Framework với EF thô sơ đời đầu, SQL viết tay… sang một dự án .NET 10 “hiện đại” 😵 ngày nay, mà bởi chỉ làm một mình nên tồn tại vô số bug, vô số rác và vô số nợ kỹ thuật.

    Vậy là quyết định thử dùng Claude để hiện đại hóa, định hướng là sẽ làm một cách triệt để, tức là giải quyết các vấn đề về kiến trúc, phụ thuộc, thư viện trước, sau đó sẽ build mới lại từng project con luôn. Và vì vẫn đang có người dùng nên quá trình này phải đảm bảo thông suốt với thời gian chuyển đổi ngắn nhất có thể, và đặt ra mục tiêu là người dùng hoàn toàn không nhận ra hệ thống đang/đã được nâng cấp.

    (more…)
  • Tại sao phải học thuật toán?

    Nếu không học thuật toán + cấu trúc dữ liệu (hai cái không thể tách rời), bạn sẽ không thể hiểu được:

    – Tại sao code bạn chạy chậm chỉ vì xin cấp phát nhiều vùng nhớ nhỏ thay vì ít vùng nhớ lớn.

    – Tại sao đôi khi không nên dùng index trên các bảng dữ liệu nhỏ.

    – Tại sao đôi khi bộ nhớ còn trống nhưng vẫn không xin cấp phát được.

    – Tại sao khi copy nhiều file nhỏ lại chậm hơn copy 1 file lớn.

    – Làm sao các cơ sở dữ liệu hỗ trợ được ACID.

    – Tại sao khi gọi hàm đệ quy nhiều quá sẽ bị stack overflow.

    – Làm sao tránh trùng dữ liệu trên các hệ phân tán.

    – Tại sao các thư viện về List lại hay dùng Array ở bên dưới thay vì Linked List.

    Và vô số ví dụ khác.

    (more…)
  • Thời AI, học thế nào?

    Hai tuần rồi mình code khá ít, chủ yếu đi dự seminar và họp hành, tài khoản Claude phải cố nghĩ ra thứ để dùng 😅, tuần này bắt đầu rảnh nên lại viết bài chia sẻ một chút.

    Mình cũng có cơ hội nói chuyện với nhiều đồng nghiệp, nhất là với “đám” senior, thú thật là trong đám senior ở công ty thì mình thuộc hàng trẻ nhất 🥹, vì thường để lên senior thì phải nắm vai trò quan trọng trong một dự án nào đó ảnh hưởng lớn đến doanh thu, hơn là năm kinh nghiệm hay tuổi tác. Tất nhiên chủ đề AI luôn xuất hiện, mọi người đều khá thích thú, và hầu hết đều nói rằng hiện nay chỉ còn code 10-20% so với trước kia. Nói như vậy để các bạn thấy rằng những “ông già” chưa bao giờ chậm hơn các “ông trẻ” cả, chỉ là họ ít nói về nó hơn, bởi đã nhìn thấy những thứ tương tự trước đây, điều đó khiến họ không cảm thấy quá phấn khích.

    Vậy nếu muốn học để đi làm thì làm sao? Bây giờ bạn lên mạng mà hỏi về việc nên học thế nào trong thời đại này thì chắc chắn sẽ có không ít còm men xui đi học nghề khác hay chỉ cần học vibe code là được. Vậy ý kiến của một người đã học từ thời còn màn hình trắng đen, làm từ khi mấy cái IDE “stupid” hơn bây giờ nhiều, trải qua nhiều trend khác nhau… sẽ là thế nào?

    (more…)
  • TÌM VIỆC CŨNG NHƯ ĐI BÁN HÀNG

    TÌM VIỆC CŨNG NHƯ ĐI BÁN HÀNG

    Thật vậy, khi đi làm ở một công ty nào đó, tức là bạn đang đi bán sức lao động cho họ và để thu lại tiền. Do vậy về nguyên tắc nó cũng tương tự như khi bạn bán bất kỳ sản phẩm nào khác.

    Vậy ta cùng xem qua một số yếu tố có thể ảnh hưởng đến quá trình bán hàng của bạn nhé.

    Chất lượng sản phẩm:

    Nếu bạn là một sản phẩm tồi, nghĩa là chẳng biết làm gì cả, vậy thì bạn không cần đọc tiếp. Vì khách hàng của bạn, họ biết rất rõ họ cần mua gì, và họ cũng rất có kinh nghiệm trong việc mua sắm nên dù gì cũng sẽ chẳng bán được. Trong thị trường lao động, bạn không thể bán hàng xong là khóa máy, đổi địa chỉ và biến mất, nên dù có lừa được họ để được nhận việc thì sau đó bạn cũng sẽ phải ra đi thôi.

    Vậy nên, khi còn đi học hãy cố gắng biến mình thành một sản phẩm tốt để có cái mà chào hàng.

    (more…)
  • NHỮNG MÔN HỌC CẦN THIẾT NẾU BẠN MUỐN TRỞ THÀNH SENIOR DEVELOPER

    Cấu trúc dữ liệu và thuật toán:

    Không cần nói nhiều về môn học này nhỉ? Bạn sẽ cần tìm hiểu về các cấu trúc dữ liệu thường dùng như: danh sách liên kết, cây, stack, queue… hoặc các thuật toán từ đơn giản đến phức tạp như tìm kiếm, sắp xếp, nén dữ liệu, tìm đường đi…

    Các cấu trúc bạn học được dùng rất nhiều, khi học các môn khác bạn sẽ cảm thấy khó hiểu nếu không nắm chắc phần này. Ví dụ danh sách liên kết (linked list), stack được dùng trong quản lý bộ nhớ máy tính, queue rất phổ biến trong các hệ thống phân tán, hoặc xử lý dữ liệu không đồng bộ. Cấu trúc cây được dùng rất nhiều trong các hệ cơ sở dữ liệu, không hiểu nó bạn sẽ khó đi sâu vào mảng này.

    Các thuật toán cũng vậy, làm quen với các thuật toán là cách hiệu quả nhất để hiểu cách máy tính làm việc, cũng như phương pháp giải quyết vấn đề dựa trên máy tính. Trong thực tế bạn sẽ không bao giờ phải làm lại các bài toán trong môn Thuật toán vì chúng luôn có sẵn trong các thư viện của ngôn ngữ lập trình. Tuy nhiên, bạn sẽ phải áp dụng kiến thức của môn học này để giải quyết những vấn đề bạn gặp trong các bài toán thực tế.

    Bạn không cần phải quá đi sâu nếu không có ý định dự các cuộc thi. Đừng cố gắng học hết tất cả các thuật toán, làm tất cả các bài tập, chỉ cần hiểu cách chúng làm việc là được. Bởi sẽ còn một núi kiến thức khác bạn cần tiếp thu ngoài môn học này.

    (more…)
  • NAM! Code vui lắm đó!

    Đó là câu nói anh bạn người Thụy Điển nói với mình.

    Chuyện là mấy ngày rồi anh bạn này sang Na Uy để hỗ trợ mình tham gia vào một dự án trên mobile, hai người bằng tuổi, lại làm chung với nhau khá lâu rồi nên nói chuyện rất vui. Có lần mình nói về sở thích, anh bảo: tao cứ rảnh không làm gì là lại ngồi code. Nam à, code vui lắm đó, he he. 😂

    Yes! Yes! I know! 😁

    Nói một chút về dự án này. Đây là một app viết trên Xamarin, back end của nó là cả một gói bự, dùng cho các công ty vận tải hàng hoá, được triển khai trên khoảng 200 server. Mình vốn là một trong những người xây dựng lên những phiên bản đầu tiên của hệ thống, nên thực ra lạ mà quen (lúc đọc lại code phải cố gắng kìm chế để không chửi cái thằng viết, vì biết đâu đó là mình thì sao 😂). Khi đó chưa có docker, microservice ít phổ biến như bây giờ nên mô hình triển khai khá phức tạp, để triển khai trên số server phân tán lớn như vậy bên mình phải có team chuyên tooling để tạo ra các công cụ hỗ trợ.

    (more…)
  • Liệu từ một người không biết gì về lập trình thì có khả năng đi làm sau 1 năm không nhỉ?

    Nếu lướt qua các hội nhóm lập trình thì câu trả lời có lẽ là không! Riêng tôi câu trả lời cũng là không nốt! 😅

    Đùa đấy, thực ra câu trả lời là hoàn toàn được. Những người đã học vài năm có lẽ sẽ cười vào mũi tôi, vì cứ tưởng lập trình là dễ lắm ấy, chắc ông này chưa đi làm bao giờ.

    Vậy tôi sẽ hỏi lại một câu khác:

    “Liệu từ một người không biết gì về lập trình thì có khả năng đi làm sau 2000 giờ học không nhỉ?”

    (more…)
  • PHÂN TÍCH THIẾT KẾ VÀ KIẾN TRÚC HỆ THỐNG (3 LĨNH VỰC YÊU THÍCH CỦA TÔI – phần 3)

    Với 2 lĩnh vực yêu thích trước: Hệ điều hành và ngôn ngữ lập trình, tất cả chỉ dừng lại ở mức sở thích mà thôi, những gì tôi đã làm chỉ là các dự án nhỏ, hoặc là một phần nhỏ của các dự án khác. Trong tương lai tôi cũng chưa có ý tưởng gì về chúng xa hơn một đam mê cá nhân, vì thực sự cả 2 đều là những lĩnh vực khó và đòi hỏi một nguồn lực rất lớn.

    Tuy nhiên, lĩnh vực thứ 3 này lại hoàn toàn khác, tôi phải làm việc với chúng hàng ngày: nhận các yêu cầu từ product manager rồi thảo luận với họ xem nên làm thế nào, đưa ra các phương án hoặc đánh giá các phương án từ đồng nghiệp khác, việc đánh giá này không chỉ đòi hỏi bạn biết về kỹ thuật, mà còn bắt buộc bạn phải nắm trong tay thông tin về nguồn lực, văn hóa doanh nghiệp hay nhiều yếu tố phi kỹ thuật khác. Chỉ sau khi chọn phương án, chúng tôi mới bắt đầu thiết kế ra ứng dụng và mới bắt tay vào code.Từ những ngày đầu tiên đi học, tôi đã luôn suy nghĩ về câu hỏi: Từ những yêu cầu đầu vào cho trước, làm thế nào để biết được ta cần tạo nên các lớp nào, đối tượng nào? Làm thế nào để từ một bài toán rất mơ hồ lại có thể tạo nên được một ứng dụng đáp ứng được yêu cầu người dùng, và còn phải:

    👉 Nâng cấp và bảo trì dễ dàng: nếu bạn không biết thế nào là nâng cấp và bảo trì dễ dàng, hãy thử đặt ra tình huống toàn bộ nhân sự trong dự án nghỉ việc, và bạn chỉ có một khoảng thời gian ngắn để chuyển giao cho nhóm mới. Khả năng chuyển giao càng lớn và càng mất ít thời gian, đồng nghĩa với ứng dụng của bạn càng dễ bảo trì. Còn nếu người tiếp nhận dự án thốt lên một câu: “Cái này thà đập đi làm lại từ đầu còn dễ hơn” (câu này quen quá 😄) thì hẳn nó quá khó để chuyển giao.

    (more…)
  • NGÔN NGỮ LẬP TRÌNH VÀ TRÌNH BIÊN DỊCH (3 LĨNH VỰC YÊU THÍCH CỦA TÔI – phần 2)

    Trên thế giới này có bao nhiêu ngôn ngữ lập trình? Chịu, không ai biết được. Chỉ cần kể ra những cái tên nổi tiếng đã có rất nhiều: C, C++, Fortran, Pascal, JavaScript, Java, Python, Perl, Basic, C#, F#, Dart, Go… hay các ngôn ngữ chuyên dụng như SQL, VBA, Powershell script…Vậy tại sao tôi lại thích học về ngôn ngữ lập trình? Câu trả lời rất đơn giản: Vì tôi thích! Khi còn đi học, cũng như những sinh viên hay mơ mộng khác, tôi cũng có mơ ước một ngày nào đó sẽ tự phát minh ra một ngôn ngữ mới. Và thật sự tôi cũng đã từng tạo ra một vài trình biên dịch nhỏ trong quá trình học và làm việc: một trình dịch giúp hỗ trợ syntax highlighting khi khách hàng viết các SMS template (các SMS này sẽ có thể chứa các thông tin về đơn hàng và được gửi đến cho các tài xế), một trình dịch khác cũng phục vụ highlighting cho 1 Java IDE (kiểu như VS code – IDE này là một pet project).

    Tôi không khuyến khích các bạn đi sâu vào nghiên cứu nó, nhưng tìm hiểu một chút sẽ mang lại rất nhiều kiến thức bổ ích, giúp việc tự học dễ dàng hơn rất nhiều, vì:

    👉 Bạn sẽ biết các bước trình biên dịch xử lý mã nguồn, đây là thứ gắn bó với bạn hàng ngày, hàng giờ cho đến nhiều năm sau 🤪.

    👉 Khi xảy ra một thông báo lỗi, bạn có thể mường tượng ngay tại sao, thậm chí khi đọc qua một nền tảng hay ngôn ngữ mới, bạn sẽ dự đoán được những vấn đề mình có thể gặp phải.

    👉 Tại sao ngôn ngữ này là hướng đối tượng hoàn toàn, ngôn ngữ kia chỉ hỗ trợ một phần, ngôn ngữ nọ hoàn toàn không hỗ trợ? Hay tại sao ngôn ngữ này bắt buộc khai báo kiểu rõ ràng ngôn ngữ kia lại không? Nếu có thể hiểu được vấn đề từ góc độ người thiết kế ra ngôn ngữ, bạn sẽ hiểu được lý do tại sao họ chọn như vậy, hay nói cách khác, bạn sẽ hiểu được họ đã hi sinh cái gì để đánh đổi lại được lợi ích (thế mạnh) gì. Biết được thế mạnh của mỗi ngôn ngữ là điều quan trọng.

    (more…)
  • 3 LĨNH VỰC YÊU THÍCH CỦA TÔI – phần 1

    Công nghệ thông tin là một lĩnh vực rất rộng, không ai có thể giỏi tất cả, vì vậy việc chọn cho mình một ngôn ngữ, nền tảng hay chuyên ngành riêng nào đó rất quan trọng.

    Câu hỏi thường gặp nhất sẽ là: Tôi nên học gì để sau này có việc làm? Thật sự công việc trong ngành này rất nhiều, và sẽ càng ngày càng nhiều, nhất là trong bối cảnh các xu hướng làm việc từ xa, dữ liệu lớn, AI, IoT… đang trở nên phổ biến hơn bao giờ hết. Nhưng tôi chắc chắn bạn chưa bao giờ tìm được một đáp án thỏa mãn, bởi đơn giản chỉ bạn mới có thể trả lời chính xác mà thôi.

    Câu trả lời của tôi luôn là: Bạn hãy học những gì bạn thích nhất!

    (more…)