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)”

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?

Continue reading “LAN MAN VỀ VIỆC HỌC”

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ì?

Continue reading “BÀN VỀ FUNCTIONAL PROGRAMMING VÀ OOP PROGRAMMING – bài 1”

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.

Continue reading “KINH NGHIỆM BẠN CÓ TỪ ĐÂU?”

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.

Continue reading “NÊN DẠY PASCAL HAY C TRONG NHÀ TRƯỜNG?”

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! 😁

Continue reading “TÔI LÀ AI? ĐÂY LÀ ĐÂU?”

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…

Continue reading “BẠN HỌC GÌ ĐỂ ĐI LÀM?”

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:

Continue reading “BẠN MONG MUỐN MỨC LƯƠNG BAO NHIÊU?”

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

Continue reading “Lập kế hoạch học tập”

Một số lời khuyên cho người học IT

Kế hoạch của bạn là gì?

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ụ: thành thạo C++, lấy được chứng chỉ CCNA, hay kiếm được thu nhập 10.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ó.

Sử dụng thời gian một cách tốt nhất

Những người khác mất bao nhiêu lâu để làm việc đó? Tôi không biết, nhưng tôi muốn bạn phải hoàn thành nó với một nửa thời gian đó thôi.

Khi còn dạy ở NIIT, tôi vẫn thường hỏi các học viên là: Bạn mất bao nhiêu thời gian cho việc học ở đây? Đáng tiếc, câu trả lời thông thường vẫn là 6h/tuần, tương đương khoảng 1h/ngày, hoặc nếu có bài làm thêm ở nhà thì là 12h/tuần. Bạn nghĩ sao nếu một người khác có cùng khởi đầu như bạn, nhưng họ đầu tư 6h/ngày cho việc học? Kết quả là, bạn sẽ mất 6 tháng để làm được thứ mà họ chỉ cần 1 tháng để hoàn thành. Kiến thức của họ sau 2 năm so với bạn là thế nào?

Sự thực, đối với một sinh viên, cá nhân tôi nghĩ rằng 6h cho một ngày vẫn không đủ. Vậy con số đó là bao nhiêu?

Hãy nhìn những người xung quanh bạn, họ sẽ là người cạnh tranh với bạn trong công việc sau này. Họ mất bao nhiêu thời gian cho việc học? Vậy nên con số tương đối mà tôi có thể nói là con số lớn hơn những người xung quanh bạn đã dành ra. Nhưng nếu chỉ biết lao đầu vào học bạn sẽ bỏ lỡ nhiều thứ, cũng như khả năng thu nhận thông tin cũng chỉ có giới hạn, vậy nên, bạn cần xem khoảng thời gian nào tốt nhất trong ngày cho việc học, số giờ chúng ta có thể dành ra được, thời gian nghỉ ngơi thư giãn, sao cho thời gian được sử dụng hiệu quả nhất.

Đọc sách

Đọc sách hiển nhiên là quan trọng. Nhưng cách đọc cũng quan trọng không kém. Sách chuyên ngành thông thường không dễ đọc và hiểu, nhất là đối với người chưa thành thạo với nội dung mà sách nói đến, do vậy bạn nên đọc một cuốn sách nhiều lần để có thể nắm bắt hoàn toàn nội dung.

Cách đọc của tôi là lướt qua toàn bộ sách thật nhanh một lần để biết nó nói gì, thậm chí không đọc các ví dụ, làm các bài tập. Sau khi đọc lướt như vậy bạn sẽ nắm được cơ bản nội dung cuốn sách, chủ đề chính mà nó nói đến. Khi đọc lại lần thứ hai, tôi sẽ đọc thật kỹ, làm theo từng bước hướng dẫn trong đó, tôi phải đảm bảo hiểu và nhớ tất cả những gì đã đọc. Nếu bạn cảm thấy việc hiểu và nhớ những gì mình đọc là không cần thiết, tốt nhất đừng phí thời gian vào việc đọc sách, sẽ chẳng có lợi ích gì cho bạn.

Tôi nhớ khi mới học, có những quyển sách tôi đọc rất nhiều lần, thậm chí mười lần, hai mươi lần. Tôi đảm bảo với bạn tôi có thể nói vanh vách về tất cả những gì có trong đó, nhờ vậy, khi đọc một cuốn sách ở mức độ cao hơn, tôi có thể nắm bắt dễ dàng hơn nhiều so với những người khác.

Tuy nhiên hãy nhớ không phải chỗ nào trong sách cũng cần phải nhớ, có những loại sách tham khảo mà điều duy nhất bạn cần nhớ là chủ đề nào nằm ở đoạn nào trong đó, nó sẽ giúp bạn dễ dàng hơn trong việc tra cứu thông tin sau này.

Thực hành càng nhiều càng tốt

Hãy tận dụng thời gian để làm các bài tập, thật thành thạo. Tốt nhất hãy tìm những cuốn sách có sẵn bài giải, và hãy dùng bài giải mẫu đó để so sánh với bài giải của mình sau khi tự mình hoàn thành chúng.

