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.

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

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ác 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.

Continue reading “NHỮNG MÔN HỌC CẦN THIẾT NẾU BẠN MUỐN TRỞ THÀNH SENIOR DEVELOPER”

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ợ.

Continue reading “NAM! Code vui lắm đó!”

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ỉ?”

Continue reading “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ỉ?”

HỌC HỌC HỌC

Hello hello, mình là Nam, rất hân hạnh được làm quen với các bạn. Lâu rồi không viết bài mới trên Nam .NET, còn ai nhớ tới mình không nhỉ? 🤪

Bài viết cuối cùng trên trang này cũng đã cách đây nửa năm, trong thời gian qua tôi khá bận rộn với công việc, nhà cửa, gia đình, học hành… nhưng lý do quan trọng nhất có lẽ là vì không biết viết gì. Thường thì lúc rảnh tôi hay vào các nhóm sinh viên CNTT, hoặc các nhóm lập trình để tìm hiểu xem xu hướng các bạn làm gì và như thế nào, cũng như hỗ trợ các bạn đang gặp khó khăn trong việc học.

Continue reading “HỌC HỌC HỌC”

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.

Continue reading “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)”

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.

Continue reading “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)”

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!

Continue reading “3 LĨNH VỰC YÊU THÍCH CỦA TÔI – phần 1”

TỪ NGÔN NGỮ LẬP TRÌNH ĐẾN MÃ MÁY (phần 2)

Sau khi đã hoàn thành tiền xử lý, chúng ta sẽ sang bước thứ hai: Biên dịch.

Về cơ bản quá trình biên dịch nhận đầu vào là file mã nguồn, phân tích nó và xuất ra file nhị phân chứa mã thực thi. Quá trình này sẽ chia làm 3 bước chính:

👉 Phân tích từ vựng (lexical analysis)Trình biên dịch sẽ đọc file mã nguồn, từng ký tự một, sau đó phân tích các ký tự rời rạc đó thành các từ vựng trong bộ từ vựng của ngôn ngữ tương ứng.

Xét ví dụ sau:

int x = myfunc(x) * 10

Ví dụ trên sẽ được phân tích thành các từ vựng (ta có thể dùng từ tiếng Anh là token): int, x, =, myfunc, (, x, ), *, 10.Trình phân tích từ vựng sử dụng các ký tự phân tách (khoảng trắng, tab, xuống dòng, dấu chấm phẩy… tùy ngôn ngữ) để tìm ra các từ vựng, nó cũng biết rằng chữ n và t nằm sau i phải được kết hợp thành keyword int, ký tự 1 và 0 phải được kết hợp thành một nhóm là 10 – và đây là một số nguyên, tương tự cho các token còn lại.

Continue reading “TỪ NGÔN NGỮ LẬP TRÌNH ĐẾN MÃ MÁY (phần 2)”

TỪ NGÔN NGỮ LẬP TRÌNH ĐẾN MÃ MÁY (phần 1 – preprocessing)

Bạn đã biết C++ chưa? Đã học C#, Java, JavaScript, Python?Nghe nói Assembly khó lắm? Nếu Assembly khó thì mã máy thế nào?

Trong bài viết này tôi sẽ cố gắng mô tả quá trình từ một chương trình viết bằng ngôn ngữ bậc cao được dịch và thực thi như thế nào, hi vọng sau bài viết này các bạn sẽ có một cái nhìn tổng quan, hiểu được cơ bản và có thể tự mình giải quyết được các trục trặc thường gặp.Trong loạt bài này tôi sẽ chủ yếu minh họa bằng C, vì đây là ngôn ngữ có đầy đủ “đồ chơi” nhất, cũng như gần với các ngôn ngữ cấp thấp nhất.

❓Trình biên dịch làm thế nào để biến chương trình của bạn thành mã máy?

Continue reading “TỪ NGÔN NGỮ LẬP TRÌNH ĐẾN MÃ MÁY (phần 1 – preprocessing)”