Điều gì tạo nên một software engineer giỏi?

11/31

Bạn rất xịn về thuật toán và cấu trúc dữ liệu? Tốt, vậy là bạn hoàn toàn có thể tìm được một công việc rồi. Nhưng để trở thành một software engineer giỏi, bấy nhiêu đó thì chưa đủ.

Có rất nhiều software engineer chập chững bước vào ngành này khi đã được trang bị rất nhiều kiến thức về thuật toán và cấu trúc dữ liệu, dù họ được đào tạo bài bản từ trường đại học, hay tự học những khóa online và tham gia bootcamp. Tuy nhiên, tin buồn là nếu chỉ có những skills này cũng không thể nào chuẩn bị cho bạn một hành trang vững chắc để có một sự nghiệp thành công trong software engineering.

sioux danang tuyen dung

Bạn có kĩ năng làm việc với người khác không? Hãy thành thật đi nào.

Nếu bạn chọn ngành này để tránh làm việc với người khác, thì tin buồn rằng đó không phải là một lựa chọn sáng suốt đâu. Mặc dù những bộ phim Hollywood hay trên TV về những tên hacker đỉnh cao thường ‘đơn phương độc mã’, nhưng thực tế là tất cả những công ty phát triển công nghệ đều tổ chức làm việc theo đội nhóm. Thậm chí nếu bạn là nhân viên đầu tiên của một start up nào đó, thì những đồng đội của bạn rồi cũng sẽ sớm xuất hiện mà thôi.

Những engineer giỏi không làm việc đơn lẻ trong những khối silo kín mít vì nhiều lý do khác nhau, nhưng lí do quan trọng nhất đó là những đoạn code của họ sẽ khó tích hợp với nhau nếu không làm việc hòa hợp với người khác. Trong khi hầu hết việc học và những bài tập ở trường đại học thể hiện nỗ lực cá nhân, bạn có thể sẽ cảm thấy hơi ngợp khi mới bắt đầu đi làm. Và coding đơn giản không phải là một hoạt động đơn lẻ.

sioux high tech danang tuyen dung recruitment

Bạn bắt đầu làm dự án với những đồng đội càng sớm, bạn sẽ càng trở nên giỏi hơn. Bạn hoàn toàn có thể bắt đầu bằng việc lấy những mã code từ GitHub hay những dự án mã nguồn mở, sau đó đóng góp và lấy phản hồi từ cộng đồng. Trong training, việc tham gia vào những thử thách của đội nhóm và code review là một cách lý tưởng để trau dồi thêm kinh nghiệm.

Hai software engineer không bao giờ nhìn nhận một vấn đề và tìm ra giải pháp giống nhau, nên bạn sẽ học được cách đánh giá những cách tiếp cận khác nhau và bảo vệ ý kiến của mình nếu bạn nhìn thấy được những điểm mù của người khác. Ba software engineer có thể có nhiều hơn ba giải pháp và cứ thế. Tại sao bạn nghĩ rằng Javascript frameworks lại xuất hiện sau mỗi 5 phút?

Điểm này rất quan trọng cho những ai đang muốn phát triển thành team lead hay architect. Những team lead thường rất giỏi trong việc gắn kết nhóm làm việc với nhau, nhưng architect phải tìm ra cách thức để phân chia những phần việc lớn thành những mảng nhỏ hơn. Cả hai skills này đều có thể trau dồi từ việc hợp tác làm việc với những software engineer khác trong những giai đoạn khác nhau của dự án và học cách tích hợp những mã code với nhau. Hi vọng bạn không xem đây như là một trở ngại lớn, hãy nắm bắt cơ hội để được phát triển và giúp người khác phát triển.

sioux danang recruitment

Hãy xác định mục đích của mình. Gợi ý: bạn đang phát triển một sản phẩm đó.

Phần mềm là một ngành nghề rất hấp dẫn cho những người đam mê giải quyết vấn đề. Cách bạn tối ưu hóa thuật toán, giảm thiểu tối đa số lượng dòng code và viết khái quát để có thể sử dụng lại những dòng code là những thử thách mà software engineer nào cũng hứng thú.

Vấn đề là, trong công việc thực tế, đây không phải là tất cả những gì bạn được trả lương để làm. Những engineer chỉ đam mê việc viết code và tối ưu hóa thuật toán có vẻ như đã bỏ qua bức tranh lớn hơn và thất bại trong việc hoàn thành nó.

 Bạn được trả lương cho công việc này bởi vì bạn cần phải tạo ra những phần mềm giải quyết được vấn đề của khách hàng, đúng hạn và đúng ngân sách. Nếu bạn muốn refactor stdlib, làm việc trong một công ty có vẻ như không phải là một lựa chọn tốt nhất cho bạn.

