#74 - Làm sao để trở thành một Software Engineer giỏi?
Vào ngày hôm qua 22/6, Grokking Tech Talk số 31, với chủ đề "Asynchronous Communications" (Giao tiếp bất đồng bộ) được trình bày bởi anh Huy - CTO @ Holistics, đã diễn ra thành công tốt đẹp với sự tham gia của hơn 60 bạn. Mời các bạn cùng xem lại video record tại đây, hoặc slide tại đây.
Những bài viết hay
One secret to becoming a great software engineer — hackernoon.com
Nếu bạn muốn trở thành một lập trình viên giỏi, có hai việc bạn cần phải làm: Viết thật nhiều và đọc thật nhiều. Trong ngành phần mềm, rất nhiều người dành thời gian để viết code, tuy nhiên, ít ai dành thời gian để đọc lại hay đọc code của người khác. Đây là một điều sai lầm. Đọc code thường xuyên sẽ giúp bạn trở nên khác biệt với phần còn lại.
Video Upload Latency Improvements at Instagram — instagram-engineering.com
Xử lý video là công việc tiêu tốn nhiều tài nguyên và thời gian. Vấn đề này đối với các hệ thống lớn như mạng xã hội lại trở thành thách thức bởi lượng video người dùng đăng tải là không hề nhỏ. Ở Instagram, người ta đã cải tiến quá trình xử lý video nhằm rút ngắn độ trễ khi upload (upload latency) nhằm giúp cho người dùng có được trải nghiệm tốt nhất.
Is Angular dying because of React? — itnext.io
Các nền tảng công nghệ web thay đổi rất nhanh, framework mới ra đời và phát triển liên tục. Từ những BackboneJs, AngularJS, cho đến ReactJs, Angular2, VueJs, ... và hẳn là nhiều framework nữa sẽ còn xuất hiện. Nhưng việc ra đời của một framework, liệu có phải sự kết thúc của một framework cũ? Và liệu các web developer có nên mãi chạy theo hết framework này đến framework khác?
Four Startup Engineering Killers — hackernoon.com
Các startup thường đòi hỏi những kết quả, năng suất trong thời gian ngắn hoặc vừa. Điều đó liên quan rất nhiều tới cách thức xây dựng hệ thống. Điều quan trọng là tìm được công nghệ phù hợp.
Nếu startup của bạn chưa tìm thấy được sự phù hợp với thị trường, hãy tránh những cái bẫy sau.
Có thể bạn chưa biết
Inversion – Nghĩ ngược lại và làm khác đi — con-mot-sach.com
Nhân vật Sherlock Holmes đã từng có câu nói kinh điển "Once you eliminate the impossible, whatever remains, no matter how improbable, must be the truth." - Một khi bạn loại bỏ tất cả những điều không thể, thì điều còn lại, dù khó tin đến như thế nào, vẫn sẽ là điều có thể.
Code & Tools
Quiz
Tuần trước, Grokking đã gửi câu hỏi về setInterval, chúng tôi đã nhận được câu trả lời từ các bạn nguyentoan***@gmail.com như sau:
The answer is A, "a unique id" the setInterval will return a unique id, we will use that to remove interval (clearInterval). It is a best practice that you should always clear interval when the job is done.
Ngoài ra, chúng tôi cũng nhận được câu trả lời từ bạn Đức như sau:
Đoạn code trên sẽ trả về:
timerId khi chúng chạy trên browsers
Timer Object khi chạy trên Node.JS
Nếu bạn nào dùng Typescript có thể kiểm tra static type của setInterval
Browser
interface WindowOrWorkerGlobalScope { ... setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; }
Node.JS
declare module "timers" {
function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
}
class Timeout implements Timer {
ref(): void;
refresh(): void;
unref(): void;
}
Tại sao có sự khác nhau này?
JavaScript là một ngôn ngữ có nhiều cách hiện thực (v8, JavaScriptCore, SpiderMonkey) và runtime environment khác nhau (browsers chrome, firefox, Safari, Node.JS,...) dựa trên các chuẩn (specification) Ecmascript và HTML specification. Tìm hiểu thêm một chút thì chúng ta nhận ra rằng các hàm timer (setTimeout, setInterval,...) được định nghĩa trong HTML specification (dành cho browser) thay vì Ecmascript (dành cho JS VMs: v8, JSC). Nghĩa là các hàm timer là API của runtime environment (browsers, Node.JS) chứ không phải API của JS VMs. Node.JS lại không tuân theo HTML specification vì Node.JS không phải là một browser nên sẽ có sự khác biệt ở một số API.
Link tham khảo:
https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval
Ban biên tập Grokking xin cảm ơn những câu trả lời rất chi tiết của các bạn.
Tuần này, mời các bạn cùng trả lời câu hỏi sau, thuật toán nào dưới dây không phải là một thuật toán Tham lam?
A. Dijkstra's shortest path algorithm
B. Prim's algorithm
C. Kruskal algorithm
D. Huffman Coding
E. Bellmen Ford Shortest path algorithm
Các bạn gửi câu trả lời qua địa chỉ email newsletter@grokking.org, đáp án sẽ được công bố vào số newsletter tiếp theo.
Góc Game
Trong số Newsletter tuần trước, bài viết của anh Huydx có nhắc tới những quyết định có tính thiên vị trong quá trình tuyển dụng.
Ở phần cuối của Newsletter tuần này, xin mời các bạn cùng chơi một trò chơi tuyển dụng tại đây, và xem cách thuật toán đánh giá ứng viên để loại bỏ những quyết định có tính thiên vị như thế nào nhé.
"The best error message is the one that never shows up." - Thomas Fuchs