Uncategorized

Nghĩa từ khi vào đại học cho đến khi ra trường trở thành iOS Developer.

Sau gần hai năm không viết bài hướng dẫn về lập trình, hôm nay rảnh rỗi, hoài niệm về cuộc sống sinh viên, về đam mê viết blog chia sẻ kiến thức nên hôm nay tôi dành chút thời gian để viết bài. Nhưng nó không phải là bài hướng dẫn về lập trình như mọi lần mà là một về cuộc sống của tôi từ khi lên đại học cho đến khi tốt nghiệp, trở thành một Software Developer.

 

Vì sao tôi chọn ngành Công Nghệ Thông Tin

Thực sự tôi tiếp xúc với máy tính rất muộn phải đến năm lớp 7 tôi mới biết dùng máy tính ở quán NET để nghe nhạc, xem phim, lướt web, Yahoo. Mãi đến năm lớp 12 tôi mới được sở hữu laptop để phục vụ ôn và giải đề đại học, từ lúc có lap tôi thành thạo việc sử dụng máy tính hơn, thậm chí việc cài win đối với tôi dễ như trở bàn tay. Trong những năm cấp 3 tôi được tiếp xúc với những chiếc điện thoại Nokia N72, N73, N95, 5530, 5800,… ( là những chiếc xịn chạy Symbian S60 hồi đó, và đó cũng là thời huy hoàng của Nokia). Tôi mày mò trên các diễn đàn như gocmobilevnzoom để cài đặt các phần mềm, game, tool trên đó, thậm chí là mò mẫn chạy lại phần mềm trên các điện thoại đó. Hồi đó tôi cũng từng đọc qua python nhưng chưa biết gì về lập trình nên cảm thấy như nước đổ lá khoai.

 
Trên tay Nokia N72 huyền thoại.

Cuộc sống 4 năm Đại học như thế nào?

Ba năm cấp ba trôi qua một cách nhanh chóng với nhiều kỷ niệm thời học sinh, sống cùng gia đình, được lo lắng mọi thứ ngoại trừ việc học. Thích ơi là thích. Nhưng tôi lại tốt nghiệp cấp 3 với xếp loại Trung Bình. Thật đáng buồn.

À chợt nhớ ra thời gian ôn thi đại học chúng tôi có nguyên 1 team học online trên hocmai.vn và moon.vn chứ tôi không có đi học thêm gì cả. Tôi ôn Toán, Lý với Thầy Đặng Việt Hùng và Tiếng Anh với cô Vũ Mai Phương trên moon.vn, trước ngày thi 1 tháng tôi đã làm khoảng 10 đề toán và tầm 10 đề Vật Lý. Kết quả, tôi thi tròn 21 điểm và đủ vào đại học.

Vừa vào đại học, tôi cứ nghĩ sống xa nhà sẽ không chịu sự quản lý của gia đình nên rất thoải mái và tự do làm những gì mình thích, ai ngờ lại lạ lẫm với môi trường, con người, rồi có những ngày nhớ nhà kinh khủng. Nói chung là một cuộc sống mới hoàn toàn và đầy thử thách.

Bốn năm học đại học tôi đều ở Kí túc xá Đại Học Quốc Gia. Trong bốn năm đó tôi đã gặp rất nhiều anh chị, bạn bè, trong đó có những người đã làm tôi thay đổi cách suy nghĩ rất nhiều và tôi cảm thấy rất biết ơn. Bốn năm thời sinh viên để lại rất nhiều dấu ấn và kỷ niệm đẹp đối với tôi.

 
Buổi chiều dưới sân KTX khu B (Hướng nhìn từ toàn nhà B1).