sioux danang recruitment

Điều này có nghĩa là việc sử dụng những thư viện từ bên thứ ba, những phương thức chưa tối ưu và đôi khi release những dòng code không sạch sẽ nhưng vẫn hoàn thành công việc. Chúng ta ở đây để tạo ra sản phẩm và không ai quan tâm nếu một thuật toán nhanh hay chậm nếu không có một sản phẩm nào được release hết.

Nhưng như vậy không có nghĩa là không có những thử thách vui vẻ, làm việc trong lĩnh vực phần mềm là một trong những công việc mang đến độ hài lòng cao so với những ngành nghề khác. Nhưng khoa học máy tính là về những sự đánh đổi và đa số những sự đánh đổi phổ biến trong thực tế là xảy ra giữa việc viết ra những dòng code hợp lý mà đủ tốt – với việc – tiếp tục release sản phẩm theo một cách hiệu quả. Bạn hữu ơi, đây là chi phí cho những sự đánh đổi đó.

sioux danang tuyen dung

Đừng phụ thuộc qúa nhiều vào công cụ (tools)

Khi còn ở trường Đại học, tôi học C++ và nghĩ rằng ồ đây là ngôn ngữ xịn nhất và duy nhất mà thế giới cần.

Khi đi làm công việc đầu tiên, tôi mới thấy rằng C++ giải quyết mọi việc quá lâu và được khuyên là nên sử dụng VB6. Sau đó chúng tôi lại chuyển sang .NET, sau đó thì lại khám phá ra rằng PHP là ngôn ngữ xịn nhất và là tool duy nhất tôi cần.

Sau đó Python xuất hiện. Và rồi Javascript. Và bây giờ Node là số một.

sioux high tech software danang

Thực tế là, ngôn ngữ lập trình đầu tiên sẽ là ‘mối tình đầu’ của bạn nhưng đó sẽ không phải là ngôn ngữ mà bạn sẽ ‘kết hôn’ và chung sống dài lâu. Bạn sẽ có những lần thử với Go và trải qua one-night stand với thư viện Javascript hay Java.

Một thực tế khác nữa đó là công cụ mà bạn chọn lựa sẽ có một vòng đời khá ngắn và sẽ bị thay thế rất nhiều lần trong suốt sự nghiệp của bạn (hay thậm chí chỉ qua một đêm, nếu bạn là một người sử dụng Javascript). Những nền tảng của variables, loops, conditionals và object không thay đổi quá nhiều nhưng syntax, môi trường phát triển và những công cụ sẽ thay đổi liên tục. Một mẹo để hòa hợp với dòng chảy không ngừng của những ngôn ngữ và frameworks này đó là hãy thích ứng và đừng bị mắc kẹt trong những thứ mà cá nhân bạn thích sử dụng.

Điều này đặc biệt đúng trong môi trường phát triển phần mềm ở doanh nghiệp nơi những công ty tự hào vì chuyên phát triển bằng ngôn ngữ Java, hay Microsoft, hay là gì đi nữa. Phương thức “tôn thờ công nghệ” này làm giới hạn tính hiệu quả tiềm ẩn trong việc xây dựng sản phẩm và tạo ra những cơ sở hạ tầng thích ứng với những biến đổi trong tương lai.

Đừng rỗi hơi sáng tạo ra những thứ đã có sẵn

Rất nhiều thách thức trong việc phát triển phần mềm xuất phát từ những nguyên nhân giới hạn cố hữu xung quanh CPU, nguồn, bộ nhớ, năng lượng hay băng thông. Những điều này luôn luôn khiến software engineer phải đắn đó trong những quyết định về thiết kế kiến trúc. Mặc dù rất nhiều nguồn lực công nghệ đã và đang phát triển rất nhanh, những sự đánh đổi này vẫn luôn tồn tại và sẽ tồn tại cho đến khi những quy luật của vật lý được tái định hình.

sioux danang software engineer

Có một bí mật ít người biết đó là có những vấn đề lặp đi lặp lại mà bạn vẫn cần phải giải quyết đối mặt hàng ngày. Vì vậy khi giải quyết vấn đề nào bạn không nên cứ suy nghĩ lại từ đầu. Bạn sẽ khám phá ra rằng, vấn đề mà bạn đang nỗ lực giải quyết hôm nay đã được giải quyết bởi ai đó trước rồi.

