Lập Trình Viên Già Tuổi
Senior Member
https://github.com/kamranahmedse/developer-roadmap/blob/master/img/backend.png?year-2021-2
Dựa theo ROAD MAP BACKEND 2021, thì sau khi học xong HTML, git, Ngôn ngữ backend thì sẽ học đến Database, Ở đây có chia ra làm 3 mục:
Relational Database, NoSQL Database và More about Database.
Thì mình thấy 2 mục Relational Database, NoSQL Database là liên quan đến công nghệ, mà muốn đọc được doc của mấy cái này thì lại phải nhờ phần More about Database. Nên tính học More about Database trước, không biết đi theo hướng đó chuẩn không?. Mn cho hỏi luôn là mấy cái cụm (ORMs, ACID, Transactions, N+1 Problems Db Normalization, Indexes) và cụm (Data Replication, Sharding Strategies, CAP Theorem)
thì mn có thể gợi ý mình đọc trong cuốn sách nào tổng hợp được những kiến thức này cho có hệ thống không ,
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Các câu trả lời:
Dựa theo ROAD MAP BACKEND 2021, thì sau khi học xong HTML, git, Ngôn ngữ backend thì sẽ học đến Database, Ở đây có chia ra làm 3 mục:
Relational Database, NoSQL Database và More about Database.
Thì mình thấy 2 mục Relational Database, NoSQL Database là liên quan đến công nghệ, mà muốn đọc được doc của mấy cái này thì lại phải nhờ phần More about Database. Nên tính học More about Database trước, không biết đi theo hướng đó chuẩn không?. Mn cho hỏi luôn là mấy cái cụm (ORMs, ACID, Transactions, N+1 Problems Db Normalization, Indexes) và cụm (Data Replication, Sharding Strategies, CAP Theorem)
thì mn có thể gợi ý mình đọc trong cuốn sách nào tổng hợp được những kiến thức này cho có hệ thống không ,
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Các câu trả lời:
------------------------------------------------------------Hi anh em,
Nhân dịp ông anh/ em / bạn "già tuổi" gì đó kia (clone thì phải) mất công viết rõ dài (chắc đổi style để bơm traffic chăng?!). Ổng cũng nhắc tới mình nên tiện thể share một vài điểu với anh em luôn.
I. Roadmap
Đúng: mình là người share cái roadmap kia ở trên voz mỗi khi có bạn nào đó hỏi là nên đi theo roadmap như nào. Mình cũng đánh giá cái roadmap đó khá tốt, dễ hiểu, đi đúng đường.
Mình cũng từng làm việc/ tuyển dụng/ nói chuyện với kha khá anh em làm back-end ở VN. Có 2 điều mình nhận thấy rằng anh em rất rất tệ, kể cả với các bạn 3-5 năm đi làm.
- Database: Chỉ dừng ở mức dựng được db, design được schema, hiểu các khái niệm cơ bản, turning hoặc fix khi xảy ra lỗi. Hơn tí nữa thì xử lý được các bài toán về replication, scale, fault tolerance, ha ... ở mức cơ bản. Và cuối cùng là Reporting (ối dồi ôi).
- Testing: Thôi cái này chắc cũng là việc chung của SE. Nhưng đúng là trong các anh em mình nói chuyện, hỏi mấy ông SE về test không khác gì nói chuyện với đầu gối. Mindset luôn luôn là - tester là người đẻ ra cái việc testing.
Về phần database trong cái roadmap kia mình đánh giá:
- Khá đầy đủ keyword để làm việc/ xây dựng một hệ thống back-end database.
- Nếu đào đủ sâu mỗi phần đó (hand-on khoảng 2+ năm) thì sẽ tạm đủ để kiếm 1 job về database.
II. Cách học tập
Chia cách học thành 3 mức và lộ trình cho từng mức. Mình cũng từng là người đi học, sau đó là người vừa đi làm vừa đi học. Tất nhiên không thể trong lúc đi học mà ngồi cắm đầu đọc khái niệm hay vừa ngồi làm vừa lướt lướt ngồi đọc blog/ research được rồi.
Vậy hãy dành một khoảng thời gian nhất định trong ngày - cái này tùy vào mỗi người - để ngồi đọc + thử + nghịch. (Với mình thì khoảng 2-3h/ hàng ngày).
Fresher:
- Kinh nghiệm ở đây là vừa đọc vừa vọc, kiếm được thứ vui vui khi đọc thì mới có động lực. Còn ngồi đọc chay thì không quá được 2 tuần sẽ chán mịa luôn.
- Ở mức này thì mình hình dung các anh em chưa có mấy task dính dáng nhiều tới database. Việc tìm hiểu mang tính chất học để lấy thêm kiến thức.
- Đọc lướt qua các khái niệm, mỗi khái niệm, keyword ở trên dành khoảng 10-20h để đọc/ research về nó. Hãy chọn cho mình 1 hoặc 2 database để đọc docs + tut + blog khi implementation các khái niệm trên cho database đó.
- Khi đọc thì hãy thử, copy paste những cái họ viết vào db / framework mà mình đã chọn kia. Thật ra cũng chẳng cần hiểu nó chạy như nào lắm đâu. Nó chạy là mình có động lực đọc tiếp rồi.
- Thử linking thông tin giữa các khái niệm đó với nhau. Ví dụ như hibernate nó xử lý vấn đề về transaction như nào nhỉ?
- Đừng đi quá sâu, đào bới quá nhiều reference của các keyword đó làm gì. Hãy giữ ở mức 0h/ 1 keyword thôi. Đi sâu quá cũng không tốt đâu.
- Khi lướt qua 1 lượt rồi hãy "kiếm gì đó để làm". Cái này thì hơi khó, nhưng cũng không quá khó lắm đâu. Bài toán đầy rẫy xung quanh ta đó. Ví dụ như dựng db để lưu dữ liệu tiếp xúc (giám sát) của 100 công nhân trong xưởng qua thiết bị đeo tay. Hay thử làm ELK với data 50 triệu record nyc taxi data xem cần sizing hệ thống như nào.
- Hãy thường xuyên chém gió với người khác, chịu khó "hỏi ngu" để lấy thêm được keyword từ họ. Từ đó có cái mà tìm hiểu tiếp. Hoặc chí ít cũng kiếm được chỗ để mình "xả kiến thức" ra, nó là động lực khá tốt để đi tiếp.
Junior:
- Kinh nghiệm ở đây là: bạn có task rồi, những thứ bạn học đã có chỗ được dùng tới rồi đó. Hay chí ít cũng được đi chửi thằng khác cho sướng cái mồm rồi. Moving on
- Ở mức này mình sẽ hình dung thỉnh thoảng anh em sẽ có một vài task dính dáng kha khá sâu tới tầng database. Ví dụ như cần design một schema, cần cân nhắc index gì, cần tính toán xem nên search thẳng trên db hay build search engine, cần fix mấy cái ngu ngu như high cpu, high ram, hoặc bị thằng lead bảo đi setup replicate cho cái mysql db chưa bật bin log ..v..v..
- Khi này chắc chắn anh em đã từng đọc qua các khái niệm cả rồi, chẳng qua là éo biết nên làm như nào cho đúng. Đi search loanh quanh, đi hỏi loanh quanh xem làm như nào thì đúng và ngon nhất.
- Cách học là đọc + hỏi: Hãy đọc đủ sâu để hiểu được với mỗi keyword trên có rất nhiều cách implement khác nhau với nhiều loại db khác nhau, cách kết hợp/ phối hợp các khai niệm đó cũng rất đa dạng, pros & cons của từng cách.
- Đọc thì phải thử rồi: Hãy thử những thứ mình đọc, visualize được kết quả lên thì càng tốt.
- Hãy thử nhiều tới mức khi một thằng nó hỏi: Anh ơi em có mấy table như này thì join như nào chạy cho nhanh. Khi đó chỉ 1s sau bạn có thể hỏi lại nó ngay các thông tin khác là: sizing mày như nào, db gì, engine gì, orm là gì, đang dùng như nào, cấu hình như nào, limit time ra sao ...v...v... và sau đó ra được đáp án cho nó (vì bạn đã từng thử rồi). Hoặc gặp phải mấy thằng hỏi kiểu: em query 1000 câu select với query 1 câu dùng IN thì cái nào nhanh hơn ... hmmm
Senior:
- Kinh nghiệm ở đây là: hãy đi ban phát kinh nghiệm của bạn cho người khác. Nếu bạn nào hay làm slide để đi workshop ở cty sẽ biết. Slide 15page, nói trong 1h thì research mất mẹ 10h mới đẻ ra được.
- Level này mình cũng chưa đạt tới (ở góc độ SE back-end). Nhưng đã từng nói chuyện với các anh ở level này. Có cảm giác họ từng đọc 80-90% docs của các loại db mẹ rồi. Từng ngồi benchmark, profiling các solution đó rồi. Hỏi phát là có câu trả lời luôn.
- Theo như các anh nói thì đơn giản là các anh đọc đủ nhiều + vọc đủ nhiều rồi. Cách làm chi tiết thì chịu không nhớ nổi, nhưng keyword và chỗ nào có cách làm đó chính xác nhất thì các bố ấy lướt qua hết cả rồi. Ví dụ như search với keyword đó ra 10-20 kết quả, nhưng cái mà đúng thì các bố ấy biết nó là cái nào.
- Ở level này mình thấy các bố toàn phang nhau bằng official docs. Ví dụ hai bố ngồi so nhau về việc lưu db xuống disk của oracle với sql server hay caching data trên mem là sẽ lôi docs của 2 thằng ra so, hoặc lôi cái research / benchmark của mấy lão to đầu ra đọ.
III. Về việc đọc sách/ tài liệu
Sách là cái rất rất nên đọc. Vì đơn giản là nó khái quát, có lộ trình đã được thừa nhận và kiểm chứng bởi nhiều người khác là nó "tốt".
Sách rất ít khi là nơi đưa ra solution cho 1 task nào đó. Đơn giản là bạn có keyword đủ tốt để đi tìm solution cho nó.
Vậy nên đọc sách khi nào và trong bao lâu.
- Nên đọc 1 cuốn sách như 1 thằng fresher rồi cất nó đi. Đừng cố gắng hiểu từng câu chữ trong sách. À cũng đừng đọc lướt rồi đi chém như đúng rồi nhé. Không thì các anh ở voz này lại bảo đọc sách toàn lý thuyết suông, đéo có tí thực tế nào cả.
- Nên lôi lại cuốn sách đó ra đọc sau khi xử được 1 cái task nào đó vui vui/ tự hào. Mở cái chương mà nhờ có nó mình phọt ra được cái keyword làm task kia.
- Khi bạn link được thông tin từ khoảng 2-3 cuốn sách lại với nhau thì bạn đã có thể tạm stop lại cuốn đó rồi.
Ok. Lâu mới được rảnh lượn vào voz viết linh tinh, dạo rồi nhiều rác ở đây quá.
Các cao nhân xin hãy cứ gạch cho em sáng mắt ra nhé.
Giới thiệu qua 1 chút về mình:
- Học chuyên ngành hệ thống, cũng làm cả software engineer (back-end), database admin (postgrest cluster 100+ instance) và giờ là data engineer (từng được sờ vào hệ thống 1500+ instances)
- Hiện tại cũng vẫn còn rất nhiều thứ về database mà mình phải học hàng ngày, chắc cũng do đặc thù cái job của mình động tới đủ thể loại data/ database nên không dám nói là nắm chắc gì cả. Viết lý thuyết thì viết được thôi.
Đọc sách là cơ bản nhất rồi. Tôi gặp ông nào chém về database thì tôi chỉ hỏi nhẹ 1 câu thôi: "Anh đọc sách nào hay thế".
Tới đây nó mà nói dc sách gì, nội dung ra sao thì ok, còn ko thì nó là thằng chém gió
Có thể ko nói dc chính xác toàn bộ nội dung nhưng cũng sẽ nhớ dc tên tác giả, những nội dung core v.v....
Tóm lại, 1 thằng mà bảo đào sâu database mà thằng đó ko đọc sách thì 1 là nó chém gió, 2 là nó giấu (mà giấu để làm gì nhỉ).
Thực ra mình thì ko thích cái road map ở trên tí nào
Thứ 1 nếu nó mang tính liệt kê thì là nó ko đầy đủ
Thứ 2 nếu nó mang ý nghĩa lộ trình thì thấy nó cũng chả có ý nghĩa gì về mặt lộ trình cả. Học cái nào trước? cái nào sau? Học như nào? Ở đâu?
Nên quan điểm cá nhân của mình thì ... mình ko thích cái road map kiểu đấy. Khá là vô nghĩa.
Newbie nhìn vào cũng chả biết học như nào, cụ thể như thím thớt, chả biết học cái nào trước cái nào sau, học tới mức nào là đủ.
Người có kinh nghiệm và kiến thức rồi thì cũng ko cần mấy cái đấy, vì như nói ở trên là nó liệt kê ko đầy đủ hết được.
Nhưng nói chung ng đi ngang như ông thớt thì phải học rất nhiều. Vì nhiều cái trong roadmap đấy, là dc học suốt 4 năm ở đại học. Ông ấy đâm ngang thì muốn lấp chỗ hổng phải tốn thời gian để bù vào. Thôi thì cũng là có 1 chút hữu ích cho ông thớt để biết mà học thêm.
Mà đọc sách thì cứ đọc mấy cuốn kinh điển trước là được. Các DB khác nhau nhưng thực ra đều phát triển với phần core, các cấu trúc dữ liệu, thuật toán là gần như từ mấy cái kinh điển mà ra.
Tất nhiên nói thế ko có nghĩa là nó giống nhau hoàn toàn, nó vẫn có những điểm khác biệt của từng thằng.
Mình gợi ý 1 cuốn này: DATABASE SYSTEMS - The Complete Book (2nd edition). Tài liệu được khuyên dùng bởi trường đại học Standford.
Nhưng đọc lý thuyết tất nhiên sẽ chán, và ko phải cứ đi làm là lúc nào cũng động vào các kiến thức này. Nên đọc có chọn lọc. Đọc thì phải đi kèm thực hành.
Cụ thể hơn thì thím ruler ở trên có chia sẻ rồi, mình ko nói lại và cũng lười nói.
Còn nếu ai ở tầm senior thì mình có thể suggest 1 vài cuốn sách hard core hơn. Cuốn ở trên là dạng kiến thức foundation và basic, phù hợp cho cả junior lẫn senior.
Attachments
Last edited: