Hotline tư vấn - khiếu nại

Từ bỏ công việc tốt nhất thế giới để thành một developer: Thật điên rồ!

Đằng sau mỗi sự nghiệp thành công là một giấc mơ bị bỏ lại. Với tôi, đó là giấc mơ trở thành kĩ sư công nghệ phần mềm. Đã gần một năm kể từ khi tôi rời bỏ công việc tuyệt vời tại Andreessen Horowitz để theo đuổi ước mơ đó – mặc dù tôi không có kinh nghiệm trong việc phát triển Web hay Javascript. Cuộc hành trình đi xa hơn, nhưng tôi tự hào nói rằng sự thay đổi đó là một thành công. Sau 3 tháng làm việc tại tại Hack Reactor, với nhiều đêm thức khuya để xây dựng dự án mã nguồn mở cá nhân và tìm kiếm công việc thật sự căng thẳng, tôi hiện đã có công việc kĩ sư phần mềm toàn thời gian đầu tiên của đời mình (tại Coinbase). Cuối cùng thì tôi đã có thể dành thời gian hàng ngày của mình để làm những việc mình thích. Trong bài viết này, tôi muốn chia sẻ những trải nghiệm về việc chuyển đổi công việc như thế nào và bài học mà tôi đã rút ra được trong quá trình đó. Tôi sẽ giải quyết những câu hỏi như: Việc đó có đáng không? Việc lập trình có giống như bạn nghĩ không? Bí quyết để tôi học việc nhanh? Kĩ sư phần mềm tìm việc thì khó đến mức nào? Điều gì sẽ đến tiếp theo? Tôi xin phép được bắt đầu.

1. Bắt đầu

Mục tiêu chính của tôi khi tôi bắt đầu viết code là xây dựng vốn kiến thức để trở nên pro trong thời gian nhanh nhất có thể. Tôi yêu sự hồi hộp của việc xây dựng mọi thứ và trở nên bị ám ảnh với việc giải quyết những khó khăn lập trình. Về cơ bản, tôi muốn được tạo ra một thứ gì đó .Và tôi muốn “nó” trở thành hiện thực đến mức tôi không có đủ kiên nhẫn để quay trở lại đại học chỉ để lấy tấm bằng về CS.

Tôi có quá lo lắng chăng? Tất nhiên rồi. Nhưng tôi thật may mắn khi có những người bạn và đồng nghiệp, những người tin tưởng vào giấc mơ của tôi và giúp giữ cho giấc mơ đó của tôi sống sót.

Tôi nhớ đã gặp Christopher Nguyen khi tôi mới bắt đầu cuộc hành trình này. Christopher là người sáng lập của công ty Arimo, một tiến sĩ Mỹ gốc Việt đến từ Stanford đã đồng sáng lập ra 2 công ty khởi nghiệp thành công, và một trong những người lãnh đạo sáng suốt nhất tôi đã từng gặp ở A16z. Cụ thể hơn, tôi muốn hỏi anh ta suy nghĩ gì về cơ hội thành công của tôi, trong bối cảnh những lập trình viên khác đã bắt đầu công việc của họ từ năm 12 tuổi.

Và anh ấy trả lời: “Những gì tôi thấy ở cậu là sự can đảm và lòng nhiệt huyết. Nếu cậu tận dung được những nỗ lực và thời gian cậu bỏ ra, lợi thế cạnh tranh của họ sẽ dần biến mất.”

Những lời vàng ngọc đó, đặc biệt khi nó đến từ một học giả thành công, người mà tôi nghĩ sẽ không tán thành quyết định của tôi về việc không quay trở lại đại học, đã trở thành nguồn động viên cực kì lớn cho tôi. Điều đó giúp tôi nhận ra rằng không có gì có thể “loại” tôi ra khỏi con đường vươn tới giấc mơ của mình. Tất cả những gì tôi cần làm là làm việc chăm chỉ và biến giấc mơ thành hiện thực.

Vì vậy, tôi mở cửa và bắt đầu học tập.

2. Học những thứ tiêu biểu

