Những kĩ năng cần có của một developer thành công
Tôi luôn cố gắng để ngày mai luôn tốt hơn hôm nay. Thế mạnh và điểm yếu của bản thân luôn là chủ đề mà tôi hay nghĩ tới. Tuy vậy, việc làm tốt hết tất cả mọi thứ là chuyện không tưởng . Do đó mà bạn phải lựa chọn kĩ càng những lĩnh vực mà bản thân muốn phát triển. Cũng như thứ gì ...
Tôi luôn cố gắng để ngày mai luôn tốt hơn hôm nay. Thế mạnh và điểm yếu của bản thân luôn là chủ đề mà tôi hay nghĩ tới. Tuy vậy, việc làm tốt hết tất cả mọi thứ là chuyện không tưởng. Do đó mà bạn phải lựa chọn kĩ càng những lĩnh vực mà bản thân muốn phát triển. Cũng như thứ gì sẽ cho tôi nhiều giá trị nhất?
Cách suy nghĩ trên không chỉ đơn thuần là để phát triển bản thân. Việc hiểu rõ điểm yếu và thế mạnh của từng cá nhân còn là một kĩ năng cần thiết trong tuyển dụng. Chúng tôi từng mắc sai lầm và thuê một lập trình viên cực kì giỏi…ở những lĩnh vực mà chúng tôi không cần tới.
Đối với lập trình viên, kĩ năng quan trọng nhất trước tiên chính là khả năng lập trình. Việc viết code chính là trách nhiệm của developer. Thật không may là nó là một việc đầy thử thách. Đặc biệt là trong việc đánh giá khả năng lập trình của mỗi cá nhân.
Programming thực chất chính là cách giao tiếp với máy tính. Và cũng như bao ngôn ngữ giao tiếp khác như tiếng anh. Việc bạn đọc hiểu nó không có nghĩa bạn có thể viết ra những vần thơ hay, những tiểu thuyết hấp dẫn. Để có khả năng đấy thì đòi hỏi kĩ năng cũng như kinh nghiệm.
Kèm theo đó, dù đều cùng có liên quan tới ngôn ngữ nhưng nhà văn và editor cũng vô cùng khác nhau trong cách nghĩ và cách làm việc. Đối với một developer thì cũng vậy, việc phải lập trình từ con số không và dựa trên một hệ thống đã có sẵn là vô cùng khác nhau.
Trong những năm đầu học về lập trình của tôi cũng bắt đầu với những project có sẵn. Việc code mọi thứ từ con số không là một điều cực kì hiếm đối với một sinh viên chỉ mới năm nhất như tôi. Sau này công việc của tôi cũng là làm việc với những hệ thống. Mọi thứ đã được tạo sẵn và giới hạn bởi những qui luật riêng của nó. Nhiệm vụ của tôi chính là xem xét và đánh giá những giới hạn đó và liệu ta có thể làm những gì trong phạm vi được đặt ra. Cũng như một editor không có quyền hạn quyết định cốt truyện bởi đó là trách nhiệm của nhà văn.
Những nền tảng như vậy, dù có chất lượng tệ đến mấy thì nó vẫn mang vai trò làm mốc cho developer. Giúp cho việc giảm thiểu bớt những quyết định phải đưa ra cũng như có được những hướng đi rõ ràng và đơn giản hơn.
Còn nếu chúng ta bắt đầu với một project từ con số không thì có thể nói có gần như là vô hạn các khả năng có thể xảy ra. Bạn có thể chọn bất cứ thứ gì mình muốn. Thường thì các developer sẽ dựa trên những kinh nghiệm từ project cũ nhưng nó vẫn chưa phải là cách giải quyết tốt nhất. Đó là do những hệ thống đó đã có sẵn cho bạn và chúng ta thực chất chỉ là dùng các giải pháp nằm gói gọn trong một giới hạn được đặt ra. Còn giờ khi đã không còn những cản trở ấy thì ta sẽ có những lựa chọn tốt hơn. Vấn đề ở đây là việc bạn có thể đưa ra quyết định đúng đắn trong hàng tỉ những khả năng khả thi.
Ngoài ra còn cần cả khả năng debug. Bạn hẳn nghĩ rằng việc chỉ cần code nhiều thì debug cũng sẽ giỏi nhưng thật chất mindset lại hoàn toàn khác. Khi bạn code thì cũng như một người tài xế. Bạn biết mình phải làm gì để có thể tới đích.
Còn với quá trình debug thì mọi thứ lại trở nên mông lung hơn. User không bao giờ biết được hệ thống họ dùng ra sao và cũng chả quan tâm. Điều quan trọng nhất là nó phải chạy và hoạt động tốt. Và hiển nhiên nếu nó không làm được điều đó thì họ sẽ cho rằng là nó bị hỏng. Tuy nhiên để xác định được nguyên nhân của lỗi đó trong vô số hàng code có thể mất từ vài phút cho đến vài tuần.
Giả dụ như tính năng tìm kiếm của một website bị lỗi. Dù user đã điền thông tin vào nhưng tính năng vẫn không hoạt động. Đó là toàn bộ những gì người dùng biết. Còn đối với một developer thì họ phải bắt đầu cả một quá trình điều tra:
- Những lỗi này có thuộc browser console?
- Hay là do server return những data “tệ” ?
- Nếu đúng là như vậy thì là lỗi do server hay nằm ở front-end?
- Và nếu là trên server thì nó nằm ở đâu?
- Do code?
- Hay bởi Datastore?
- Thế còn network giữa chúng thì sao?
- Còn nếu không phải do server mà là do code ở front-end thì những code đó là của chính developer viết ra hay từ một nhóm thứ ba được nhập vào?
Đó chính là những khả năng có thể làm xuất hiện lỗi mà developer cần phải kiểm tra qua. Và đôi khi chúng lại không nằm ở code mà là ở vị trí. Developer thường dùng CDN để gửi code và hình ảnh tới browser. CDN lưu trữ những data này ở khắp nơi trên thế giới. Nhờ đó mà giúp việc load trở nên nhanh hơn vì user ở châu á không phải đợi data gửi từ tận Mỹ.
Tuy nhiên nó lại tồn tại vấn đề là đôi khi nó sẽ fail trong một khu vực và dẫn đến việc chỉ những người dùng trong khu vực đó là bị lỗi. Và tất nhiên khi user phàn nàn thì những developer ở chi nhánh chính sẽ vô cùng đau đầu khi chỉ có họ là bị lỗi.
Có vô vàng những lỗi khác nữa nhưng tôi nghĩ bạn hẳn cũng đã hiểu ý của tôi khi nói rằng debug đòi hỏi những kĩ năng khác hoàn toàn so với việc viết code.
Quay ngược trở về vấn đề coding, việc viết nhanh và viết dễ hiểu cũng là hai phạm trụ rất khác biệt. Cái đầu đòi hỏi khả năng tốt trong toán học và kĩ năng thứ hai đòi hỏi sự sắp xếp có trật tự logic. Việc muốn có được cả hai khả năng này quả là như một giấc mơ. Tuy vậy, đời thật thì rất khác.
Tùy vào software cũng như yêu cầu mà các developer sẽ chia ra thành 2 thành phần khác nhau. Một developer có khả năng code dễ hiểu sẽ giúp tạo ra một nền tảng để developer viết nhanh có thể tập trung và phát triển nên các thuật toán cao cấp cho nó.
Dù rằng việc chúng ta có thể học hết mọi thứ trong lập trình hoàn toàn là có thể nhưng thời gian thì lại có giới hạn. Do đó mà developer thường chỉ tập trung vào phát triển ở một lĩnh vực nhất định. Đó là một lựa chọn rất đúng đắn. Và đôi khi chúng ta không cần phải quá bận tâm vào việc khắc phục điểm yếu của mình mà thay vào đó càng ngày càng hoàn thiện hơn điểm mạnh của bản thân.
Việc tuyển dụng nhân lực cũng như vậy. Dựa vào điểm yêu và mạnh của team mà chúng ta có thể tìm thấy được những ứng viên thật sự phù hợp để giúp che lấp được khoảng trống cũng như hoàn thiện được tổ chức.
Techtalk via professorbeekum