thắc mắc Về việc học tập database

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 DatabaseMore 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 :haha:,


1620196963622.png






---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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:​

  • Ở 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 :love: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.
- 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.

Junior:​

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

Senior:​

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

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

  • 1620196921569.png
    1620196921569.png
    500.4 KB · Views: 321
Last edited:
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 DatabaseMore 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 :haha:,


View attachment 529831
Bạn ăn gì tui cúng? Mới thực tập thì thành thạo query với stored procedures trước đi chứ xem database design làm gì? Cũng có ai dám cho design đâu?
 
Đọc sách thì chỉ dành cho cá nhân có nhiều thời gian để nghiên cứu, còn thím thì tìm cái tutorial nào về thứ muốn học rồi học thôi.
Đụng vào sách, em nói thật vài bữa là gãy ngay. Basic trước, khi nào có time quay lại cày sách thím
Bạn ăn gì tui cúng? Mới thực tập thì thành thạo query với stored procedures trước đi chứ xem database design làm gì? Cũng có ai dám cho design đâu?
Thế cái road map này sai à, thấy thím ruler trong voz share cái này mà :ah:
 
Last edited:
Trước tiên là biết dùng các query cơ bản trước đã, rồi từ từ... chứ lao vào đọc sách cho lắm rồi chỉ lý thuyết suông mau nản lắm. Mà hệ thống mấy triệu record, ref tè lè thì cần học design để tối ưu, chứ mới tìm hiểu mà như thế tốn thời gian nhiều hơn đấy
 
biết hết về database là cũng khủng lắm. Chủ yếu giờ backend nó build ORM để hỗ trợ dev khỏi phải viết SQL thuần thôi.

Nội cái list học SQL ko cũng to tổ bố
CRUD table, view, temp table
Select into, bulk insert, bulk delete
join table (join, sub queries)
condition
grouping
ordering
indexing(clustered, non-clustered)
union
cursor
trigger
Audit
batch
stored procedure, function, user defined variables....
sql agent
database scaling
replication
backup/restore plan
sql security
Execution plan
database migration.

Các fen thấy thiếu gì thì bổ sung thêm cho em :)
 
Cái anh già tuổi này có phải clone không nhỉ? Nếu không phải thì tối tôi sẽ trả lời thắc mắc của anh về book, cách học và roadmap.
Còn mấy anh bảo đừng đọc sách, đọc mất thời gian, lý thuyết suông v.v thì nhảy ra đây vật nhau với tôi nào.

via theNEXTvoz for iPhone
tôi không phải clone đâu và cũng thắc mắc về vấn đề này, mong anh trả lời
 
Cái anh già tuổi này có phải clone không nhỉ? Nếu không phải thì tối tôi sẽ trả lời thắc mắc của anh về book, cách học và roadmap.
Còn mấy anh bảo đừng đọc sách, đọc mất thời gian, lý thuyết suông v.v thì nhảy ra đây vật nhau với tôi nào.

via theNEXTvoz for iPhone

Hi bác, e cũng không phải clone... cũng muốn tranh luận một tí để nâng tầm hiểu biết của mình một xíu thôi ạ. Theo em thì đọc sách để nắm kiến thức nền là tốt, nhưng mà chưa phải lúc hợp lý để vào đọc sách vội, có nhiều cách tiếp cận vì có khá nhiều loại DB khác nhau tuỳ theo yêu cầu của hệ thống như thế nào, việc đọc sách ngay từ đầu mà chưa xác định phạm vi thì rất là mơ màng vì khó áp dụng được thì rất là chóng nản. Với cả mới tìm hiểu thì cũng không nên dồn một lượng kiến thức quá lớn một lúc, đặc biệt là design DB thì cần kinh nghiệm thực tế nhiều hơn nữa ạ...
 
Last edited:
Cái anh già tuổi này có phải clone không nhỉ? Nếu không phải thì tối tôi sẽ trả lời thắc mắc của anh về book, cách học và roadmap.
Còn mấy anh bảo đừng đọc sách, đọc mất thời gian, lý thuyết suông v.v thì nhảy ra đây vật nhau với tôi nào.

via theNEXTvoz for iPhone

Tôi cũng đọc sách, hóng có các thanh niên vào vật nhau thử, tôi trọng tài cho
tFvvWhy.jpg
 
Cái anh già tuổi này có phải clone không nhỉ? Nếu không phải thì tối tôi sẽ trả lời thắc mắc của anh về book, cách học và roadmap.
Còn mấy anh bảo đừng đọc sách, đọc mất thời gian, lý thuyết suông v.v thì nhảy ra đây vật nhau với tôi nào.

via theNEXTvoz for iPhone
hay quá fen, tui là thần tượng fen trong cái voz này đấy, nhớ tên ruler luôn :ah:, à tui ko clone gì nha, mọi người đều biết tui mà
 
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:

  • Ở 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 :love: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.
- 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.

Junior:​

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

Senior:​

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

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

  • Ở 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 :love: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.
- 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.

Junior:​

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

Senior:​

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

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.
hay quá, thank bác, đã book mark rồi :adore:
 
Back
Top