Mọi người vẫn thường hỏi làm thế nào để tôi có thể học nhanh như vậy. Câu trả lời thực sự rất đơn giản: tôi tận dụng từng phút một để làm việc.

Từ khi rời khỏi Andreessen Horowitz, lịch trình của tôi diễn ra hầu như theo chu trình như hình dưới:

Learning the Traits

Càng code nhiều, tôi càng làm tốt hơn, điều đó khiến tôi muốn code nhiều hơn. Tôi đã bị cuốn vào một chu trình ảo, và tôi thực sự tận hưởng từng giây phút trong đó.

Tuy nhiên, dành nhiều thời gian cho viết code đồng nghĩa với việc tôi sẽ phải từ bỏ rất nhiều thứ - bao gồm cả những sở thích của mình như đọc sách, gặp gỡ bạn bè vào cuối tuần, những chuyến đi đến Napa, những buổi ra ngoài ăn tối, và thậm chí là việc gặp gia đình vào dịp Giáng sinh hay Lễ Tạ ơn.

Điều đó thật không dễ dàng chút nào, nhưng thành thật mà nói, nó cũng không phải là một yếu tố then chốt - tôi đã thật sự quá đam mê và chú tâm vào những gì đang làm đến nỗi từ bỏ những thú vui kia trong khoảng thời gian ngắn không còn là một vấn đề to tát với tôi.

Nhưng cụ thể là tôi đã dành thời gian để làm những gì? Dưới đây là một số chi tiết về cách tôi tổ chức lại công việc học của mình:

1.1. Bước 1: Học những điều cơ bản:

Bước đầu tiên của tôi là tìm hiểu những điều cơ bản của ngôn ngữ lập trình (trong trường hợp của tôi là Javascritp) sử dụng những nền tảng trực tuyến như Code School, Treehouse, Khan Academy và Code Wars.

Thành tích đầu tiên của tôi là có được nền tảng kiến thức vững chắc về Vanilla Javascript (ví dụ như các giá trị, kiểu, hệ điều hành, chức năng cơ bản và cao cấp, phạm vi, , bối cảnh thực hiện, hoisting, từ khóa “this”, prototypal inheritance, vv…)

Chú ý đến việc tôi không đề cập đến Angular, React, jQuery, Webpack hay bất cứ một mô hình phổ biến, thư viện hay công cụ nào. Có một lý do chính đáng cho việc đó: tầm quan trọng của việc tránh học những công cụ phổ biến khi bạn mới chỉ bắt đầu.

Những điều căn bản có thể sẽ bớt thú vị hơn, nhưng chúng vô cùng giá trị bởi chúng không bao giờ thay đổi hay thoát ra khỏi khuôn khổ. Những mô hình và công cụ, mặt khác, luôn luôn thay đổi. Tôi thấy rằng việc bắt đầu với những điều căn bản của Javascript khiến cho việc thu thập các công cụ như React and Webpack trở nên dễ dàng hơn, và am hiểu của tôi về việc sử dụng chúng như thế nào về lâu dài sâu sắc hơn nếu tôi muốn bắt đầu với chúng.

2.2.Bước 2: Xây dựng những dự án phụ

Sau một vài tháng tập trung vào những điều căn bản, đã đến lúc để chuẩn bị và bắt đầu xây dựng một sự án từ vạch xuất phát.

Xây dựng những dự án thực tế sẽ đem về cho bạn những kiến thức học tập cơ bản theo những cách mà bạn không bao giờ tưởng tưởng. Thêm vào đó, những dự án nhỏ nuôi dưỡng sự kết nối của bạn với cộng đồng lập trình. Những dự án mà tôi làm không lớn lao đến mức sẽ trở thành một công ty lớn hay là một Facebook tiếp theo, nhưng thay vào đó là tham vọng, những dự án có ý nghĩa giải quyết những vấn đề nhỏ mà tôi quan tâm.