Việc thực hành là cực kỳ quan trọng trong ngành IT, là một trong những yếu tố then chốt giúp bạn phát triển kỹ năng và kinh nghiệm, vậy nên hãy cố gắng tận dụng thời gian để làm càng nhiều càng tốt. Theo tôi nếu đang còn đi học, 3-4 giờ mỗi ngày là phù hợp cho việc thực hành mỗi ngày của bạn.

Thị trường đang cần gì?

Bạn nên học thứ mà bạn thích. Đúng! Nhưng thị trường cũng vẫn có một vai trò quan trọng, bởi nếu không có đất dụng võ, niềm đam mê của bạn rồi cũng sẽ dần mai một.

Hãy lập một danh sách những thứ bạn thích, từ nhiều đến ít. Sau đó cố gắng đánh giá chúng theo mức độ quan tâm của thị trường, trong hiện tại và tương lai, nếu một mục nào đó là khó có thể phát triển, hãy loại ra khỏi danh sách, bằng cách này bạn sẽ biết được nên chọn gì để học.

Nhưng làm thế nào để biết một công nghệ, một xu hướng nhận được sự quan tâm của thị trường hay không, và trong tương lai nó phát triển thế nào? Hãy tìm đọc các tạp chí chuyên ngành, tham khảo trên các trang web công nghệ, và một kênh quan trọng là tham khảo những người có kinh nghiệm. Bạn là người quyết định cuối cùng, khó, nhưng vẫn phải làm, vì nó chính là tương lai của bạn.

Tiếng Anh, tiếng Anh và tiếng Anh

Không cần phải nói về tầm quan trọng của tiếng Anh. Có một vốn tiếng Anh tốt bạn có thể dễ dàng đọc tài liệu, tìm kiếm thông tin trên Internet, đọc các sách của nước ngoài vốn phong phú, chính xác và cập nhật hơn nhiều so với sách tiếng Việt. Ngoài ra có một vốn tiếng Anh tốt sẽ có thêm cơ hội làm việc tại các công ty nước ngoài, có nhiều ưu đãi, cũng như môi trường làm việc tốt hơn so với các công ty của Việt Nam.

Tôi vốn không được học tiếng Anh trong trường phổ thông (tôi học tiếng Nga), khi vào đại học, nhờ học thêm tôi cũng biết một chút tiếng Anh, nhưng khi tiếp xúc với các sách chuyên ngành, thực sự tôi gặp rất nhiều khó khăn. Vào thời điểm đó cũng không có nhiều tài liệu để bạn tham khảo (Việt Nam mới chỉ kết nối Internet vào cuối 1997, và việc sử dụng vô cùng đắt đỏ), vậy nên để làm quen với việc đọc sách chuyên ngành, tôi phải tìm mua ở các hiệu sách cũ. Và cuốn sách đầu tiên tôi tìm được là cuốn “Mạng Nơron”, nói về một chủ đề xương xẩu ngay cả nếu nó viết bằng tiếng Việt :D, nhưng dù sao đó cũng là lựa chọn duy nhất của tôi. Tôi tin rằng việc đọc sách chuyên ngành bằng tiếng Anh luôn là khó khăn đối với tất cả những ai mới bắt đầu, nhưng những gì khó khăn mới chính là cơ hội.

Tiếng Anh chính là điều kiện đủ để bạn thành công trong ngành IT.

Kỹ năng mềm

Kỹ năng mềm vẫn luôn là điểm yếu của các sinh viên. Những thứ kiểu như nói trước đám đông, thương thuyết hay gì gì đó gọi chung là kỹ năng mềm luôn là một cái gì xa xôi, thế rồi một ngày nó đột ngột xuất hiện trước mặt, và tất nhiên nó sẽ trở thành một thất bại hay một cơ hội sẽ tùy thuộc vào bạn, vào việc bạn đã chuẩn bị cho điều đó như thế nào. Hãy tham khảo những người xung quanh, hãy tận dụng mỗi khi có cơ hội, và hãy luôn tự đánh giá và rút kinh nghiệm bản thân.

Hãy suy nghĩ

Học thì phải suy nghĩ, một điều tưởng như là hiển nhiên ấy vậy mà có những người vẫn quên mất. Bạn học rất chăm, bạn thực hành rất nhiều, nhưng chừng đó là chưa đủ để vượt lên, để tách ra, để khác biệt. Bạn vẫn cần phải suy nghĩ.

Hãy dành một khoảng thời gian trong ngày, đừng làm gì cả, hãy nhớ lại những gì đã làm, suy nghĩ, nghiền ngẫm về nó, cứ để tâm hồn bạn lan man. Tin tôi đi, bạn sẽ nghiệm ra nhiều điều rất thú vị, và tôi cũng tin rằng, bạn sẽ thấy đây chính là lời khuyên giá trị nhất mà tôi dành cho bạn.

Hãy suy nghĩ!