Tôi Đã Trở Thành Lập Trình Viên Trong 9 Tháng Như Thế Nào?
Ở bài viết này, tôi sẽ chia sẻ lộ trình mà tôi đã đi từ môt người chẳng biết tí gì để trở thành một kỹ sư phần mềm lương 7 số 0 chỉ trong 9 tháng bằng cách tự học và vẫn đi làm full-time.
Và mặc dù hoàn cảnh của mỗi chúng ta là khác nhau, khả năng học tập và tiếp thu kiến thức cũng khác nhau nên có thể những kinh nghiệm này của tôi chẳng thể áp dụng lên bạn được, tôi vẫn hi vọng rằng nó thể truyền đến bạn một chút cảm hứng và đóng góp dù chỉ một chút vào sự thành công sau này của bạn.
Tóm tắt một chút về bản thân tôi
9 năm trước, khi còn học trung học, tôi đã tham gia khóa học Visual Basic for Applications (VBA). Trong khóa học kỹ sư hồi năm nhất đại học (7 năm trước), tôi đã học một chút về C, Python, Matlab và Labview. 3 năm trước, tôi tốt nghiệp đại học loại giỏi với bằng kỹ sư hóa học với điểm trung bình khá. Ngoài ra, tôi không học thêm thêm bất kỳ chương trình nào khác bên ngoài cho đến năm ngoái.
Sau khi tốt nghiệp đại học, tôi trở thành Kỹ sư Quy trình tại một nhà máy lọc dầu và làm việc ở đó cho đến khi chuyển nghề sang Kỹ sư phần mềm.
Tại sao tôi lại muốn chuyển nghề?
Mặc dù rất thích làm về kỹ thuật, nhưng tôi biết một lúc nào đó mình sẽ muốn tham gia vào thế giới kinh doanh / khởi nghiệp. Tôi luôn giữ ý nghĩ về một tấm bằng MBA trong đầu, nhưng mỗi khi nhìn vào học phí của các trường đại học hàng đầu, sự quan tâm của tôi lại giảm dần.
Vào ngày 27 tháng 5 năm 2017, trong lúc đang mò mẫm trên mạng để tìm hiểu về MBA, tôi lại bắt gặp một vài bài viết về Kĩ sư phần mềm và nhận ra rằng đây có thể là một hướng đi phù hợp với mình.
Nhu cầu về kỹ sư phầm mềm đang ngày càng tăng, mức lương cao và đây là ngành công nghiệp hoàn hảo để từ đó tham gia vào thế giới khởi nghiệp mà không cần nhiều vốn ban đầu. Tất cả những gì bạn cần là một chiếc máy tính và cơ hội của bạn là vô hạn.
Tôi cũng đọc về rất nhiều người khác đã bỏ việc, toàn tâm toàn ý học về lập trình. Nhưng sau khi cân nhắc kỹ càng, tôi cho rằng mình hoàn toàn có thể tự học nếu tập trung mà không cần bỏ dở công việc hiện tại. Có thể bạn sẽ cảm thấy điều này là quá sức với mình nhưng tôi xin được nhắc lại 1 lần nữa, xét trên những điều kiện của cá nhân tôi, về khả năng học tập, tình trạng công việc hiện tại… thì tôi cảm thấy mình hoàn toàn có thể song song vừa học vừa làm được mà không gặp quá nhiều khó khăn. Mặc dù bản thân tôi cũng đã tự chuẩn bị tinh thần xấu nhất là nếu không thể, tôi cũng sẵn sàng chấp nhận việc nghỉ làm và tham gia một vài lớp học nào đó.
Mục tiêu
Bạn cần phải có một mục tiêu, đặc biệt nếu bạn đang cố gắng học trong vẫn đang đi làm. Học mà không có áp lực từ bên ngoài thì sẽ dễ dàng hơn nhiều, nhưng đang đi làm thì lại khác. Vì vậy, bạn cần tạo áp lực bên trong. Mục tiêu của bạn nên đơn giản và có định lượng và được nên thực hiện đủ nghiên cứu để đưa ra mục tiêu hợp lý.
Mục tiêu của tôi khi đó là:
Nhận một công việc kỹ sư phần mềm trong vòng một năm với mức lương tương đương hoặc cao hơn mức lương hiện tại.
Kế hoạch
Khi đã có mục tiêu, bạn cần có kế hoạch để có thể đạt được mục tiêu đó. Tuy rằng không thể có người 100% ở tình huống giống bạn, nhưng bạn có thể tham khảo một số người có kinh nghiệm để lấy lời khuyên. Kế hoạch của tôi sau khi cân nhắc kĩ càng, cuối cùng như sau:
- Tham gia khóa học Tổng quan về CS để có được hiểu biết cơ bản vững chắc về các khái niệm CS cốt lõi
- Theo dõi các kênh học lập trình online cho đến khi tôi có thể tự mình xây dựng các ứng dụng web full-stack
- Refactor để clean code, thêm thử nghiệm, tập trung vào các khái niệm nâng cao
- Đóng góp vào nguồn mở
- Chuẩn bị cho các cuộc phỏng vấn xin việc
Để bắt đầu, kế hoạch của tôi rất đơn giản. Vào thời điểm đó, tôi nghĩ mình sẽ làm theo Hướng dẫn kỹ thuật của Google, vì vậy tôi bắt đầu với khóa học giới thiệu được đề xuất của họ, Udacity CS101.
Tháng 0 - Udacity CS101, Harvard CS50
Việc đưa ra quyết định lớn này đã mang lại cho tôi rất nhiều năng lượng. Mỗi khi đi làm về, tôi thường ngồi vào bàn và bắt đầu code ngay, liên tục mỗi ngày và kể cả thứ 7, chủ nhật. Udacity CS101 có tính năng theo dõi tỷ lệ phần trăm hoàn thành khá hữu ích và trở thành thang đo cũng như động lực để tôi biết mình đang làm được những gì. Tôi ghi lại phần trăm hoàn thành của mình mỗi ngày sau khi code. Tôi đã hoàn thành 75% đầu tiên trong 10 ngày. 25% cuối cùng nặng về đệ quy, và nó khó hơn một chút. Nói chung, tôi đã mất 20 ngày để hoàn thành Udacity CS101.
Trong khi sử dụng Udacity CS101, tôi đã bắt đầu đọc khá nhiều subreddit về chương trình học lập trình và thấy được rằng để có thể kiếm được một công việc ngon nghẻ, những người tự học như tôi cần năng động hơn trên mạng xã hội để không bỏ lỡ cơ hội của mình. Tôi quyết định tạo các tài khoản Twitter, Reddit, Stack Overflow, Medium và Quora mới bằng cách sử dụng tên đầy đủ của mình để có thể xây dựng tên tuổi và kết nối nhiều hơn với mọi người.
Ngoài ra, tôi quyết định hạn chế tham gia các MXH gây mất tập trung như Instagram, Facebook và các subreddits không liên quan tới lập trình. Tôi sẽ chỉ kiểm tra điện thoại của mình để tìm tin tức và bài đăng liên quan đến lập trình. Điều này rất quan trọng trong việc đảm bảo rằng tôi đang tìm hiểu về các lộ trình học tập và tài nguyên học tập tốt nhất. Chính vì điều này mà tôi đã tìm hiểu về Harvard CS50 trên edX.
Ban đầu tôi chỉ định học một khóa căn bản, nhưng mọi người hầu như đều đánh giá cao Harvard CS50 nên tôi quyết định đi sâu vào khóa học tiếp theo. Sinh viên CS tại các trường ĐH, CĐ khác nói rằng học còn học được nhiều từ kháo học này hơn 1-2 năm học tại trường và tất cả đều đồng ý rằng khóa học này tuy khó nhưng cực kì đáng giá. Đến cuối Tháng 0, tôi đã hoàn thành 5 bài giảng đầu tiên và bài tập về nhà.
Tháng 1 - Harvard CS50, Linux, Cuộc gặp gỡ đầu tiên, freeCodeCamp
Tôi đã hoàn thành CS50 trong khoảng nửa tháng. Cá nhân tôi cho rằng đây là một khóa học tuyệt vời. David Malan là một giảng viên xuất sắc và giàu kinh nghiệm. Bạn sẽ được bắt đầu bằng C, chuyển sang Python, và sau đó kết thúc với phát triển web. Tuy khóa học khá nặng, nhiều kiến thức, nhưng tôi nghĩ rất xứng đáng.
Sau CS50, tôi quyết định cài đặt XPS 15 của mình để chạy song song Windows và Ubuntu. Nhưng sau khi làm rối tinh rối mù mọi thứ, tôi quyết định từ bỏ Windows và chỉ sử dụng Ubuntu. Tôi muốn buộc bản thân phải làm quen với dòng lệnh và tôi nghĩ phương pháp này cũng đã hiệu quả ở một mức độ nào đó, nhưng tôi vẫn còn một chặng đường dài phía trước.
Tôi bắt đầu 100 ngày code liên tục để đảm bảo rằng tôi luôn tập trung và hình thành thói quen code mỗi ngày. Điều quan trọng lúc này là phải ghi lại tiến trình của bạn. Mỗi ngày, có thể bạn chẳng thấy mình tiến bộ nhiều nhưng khi nhìn lại một tháng hoặc vài tháng, bạn sẽ nhận ra rằng bạn đã thực sự tốt lên đáng kể và điều này trở thành nguồn động lực rất lớn để bạn có thể tiếp tục.
Tôi biết rằng nếu không có những mối quan hệ sẽ rất khó để mình tiến xa, vì vậy tôi thu hết can đảm để tham gia những buổi gặp mặt giữa các LTV. Tôi chưa bao giờ đến bất kỳ buổi gặp mặt nào chứ đừng nói đến một buổi gặp mặt LTV. Tôi lo lắng đến mức sau khi lái xe đến đó, đỗ xe, và bước tới cửa, tôi gần như muốn quay lại và về nhà.
Nhưng sau khi đến nơi, tôi nhanh chóng nhận ra rằng không có lý do gì để lo lắng. Không ai biết nhau, không ai phán xét, và mọi người đều ham học hỏi. Đây là sự khởi đầu của một buổi gặp mặt. Tôi đã tham dự hơn 50 cuộc gặp gỡ trong 9 tháng.
Tôi rất vui vì tôi đã bắt đầu đi gặp mặt sớm. Hầu hết mọi người chỉ bắt đầu tham gia các buổi gặp mặt khi họ đang tìm kiếm một công việc, nhưng tại thời điểm đó thì gần như đã quá muộn. Có rất nhiều lý do để bắt đầu sớm:
- Việc phát triển các mối quan hệ cần nhiều thời gian. Bắt đầu sớm có nghĩa là bạn có các mối quan hệ có thể đảm bảo cho bạn khi tìm việc sau này.
- Nói về lập trình với người lạ là một cách tuyệt vời để chuẩn bị cho các cuộc phỏng vấn
- Bạn có thể tìm hiểu các frameworks, công cụ và tài nguyên học tập mới từ những người đi trước bạn. Điều này có thể ảnh hưởng đến kế hoạch học tập sau này của bạn.
Có một số điều không chắc chắn vào thời điểm này trong hành trình học code. Đây là lúc tôi cần quyết định cụ thể hơn con đường của mình: Tôi sẽ làm về lĩnh vực nào?
Cuối cùng, tôi chọn phát triển web vì có vẻ như nhu cầu cao và cũng có nhiều tài nguyên trực tuyến. Một số người khuyên rằng ở giai đoạn này, tôi nên nghĩ về các ứng dụng web mà tôi muốn xây dựng và sau đó bắt đầu sử dụng. Một số người đã đề xuất Odin Project hoặc freeCodeCamp.
Người điều hành buổi gặp mặt hàng tuần mà tôi đang tham dự biết Ruby và muốn thực hiện các dự án với Ruby. Đây là một lý do lớn khiến tôi quyết định tham gia vào Odin Project.
Nhưng sau hai ngày tôi từ bỏ ý định đó.
Đó là một trong những mặt trái của việc đi theo con đường tự học. Một phút bạn nghĩ rằng bạn biết mình nên đi con đường nào, nhưng rồi ngày hôm sau bạn tự hỏi liệu đó có phải là bước đi đúng đắn hay không.
Tôi đọc được rằng Ruby ít được ưa chuộng, các công việc yêu cầu Ruby cũng không nhiều, vì vậy tôi đã bắt đầu sử dụng freeCodeCamp. Một điều khiến tôi bận tâm về freeCodeCamp là bên đó đưa ra các ý tưởng dự án, vì vậy người dùng lại thường thực hiện các dự án giống nhau. Điều này khiến tôi khá quan ngại vì nếu ai cũng như ai thì thật khó lòng trở lên nổi bật với các nhà tuyển dụng. Tuy nhiên, tôi đã yêu thích freeCodeCamp và bây giờ tôi thực sự khuyên bạn nên sử dụng nó.
Tháng 2 - YDKJS, Front End, React
Tôi bắt đầu đọc You Don’t Know JavaScript, vì mọi người đã giới thiệu nó để bổ sung cho freeCodeCamp. Tôi đã phải đọc lại một số phần vì nó khá dày đặc, nhưng đó là một nguồn tài nguyên hoàn hảo để tìm hiểu về tất cả các phần khó nhằn của JavaScript.
Tôi đã hoàn thành phần front-end của freeCodeCamp. Việc lên checklist và bám sát lội tình đã đỉnh a khiến tôi hoàn thành kế hoạch mà không gặp quá nhiều khó khăn. Tôi cũng rất muốn chuyển sang phần tiếp theo và tìm hiểu React. Tuy nhiên, điều này cũng đòi hỏi dự án của tôi phải có một hình thù nhất định. Bởi thế, tôi đã quyết định học thêm về CSS.
Bước tiếp theo là học React, và tôi đã khá hứng thú.
Lúc đó, tôi đã nghe rất nhiều về React và cảm thấy muốn học ngay lập tức. Tuy nhiên, tôi cũng đã gặp kha khá những khó khăn. Học React tương đối khó, và lúc tôi học thì lại chẳng có nhiều tài liệu hướng dẫn.
Tôi đã thử đọc tài liệu và làm theo hướng dẫn Tic-Tac-Toe của Facebook, nhưng tôi không hiểu hết. Mọi người nói rằng đó là bởi vì tôi chưa hiểu đủ về JavaScript. Vì vậy, sau đó tôi quay lại đọc You Don’t Know JavaScript, nhưng một lần nữa nó trở nên quá tải đối với tôi.
Tháng 3 - React, CodeClub, bắt đầu học Back End
Cuối cùng, tôi quyết định sẽ tự mò mẫm theo cách của mình thông qua các dự án React của FreeCodeCamp. Mặc dù đống code lúc đó của tôi như cái rẻ rách, nhưng nó đã giúp tôi hiểu về React tốt hơn một chút.
Buổi họp mặt mà tôi đã tham dự hàng tuần đã quyết định sẽ xây dựng các dự án với JavaScript thay vì Ruby và họ quyết định rằng dự án đầu tiên sẽ xây dựng một trang web cho nhóm họp mặt, CodeClub.Social.
Tôi đã phát triển thẻ bằng cách sử dụng API React và Meetup cho phép người dùng đăng ký ba buổi gặp mặt tiếp theo từ trang web của chúng tôi. Tôi hơi khó khăn khi tạm dừng freeCodeCamp để thực hiện việc này, nhưng đó là cơ hội mà tôi không thể bỏ qua. Tôi rất vui khi được làm việc trong một dự án với một nhóm nhỏ. Nó cũng giúp tôi học Git và Github.
Cuối tháng, tôi bắt đầu học phần back end của freeCodeCamp.
Tháng 4 – Kết thúc phần Back End, Yeggle
Tôi đã làm việc thông qua tất cả các dự án API trong freeCodeCamp, nhưng tôi bắt đầu đi chệch hướng khỏi freeCodeCamp tại dự án Image Search Abstraction Layer.
Tôi rất muốn làm các ứng dụng web full stack, nên ngay khi nhìn thấy tiêu đề của dự án này, tôi đã lên ý tưởng cho dự án của riêng mình. Tôi sẽ tạo một node app lưu trữ các URL imgur ngẫu nhiên trong database, sau đó làm phần frontend để xuất ra một số lượng hình ảnh ngẫu nhiên do người dùng chỉ định. Những gì mọi người nói đều đúng: bạn làm việc chăm chỉ hơn và thành công hơn khi bạn đang thực hiện một dự án do chính bạn lên ý tưởng.
Một khi tôi bắt đầu làm việc, tôi rất tự hào về bản thân. Tuy nó xấu xí và cục mịch, nhưng nó hoạt động.
Khi làm việc thông qua freeCodeCamp, tôi đã tìm hiểu về những dự án nào sẽ nằm trong khả năng của mình. Vào thời điểm đó, tôi thường xuyên chạy bộ, vì vậy tôi sẽ đưa ra những ý tưởng về những lần chạy của mình và viết chúng ra giấy khi về nhà. Bằng cách đó, tôi sẽ có một danh sách các ý tưởng dự án khi tôi đã sẵn sàng.
Cuối cùng, tôi đã cảm thấy sẵn sàng để bắt đầu tạo các ứng dụng web để chia sẻ với người dùng và đưa vào portfolio. Tôi đã rất sẵn sàng để bắt đầu.
Khi tìm kiếm một nhà hàng mới, tôi luôn thấy mình mở Yelp để kiểm tra các bài đánh giá, sau đó mở Maps để kiểm tra các bài đánh giá của họ. Điều gì sẽ xảy ra nếu tôi tạo một ứng dụng so sánh cả hai bên cạnh nhau?
Vì vậy, tôi đã thực hiện Yeggle. Tôi đã sử dụng Node / Express / React cùng với API Google Maps và Yelp. Có một vài trở ngại mà tôi không nghĩ mình sẽ vượt qua được, nhưng cuối cùng thì tôi đã hoàn thành và rất tự hào về ứng dụng của mình. Sau đó, tôi đăng nó lên Reddit, nhưng chẳng ai quan tâm. Đó là một chút ngớ ngẩn, nhưng tôi không để nó làm tôi thất vọng.
Tháng 5 - StockIT
Tôi đã không làm được nhiều việc trong tháng này bởi kỳ nghỉ hai tuần ở Nhật Bản và Thái Lan.
Nhưng tôi đã bắt đầu và hoàn thành dự án tiếp theo của mình. Tôi hiểu rằng để kiếm được 1 công việc ngon nghẻ là rất khó khăn, vì vậy tôi nghĩ mình cần phải làm điều gì đó độc đáo. Tôi nhớ một trò chơi đồ thị chứng khoán Dow Jones đang hot, bạn có một cơ hội để mua và một cơ hội để bán, và mục tiêu là làm sao để có lãi.
Ý tưởng của tôi là tạo ra một trò chơi tương tự như vậy, nhưng thay vì thị trường, bạn sẽ chơi với một thuật toán machine learning. Vì vậy, tôi đã tạo StockIT. Tôi đã xem một video hướng dẫn về Pandas và Scikit Learn bao gồm nhiều kỹ thuật machine learning. Ban đầu tôi muốn thực hiện một số kỹ thuật deep learning thú vị, nhưng tôi nhận ra rằng điều đó tốn nhiều dữ liệu và thời gian hơn tôi muốn.
Thay vào đó, tôi mắc kẹt vào một mô hình hồi quy tuyến tính đơn giản. Tôi nghĩ đó sẽ là một phần khó khăn, nhưng không phải vậy. Bắt D3 làm quen với React là một phần khó nhằn. Cả hai thư viện đều muốn kiểm soát DOM. Có một số thư viện khác giúp tham gia cả hai, nhưng tôi cảm thấy chúng quá cồng kềnh. Tôi đã kết thúc bằng cách sử dụng D3 để tạo SVG và React để xử lý DOM và nó hoạt động khá tốt.
Lần này khi tôi chia sẻ nó với Reddit, mọi người đều yêu thích nó! Những sự ủng hộ này khiến tôi tự tin hơn rất nhiều.
Tháng 6 - jobSort(), Chuẩn bị Tìm việc
Sau StockIT, tôi bắt tay ngay vào dự án cá nhân tiếp theo của mình. Tôi muốn tạo một bảng việc làm tổng hợp các trang web danh sách việc làm tập trung vào công nghệ nhỏ hơn như Stack Overflow, Github và Hacker News. Để thêm những điểm độc đáo vào sản phẩm của mình, tôi quyết định sắp xếp dựa trên các công nghệ mà người dùng muốn trong một công việc và mức độ của từng loại.
Ví dụ: giả sử tôi đang tìm kiếm một công việc yêu cầu JavaScript, React, nếu biết thêm Python là 1 lợi thế, trong khi đó tôi thực sự muốn làm việc với JavaScript và React nhưng tôi không quan tâm lắm đến Python. Sau đó, tôi có thể cho JavaScript là 3, React 3 và có thể Python là 1. Nhấn nút tìm kiếm và danh sách sẽ được sắp xếp dựa trên thứ tự hợp lý.
Tôi đã gặp phải nhiều trở ngại với dự án này và phải thay đổi hướng đi đôi lần, nhưng cuối cùng tôi đã có được sản phẩm hài lòng. Sản phẩm cuối cùng của tôi là React/Node/Express/MySQL.. Tôi đã đăng dự án lên subreddit cscareerquestions và nhận được 650 lượt xem trước khi nó bị gỡ xuống vì họ không cho phép các dự án cá nhân.
Vì các vấn đề của tôi, jobSort() đã chiếm một phần kha khá trong thời gian. Tôi đã đi uống cà phê với một người bạn mà tôi đã gặp trong buổi gặp mặt nhóm code đầu tiên, và anh ấy khuyên tôi nên bắt đầu xin việc ngay bây giờ. Tôi đọc khắp nơi thấy ai cũng nói đợi nộp hồ sơ lâu quá. Ngoài ra, bất cứ khi nào tôi thấy một bài đăng hỏi thời điểm nộp đơn, nhận xét hàng đầu luôn là “bây giờ”.
Trong đầu, tôi luôn nghĩ rằng mình sẽ làm đầy portfolio với các dự án cá nhân, sau đó làm việc với các đóng góp nguồn mở, sau đó chuẩn bị cho các cuộc phỏng vấn và cuối cùng là bắt đầu nộp đơn xin việc. Người bạn này đã thuyết phục tôi từ bỏ kế hoạch đó và bắt đầu gửi hồ sơ ứng tuyển. Vì vậy, tháng này tôi đã bắt đầu làm portfolio và sơ yếu lý lịch. Tháng sau tôi sẽ bắt đầu nộp đơn.
Tháng 7 - Testing, Tìm việc
Tháng này, tôi tập trung vào việc chuẩn bị các dự án của mình và nộp đơn xin việc. Tôi cũng muốn học test và Redux.
Tôi đã thêm flexbox vào CodeClub.Social để làm cho nó phản hồi. Tôi đã cải thiện UX di động trên jobSort(). Tôi đã thêm thử nghiệm vào jobSort () với mocha/chai /enzyme – những thứ rất khó thiết lập, dễ bắt đầu và sau đó khó có được mức độ phù hợp 100%.
Đến cuối tháng, tôi đã nộp đơn vào 63 công việc. Tôi đã xem đây như một sự tự đánh giá. Portfolio / sơ yếu lý lịch của tôi đã đủ tốt chưa? Nếu vậy, tôi cần phải làm gì để chuẩn bị cho các cuộc phỏng vấn?
Lúc đầu, tôi đã nộp đơn nhanh chóng và không cá nhân hóa sơ yếu lý lịch/thư xin việc của mình. Sau đó, tôi quyết định cá nhân hóa thư xin việc và sơ yếu lý lịch của mình, sau đó cố gắng gửi email cho một người nào đó từ công ty. Phương pháp này rõ ràng là tốt hơn so với cách tiếp cận hời hợt như trước.
Tôi đã nhận được năm cuộc gọi trong tháng đó - hai từ các công ty tuyển dụng và ba từ các công ty phần mềm bao gồm:
- Một DevOps hợp đồng/Testing tại một công ty dotcom
- Một công ty phân tích thực phẩm chuỗi
- Một công ty khởi nghiệp khá lớn và thành công gần đây đã được mua bởi một tập đoàn lớn
Tôi đã vượt qua màn phỏng vấn online của trong hai trong số này, nhưng không nơi nào hẹn tôi tới phỏng vấn trực tiếp. Dù thế, tôi cũng đã khá hài lòng với ba cuộc gọi và tôi đã học được rất nhiều điều từ họ.
Mọi người thường nói rằng các LTV mới không nhất thiết phải biết mọi thứ ngay từ đầu, họ chỉ cần đam mê và hứng thú học hỏi. Vì vậy, tôi nghĩ chắc mọi thứ cũng sẽ khá dễ dàng. Tôi đam mê và hứng thú học hỏi. Tuy nhiên, những gì tôi học được từ những cuộc gọi này là không ai tìm kiếm một LTV như thế cả. Họ mong đợi bạn biết những gì bạn đang làm từ ngày đầu tiên.
Những cuộc gọi này đã dạy tôi rằng tôi cần phải:
- Đủ tốt để có thể tạo ra giá trị từ ngày đầu tiên
- Đủ tự tin để thuyết phục họ rằng tôi có thể tạo ra giá trị ngay từ ngày đầu tiên
Tháng 8 - Night Shift, Redux, Nguồn mở, Phỏng vấn trực tiếp
Tháng này, tôi bắt đầu làm việc ca đêm trong 40 ngày với công việc toàn thời gian của mình - 6 ngày một tuần, 12 giờ một ngày, 5 giờ chiều đến 5 giờ sáng. Thật sự kinh khủng.
Tôi biết mình sẽ không thể hoàn thành nhiều việc trong tháng này, nhưng tôi có một mục tiêu và tôi muốn đạt được nó, vì vậy tôi không thể nghỉ một tháng.
Tôi đã cấu trúc lại jobSort để sử dụng Redux, điều đáng ngạc nhiên là không khó như tôi nghĩ. Tôi đã nghe rất nhiều podcast và đọc các bài đăng trên blog, và mọi thứ dường như chỉ trở nên dễ hiểu cho đến khi tôi bắt đầu sử dụng nó.
Tôi thực sự thích luồng dữ liệu với Redux. Thật thú vị khi thấy mọi người phàn nàn về Redux. Tôi không nghĩ mình đủ điều kiện để phản bác ý kiến của mình một cách mạnh mẽ, nhưng tôi thích mô hình rút gọn.
Đây được coi là tháng của mã nguồn mở đối với tôi. Tôi sẽ đóng góp mã nguồn mở đầu tiên của mình, và đó sẽ là một đóng góp tuyệt vời cho một thư viện tuyệt vời. Tôi sẽ đóng góp cho React!
Mọi người đều nói rằng đó là một codebase thậm chí còn khó đọc chứ đừng nói đến đóng góp. Nhưng tôi cần phải nổi bật, tôi cần phải độc đáo. Tôi biết rằng đóng góp của tôi sẽ không đáng kể, nhưng tôi vẫn muốn làm điều đó.
Tôi sẽ bắt đầu bằng cách đọc toàn bộ tài liệu và sau đó chuyển qua codebase. Theo dõi mọi vấn đề, mọi bài PR. Đọc qua toàn bộ tài liệu React là một bài tập tuyệt vời và tôi rất vui vì đã làm được. Nhưng tôi nhanh chóng nhận ra rằng vấn đề khi đóng góp cho React đó là không có nhiều vấn đề quan trọng và nếu có thì chúng thường được giải quyết nhanh chóng.
Tại một trong những buổi gặp mặt mà tôi đã tham dự, một người bạn đã khuyên tôi nên dùng thử Downshift, một thư viện tự động hoàn thành của Kent C. Dodds. Đây thật sự là một sự thay đổi giá trị. Độ khó phù hợp, đúng số lượng vấn đề cần trợ giúp, không có quá nhiều cộng tác viên, người bảo trì siêu hữu ích, mã đã được kiểm tra tốt. Trên hết, nó là một giải pháp hoàn hảo cho một số vấn đề mà tôi đang gặp phải với ứng dụng jobSort() của mình.
Khoảng nửa tháng, tôi nhận được email từ một trong những công ty tôi đã nộp đơn vào tháng trước. Họ thiết lập màn hình điện thoại ban đầu, sau đó là màn hình điện thoại kỹ thuật. Các công nghệ họ đang tìm kiếm chính là những gì tôi đã học - React, Redux và D3. Tôi hầu như chỉ nói về các dự án của mình và tại sao tôi lại đưa ra những quyết định nhất định. Sau đó, họ yêu cầu tôi đến công ty để phỏng vấn. Cuộc phỏng vấn trực tiếp đầu tiên của tôi!
Tôi đã không chuẩn bị gì cho các cuộc phỏng vấn, vì vậy tôi đã chuẩn bị sẵn tâm lý rằng rất có thể mình sẽ không nhận được công việc, nhưng chắc chắn sẽ có được kinh nghiệm phỏng vấn quý giá. Tôi cũng đã ngủ ba tiếng đồng hồ vì tôi vẫn làm ca đêm, điều đó chẳng ích gì. May mắn thay, phần kỹ thuật không phải là phần viết bảng trắng, chỉ là một phiên lập trình cặp kéo dài một giờ. Đó là một thử thách khá đơn giản, nhưng tôi rất lo lắng.
Lúc đầu, tôi lo lắng về việc đảm bảo rằng mình biết mọi thứ mà không cần tra cứu. Khi tôi nhận ra rằng mình sẽ không hoàn thành thử thách, tôi nhận ra rằng tôi cần ngừng lo lắng về những gì người phỏng vấn nghĩ và chỉ cần google / stackoverflow để tìm câu trả lời. Cuối cùng, tôi cũng đã không thể hoàn thành và nghĩ rằng mình đã thất bại thảm hại.
Vì nghĩ rằng mình đã thất bại khi làm bài test, tôi cảm thấy thoải mái hơn trong phần còn lại của cuộc phỏng vấn. Cuối cùng, tôi đã rời cuộc phỏng vấn với tư thế ngẩng cao đầu. Trường hợp tệ nhất thì tôi vẫn có được một số kinh nghiệm phỏng vấn quý giá, và trường hợp tốt nhất là tôi nhận được lời mời làm việc đầu tiên.
Tháng 9 – Lời mời tuyển dụng
Tôi đã nhận được lời mời làm việc đầu tiên của mình 9 tháng 7 ngày sau cái ngày đầu tiên mà tôi quyết định sẽ đầu tiên đi sâu vào lập trình với ý định thay đổi nghề nghiệp. Tôi cảm thấy tự tin vì tôi đã nhận được lời đề nghị sau cuộc phỏng vấn trực tiếp đầu tiên của mình, nhưng đồng thời, nếu tôi không nhận lời đề nghị, điều gì sẽ xảy ra nếu đây là lời đề nghị duy nhất tôi nhận được trong vài tháng? Cuối cùng tôi đã nhận lời đề nghị và tôi hài lòng với quyết định của mình.
Kết luận
Cho đến thời điểm này, tôi chủ yếu chia sẻ câu chuyện của mình với một số lời khuyên. Rất có thể nếu bạn đang đọc bài viết này, bạn đang nghĩ về việc thay đổi nghề nghiệp hoặc đang học lập trình với ý định thay đổi nghề nghiệp. Tôi hy vọng rằng những lời khuyên dưới đây sẽ giúp bạn lập kế hoạch hoặc kiên định với kế hoạch hiện tại và đạt được mục tiêu của mình.
- Tìm ra động cơ thúc đẩy bạn và sử dụng nó làm lợi thế của bạn. Đối với tôi, checklist là điều không thể thiếu, ghi lại quá trình của tôi và tương tác với các cộng đồng lập trình khác nhau. Nếu bạn không có động lực để đạt được mục tiêu của mình thì bạn sẽ không thể hoàn thành được gì cả.
- Đưa ra mục tiêu và đáp ứng chúng. Tôi cho rằng bạn nên có mục tiêu hàng tháng và thậm chí có thể là mục tiêu hàng ngày. Mục tiêu hàng tháng để đảm bảo bạn đang đi đúng hướng để đạt được mục tiêu chính và mục tiêu hàng ngày để đảm bảo rằng bạn thực sự đạt được tiến bộ hàng ngày. Một chiến lược phù hợp với tôi là thực hiện các mục tiêu hàng ngày của tôi vào đêm hôm trước. Bằng cách đó, bạn không thể làm công việc kém hiệu quả cả ngày và cảm thấy như bạn đã tiến bộ trong khi bạn thực sự không làm được. Nó buộc bạn phải so sánh thành tích hàng ngày với mục tiêu hàng ngày.
- Hãy tham dự buổi gặp mặt trước khi bạn nghĩ rằng mình đã sẵn sàng. Đi gặp mặt có thể cảm thấy đáng sợ, nhưng như tôi đã đề cập ở trên. Nhưng, nhìn chung mọi người đều tốt và sẵn sàng giúp đỡ. Bạn có thể tìm thấy những người không muốn nói chuyện với bạn, nhưng họ là thiểu số và không ai có thể phán xét. Ngoài ra, mọi người đều thích đưa ra lời khuyên (như tôi đang làm ngay bây giờ).
- Đóng góp vào nguồn mở trước khi bạn nghĩ rằng mình đã sẵn sàng. Khi bạn mới bắt đầu lập trình, Github có vẻ như là một nơi đáng sợ mà bạn không bao giờ muốn đến. Nó thực sự rất chào đón những người mới bắt đầu và là một nơi tuyệt vời để tham khảo code và xem code của riêng bạn.
- Bắt đầu xin việc trước khi bạn nghĩ rằng bạn đã sẵn sàng. Điều này thật khó khăn đối với tôi vì tôi nghĩ rằng tôi khác biệt. Tôi nghĩ rằng tôi không cần phải thử xin việc làm gì cả, tôi tự biết khi nào mình sẽ sẵn sàng nộp đơn. Nhưng không phải, luôn có những thất bại chờ bạn phía trước. Bạn không nên quay cuồng và nộp đơn vào 300 công ty trước khi tìm hiểu về các vòng lặp. Nhưng bạn nên biết rằng cách tốt nhất để biết mình cần học gì là áp dụng chúng và làm việc thực sự.
Chúc các bạn thành công!
Nguồn: Medium