Năm nhất vào đại học, tôi may mắn có một nhóm bạn học rất đoàn kết và giúp đỡ lẫn nhau từ ăn ngủ đến cùng nhau cày đồ án suốt bốn năm. Ngoài ra, ở KTX tôi cũng quen khá nhiều bạn từ các trường khác và hầu như ngày nào cũng hẹn gặp nhau đi uống nước A12, ăn vặt chợ đêm, đá cầu, câu lông, guitar dưới sân A19, A20… Nói chung là vui chơi quên việc học, bỏ bê rất nhiều, một phần cũng chưa định hướng được sẽ làm gì và chuyện sau khi ra trường lại càng chưa nghĩ tới. Kết quả kì 1 năm nhất tôi và đám bạn đứa nào cũng rớt môn. Kì 1 tôi tổng kết 5.7/10 rồi kì 2 vẫn chẳng khá hơn chút nào 5.9/10 và tôi đã rớt 2 môn. Cảm giác rớt môn nó khó tả lắm, vừa sợ, có lỗi với ba mẹ vừa thấy hài hước. Tôi đã kết thúc năm nhất với kết quả tệ hại như thế đó, nhưng thực ra tôi cảm thấy không có gì đáng buồn vì quen được nhiều bạn, quen với môi trường đại học và học được nhiều thứ hay ho. Xong năm nhất vẫn biết đôi chút về lập trình căn bản như C, thuật toán, cấu trúc dữ liệu này nọ…

Lên năm 2 tôi giảm bớt thời gian chơi bời mà quan tâm nhiều vào việc học và tham gia các hoạt động thiện nguyện, hoạt động của trường. Trước mắt kì 1 năm 2 tôi tập trung vào các môn cơ bản như hệ điều hành, mạch số, cơ sở dữ liệu, mạng máy tính và trả nợ 2 môn năm nhất, học được thêm nhiều kiến thức mới nhưng tôi vẫn rất mông lung không biết học để làm gì và dùng vào đâu. Đến kì 2 tôi vẫn tập trung nhiều vào việc học, kết quả là từ học kì đó đến khi ra trường kì nào tôi cũng nhận được học bổng để đóng tiền học phí. Cùng thời gian đó tôi gặp anh Trung (khóa trên lớp CNMP2012), đã giới thiệu tôi với một anh bên Gameloft dạy lập trình và chuyên dạy theo hướng low level, sau vài buổi nói chuyện, tìm hiễu kỹ thì tôi liên hệ anh ấy và bắt đầu vào khóa học trong vòng 1 năm. Có lẽ cuộc sống của tôi bắt đầu thay đổi từ đây.

Anh ấy tên là Vinh, cựu sinh viên Tự Nhiên, người thành lập ra trang STDIO.VN và có nhiều năm làm trainer ở Gameloft. Người đã thay đổi suy nghĩ của tôi rất nhiều về cuộc sống, công việc và các mối quan hệ xã hội.

Ở STDIO tôi tham gia 2 khóa học là C/C++ căn bản và lập trình game engine với SDL. Ở khóa học thứ nhất tôi hầu như được học mọi thứ basic về C/C++ và đủ để tự tin phỏng vấn VNG cuối năm 3. Khóa thứ 2 tôi build lại một game engine bằng thư viện SDL từ việc xử lý input cho đến việc render, viết gameloop và xử lý game state, quản lý resource. Qua đó cũng hiểu rõ được những game engine lớn như Cocos2dx hay Unity được xây dựng như nào. Ngoài 2 khóa học thì tôi còn học thêm được về OpenGL (Open Graphics Library) và cũng hiểu được cơ chế mà OS render hình ảnh, các đối tượng lên màn hình như nào. Rồi tôi còn học thêm về Web, biết viết được front end và backend(tôi dùng Codeinighter là framework PHP, sau này có học thêm Laravel). Nói chung hồi đó tôi học rất nhiều thứ mà bây giờ nhìn lại không biết sao mình lại học trâu bò đến vậy. Cũng thời gian đó tôi tập viết blog chia sẻ các bài viết về lập trình. Để viết được một bài viết không phải là dễ dàng, phải chi tiết từ câu chữ, chính tả, rồi nội dung truyền tải, rồi kiến thức phải nắm chắc. Tôi nhớ bài viết đầu tiên của tôi mất tầm một tuần để các editor các chỉnh sửa cho tôi. Nhưng rồi tôi đã quen dần và có 33 bài viết ở STDIO. Các bạn có thể tìm thấy tại đây

