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

Review Q1 2018

Đã hết Q1 của 2018, và hơn 7 tháng từ khi chuyển ngành. Cứ mỗi tuần trôi qua lại thấy lâu đằng đẵng, muốn mình lớn nhanh, lớn nhanh hơn nữa, như Thánh Gióng, để hiểu hết tất cả những gì trong thế giới front-end, để có thể tranh luận tay đôi với mọi người những đề tài của fullstack web development. Muốn làm nhiều hơn, kiếm tiền nhiều hơn. Nhưng thực ra mong muốn này quá khó với trình độ hiện tại. Khi bình tĩnh một chút, thì hiểu là mình cần thêm thời gian, giống như tất cả những người khác, họ đều phải trải qua quãng đường tính bằng 3 - 5 năm để đạt được trình độ vững vàng. Hơn nữa, công nghệ thì có quá nhiều, lựa chọn đầy rẫy, không thể cứ mỗi hôm lại thay đổi, ngoặt sang 1 hướng mới. Tốt nhất là nên có một timeline của bản thân, nhìn về 1 mục tiêu cụ thể, và từ từ từng chút một không ngơi nghỉ tiến đến nó. Bài này để tổng kết lại những dự định làm trong Q1 năm 2018, và tinh chỉnh lại theo cái nhìn đã thực tế hơn.

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


Cũ (2017.12.30):

  • Trở thành 1 chuyên gia trong mảng hẹp data visualization ở Việt Nam (2018)
  • Trở thành 1 software engineer đúng nghĩa về lâu dài (beyond)

Mới (2018.04.08):

  • Trở thành 1 front-end developer:

    • vững về HTML, CSS và JavaScript ES6
    • có kiến thức cơ bản và sản phẩn demo sử dụng ReactJS.
    • có hiểu biết cơ bản về back-end (NodeJS, MongoDB, Authentication, Security)
    • có hiểu biết cơ bản, có sản phẩm demo cho "Progressive Web App"

Lý do thay đổi mục tiêu:

  • Mục tiêu "Data Visualization Expert" không thiết thực, chưa kiếm tiền được ở thời điểm hiện tại. Mục tiêu "Software Engineer" thì xa quá, chưa kể còn rộng.
  • Riêng front-end đã có quá nhiều thứ rồi, chỉ cần nắm chắc là có thể kiếm tiền ngon lành. Back-end thì chỉ cần biết cơ bản, chứ không có đủ thời gian để đào sâu.
  • Tinh thần chung là:

    • phải "lành nghề" ở những thứ cơ bản như CSS, HTML, và JS. Mất thời gian ban đầu, nhưng sẽ tiết kiệm thời gian về lâu dài.
    • phải tự làm, tự làm, và tự làm thật nhiều web app của cá nhân thay vì chỉ làm theo tutorial.

Đã làm được đến tuần 1 tháng 4 năm 2018 (ngoài công việc)


  • Viết lách: Vẫn duy trừ được ở mức tốt. Viết các bài ngắn dạng "Today I Learn" trên kipalog với tag "100daysTIL", giờ đã đến bài thứ 37. Các topic trải từ học JavaScript, NodeJS, CSS, Linux, D3.js.
  • Dự án fcchn-blog-app:

    • Có cái nhìn tổng quan về 1 dự án có cả front-end (ReactJS), back-end (NodeJS, Restful API), database (MongoDB), cũng như deploy lên Heroku.
    • Trực tiếp làm 1 feature (phần comment của back-end), làm 50% của front-end, và tự deploy lên Heroku.
  • Học ReactJS:

    • Hoàn thành section 1, và 2 của "Modern React with Redux" (Udemy, Stephen Grider)
    • Hoàn thành 70% khóa "React for beginner" của Wes Bos.
    • Làm 02 app nhỏ để thực hành, sử dụng package "create-react-app"
    • Kính vạn hoa
    • Album ảnh Hà Nội
  • Đã đọc và đang dịch phần tài liệu chính thức của ReactJS (mục Quick Start). Xem tại đây. Ví dụ bài "Tư duy trong React".
  • Hoàn thành:

    • Khóa Responsive Web Design Fundamentals của Udacity. Khóa này rất hay. Giúp giải quyết vấn đề về việc lên layout hỗ trợ responsive. Đã trình bày về vấn đề này ở đây.
    • Khóa "React: The big picture", một khóa trong path ReactJS, level "Beginner" của Pluralsight. Khóa này rất hay, nó đề cập đến lịch sự, ưu nhược điểm của ReactJS so với các framework khác, cách khắc phục nhược điểm của ReactJS. Nếu cần trình bày với team hiện tại về React, mình sẽ sử dụng slide và ý tưởng của khóa này.

Mục tiêu của tháng 4, 5 và 6 năm 2018 (ngoài công việc)


  • CSS, layout và styling:

    • Thực hành kỹ năng lên layout hỗ trợ responsive thông qua việc clone 2 -3 trang web nào đó.
    • CSS thuần
    • CSS với bootstrap 3 và 4
    • Flexbox, CSS grid
    • Component Material-UI của ReactJS
    • Styled-component của ReactJS
  • Hoàn thành app "Thu rác thải điện tử"như đề cập ở đây
  • Thu hẹp việc học và đọc xoay quanh các topic của Google Developer's Web Fundamentals
  • Xem các khóa trong Web Development của Udacity. Những khóa này "không nhất thiết phải đọc/ xem/ làm bài tập hết 100%". Chỉ cần lướt để hiểu ý tưởng. Việc làm các project nhỏ do chính bản thân nghĩ ra vẫn quan trọng hơn.

Dưới đây là update cho các việc đã lên kế hoạch từ đầu 2018, nhiều phần đã bị gạch bỏ.


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 [Update 2018.04.08: Hủy do không có đủ thời gian, chưa thấy cấp thiết]
  • Hoàn thành trước tháng 4:

    • Khóa Introduction to NodeJS do Microsoft tổ chức trên edX.org [Update 2018.04.08: Mới hoàn thành được khoảng 40% - 50%. Ngưng giữa chừng do không có đủ thời gian và quan tâm.]
    • Khóa ES6 của Wes Bos (đã được khoảng 20%) [Update 2018.04.08: Ngưng giữa chừng do thấy chán]
    • Khóa Data Visualization trên Codecademy [Update 2018.04.08: Không tiếp tục do không còn hứng thú.]
  • 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%) [Update 2018.04.08: Hủy do không còn hứng thú]
    • Khóa học CS50 Introduction to Computer Science trước tháng 6 (đã được khoảng 20%) [ Ngưng giữa chừng do mất hứng thú]
  • 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. Cập nhật 2018.04.08: Tiếp tục học, ghi chú tại đây]

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. [Update 2018.04.08: Hủy vì không đủ thời gian, không đủ quan tâm].

  • 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). [Update 2018.04.08: Đã làm được 01 project nhỏ. Xem ở đây]

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. Cập nhật 2018.04.08: Hủy do không thấy cần thiết, không còn thời gian]

  • Sử dụng D3.js để minh họa các thuật toán sắp xếp. [Ưu tiên: cao][Update 2018.04.08: Hủy do không đủ quan tâm]

  • 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)