Dự án trong đề tài luận văn của tôi tại Hack Reactor là một ví dụ rõ ràng. Đồng đội của tôi và tôi đã chọn xây dựng một thư viện mã nguồn mở, điều mà làm cho các biểu đồ xây dựng d3.js trở nên đơn giản hơn rất nhiều. Tại thời điểm đó, điều này cảm thấy dường như nó đã vượt quá phạm vi khả năng của chúng tôi. Xây dựng một thư viện mã nguồn mở nghe giống như một nhiệm vụ cho những người phi thường. Tuy nhiên, chúng tôi dự đoán chúng tôi có thể làm tốt những điều rất khó khăn – điều mà thúc đẩy chúng tôi vượt qua giới hạn của chính mình. Và tôi tự hào nói rằng chúng tôi đã làm tốt đến bất ngờ!

Ngoài việc đào sâu kỹ năng về công nghệ của bạn, việc học tập dựa trên nền tảng các dự án cũng dạy rất nhiều kỹ năng cấp cao:

Làm thế nào để thiết kế một công trình tiêu chuẩn;

Làm thế nào để chọn công cụ phù hợp nhất để làm việc;

Làm thế nào để viết code để dễ đọc và duy trì;

Làm thế nào để xây dựng một bộ thử nghiệm vững chắc và toàn diện;

Làm thế nào để xây dựng một trải nghiệm người dùng tuyệt vời;

… và nhiều hơn nữa.

1.3. Bước 3: Không ngừng học tập

Bạn không thể viết code suốt cả 24h/ngày, nhưng bạn có thể lấp đầy những khoảng thời gian rảnh với những chủ đề có ý nghĩa ngay cả khi bạn rời khỏi máy tính. (Rất có thể đó là lý do tại sao hiện giờ bạn đang đọc bài này). Bất kỳ “khoảng thời gian đen tối” trong năm qua mà tôi không code thì tôi chú tâm vào việc tìm hiểu những cuốn sách về lập trình, các video bài giảng, và những podcast.

Nhìn chung, lĩnh hội được một tổ hợp những khung lý thuyết kết hợp với những kinh nghiệm xây dựng dự án thực tế là cần thiết cho việc học tập hiệu quả.

1.4. Bước 4: Chấp nhận những khó khăn trước mắt.

Nói đơn giản thì viết code đã trở thành cuộc sống của tôi, nó đã khiến tôi tiến bộ nhanh hơn so với những người chỉ cam kết làm việc dưới 110% hiệu suất của họ.

Dĩ nhiên, điều đó không có nghĩa là tôi khoe khoang nó và mọi thứ đến với  tôi dễ dàng (tôi không nghĩ tôi đã từng gặp một lập trình viên nào cảm thấy như vậy). Đã có rất nhiều lần tôi cảm thấy choáng ngợp, cho dù đó là bởi vì tôi không thể hiểu/ bằng trực giác cảm nhận một chủ đề nâng cao hoặc tôi đã bị mắc kẹt vào một số lỗi gây (annoying bug) hay tôi không thể khiến một cái gì đó hoạt động.

Mắc kẹt chỉ trở thành vấn đề khi mà bạn từ bỏ. Thay vào đó, tôi đã học cách làm chắc chắn hơn và tiếp tục tiến về phía trước cho đến khi tôi trông thấy được ánh sáng cuối con đường/đường hầm. Chiến đấu thông qua những khoảnh khắc nản lòng đòi hỏi chúng ta, những lập trình viên, phải siêng năng, kiên cường/ bền bỉ và kiên nhẫn/nhẫn nại.

Sẽ không có một người lập trình viên nào không phải đôi lúc đấu tranh. Sau tất cả, nếu công việc kỹ sư phần mềm là dễ dàng, thì mỗi người đều có thể làm được. Những người kỹ sư thành công là người biết cách đối phó với những thách thức, xem đó như một cơ hội để học thêm được những điều mới.

3. Trở thành một kỹ sư phần mềm chuyên nghiệp

professional dev

Một trong những kỹ năng về công nghệ khó nắm bắt nhất nhưng lại ít có tính áp dụng với máy tính, đó chính là kĩ năng làm việc nhóm.