Đến thời gian năm 3 thì bắt đầu vào học những môn học chuyển ngành. Ngành Khoa học máy tính như tôi thì sẽ học về máy học (Machine Learning) và xử lý ngôn ngữ tự nhiên (Natural Language Processing). Tôi chọn theo máy học sẽ học về các thuật toán phân lớp(Classification) và các thuật toán gom cụm(Cluster). Nhìn lại các môn học hồi đó đều hay nhưng hồi đó tôi không có hứng thú lắm với chúng vì không biết sẽ làm gì với những thứ đó. Cũng thời gian học ở STDIO tôi thử làm game nhưng không thấy thích thú, làm web cũng vậy, nên thời gian này tôi tập trung thời gian vào học thử Android. Đến cuối năm 2015 VNG có chương trình học bổng cho các trường CNTT trong thành phố, tôi quyết định thử. Sau 1 bài test và 2 bài phỏng vấn tôi đã lọt vào top 30/300 người nhận học bổng của VNG năm đó.

 
VNG Scholarship.

Đầu năm 2016 tôi apply vào Zalo Android Fresher, với kiến thức tôi tích lũy được và sau 2 lần phỏng vấn tôi ứng tuyển thành công. Hầu hết các câu hỏi fresher đều chủ yếu nhắm vào cấu trúc dữ liệu và giải thuật với 1 ít platform nữa. Mình nhớ là có hỏi mấy câu về đệ quy, thuật toán tìm đường và giải thuật tham lam thì phải. Vậy là tôi đi làm từ hồi năm 3, ở Zalo, tôi học được mọi thứ như quy trình làm việc, kiến thức về technical từ các anh mentor, team Server, và follow design từ team Design và fix bug từ QC. Vậy là tôi đã là một Android Developer. Haha.

 
Zalo Team.

Thời gian đó tôi không còn viết blog ở STDIO nữa mà lập ra eitguide.net từ việc mua domain, vps, setup nginx, mysql, ftp,…Mọi thứ tôi đều tự làm để dựng nên eitguide.net. Tôi chủ yếu viết về lập trình là chính. Đó là blog cá nhân của tôi. Hiện tại đã có hơn 120 bài viết về lập trình Android, Flutter, OpenCV…

Kì 1 năm 4 tôi vẫn làm ở Zalo vẫn công việc quen thuộc là một Android Fresher thôi. Hằng ngày đều bắt 2 chuyến xe buýt để tới VNG, tính tổng thời gian đi đi đi về mất tầm 2 tiếng, đa phần thời gian ngồi trên xe buýt thì nghe nhạc, nghe tiếng anh rồi ngủ gật luôn. Về đến phòng là mệt rã rời, nhưng luôn cảm thấy vui vẻ vì đã học được nhiều thứ. Đến kì 2 năm 4, kì cuối cùng của đại học, tôi vào MMLAB làm khóa luận nên phải chia tay team Zalo để dành trọn thời gian tại MMLAB.

 
Thời gian nghiên cứu khóa luận ở MMLAB.

Khóa luận của tôi hướng theo Computer Vision nên ở MMLAB tôi chủ yếu tìm hiểu Machine Learning như các thuật toán Linear Regression, SVM, CNN, RNN, Neural Network là chính. Nói chúng là các thuật toán này đòi hỏi toán rất nhiều như đạo hàm tìm cực đại cực tiểu (không phải là đạo hàm một hai biến đơn giản đâu mà cả ngàn biến…), rồi tích phân đủ thức, nói chung là hại não lắm. Bên cạnh đó tôi tìm hiểu về xử lý hình ảnh như thuật toán blur, medium, candy edge detection và các thuật toán rút trích đặc trưng hình ảnh (feature extractor) như HOG, SIFT, SUFT phục vụ cho khóa luận. Hồi đó tôi có theo học khóa học CS231n: Convolutional Neural Networks for Visual Recognition. Mọi kiến thức này về lĩnh vực này rất hay, tôi từng có ý nghĩ sẽ học lên thạc sĩ đi theo chuyên ngành này nhưng vì một số lý do nên tôi quyết định theo hướng Software Developer.

Cũng trong thời gian này tôi làm freelancer Android cho một số cá nhân ở ngoài và support 1 team làm về MMO (Youtube, Ads). Tôi viết rất nhiều tool auto thực hiện nhiều tác vụ:

  • Auto tạo Gmail, Yahoo, Apple
  • Auto view, share, like Youtube
  • Auto BlueStack with ADB and Xposed
  • Auto iOS Device, tweek jailbreak

Thời gian làm về MMO tôi quen rất nhiều người, nhiều ngành nghề, nhiều lĩnh vực khác nhau và xây dựng nên các mối quan hệ và học hỏi, tích lũy nhiều kinh nghiệm từ họ. Làm MMO thất bại nhiều lắm nhưng kệ đi vấp ngã nhiều rồi cũng đứng lên được thôi.

