Electrical Engineer turned Data Scientist. Married to Awesome. Occasional drawer of Minions.

A look back on 2017 before turning to 2018

"...Tri túc tiện túc, đãi túc, hà thời túc,

Tri nhàn tiện nhàn, đãi nhàn, hà thời nhàn ?..."

Nhàn (Nguyễn Công Trứ)

"Biết đủ là đủ, đợi cho đủ thì bao giờ mới đủ. Biết nhàn là nhàn, đợi cho nhàn thì bao giờ mới nhàn?". Thôi xin tạm mượn 2 câu của cụ Nguyễn Công Trứ để tổng kết cho 2017 về mặt công việc việc và để lấy đà cho năm 2018.

Nhìn lại 2017


Năm 2017 quả là một năm đặc biệt, khi tôi chia tay công ty cũ sau 3 năm gắn bó, chia tay "ngành cũ" (điện/ xây dựng) sau ... 14 năm gắn bó (tính cả 5 năm học Đại học). Việc chuyển sang "ngành mới" (lập trình) là một bước nhảy lớn. Có người nói rằng dù gì vẫn là làm ... kỹ thuật, nhưng nói thì dễ, làm không dễ tí nào. Và để chuyển thì cần một động lực (cũng như sự liều lĩnh và chuẩn bị) lớn. Bởi để làm được vẫn cần tích lũy một lượng kiến thức không nhỏ, và để làm tốt và không sai, thì lại cần trải nghiệm, cần thời gian. Mỗi tuổi mỗi khác, khi người ta không ở độ tuổi 2x, thì việc học cái mới tương đối chậm, chưa kể nhiều người còn có gắng nặng gia đình, vợ con bìu ríu thì khó mà tập trung 100% tâm trí, năng lượng, tiền bạc cho cái mới được. Tuy vậy, dù gì tôi cũng đã "làm được", với những điểm cộng sau đây:

  1. Đã hoàn thành công việc ở nơi cũ, chia tay trong nụ cười và sự trân trọng của đồng nghiệp
  2. Đã hoàn thành việc học ở Techmaster, có thêm bạn là 1 tá các bạn trẻ, một vài trong số đó thân thiết và quý mến mình.
  3. Đã được nhận chính thức vào công ty đầu tiên của sự nghiệp software engineering, bắt đầu bắt kịp công việc, gắn bó với đồng nghiệp xung quanh.
  4. Đã bắt đầu xây dựng được 1 chút không khí trong cộng đồng freeCodeCamp Hà Nội, có một vài người anh em mới quen, có thể chém gió, bàn tán, gặp nhau thường xuyên.
  5. Đã bắt đầu có những hiểu cơ bản về HTML, CSS và JavaScript. Được làm về Nodejs, biết khái niệm Webpack, Unit test (Với Karma, Mocha, Chai và Sinon), Fallback, và JavaScript ES6. Đã bắt đầu có cảm giác về lập trình, về một bức tranh vô hạn mà mỗi lần học được một cái gì mới, lại thấy bức tranh kia rộng thêm một chút.

Có những lúc mệt mỏi và căng thẳng, nhưng nhìn chung là vẫn giữ được độ lì lợm để lầm lũi tiến theo nhịp phù hợp nhất với bản thân.

Có những lúc hơi hơi thiếu tiền, nhưng không có lúc nào đói, vẫn dành dụm để chi tiền mua quà tặng bạn bè khi cần :-).

Như vậy, tức là đã đủ, và đã nhàn. Đời người không còn mong muốn gì hơn. Giờ chỉ mong năm tới, cũng đủ, cũng nhàn như thế :-).

Nếu được hỏi về lời khuyên, thì đây là điều tôi sẽ trả lời:

Quá trình chuyển nghề vô cùng mệt mỏi và tốn năng lượng (bạn càng nhiều tuổi thì sẽ càng sợ thay đổi, chưa kể còn gánh nặng gia đình). Vì vậy, nếu bạn còn trẻ, chưa hài lòng với việc hiệc tại, muốn làm cái mới, thì hãy làm NGAY và LUÔN, đừng chờ đợi. Dành 150% tâm trí và sức khoẻ cho nó. Đừng lần khần (căn bệnh của rất rất nhiều người Việt trẻ), để rồi đến lúc muốn thay đổi thì tâm trí bó buộc, sức khoẻ không còn, tiền cũng hạn chế.

Mục tiêu tổng quan (2018 and beyond)


Vẫn đặt mục tiêu trở thành 1 chuyên gia trong mảng hẹp data visualization ở Việt Nam, không chỉ biết vẽ (making charts), mà còn biết kể chuyện (telling stories), để truyền đạt những thông điệp đằng sau con số (revealing insights) tốt nhất đến người xem. Chủ đề được "visualized" sẽ là các vấn đề kinh tế, môi trường, giáo dục và khí hậu ở bất kỳ nước nào có nguồn số liệu. Ở Việt Nam mảng này vô cùng hẹp, có lẽ có người làm nhưng không tập hợp lại với nhau thành cộng đồng lớn như ở 1 số nơi trên thế giới.

Để thực hiện được mục tiêu này cần:

  1. Hiểu về visualization, về ý nghĩa của từng charts, khi nào dùng chart nào, ưu nhược điểm từng loại, v.v.
  2. Thu thập được dữ liệu, phân loại và đánh giá độ chính xác, biết cách xử lý dữ liệu (bằng công cụ)
  3. Biết cách dùng D3.js hoặc các thư viện dựng trên D3.js để hiện thực hóa việc vẽ charts trên nền HTML. Charts sẽ là SVG hoặc Canvas tùy theo yêu cầu.
  4. Biết cách đưa charts lên mạng, đến với nhiều người xem nhất. Người xem không chỉ tương tác được với chart của mình, mà còn có thể thử nghiệm, tự upload dữ liệu của bản thân để tạo charts.
  5. Xử lý được dữ liệu khoảng vài chục đến vài trăm nghìn nodes.

Ghi chú: Bên cạnh mục tiêu tổng quan, còn có 1 mục tiêu khác không biết nhét vào đâu, có thể gọi là "mục tiêu nền tảng", đó là trở thành 1 software engineer đúng nghĩa. Thế nào là "software engineer"? Với mình, ngoài kinh nghiệm thực tế, người đó ít nhất phải hiểu những kiến thức nền tảng của khoa học máy tính, được đề cập đến trong các môn học của sinh viên hệ chính quy (4 - 5 năm) các trường như Bách Khoa, Đại học KHTN, Đại học Công nghệ, v.v. Đây là quan điểm hoàn toàn cá nhân. Tham khảo thêm tại ngành học BKHN, Wikipedia - Computer Science, và Khan Academy.

Mục tiêu cụ thể cho 2018


  • Code đều hơn, code chất hơn
  • Đọc và nghe nhưng phải tóm tắt lại được thường xuyên
  • Viết và kể nhiều hơn

Công việc

Hoàn thành đúng deadline các task được giao :D.

Kiến thức cần lưu ý:

  • JavaScript ES6
  • CSS: cần học và làm lại các bài tập trên W3school, chú ý đến CSS grid, flexbox, v.v.
  • SVG & Canvas: tiếp tục học và thực hành
  • D3.js v4: tiếp tục học và thực hành vẽ các loại charts với số liệu của Việt Nam và Hàn Quốc
  • Node.js
  • React
  • Networking: Hiểu cơ bản thế nào là http, https, http/2, ip, socket, protocol, cdn, dns.
  • Bảo mật: Hiểu cơ bản những phần trong ""Bảo mật cơ bản cho developer" do Phạm Huy Hoàng viết (link). Chọn 1 - 2 loại lỗ hổng để tự viết/ tóm tắt lại có thêm khảo sát những site nào chưa vá/ đã vá lỗ hổng.
  • Blockchain: Hiểu về công nghệ blockchain. Làm 1 trang HTML sử dụng JS để minh hoạ lại blockchain hoặc bitcoin (tham khảo).
  • Docker:
  • SSH
  • Lý thuyết hệ điều hành
  • Cơ sở dữ liệu
  • Giải thuật