Việc code đơn giản chỉ để thỏa mãn trí tò mò và mong muốn xây dựng là hoàn toàn khác nhau từ việc code trong một nhóm để giải quyết các mục tiêu của nhóm. Bạn có thể tìm hiểu và xây dựng tất cả những dự án trên thế giới nhưng bạn vẫn không thể trở thành một kỹ sư phần mềm vĩ đại. Làm việc với một đội ngũ kỹ sư để xây dựng và duy trì một sản phẩm trong quá trình sản xuất là một việc hoàn toàn khác.

Mục tiêu cá nhân của tôi là trở thành một kỹ sư phần mềm toàn thời gian, và như vậy bước tiếp theo sẽ là việc tôi tập trung để đạt được những kỹ năng cần thiết để làm về kỹ thuật trong một bối cảnh/ hoàn cảnh/ môi trường chuyên nghiệp. Cụ thể, tôi muốn đạt được nhiều kinh nghiệm hợp tác với các kỹ sư khác để xây dựng một cái gì đó???

May mắn thay, một phần của chương trình Hack Reactor đã làm điều này, và tôi đã làm việc trên 3 nhóm dự án riêng biệt trong khoảng 6 tuần, và mỗi một dự án trong số đó chúng tôi đều đã làm từ việc lên ý tưởng cho đến việc triển khai sản phẩm hoàn thiện. Trong quá trình đó, chúng tôi đã học được những điều như sau:

Làm thế nào để thiết kế a spec như một nhóm;

Làm thế nào để thảo luận về những quan điểm khác nhau;

Làm thế nào để  kiểm soát quy trình làm việc;

Làm thế nào để thực hành linh hoạt việc phát triển phầm mềm;

Làm thế nào để thống nhất về các công cụ thích hợp để sử dụng;

Làm thế nào để kiểm soát xung đột trong nhóm và sự bất đồng cá nhân;

… Về cơ bản, chúng ta học tất cả những vấn đề bên ngoài của bản thân việc code.

4. Công việc chuyên nghiệp đầu tiên

Ngay sau khi tốt nghiệp Hack Reactor, tôi có một cơ hội tuyệt vời khi có cơ hội được làm việc một tháng trong dự án kỹ thuật cao cho một nhà phát triển mã nguồn mở xuất sắc. Đây là dự án khó nhất mà tôi từng tham gia cho đến thời điểm đó, và một trong số đó thực sự đào sâu kiến thức của tôi về những điều căn bản về kỹ thuật máy tính, cho đến tận bit và bytes.

Những ngày thực hiện dự án này là thời điểm mà tôi phải đối mặt với những khó khăn khiến tôi cảm thấy chán nản và thất vọng.  Nó thường có quá nhiều thách thức mà tôi muốn vứt bỏ toàn bộ công việc và thừa nhận sự khó khăn của việc viết code hay nói cách khác là “điều bất khả thi”.

Vào những lúc như thế này, từ bỏ tất cả là chuyện quá dễ dàng. Tôi đã phải nhắc nhở bản thân rằng con đường duy nhất để tôi vượt qua được điều này là đẩy mình về phía trước và chiến thắng những cảm xúc tiêu cực của bản thân. Vì vậy, tôi đã hít một hơi thật sâu, dừng lại và tạm gác công việc của mình. Sau đó, tôi tự hỏi bản thân những câu hỏi như:

Có phải tôi đang cố gắng để giải quyết đúng vấn đề, hay tôi mới chỉ tiếp xúc và giải quyết bề nổi của vấn đề?

Những hạn chế của tôi là gì? Tôi biết gì về vấn đề này? Sự lý giải của tôi về vấn đề này đã hợp lý chưa?

Có phải cách tiếp cận của tôi phức tạp hơn những gì nó cần? Liệu tôi có thể tìm được nó theo một cách dễ dàng hơn?

Tôi có thể tìm những gì trên interweb để giúp bản thân giải quyết được vấn đề này?

Tôi có thể tìm kiếm sự giúp đỡ của một ai đó hay ở một nơi nào đó không?

Cuối cùng, mỗi một vấn đề đều được giải quyết theo một cách khác nhau. Điều đó thông qua những kinh nghiệm, như vậy khiến tôi nhận ra rằng không một vấn đề nào có thể giải quyết mà không có sự nỗ lực – bao gồm cả những nhiệm vụ dường như là bất khả thi.

