To learn a programming language in depth - Làm thế nào hiểu sâu một ngôn ngữ
Bài viết này nhằm mục đích chia sẻ cách mình học một ngôn ngữ được sâu hơn, đây là bài viết tiếp theo của bài viết "Cách mà tôi học...
Bài viết này nhằm mục đích chia sẻ cách mình học một ngôn ngữ được sâu hơn, đây là bài viết tiếp theo của bài viết "Cách mà tôi học một công nghệ mới", bạn có thể đọc lại tại đây
Chú ý: Bài viết sẽ dùng ngôn ngữ C# làm ví dụ, các cách học ngôn ngữ khác bạn có thể áp dụng tương tự và có thể có những công cụ tương đương bạn có thể tìm hiểu thêm nhé!
Bắt đầu thôi!
Đầu tiên, phải nói là khi bạn biết một ngôn ngữ nào đó một cách căn bản rồi, bạn có thể đào sâu gốc rễ ngôn ngữ đó bằng cách tìm hiểu cách thức hoạt động phía sau của ngôn ngữ đó. Điều này sẽ giúp bạn có thể control ngôn ngữ này một cách dễ dàng hơn, bạn có thể đánh giá được hiệu năng, điểm mạnh điểm yếu giữa các ngôn ngữ, hay có thể nắm được một cách nhanh chóng khi ngôn ngữ đó update version thêm một vài features mới mỗi năm.
Thường thì sẽ có 2 cách học, học theo chiều ngang và học theo chiều sâu. Việc bạn nắm bắt được rất nhiều công nghệ, hay nhiều thành phần của một công nghệ (học theo chiều ngang) sẽ giúp bạn hiểu rộng hơn, hiểu được bức tranh lớn một cách tổng quát, đánh giá nhanh được công nghệ trước khi dấn thân vào học cũng như sử dụng. Tuy nhiên đến một thời điểm nào đó bạn nên tập trung vào một công nghệ nào đó được cho là bạn yêu thích nhất, đào sâu tường tận gốc rễ của nó (học theo chiều dọc), điều này sẽ giúp cho bạn đạt một cảnh giới thượng thừa, từ đó master và đi lên với chính công nghệ đó trong công việc cũng như quyết định tương lai của bạn. Cách học này mình đặt tên cho nó là học theo kiểu chữ T, mình nghĩ học mở rộng trước rồi sau đó đi sâu vào một thứ nắm thật chắc nó thì sẽ giúp bạn có thể đứng vững dễ dàng hơn trong công việc.
Quay lại vấn đề cách mà mình tìm hiểu những insight trong một ngôn ngữ như sau:
Đối với C# chẳng hạn, mình thường lên trang https://referencesource.microsoft.com/ để đọc code core của C# cũng như .Net. Điều này giúp mình hiểu được style code, hay bản chất thực sự của các thư viện hay framework mình sử dụng. Đôi khi mình còn học được cả cách học handle exceptions (những trường hợp ngoại lệ nữa). Từ đó khi sử dụng mình có thể biết được những trường hợp nào thư viện giúp mình check (kiểm tra) những trường hợp nào thư viện bỏ sót để mình có thể hiểu và vá được những limitation của thư viện hay framework đó.

Bên cạnh đó, mình có thể tìm hiểu được tính năng mới của net framwork 4.7 khác gì 4.8, C# 6.0 khác gì C# 9.0 khi nó mới công bố xuất bản.
Công cụ thứ 2 mà mình dùng để học code behind đó là LinqPad (https://www.linqpad.net/). Đây là một công cụ có thể giúp bạn dịch ngược đoạn code của bạn sâu tận bên trong đến cả ngôn ngữ máy. Nó hiển thị theo dạng cây rất dễ nhìn và trực quan. Phân tích syntax khá hay họ giúp bạn hiểu tường đoạn mà bạn viết ngôn ngữ bậc cao xuống đến tầng biên dịch. Bạn có thể dump tất cả đoạn code bạn đọc được ở đâu đó xem nó hoạt động như thể nào từ đó hiểu và nắm sâu hơn cách thức hoạt động.




Tất cả đều có ví dụ ngay chính trên công cụ này. Còn một điều nữa là mình thường dùng nó để kiểm tra đoạn code của bản thân đã tối ưu hay chưa bằng cách benchmark đo hiệu năng của block code của bản thân.


Trên đây là cách học sâu của bản thân mình, hi vọng có thể giúp ích được phần nào giúp bạn. Nếu bạn có thêm cách học nào mới thì có thể để lại dưới phần bình luận bên dưới nhé!
Tham khảo thêm các ngôn ngữ khác:
...
#ntechdevelopers

Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất
lucius
Cảm ơn bạn đã chia sẻ cách học, mình làm developer backend 4 năm r mà vẫn như gà mờ 

- Báo cáo
PhuNguyen
Cho mình hỏi riêng tư chút vì tò mò
. Mức lương hiện tại bạn nhận tính theo kn 4 năm hay tính theo trình độ "gà mờ" vậy ạ ? Mình nghe nói ngành này tóc nhanh bạc lắm :v

- Báo cáo

Ntech 

Thì đi phỏng vấn trong cv có ghi số năm kinh nghiệm. Nhiều công ty không đòi hỏi số năm kinh nghiệm nhưng thực tế họ nhìn số dự án bạn tham gia để deal lương. Ngoài ra còn tháng thử việc mà. Bạn cứ thể hiện rồi tự tin deal thôi
- Báo cáo
lucius
Hy vọng bác viết thêm 1 bài về kinh nghiệm phỏng vấn
- Báo cáo

Ntech 

Có mà bạn. Mà viết khá lâu rồi, lúc mới vào nghề. Mình sẽ viết thêm bài khác chỉnh chu hơn.
http://blog.ntechdevelopers.com/lan-dau-phong-van-khi-buoc-chan-ra-ha-noi-se-nhu-the-nao/
http://blog.ntechdevelopers.com/cau-chuyen-phong-van-dinh-ky/
- Báo cáo
lucius
nếu tính theo 12th thì khoảng 20tr/th bác ạ, nhưng trình e chỉ dám nhận gà mờ vì công việc cứ lặp đi lặp lại không grow up bác ạ.
- Báo cáo
PhuNguyen
Thanks b nha !!
- Báo cáo

Ntech 

Bài viết liên quan đến chuyện tiền lương.
http://blog.ntechdevelopers.com/luong-minh-bach-hay-bi-mat-ly-do-phia-sau-no-va-con-duong-phia-truoc-ban/
- Báo cáo

Hoàng Trung
hi, không biết có bác nào chỉ hướng giúp em học C++ nâng cao không, hiện em mông lung quá
đọc mấy sách nâng cao mà không hiểu

- Báo cáo

Envy.God
Mình thấy nếu bạn nào hiểu sâu về C/C++ thì dễ dàng nắm bắt được cách các ngôn ngữ khác hoạt động. Còn bạn nào biết đọc code assembly thì đúng là chả sợ topic nào luôn 

- Báo cáo

Eden de Marcus
Cảm ơn anh về bài viết ạ!
- Báo cáo

Ntech 

Cám ơn bạn, hi vọng bạn ủng hộ các bài viết trên blog của mình nhé.
- Báo cáo