Kỹ năng cần có:

  • Git: Hiểu bản chất của git. Thuộc (lòng) và áp dụng chuẩn xác các lệnh liên quan đến add, commit, push, pull, tạo branch mới, chuyển branch, reset, revert, merge, checkout.

  • Linux: Thực hành các lệnh trong linux liên quan đến folder, file, process, sử dụng được vim (quen các phím tắt)

Công cụ cần hiểu rõ:

  • Visual Studio code:

    • Công cụ debugging
    • Git tích hợp
    • Cấu hình
    • Phân tích process và memory consumed bởi các chương trình đang chạy (ví dụ node.js)
  • Chrome Developer Tool

  • Inskcape, GIMP, darktable

Khóa học phải hoàn thành:

  • Hoàn thành trước tháng 3:

    • Khóa học Docker online trên Techmaster
  • Hoàn thành trước tháng 4:

    • Khóa Introduction to NodeJS do Microsoft tổ chức trên edX.org
    • Khóa ES6 của Wes Bos (đã được khoảng 20%)
    • Khóa Data Visualization trên Codecademy
  • Hoàn thành trước tháng 6:

    • Khóa học front-end freeCodeCamp trước tháng 6 (đã được khoảng 50%)
    • Khóa học CS50 Introduction to Computer Science trước tháng 6 (đã được khoảng 20%)
  • Hoàn thành trước tháng 9:

    • Hoàn thành 1 khóa React - Redux cơ bản đã mua trên Udemy (cập nhật 2018.02.08. Lý do: Không còn thấy hữu ích.)

Kỹ thuật mới cần học:

  • Automation test với Selenium: Trước tháng 3, hoàn thành 1 chương trình để test các chức năng cơ bản cho Datamixi.com vốn vẫn đang test thủ công, chạy cho Internet Explorer, Firefox và Chrome. Những tính năng đơn giản bao gồm: Đăng nhập, sắp xếp các mục đã có, kiểm tra pagination, download PDF, PNG, social sharing.

  • Unit test với Karma, Mocha, Chai, Sinon: Biết cách cấu hình, tinh chỉnh hệ thống unit test cho dự án hiện tại ở công ty.

  • Headless browswer: Thực hành với Puppeteer theo hướng dẫn của Phạm Huy Hoàng (link)

Personal projects cần làm:

  • Tạo 1 web app dạng vẽ đồ thị, sử dụng thư viện Billboard.js, React, host trên heroku, cho phép người dùng up dữ liệu (csv) lên để vẽ chart, ngôn ngữ tiếng Việt và Anh, sau đó expot ra file ảnh hoặc pdf để lưu về máy (không hỗ trợ Internet Explorer). [ưu tiên: rất cao]

  • Tạo 1 trang riêng của bản thân chứa các charts vẽ bằng D3.js để mô tả tình hình kinh tế, dân số, giáo dục của Việt Nam (có thể so sánh với các nước khác), số liệu lấy từ Tổng cục Thống kê Việt Nam (và các nguồn khác).[ưu tiên: rất cao]

  • Đọc và trình bày lại các assignments về thống kê và modelling từ thời học TU Delft. [Cập nhật 2018.02.01: cần phải xem lại để biết mình đã từng học cái gì. Ưu tiên: cao]

  • Cải tiến chương trình VBA trong file Excel của vợ. [Cập nhật 2018.02.01: thêm vào do thấy việc giải quyết 1 bài toán business cụ thể lúc nào cũng quan trọng hơn việc chỉ học tool - tức là học code. Ưu tiên: cao]

  • Sử dụng D3.js để minh họa các thuật toán sắp xếp. [Ưu tiên: cao]

  • Chuyển blog từ Jekyll sang Gastby (sử dụng React) [ưu tiên: thấp]