Lý do mà hợp đồng này rất có giá trị đối với sự phát triển của tôi bởi vì nó đem đến cho tôi cảm giác như thể tôi làm việc với một ai đó trong một thế giới thực được sắp đặt để xây dựng và triển khai các sản phẩm. Nó dạy tôi làm thế nào để nắm bắt được những ý tưởng, chia nhỏ chúng ra thành những phần nhỏ có thể thực thi được, thực hiện chúng, và bàn giao sản phẩm cuối cùng.

Trong khi dự án là một trải nghiệm tuyệt vời và tôi có thể tiếp tục tìm kiếm những cơ hội ký kết hợp đồng khác, tôi nhận ra rằng việc ký kết hợp đồng không phải là mục tiêu dài hạn của mình. Tôi tìm thấy một cơ hội tuyệt vời để làm việc với những thách thức về mặt kỹ thuật và thật tuyệt khi nó kéo dài, nhưng điều mà tôi thực sự muốn là một vai trò toàn thời gian nơi mà tôi có thể hợp tác với những con người cùng chí hướng để giải quyết một vấn đề mà chúng tôi cùng quan tâm sâu sắc. Tôi muốn những đồng nghiệp, những người mà tôi có thể làm việc cùng và học hỏi trong thời gian dài. Hơn tất cả, tôi muốn đóng góp cho công ty mà tôi tin là đã đang xây dựng một cái gì đó rất có giá trị và quan trọng.

Đó là khi tôi bắt đầu tìm kiếm công việc của mình.

5. Tìm kiếm công việc

Thị trường công việc kỹ thuật là một chủ đề lớn. Tôi không thể đưa ra bất cứ giải pháp mang tính đột phá trong bài viết này, nhưng tôi chắc chắn/ cam đoan rằng sẽ suy nghĩ về nó cho một bài viết trong tương lai/ sắp tới. Bây giờ, tôi sẽ chỉ chắt lọc những bài học chính mà tôi đã học được:

5.1. Bị từ chối! = Bạn thật tệ.

