Category: blogging

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

    (more…)
  • 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?

    (more…)
  • LAN MAN VỀ VIỆC HỌC

    https://vnexpress.net/sa-thai-mua-covid-4127122.html

    Những bài viết như thế này luôn gây ra hai luồng ý kiến trái ngược, một bên bênh vực người lao động vì công ty cho nghỉ không đúng luật, một bên lại bên vực công ty khi bắt buộc phải tìm cách cho nghỉ những nhân viên kém hiệu quả nhất.

    Kém hiệu quả nhất là gì? Kém hiệu quả nhất không đồng nghĩa với việc bạn là người dở nhất. Nhưng bạn không còn phù hợp với tổ chức đó nữa. Khi đã rơi vào tình thế này thì việc ra đi chỉ là sớm hay muộn, trừ khi bạn quá “mặt dày” để cố đấm ăn xôi 😃.

    Tôi sẽ không bàn về việc ta phải làm gì trong hoàn cảnh này, bởi như trên đã nói, chẳng có con đường nào khác ngoài ra đi. Nhưng ta sẽ bàn về cách để không phải rơi vào hoàn cảnh ra đi nhưng không biết đi về đâu.

    Trước tiên, ta phải nhìn nhận rằng tự nhiên luôn công bằng, nó có những quy luật của nó và các quy luật này là bất biến. Một cậu trai mới ra trường đã được làm sếp chỉ vì cha cậu ấy là chủ tịch – Điều này có công bằng không? Nếu là không, và cậu ấy cũng phải bắt đầu như mọi người, vậy điều đó có công bằng với cha cậu ấy – người ta phấn đấu cả đời để xây dựng nên công ty hay không? Để đến được đích trước, bạn phải có ít nhất một trong hai lợi thế: hoặc bạn phải chạy nhanh hơn, hoặc phải ở gần đích hơn! Mà việc lựa chọn điểm xuất phát lại không nằm trong tay chúng ta, nên chỉ có một cách duy nhất là phải chạy cho thật nhanh, và chạy cho đúng hướng.

    Trong ngành công nghiệp phần mềm, vũ khí cạnh tranh lớn nhất là tri thức, và chỉ có duy nhất một cách để mài dũa vũ khí đó là học. Vậy phải học thế nào?

    (more…)
  • BÀN VỀ FUNCTIONAL PROGRAMMING VÀ OOP PROGRAMMING – bài 1

    Cách đây mấy hôm tôi có đưa ra một khảo sát xem mọi người sẽ theo hướng FP hay OOP, vì hay gặp cảnh tranh cãi giữa hai trường phái này. Và thường các cuộc tranh cãi đều không có hồi kết, đơn giản vì ai cũng có lý lẽ của mình, và quan trọng nhất là không có ai có thể đưa ra được những lý do xác đáng để bên kia tin theo.

    Trong bài này tôi sẽ mặc nhiên coi các bạn đã hiểu về OOP, và sẽ nói một chút về FP (vì trong blog này chưa có bài nào nói về nó). Nếu như bạn chưa thực sự biết rõ cả OOP lẫn FP thì tất cả những lý lẽ đưa ra sẽ đều là cảm tính, do đó quan điểm đưa ra sẽ dễ trở nên phiến diện và không thuyết phục.

    Nhớ tìm đọc lại các bài OOP nếu bạn vẫn chưa nắm rõ nhé ❤️.

    ℹ️ Vậy Functional Programming là gì?

    (more…)
  • KINH NGHIỆM BẠN CÓ TỪ ĐÂU?

    Bạn đã học xong đại học chưa? Rồi ư, giờ là lúc bước ra đường và nhận lấy cái tát đầu tiên từ cuộc đời!

    PHẢI CÓ KINH NGHIỆM MỚI KIẾM ĐƯỢC VIỆC 😱

    Phải đi làm mới có kinh nghiệm, phải có kinh nghiệm mới tìm được việc làm. Bạn không cô đơn đâu, chỉ cần lướt nhẹ qua các diễn đàn, sẽ thấy ngay có rất nhiều người giống bạn. Vậy phải làm gì?

    Trước tiên, ta phải thống nhất 1 với nhau một điều: bạn chỉ là một người mới bước chân vào một trò chơi có hàng triệu người tham gia, bạn đang đứng đâu đó ở cuối dãy, và quan trọng nhất sẽ chẳng có ai lắng nghe “tâm tư, nguyện vọng” đó cả. Đó là quy tắc của cuộc chơi và bạn sẽ phải theo, dù muốn hay không. Nếu với tư cách nhà tuyển dụng, tôi có thể chia sẻ với bạn vài điều:

    👉 Trong ngành phần mềm, kinh nghiệm rất quan trọng, vì bạn luôn phải làm việc trên những thứ không hoàn hảo, thậm chí đôi khi không tốt cho lắm: Windows, Linux, Apache, Mysql, PHP, NodeJS, React Native… tất cả đều không hoàn hảo, vậy nên nhận vào một người đã biết bệnh các thứ trên sẽ giúp tiết kiệm thời gian rất nhiều.

    (more…)
  • NÊN DẠY PASCAL HAY C TRONG NHÀ TRƯỜNG?

    Đọc được một bài viết của một bạn nào đó nói về việc thay thế Pascal trong nhà trường bằng một ngôn ngữ khác, mình cũng muốn viết vài ý về điều này.

    👉 Thứ nhất, phải khẳng định một điều là kiến thức về giáo dục và công nghệ phần mềm của chúng ta còn kém rất xa so với những chuyên gia trong ngành. Khi các bạn tranh cãi OOP hay functional programing hay hơn, thì họ đang thiết kế ra các ngôn ngữ và viết các trình biên dịch, khi ta đọc được một bài viết về cấu trúc đĩa cứng (và cảm thấy mình thật giỏi) thì cách đó mười năm họ đã kiếm tiền bằng cách viết các driver cho hệ điều hành, và khi ta chợt “phát hiện” ra học lập trình với Python hay hơn Pascal thì họ đã đào tạo hàng trăm hàng trăm hàng ngàn kỹ sư phần mềm rồi.

    Bạn không tưởng tượng được nó xa đến mức nào đâu!

    Cách đây rất lâu, khi tôi có cơ hội làm việc chung với một chuyên gia đầu ngành về nhận dạng ảnh/video, thầy ấy đã giới thiệu một số đề tài tiến sĩ mà thầy hướng dẫn, là những bài toán như nhận dạng chữ viết tay, nhận dạng khuôn mặt, đọc ảnh thiên văn và tính toán khoảng cách các thiên thể… và họ đã nghiên cứu những thứ như vậy từ hơn 20 năm trước.

    (more…)
  • TÔI LÀ AI? ĐÂY LÀ ĐÂU?

    Mình nhận được rất nhiều câu hỏi như trên? Nên muốn viết bài này để chia sẻ với mọi người.

    Tôi là ai ❓

    Tôi là một người vô cùng đam mê lập trình, đam mê từ khi mới học cho đến tận bây giờ, thật sự đó là một điều may mắn, vì nhờ niềm đam mê đó mà tôi có thể đọc sách về máy tính, viết code, chạy thử, rồi nhìn thành quả thâu đêm suốt sáng mà không chán.Tôi biết có nhiều người không có may mắn này nên khi học họ cảm thấy rất chán, học trong sự hứng thú chắc chắn sung sướng hơn học trong sự chán nản rồi!Nhờ niềm đam mê này mà tôi đã đọc vô số sách, blog, mã nguồn, đọc cả mã dịch ngược, rồi cũng bắt tay vào làm, cài đặt, có khi đúng, có khi sai, rồi lại nghiền ngẫm vì sao làm thế này mà không thế kia… Tại sao mình hiểu như vậy, nhưng người ta nói thế này, vậy mình sai chỗ nào?

    Tôi là một người đam mê máy tính! 😁

    (more…)
  • BẠN HỌC GÌ ĐỂ ĐI LÀM?

    Em mới học xong C++ giờ em học gì tiếp để đi làm?

    Đây là câu hỏi khá phổ biến, vì ai chẳng muốn học để đi làm? Còn gì đau đớn tâm can hơn là học 4-5 năm đại học xong ra phải chạy Grab, mất toi một nửa tuổi thanh xuân.Để trả lời câu hỏi này, bạn cần biết tại các công ty phần mềm người ta làm gì (Ở công ty phần mềm, người ta làm ra phần mềm, ôi dĩ nhiên rồi 😃) và người ta cần người như thế nào.

    Phần mềm có rất nhiều loại, có thể nói con người cần làm gì, thì sẽ có phần mềm hỗ trợ họ làm việc đó. Vậy nên trong bài viết này sẽ chủ yếu nhắc đến những công nghệ phổ biến nhất, sau khi làm vài năm, tùy khả năng và hoàn cảnh đưa đẩy, mỗi người sẽ có con đường đi riêng của mình.

    👉 Trước tiên, đã là lập trình thì bạn phải thành thạo một ngôn ngữ lập trình nào đó, có thể là Java, C++, ASM, PHP, Python… thành thạo nghĩa là phải kể vanh vách được các kiểu dữ liệu như thế nào, các vòng lặp được thực hiện ra sao, các bộ thư viện chính là gì, các từ khóa static, interface, import, export, synchronized, await, async… hoạt động thế nào. Các biến được lưu trữ thế nào, kiểu float khi lưu trữ khác gì int, kiểu string khác gì mảng char… Các input/output stream hoạt động như thế nào, dùng thư viện gì để kết nối cơ sở dữ liệu… Để biết một ngôn ngữ nào đó rất dễ, nhưng thành thạo thì rất lâu đấy nhé.👉 Cấu trúc dữ liệu và giải thuật: đây là một môn học vô cùng thú vị nhưng cũng khá hại não. Nhưng thực sự vô cùng cần thiết, nó dạy cho bạn cách người ta suy nghĩ thế nào, để từ đó bạn biết mình cần suy nghĩ thế nào. Sau này bạn sẽ thấy rất nhiều thứ có trong máy tính đã được xây dựng từ những thứ bạn được học: linked list, tree, graph…

    (more…)
  • BẠN MONG MUỐN MỨC LƯƠNG BAO NHIÊU?

    Đã bao nhiêu lần bạn gặp câu hỏi này? Bạn có thấy khó khăn khi trả lời nó không? Làm sao để trả lời theo đúng mong muốn của bạn? Và quan trọng nhất, làm sao để không bị “hớ”?Mức lương cũng như cuộc đời, vô chừng lắm, không hề có một chuẩn mực nào, vậy nên để đạt được mong muốn của mình, đừng quên những nguyên tắc sau:

    (more…)
  • Lập kế hoạch học tập

    Bạn vẫn chưa có kế hoạch gì ư? Vậy thì đó là điều cần làm đầu tiên. Có một kế hoạch, bạn sẽ biết cần làm gì, những gì đã làm đã đúng với mong muốn hay chưa, và quan trọng nhất, bạn biết sau khi hoàn thành bạn sẽ đạt được gì.Bạn có thể có các kế hoạch ngắn hạn và dài hạn. Các kế hoạch dài hạn có thể cho 5 năm, 10 năm hay 15 năm, và các kế hoạch ngắn hạn – với mục tiêu hoàn thành một bước nào đó trong kế hoạch dài hạn, có thể kéo dài từ vài ngày đến vào tháng. Và kết quả của chúng phải cụ thể, ví dụ: hiểu OOP, thành thạo C++, lấy được chứng chỉ CCNA, hay kiếm được thu nhập 20.000.000/tháng… có như vậy, bạn mới biết được chính xác mình có bám theo đúng mục tiêu hay chưa, và đã đạt được bao nhiêu % công việc, cũng như cần điều chỉnh gì để hoàn thành công việc đó đúng hạn.

    Sau khi đã có kế hoạch, hãy cố gắng bám sát nó.

    (more…)