Hoạt động cần tham gia:

  • Viết lách: Tối thiếu 48 bài trên blog cá nhân (trung bình 4 bài/tháng), trong đó chọn được khoảng 5 - 10 bài đăng trên kipalog.

  • Dịch sách: Tiếp tục dịch Series "You don't know JS" của Kyle Simpson. Hiện đã dịch được 60% cuốn "Scope and Closure", trước tháng 6 cần hoàn thành nốt "Scope and Closure", và được hoảng 50% "This and Object prototypes".

  • Đọc sách: Cần hoàn thành các quyển sau (một số quyển đơn thuần là sách thực hành, nhưng vẫn đang dang dở cần làm nốt)

    • The Principles of Object-Oriented JavaScript (Nicholas C. Zakas) (đã được 50%)
    • You Don't Know JS: this & Object Prototypes (Kyle Simpson) (đã được 50%)
    • The Functional Art: An Introduction to Information Graphics and Visualization (Alberto Cairo)
    • The Pragmatic Programmer: From Journeyman to Master (Andy Hunt) (đã được 20%)
    • Maintainable JavaScript (Nicholas C. Zakas) [Cập nhật 2018.02.08: Bỏ qua. Tác giả cũng không còn thấy nhu cầu viết tiếp quyển này nữa.]
    • Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People (Aditya Y. Bhargava)
    • Express in Action: Node Applications with Express and Its Companion Tools (Evan Hahn) [Cập nhật 2018.02.08: Coi như completed.]
  • Open Source: Contribute cho Billboard.js về mặt tài liệu, review và fix bug.

  • freeCodeCamp Hanoi: Tiếp tục share các bài của Quincy Largon về group freeCodeCamp Hà Nội, duy trì thường xuyên, phát triển cộng đồng, dành khoảng 15ph/ngày.

  • freeCodeCamp Hanoi meetup: Tiếp tục duy trì gặp nhau 1 tuần 1 lần, tập trung vào React, làm 1 - 2 sản phẩm nhỏ, nhưng đầy đủ quy trình, học cách làm việc chuyên nghiệp như đội ngũ freeCodeCamp, thúc đẩy phong trào viết blog kỹ thuật trong nhóm.

  • Tham gia event của các nhóm khác, ví dụ của .NET open group, v.v.

  • Tổ chức gặp gỡ đội Techmaster thường xuyên, khoảng 3 tháng/ lần. Chủ yếu để cập nhật tình hình, kiến thức, thắt chặt quan hệ, và tìm cách support Techmaster nếu cần (và trong khả năng cho phép)

Túm lại


Năm mới thì bao giờ cũng nhiều thách thức, nhiệm vụ đề ra cho bản thân cũng nhiều vô cùng. Xu hướng là nói nhiều làm ít, đề ra nhiều nhưng cuối cùng thì chẳng làm được bao nhiêu.

Vì vậy, để 2018 không đến mức lâm vào tình trạng trên, tinh thần chung là:

  • dù viết, hay đọc, hay làm projects, cần làm nhanh, ngắn gọn, không sa đà vào những thứ cầu kỳ.
  • ưu tiên hoàn thành hết các tasks ở mức cơ bản, hơn là chăm chút vào vài tasks quá mức mà mất thời gian làm cái khác.
  • nên điều tiết các hoạt động xã hội sao cho hiệu quả nhất, tránh mất thời gian vào Facebook comment trình bày chat chit nhiều
  • mỗi ngày viết 1 chút, code 1 chút, nhưng đều đặn từng chút từng chút một.