Bản gốc:
Tác giả gốc: John Washam
Đóng góp cho bản dịch tiếng Việt:
Ghi chú riêng cho việc duy trì và cập nhật bản dịch tiếng Việt:
Bản dịch này nhằm mục đích khuyến khích các bạn trẻ yêu thích công nghệ nhưng chưa vững tiếng Anh dễ tiếp cận, và tìm được hướng nghiên cứu. Để đi xa hơn trong ngành công nghệ thông tin, sớm hay muộn, bạn cũng cần phải trau dồi vốn tiếng Anh của mình. Vì vậy, các thuật ngữ chuyên ngành, mình xin được giữ nguyên gốc. Ví dụ như: stack
, heap
, queue
,...
Mình cố gắng dịch thoát nghĩa, sao cho các bạn với ít kiến thức công nghệ thông tin nhất cũng có thể hiểu được. Trong quá trình dịch khó có thể trách khỏi sai sót, xin được lượng thứ.
Mọi ý kiến, đóng góp về bản dịch, vui lòng tạo một issue mới hoặc bạn có thể chỉnh sửa và tạo Pull Request, đồng thời cc trực tiếp các dịch giả để kiểm tra.
Đây là kế hoạch học tập trong nhiều tháng của tôi, để từ một nhà phát triển web (tự học, không có bằng cấp về Khoa học máy tính) trở thành một kỹ sư phần mềm ở Google.
Danh sách dài này được trích và mở rộng từ Ghi chú huấn luyện của Google, vậy nên đây là những gì bạn cần biết. Một vài mục tôi thêm vào ở cuối danh sách có thể xuất hiện trong cuộc phỏng vấn hoặc hữu ích cho việc giải quyết các bài toán. Nhiều mục đến từ bài viết Lấy được việc ở Google (Get that job at Google)" của Steve Yegge.
Tôi lược bớt những gì bạn cần từ lời khuyên của yegge. Tôi cũng chỉnh sửa lại các yêu cầu dựa trên thông tin tôi có được từ bạn bè ở Google. Danh sách này được thiết kế cho Kỹ sư phần mềm hoặc những ai chuyển từ phát triển web hoặc phần mềm sang kỹ nghệ phần mềm (khi mà kiến thức về khoa học máy tính là bắt buộc). Nếu bạn có nhiều kinh nghiệm và muốn khẳng định nhiều năm trong đó bạn làm việc như một kỹ sư phần mềm, hãy sẳn sàng cho một buổi phòng vấn khó hơn. Xem thêm ở đây.
Nếu bạn có kinh nghiệm trong phát triển web hoặc ứng dụng, hãy chú ý rằng Google xem xây dựng phần mềm khác với web và ứng dụng thông thường. Họ yêu cầu kiến thức về khoa học máy tính.
Thêm vào đó, nếu bạn muốn trở thành một kỹ sư hệ thống (System engineer), hãy học thêm từ danh sách bổ sung (mạng máy tính, bảo mật,...)
---------------- Everything below this point is optional ----------------
Tôi đang chuẩn bị tham gia phỏng vấn ở Google. Tôi từng làm web, xây dựng các dịch vụ và lập các công ty khởi nghiệp từ năm 1997. Tôi có bằng Kinh tế, nhưng không có bằng Khoa học máy tính. Tôi thấy sự nghiệp của mình khá thành công, nhưng như thế chưa đủ. Tôi muốn làm việc ở Google, được tham gia xử lý một hệ thống lớn; thực sự hiểu rõ về máy tính, sự hiệu quả của các thuật toán và cấu trúc dự liệu, các ngôn ngữ lập trình cấp thấp, và chúng hoạt động cùng nhau như thế nào. Và nếu bạn không biết về cái nào trong số đó, Google sẽ không tuyển bạn.
Khi tôi bắt đầu dự án này, tôi không phân biệt được stack và heap, không biết về Big-O, không có khái niệm gì về cây (tree
) hay việc duyệt đồ thị (graph
). Và nếu buộc phải việt code cho một thuật toán sắp xếp, tôi đảm bảo rằng nó sẽ không chạy tốt.
Tất cả các cấu trúc dự liệu tôi từng sử dụng đề được dựng sẵn trong ngôn ngữ lập trình và tôi không nhất thiết phải biết chúng làm việc như thế nào. Tôi chưa từng phải tự quản lý vùng nhớ, trừ khi một tiến trình đang chạy ném lỗi "hết bộ nhớ" (out of memory
), và sau đó tôi phải tìm một cách giải quyết khác. Tồi từng sử dụng mảng nhiều chiều vài lần trong dời, và hàng ngàn mảng liên kết (map
hoặc dictionary
cho dễ hiểu). Nhưng thực sự tôi chưa từng tự mình xây dựng một cấu trúc dữ liệu nào.
Nhưng, sau khi trải qua dự án này, tôi rất tự tin rằng mình sẽ được tuyển. Đây là một dự án dài hơi, sẽ tốn của tôi hàng tháng. Nếu bạn đã quen với nhiều nội dung trong này, bạn sẽ mất ít thời gian hơn.
Phần này được viết lại khá nhiều để thuận tiện cho các bạn tiếp cận. Dựa theo bản gốc, tác giả có vẻ như cũng đang cố hướng dẫn cho người mới dùng git.
Bạn có thể bỏ qua mục này nếu đã có kiến thức về Git, Github và Github Flavored Markdown
Nếu bạn chưa biết về git thì vui lòng tham khảo các bài hướng dẫn sau để nắm cách sử dụng:
Tiếp theo, bạn cần biết cách fork một repo trên github (Mình không tìm được hướng dẫn tiếng Việt nào thích hợp.)
Ok, bây giờ bạn có thể bắt đầu:
Clone bản fork của bạn về máy tính cá nhân.
git clone https://github.com/<your-username>/google-interview-university
Chạy các dòng lệnh sau
Tạo một branch mới để đánh dấu tiến độ của bạn:
git checkout -b progress
Check các phần đã hoàn thành bằng cách thêm x
vào giữa cặp ngoặc vuông ([ ]
), như thế này: [x]
.
Chạy git add .
để bắt đầu lưu lại các thay đổi.
Chạy git commit -m "commit message"
. Thay commit message
với ghi chú của bạn cho sự thay đổi đó.
Đồng bộ thay đổi với bản fork trên Github của bạn bằng git push origin master
.
In một (hay vài cái cũng được) đề can "future Googler" và để nó (chúng) ở đâu đó mà bạn luôn nhìn thấy và nghĩ đến được.
Tôi đang ở trong hàng đợi. Hy vọng sẽ sớm đến lược phỏng vấn.
Cảm ơn vì đồng ý giới thiệu tôi, JP.
Tôi cũng đang đi trên con đường này. Hãy cùng xem chúng ta đi được đến đâu:
Các kỹ sư của Google là những người xuất sắc, nhưng nhiều người vẫn cho rằng họ không đủ thông minh, mặc dù họ đang làm việc tại Google.
Bí mật của của Thiên Tài Lập Trình (The myth of the Genius Programmer) - video
ulie Pagano: Đi một mình rất nguy hiểm - Cuộc chiến với con quái vật vô hình trong công nghệ
Một vài video chỉ xem được khi bạn tham gia vào các lớp học online trên Coursera, EdX, hay Lynda.com. Các lớp đó được gọi là MOOC. Đôi khi các lớp không có sẵn, và bạn phải đợi một vài tháng đến khi chúng được mở lại, do đó bạn không thể truy cập vào video được. Lynda.com thì không miễn phí.
Tôi sẽ rất cảm kích sự hỗ trợ của các bạn trong việc thêm các nguồn video miễn phí và luôn sẵn có, ví dụ như Youtube, để hỗ trợ nguồn video từ các khóa học online.
Tôi cũng rất thích xem các bài giảng của các trường đại học.
[ ] Videos:
[ ] Bài viết:
[ ] Các khóa chuẩn bị:
[ ] Bổ sung (không được đề xuất từ Google, nhưng tôi vẫn thêm vào):
Tôi viết bài báo ngắn về điêu này: Quan trọng: Chọn ngôn ngữ lập trình cho phỏng vấn ớ Google
Bạn có thể chọn ngôn ngữ mà bạn quen thuộc để thực hiện phần viết mã trong lúc phỏng vấn, nhưng với Google, những ngôn ngữ sau đây là thích hợp nhất:
Bạn cũng có thể sử dụng các ngôn ngữ sau đây, nhưng hãy tìm hiểu thêm trước. Chúng có thể có bất lợi:
Dù sao, bạn cũng cần phải rất quen thuộc với ngôn ngử lập trình của mình.
Xem thêm về các sự lựa chọn:
Xem tài liệu về các ngôn ngữ ở đây
Bạn sẽ thấy vài tài liệu về C, C++ và Python bên dưới, vì tôi đang học chúng. Ngoài ra còn có một vài đầu sách nữa, xem ở cuối.
In progress