Khi tôi bắt đầu, tôi nghĩ rằng nếu bạn đủ tốt, bạn có thể xoay chuyển tình thế ở mọi thời điểm. Ảo tưởng này nhanh chóng bị tiêu tan/ dập tắt. Điều đó rất khó để nắm giữ trong mọi cuộc phỏng vấn về lập trình. Thậm chí đối với cả một số developer vô cùng tài năng tôi biết rằng họ đã từng nhận sự từ chối bởi vì họ nhầm lần trong một câu hỏi về thuật toán hoặc họ lo lắng hoặc bất cứ lý do ngu ngốc/ vớ vẩn nào. Trên thực tế, thậm chí có hẳn 1 danh sách về chủ đề “họ từ chối chúng tôi” (http://rejected.us/) của những developer mà tôi có thể tìm kiếm mỗi ngày về những câu chuyện chia sẻ của họ khi bị từ chối.

Không những thế, sự từ chối luôn luôn gây thất vọng, cho dù nó là do thiếu sót của bản thân hay chỉ đơn giản là những yếu tố vượt ngoài tầm kiểm soát.

5.2. Những câu hỏi về kỹ thuật

hỏi câu hỏi

Ví dụ, một trong những yếu tố làm tôi ngạc nhiên là độ rộng của những câu hỏi mà các bạn được hỏi trong cuộc phỏng vấn. Trong một cuộc phỏng vấn, người phỏng vấn sẽ tập trung vào bộ chọn CSS cho toàn bộ thời gian. Thẳng thắn thì tôi phải nói rằng tôi biết bộ chọn CSS hoạt động như thế nào và tôi có sử dụng chúng trong các file văn bản của mình, nhưng tôi không hiểu sâu đến mức mà tôi có thể ứng phó với những ngữ cảnh phức tạp và các chi tiết vận dụng của bộ công cụ này trong vòng một tiếng đồng hồ.

Tôi có thể đã phải chuẩn bị cho những kiến thức này nhưng tôi đã tập trung vào học những thứ khác, và tôi đã không may mắn. Điều đó thật khó chịu, nhưng mà việc dự đoán người phỏng vấn điển hình sẽ tập trung vào câu hỏi về kỹ thuật nào không phải lúc nào cũng có thể/ không phải lúc nào cũng có thể dự đoán được người phỏng vấn sẽ tập trung hỏi những vấn đề gì về kỹ thuật.

5.3. Tìm ra những điểm yếu của bạn

Đôi khi những người phỏng vấn muốn biết về những thiếu sót của bạn vì những lý do tích cực. Ví dụ, trong một cuộc phỏng vấn khác, tôi được hỏi về bộ chọn CSS còn về những câu hỏi khác tôi hoàn toàn không biết gì. Người phỏng vấn đã nói rằng: bạn có sự hiểu biết tuyệt vời về Javascript và những khái niệm về front – end, và có thể thiếu một chút kinh nghiệm về CSS cho tổng thể hoàn chỉnh. Cuối cùng, tôi đã nhận được một lời đề nghị.

Trong vấn đề này, nhiều công ty đã làm rất tốt việc đưa ra những phép thử để tìm ra điểm mạnh của mình, nơi mà bạn có thể tự do thể hiện bản thân. Một số công ty khác lại rất giỏi trong việc chỉ ra những điểm yếu của bạn. Khi bạn được thử nghiệm dựa trên những điểm yếu hay trên những điều mà bạn không biết, bạn sẽ vấp ngã và sụp đổ.

5.4. Khả năng của người phỏng vấn

Một yếu tố khác là trình độ của người phỏng vấn bạn. Một số người được đào tạo bài bản, họ cực kỳ thân thiện, và họ làm rất tốt công việc của mình trong việc khiến cho bạn cảm thấy thoải mái và bớt căng thẳng. Họ nhận ra rằng cuộc phỏng vấn thực sự rất căng thẳng và vì vậy, họ cố gắng hết sức mình để làm cho trải nghiệm đó trở nên bớt khó khăn hơn. Một số khác chưa qua đào tạo, thiếu kinh nghiệm, dễ bị xao nhãng và không thực sự chú tâm. Có lẽ họ thậm chí còn phát ra ngôn ngữ cơ thể lạ hay là có những giao tiếp bằng ánh mắt kỳ lạ, đơn giản là họ không biết cách giúp cho bạn cảm thấy thoải mái và vì vậy bạn có thể làm hết sức mình. Dĩ nhiên, điều này có thể ảnh hưởng lớn đến phần thể hiện bản thân của bạn. Hiển nhiên, điều này không phải lỗi của bạn.

5.5. Phù hợp với văn hóa

Một yếu tố khác là sự phù hợp về văn hóa. Tôi đã từng gặp rất nhiều những nhà sáng lập, các giám đốc kỹ thuật, họ nói rằng, họ đã từ chối rất nhiều những ứng cử viên nặng ký chỉ thuần túy vì sự phù hợp văn hóa nơi làm việc.

“Phù hợp văn hóa” là một khái niệm rất mơ hồ, nhưng đó là điểm quan trọng (tiền đề) mà hầu hết các công ty, các nhà quản lý tìm kiếm, đó không chỉ là một người có thể làm việc mà còn là một người có thể hòa hợp với tập thể, với những người còn lại trong nhóm, những người sẽ đóng góp tích cực vào hiệu suất chung của công ty. Những nhà quản lý giỏi và các công ty biết rằng: một developer có thể hòa hợp với cả một nhóm là người có thể tin tưởng và tôn trọng những người khác và như thế sẽ tốt hơn là một developer 10x (10 tốt) nhưng không chịu hòa nhập với tập thể.

Những điều như vậy hoàn toàn nằm ngoài tầm kiểm soát – hãy là chính mình. Vì vậy, nếu bạn không phù hợp với văn hóa của một công ty nào đó, hãy mạnh dạn đi tìm một công ty phù hợp với mình.

5.6. Đừng đổ lỗi cho bản thân

Danh sách vẫn còn tiếp tục. Những lý do được nêu ở đây chỉ là một vài trong số hàng ngàn lý do tại sao bạn gần như không thể làm tốt tất cả các cuộc phỏng vấn. Và không sao cả/ đó là điều rất bình thường - đừng nản lòng, đừng nghĩ bản thân mình ngu ngốc, cũng đừng đổ lỗi cho bản thân mình.

Tuy nhiên nó cũng không có nghĩa bác bỏ hoàn toàn. Thay vào đó, hãy cởi mở và xem đó như một bài học kinh nghiệm cho bản thân. Hãy ngồi phân tích xem bạn đã làm tốt điều gì và điều gì chưa tốt. Những thời điểm như thế này chính là một phép thử cho sự tin tưởng vào chính bản thân mình và mức độ bạn mong muốn có được công việc đó. Một lần nữa, một trong số những nhà lập trình tốt nhất mà tôi tìm được đã bị rất nhiều công ty từ chối nhưng những điều đó không thể ngăn cản họ đạt được ước mơ của mình.

Chính vì vậy, hãy vực dậy bản thân và tiếp tục cố gắng.

5.7. Tìm hiểu về những thuật toán và cấu trúc dữ liệu

Các câu hỏi về việc sử dụng thuật toán và cấu trúc dữ liệu nhằm đánh giá khả năng của một lập trình viên, là một trong những chủ đề gây tranh cãi nhất trong ngành kỹ sư phần mềm.

Quan điểm cơ bản của tôi là các công thức dùng để giải quyết vấn đề và cấu trúc dữ liệu, dù không phải là thứ mà bạn sẽ dùng hàng ngày trong công việc lập trình web của mình, vẫn thể hiện được nhiều khía cạnh về thực lực của bạn, ví dụ như khả năng suy nghĩ theo logic, khả năng truyền đạt dòng chảy suy nghĩ, khả năng thay đổi từ việc sử dụng một phương án mạnh bạo nhưng chưa hẳn là tối ưu chuyển sang thực thi một phương án đã được nghiên cứu kĩ và được đánh giá là hoàn thiện nhất, khả năng tự suy nghĩ tự hành động, và nhiều khía cạnh khác nữa.

Thay vì đi vào cuộc tranh luận kéo dài về chủ đề này, tôi sẽ kết thúc nó bằng cách nói đơn giản: Hãy nghiên cứu những thuật toán và cơ sở dữ liệu. Đúng vậy, một số công ty đã đưa ra quy trình phỏng vấn với tính thực tiễn cao hơn, tuy nhiên một điều không may rằng, đa phần các công ty hiện nay vẫn áp dụng những mô hình cũ. Điều này là hoàn toàn đúng ngay cả khi bạn chỉ đi phỏng vấn tại một công ty khởi nghiệp non trẻ.

Đây là một vài nguồn yêu thích và tin cậy được tôi sử dụng để tìm hiểu thêm về các thuật toán và cấu trúc dữ liệu:  Cracking the Coding Interview, HackerRank, LeetCode, and Interview Cake.

5.8. Những lời khuyên chung

Hãy là một người thân thiện trong suốt buổi phỏng vấn. Bạn sẽ vô cùng ngạc nhiên với những gì điều đó mang lại đấy! Người phỏng vấn không chỉ tìm kiếm những người có khả năng về kỹ thuật mà bên cạnh đó họ cũng mong chờ một người có thể khiến họ muốn cùng làm việc.

Hãy tự tin vào khả năng của bản thân. Bạn có thể không biết mọi thứ về lập trình, nhưng bạn biết bạn có thể làm tốt những gì, giá trị mà bạn mang lại là gì và cái cách mà bạn truyền đạt lại những giá trị đó cho những người khác. Điều đó cho thấy bạn tin tưởng vào khả năng của mình trong việc đóng góp cho công ty.

Hãy thật sự quan tâm đến những vấn đề mà công ty nơi bạn đến phỏng vấn đang gặp phải. Hãy hỏi những câu hỏi nhằm kích thích sự suy nghĩ về doanh nghiệp, về nhớm làm việc, về tương lai của bộ phận kỹ thuật và những vấn đề mà họ mong muốn giải quyết. Thể hiện sự quan tâm của bạn về công ty (tất nhiên là nếu bạn không quan tâm đến công ty thì bạn sẽ không lựa chọn nộp đơn xin việc).

Nếu có thể, hãy tìm kiếm một sự giới thiệu từ một người mà công ty bạn muốn ứng tuyển biết và tin tưởng.

Đừng chấp nhận lời đề nghị đầu tiên mà họ dành cho bạn (trừ khi đó chính là công việc mơ ước của bạn). Thúc đẩy bản thân để có thể nhận được nhiều hơn nữa. Việc tìm kiếm công việc chỉ diễn ra một lần trong vòng từ 2-5 năm, nhưng hệ quả quá trình đó ảnh hưởng đến cuộc sống hàng ngày của bạn, vậy thì hãy bỏ ngay công việc đó và tìm kiếm một công việc mà bạn thấy hứng thú.

Ai mà biết được. Bạn có thể chỉ kết thúc việc tìm kiếm đó khi mà bạn đã tìm được công việc mơ ước của mình.

6. Điều gì tiếp theo?

Phewww. Giờ đây tôi đang làm kỹ sư toàn thời gian tại Coinbase và tôi hoàn toàn hài lòng với nó, điều gì tiếp theo? Liệu như thế đã đủ chưa?

Tuyệt nhiên không. Tôi còn nhiều hơn nữa những thứ mình muốn học và có quá nhiều thứ muốn giải quyết. Lập trình có thể đem đến một cuộc sống đầy thú vị, thậm chí trước khi bạn lén nhìn dưới lớp vỏ bọc tất cả những quy tắc/bài học thú vị mở ra cho các kỹ sư phần mềm.

Dưới đây là một số cách mà tôi đặt ra để tiếp tục duy trì việc học tập của bản thân:

  • Theo dõi những cuộc bàn luận/trò chuyện diễn ra xoay quanh dự án mã nguồn mở yêu thích của mình. Và khi tôi cảm thấy thoải mái/ muốn chia sẻ, tôi sẽ chủ động tham gia và đóng góp.
  • Tiếp tục phát triển mạng lưới/ mối quan hệ chuyên nghiệp của mình - thông qua Twitter, mã nguồn mở, những cuộc gặp gỡ... - và sau đó phát triển từ chính mạng lưới/ mối quan hệ của mình. Có rất nhiều các nhà phát triển tài giỏi phi thường ở ngoài kia, những người sẵn sàng giúp đỡ và cố vấn cho chúng ta. Tôi muốn được gặp và học hỏi từ họ.
  • Dạy cho những người khác thông qua những bài viết trên blog và các bài thuyết trình tại những hội nghị và những cuộc gặp gỡ tại địa phương.
  • Tìm ra những người cố vấn về kỹ thuật và phi kỹ thuật và thường xuyên có những cuộc trò chuyện với họ. Hỏi xin lời khuyên từ họ. Áp dụng những kinh nghiệm trong quá khứ của họ để có thể đưa ra những quyết định trong tương lai của bản thân.
  • Đọc sách về lập trình và tham gia những khóa học trực tuyến về khoa học máy tính vào thời gian rảnh.
  • Quan trọng nhất là đừng bao giờ tự hài lòng với bản thân mình.

7. Nhìn về phía trước

Looking forward

Đã có rất nhiều phần thay đổi trong quá trình chuyển đổi công việc của tôi. Điều đó không hề dễ dàng.

Tuy nhiên, không có một ngày nào mà tôi cảm thấy hối hận về điều đó. Trên thực tế, mỗi ngày trôi qua, tôi cảm thấy tự tin hơn rằng đây chính xác là những gì tôi cần.

Có kỹ năng để xây dựng 1 sản phẩm chính là niềm tự do mà tôi đang tìm kiếm. Christopher Nguyen đã đúng khi anh ấy nói với tôi sự can đảm quan trọng hơn kinh nghiệm. Nếu bạn tin vào giấc mơ của mình và bạn sẵn sàng thức khuya hàng đêm và làm việc chăm chỉ, bạn có thể làm bất cứ điều gì.

 

       Người dịch: Hà Chi.

Nguồn: medium.com.