Những gì các lập trình viên cấp cao nên học hỏi từ những người mới bắt đầu (P1)
Dù là một nhà phát triển cấp cao có nhiều kinh nghiệm lập trình và những phương pháp viết code của riêng mình nhưng đôi khi bạn cũng có thể học tập từ cách mà một lập trình viên mới xử lý những dòng code.
- Công bố chủ nhân giải thưởng xCode - Lập trình thuật toán 2023
- Đi làm lương thấp nên chuyển nghề gì hợp thời nhất?
- Cử nhân Cơ điện tử chuyển nghề lập trình viên sau 7 tháng học online
- Hành trình từ học viên FUNiX trở thành trưởng nhóm tại FPT Software
- Lập trình viên xuất phát điểm muộn nên rèn tư duy và kỹ năng như thế nào?
Table of Contents
Đối với những lập trình viên mới chân ướt chân ráo bước vào thế giới công nghệ sẽ cần thời gian để có được nền tảng kiến thức vững chắc. Họ có thể bắt đầu với vị trí lập trình viên sơ cấp (Junior Developer) chỉ viết được code đơn giản, hiểu cơ bản về cơ sở dữ liệu và dịch vụ ứng dụng,… Sau đó có thể những người này sẽ trở thành quản lý cấp cao (Senior Leader) với khả năng quản lý dự án, định hướng để Junior Developer làm việc,… Tuy các nhà phát triển mới ít kinh nghiệm nhưng thường có tư duy mở và không bị (chính xác là chưa biết) ràng buộc bởi quá nhiều nguyên tắc khi viết code. Nên họ có thể tạo ra những dòng code khá thú vị và cách tư duy mà nhiều nhà phát triển cấp cao không có.
Đảo ngược có điều kiện (Conditional inversion)
Đảo ngược có điều kiện xảy ra khi bạn sử dụng câu lệnh nhánh để kiểm soát hoặc giới hạn luồng code. Dưới đây là một ví dụ về code bị đảo ngược:
function atleastOneOdd(potentialOdds) {
if (potentialOdds !== undefined) {
if (potentialOdds.length) {
return potentialOdds.some((num) => num & 1);
}
}
return false;
}
Bạn đã đúng nếu cho rằng đoạn code trên trông phức tạp với nhiệm vụ khá đơn giản như vậy. Sự rắc rối này là kết quả của việc lồng code vào với nhau. Đây là cách triển khai tương đương về mặt chức năng nhưng đọc dễ hiểu hơn rất nhiều:
function atLeastOneOdd(potentialOdds) {
if (potentialOdds === undefined) {
return false;
}
if (!potentialOdds.length) {
return false;
}
return potentialOdds.some((num) => num & 1);
}
Bài học:
Nói chung, nếu bạn ít lồng code vào với nhau, chúng sẽ dễ đọc và dễ sửa chữa hơn khi cần thiết. Tất cả nguyên tắc luôn có ngoại lệ, nên bạn cần hiểu chính xác vấn đề trước khi thực hiện viết code.
Trực giác là yếu tố cần có với một lập trình viên
Những người bắt đầu thường bị hạn chế về kiến thức chuyên môn. Đôi khi những người này cũng không có quá nhiều tiêu chuẩn cho đoạn code (tức họ chỉ viết và không có quá nhiều mong đợi). Việc họ làm là chỉ bắt tay vào viết code mà không suy nghĩ quá nhiều.
Dưới đây là bài tập của một sinh viên IT, bạn này cần kiểm tra xem đầu vào đã cho có phải là một lá thư hay không. Dưới đây là cách mà lập trình viên mới này thực hiện:
bool isLetter(const char someChar) {
const char letters [] = {
‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’,
‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’
};
int i = 0;
for (i = 0; i < 26; ++i) {
if (letters[i] === someChar) {
return true;
}
}
return false;
}
Nó là cách triển khai rất hợp lý. Nhưng nếu bạn là một nhà phát triển có kinh nghiệm, bản năng sẽ mách bảo bạn rằng sẽ có một giải pháp khác cho vấn đề trên. Chúng ta kiểm tra ký tự đầu vào có nằm trong một phạm vi ASCII cụ thể hay không. Nhưng liệu có cách nào để kiểm tra xem char có phải là một chữ cái không? Nếu tìm hiểu trên Google ta sẽ thấy có isalpha kiểm tra được.
Bài học
Trực giác (intuition) giúp cảm nhận về việc liệu đã tồn tại một giải pháp nào đó để giải quyết vấn đề đó hay không là điều rất quan trọng để thành công với một nhà phát triển. Một cách tốt nhất để cải thiện trực giác đó là viết nhiều code hơn với một ngôn ngữ và mô hình đa dạng.
Tìm giải pháp trực tiếp nhất cho một vấn đề
Những người mới bắt đầu thường sẽ đưa ra giải pháp trực tiếp cho vấn đề của mỗi đoạn code. Bạn xem lại ví dụ isLetter ở phần trước. Mặc dù giải pháp đó không phải là hiệu quả nhất, nhưng nó rất gọn gàng và vấn đề được xử lý nhanh hơn.
Những người mới thường dành nhiều thời gian để học viết code. Trong khi một nhà phát triển cấp cao sẽ sử dụng việc viết code như giải pháp để đạt được mục tiêu khác (như công việc, dự án cá nhân,…). Ở trường đại học, một giáo viên CNTT hiếm khi đưa ra một bài tập có yêu cầu về hiệu suất. Điều này dẫn đến sinh viên viết code mà không tính đến hiệu suất. Ban đầu, chúng ta sẽ nghĩ lộ trình đào tạo của trường đại học cần đưa phần kiến thức đó vào. Nhưng với người mới và khả năng viết code còn yếu, việc tạo ra một dòng code hoàn chỉnh sẽ là mục tiêu lớn nhất, thay vì họ thực hiện đúng deadline mà chất lượng không đảm bảo. Quá lo lắng về hiệu suất nói chung là một triệu chứng của căn bệnh được gọi là “tối ưu hóa sớm”. Hầu hết nhà phát triển nếu đã lo lắng về năng suất tạo dòng code thì sẽ rất khó để dừng lại.
Việc tối ưu hóa hiệu suất gần như không phải là vấn đề quan trọng với một lập trình viên C / x86 cấp thấp, nhưng trên thực tế nhà phát triển luôn quan tâm đến điều này. Hiệu ứng này mạnh đến mức đã có rất nhiều Developer mới tìm được giải pháp làm việc nhanh hơn một nhà phát triển cấp cao có năng lực và kinh nghiệm. Đơn giản vì người mới bắt đầu chỉ quan tâm đến việc làm cho nó hoạt động, nhà phát triển cấp cao cho rằng nó phải hoạt động tốt hơn. Nhưng điều đáng nói là ngay cả khi lập trình viên có kinh nghiệm tìm ra giải pháp, thực sự cũng không có quá nhiều sự khác biệt giữa sản phẩm của họ và người mới.
Bài học:
Giải pháp đơn giản và xử lý trực tiếp vấn đề là đủ (hay còn gọi là Occam’s Razorish). Các nhà phát triển không cần suy nghĩ quá nhiều hay làm phức tạp hóa vấn đề lên. Nếu có nhiệm vụ thì chỉ cần tập trung vào viết code và không phân tích quá nhiều. Bởi vì sau đó bạn sẽ có thời gian để chỉnh sửa và hoàn thiện code đẹp nhất theo ý mình.
Dù bạn là một nhà phát triển cấp cao có nhiều kinh nghiệm lập trình và có những phương pháp viết code của riêng mình. Đôi khi bạn có thể học tập từ cách mà một lập trình viên mới xử lý những dòng code. Có thể họ sẽ dùng những cách xử lý “ngớ ngẩn” bởi vì thiếu kiến thức cần thiết. Nhưng cũng chính vì không bị ép buộc vào quy chuẩn, nên đôi khi họ cũng sẽ có những cách làm sáng tạo mà bạn không nghĩ ra.
Trong phần sau FUNiX sẽ tiếp tục chia sẻ những bài học mà nhà phát triển cấp cao có thể học hỏi từ một lập trình viên mới vào nghề. Chúng là các phương pháp sẽ giúp loại bỏ được rất nhiều bước rườm rà trong việc viết code. Bạn sẽ được tìm hiểu những câu lệnh đơn giản nhưng lại mang lại hiệu quả cao trong công việc. Đặc biệt, bạn có thể áp dụng phương pháp đó ngay để tối ưu hóa công việc của mình. Hãy đón chờ phần tiếp theo để nhận được bài học bổ ích nhé!
Công Sơn
Nguồn tham khảo: https://stackoverflow.blog/2019/12/19/what-senior-developers-can-learn-from-beginners/
Bình luận (0
)