Sau đó tôi quyết định học thêm iOS và nhận một số dự án freelance ở ngoài để có tiền trang trải cuộc sống.

Hạnh phúc là sau bốn năm đại học tôi ra trường đúng hạn. Nhìn lại bốn năm nhiều bạn bè, nhiều mối quan hệ, nhiều bài học, thất bại cũng như thành công. Nói chung đều là những kí ức, hoài niệm không thể nào quên.

 
Lễ tốt nghiệp.
 
Nhóm đại học của tôi.

Cuộc sống sau khi ra trường

Sau khi ra trường công ty đầu tiên tôi phỏng vấn đó là Garena với vị trí là Android Software Engineer.

Chị nhân sự gọi tôi phỏng vấn,, tôi cũng chẳng cần ôn gì và confirm luôn sẽ lên làm bài test ngày hôm sau. Kết quả các bạn cũng có thể đoán được tôi rớt ngay vòng 1. Nguyên nhân là không có sự chuẩn bị kĩ càng.

Lại một cú vấp ngã vì quá tự tin chăng. Qua đây cũng là một bài học cho tôi.

Rớt Garena tôi vào làm một công ty X (nghe có bí hiểm nhỉ). Ở đây tôi làm việc với vào trò là một iOS Software Engineer. Nhiệm vụ là viết ứng dụng VPN. Tôi cầm con nguyên server config VPN và viết phần client iOS luôn. Cũng hiểu được kha khá các giao thức như IPSECL2TP… Sau 2 tháng thử việc tôi xin nghỉ vì làm ở đó không phát triển cho bản thân tôi và môi trường có lẽ cũng không phù hợp. Cái quý nhất là mọi người ở đây rất vui vẻ, thân thiện mà chưa có nơi làm việc nào tôi cảm nhận được như thế.

Sau công ty đó tôi về lại VNG lần 2 vào team 360Live với vị trí là iOS Software Engineer, làm ứng dụng live streaming. Để pass được tôi cần phải trải qua 2 vòng:

Vòng 1:

  • Các kiến thức về câu trúc dữ liệu như Array, LinkListed, HashMap, Tree…
  • Thuật toán Linear Search, Binary Search, Sort. Thường sẽ có 3 câu coding trên bảng trắng với trình bày với người phỏng vấn cách giải và các giải pháp tối ưu.
  • Hỏi về platform (Application, View Lifecycle, Concurrent,…)

Vòng 2

  • Phỏng vấn technical với Department Head.
  • Benefit và salary.

Vậy là tôi pass 360Live và join từ tháng 11/2017 đến giờ, tính ra cũng được 1 năm rưỡi.

Ở 360Live tôi handle tầng application của ứng dụng(Rest API, UI, Logic App). Giải quyết nhiều vấn đề mà trước đây tôi chưa gặp phải, học hỏi các kiến thức mới. May mắn là team tôi có anh lead cực giỏi và chỉ dạy chúng tôi nhiều.

 
Công việc ở 360Live của tôi :)). Vui chứ nhỉ.

Ngoài ra tôi còn tham gia training fresher về iOS và RxSwift, đôi khi đi phỏng vấn ứng viên, những câu hỏi tôi dành cho ứng viên thì cũng không quá khó đại khái như:

  • So sánh Array và LinkListed, ưu nhược điểm và trường hợp nào dùng cái nào?
  • Lifecycle của ViewController, Application như thế nào?
  • Một số câu hỏi basic về UICollectionView, UITableView ví dụ như cơ chế reuse cell như nào?. Datasource với delegate của hai component đó là gì?.
  • Cách mà iOS quản lý bộ nhớ ra sao?
  • Bạn hiểu gì về Concurrent trong iOS.

Nói chung ở 360Live mình có nhiều trải nghiệm hứng thú, mới mẻ. Có thể nói là lên một tầm cao mới sau khi ra trường, nhưng cảm thấy bản thân còn phải học hỏi nhiều thêm điển hình như cải thiện tiếng Anh, Mobile Architecture, Design System,…

Và đấy, câu chuyện 6 năm từ khi vào đại học và ra làm việc của tôi đấy, còn bạn thì sao?.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.