Design pattern là những giải pháp khái quát cực kì hiệu quả, nhưng chúng cũng không thường được sử dụng nhiều. Những frameworks giúp mở rộng những pattern này thành những cấu trúc có thể sử dụng được cho sản phẩm mà không cần bạn phải nỗ lực quá nhiều. Bạn có thể sử dụng những thành quả này để giúp quá trình phát triển phần mềm nhanh hơn mà không bị mắc kẹt phải lặp đi lặp lại xử lý những vấn đề cũ. Quan trọng hơn cả, chúng cũng giúp bạn trông thông minh hơn.

sioux high tech software danang

Điều này là hoàn toàn hiển nhiên khi những công cụ thường được thiết lập dựa trên những design pattern phổ biến. Những software engineer thông thái thường đẩy những vấn đề khó như công nghệ mã hóa, bảo mật, quy mô và đồng bộ hóa lên Cloud, nơi có những công cụ đơn giản và có thể duy trì. Bạn không thể nào đưa ra những giải pháp tốt hơn những giải pháp đã có sẵn như vậy, nên hãy tập trung năng lượng vào những công việc mà mình có thể tạo ra giá trị.

 “Không phải vấn đề của tôi” chính là vấn đề

Có những vai trò nhất định trong những team phát triển phần mềm bắt đầu trở nên mờ nhạt đi. Bạn có thể thấy những người với những thế mạnh khác nhau trong team – mạng, QA, front end, back end – nhưng trong những dự án lớn, những “block trách nhiệm” này có thể tạo ra khuynh hướng đổ lỗi cho nhau.

Nếu không đặt ra những trách nhiệm như vậy, software engineer thường sẽ để lại những bugs trong những dòng code và nghĩ rằng team QA sẽ tìm ra (và sửa) chúng, hoặc dựa vào những kĩ sư bảo mật lấp những lỗ hổng mà lẽ ra software engineer phải tự sửa chữa. Và những kĩ sư front end sẽ đẩy công việc cho back end vì nó có thể giúp code của họ nhanh và dễ dàng hơn, dù đôi khi điều đó thật không hợp lí.

sioux high tech software danang tuyen dung

Việc chuyên môn hóa này tạo ra những sự chia rẽ và đẩy vấn đề đi xa hơn cần thiết, thay vì tập trung vào việc cùng nhau phát triển một sản phẩm với chất lượng tốt nhất. Thậm chí tệ hơn, những sự phân chia này khiến mọi người chỉ tay đổ lỗi khi xảy ra thất bại và chỉ điểm người kế bên trong chuỗi trách nhiệm đó.

Tư duy “không phải việc của tôi” càng cực kì tệ hại khi chu trình release diễn ra thường xuyên. Đây là tàn tích của việc sắp xếp team phát triển phần mềm như những dây chuyền lắp ráp thay vì một nhóm hợp tác gắn kết với nhau.

Ngày nay những team phát triển thành công thường training cho nhau để hiểu rõ và chia sẻ vai trò. Những thử thách của DevOps, bảo mật và QA được xử lý tự động và nhờ những quy trình, và cả team cùng học hỏi tất cả những skills đó cùng nhau.

Quan trọng hơn cả, bằng cách làm việc hợp tác như vậy, chúng ta hiểu rằng mình có trách nhiệm với bất kỳ vấn đề nào xảy ra với sản phẩm.

sioux high tech software danang

Những thói quen tốt hình thành nhờ vào kinh nghiệm

Khi cơ hội để bạn thể hiện kĩ năng coding của mình xuất hiện trong môi trường doanh nghiệp, những bộ óc thông minh nhất cũng có thể bị thất bại trong quá trình biến chuyển từ một sinh viên trở thành một nhân viên chuyên nghiệp.

Việc tạo ra những phần mềm chất lượng nhờ vào kĩ năng coding cần rất nhiều thời gian để trở nên tinh thông. Đây là một nghề nghiệp đáng mơ ước nhưng cần phải được cập nhật kiến thức không ngừng và rèn dũa khả năng giải quyết vấn đề. Tinh thông trong những kĩ năng này sẽ giúp bạn có những cơ hội tốt nhất để tạo ra những sản phẩm chất lượng, dẫn dắt đội ngũ và học hỏi từ những bộ óc thông minh xung quanh bạn.

Bài dịch từ bài viết gốc của tác giả Jame Beswick: https://itnext.io/what-makes-a-great-software-engineer-d6e10761fe55

Sioux High Tech Software Ltd.

#We together bring high-tech to life

Address: 10th Floor, Petrolimex Building, 122 2/9 Street, Danang, Vietnam

Email: jobs@sioux.asia

Phone: +84 236 3 888 756

Write Comment...

Name

Email