Python – ngôn ngữ lập trình nhất định phải học năm 2020

Work from home

Social Distancing – Cách ly toàn xã hội thì ở nhà làm gì?

Dịch bệnh hay cách ly là điều không ai muốn của dịch bệnh, song nếu có góc nhìn tích cực thì có nhiều thứ có thể khiến ta thấy vui vẻ, lạc quan hơn. Chỉ số Air Visual của Hà Nội thấp hơn, không khí trong lành hơn, ô nhiễm giảm nhờ cách ly. Cách ly là thời gian ta được (phải) sống chậm lại, có nhiều thời gian để đầu tư cho bản thân, ở gần gia đình hơn. Nhiều bạn bè mình khoe đọc được cả chục cuốn sách, chạy được mấy trăm cây số, … Bản thân mình cũng được ở nhà cả ngày, được ăn cơm vợ nấu rất ngon, chơi với con nhiều hơn, tìm được niềm vui trong việc rửa bát.

Bẻ lái – Nhân thời gian cách ly, mình sẽ chia sẻ một chút về ngôn ngữ lập trình 😀

Ngôn ngữ lập trình nào nên học

Chỉ cần tìm kiếm sơ sơ trên google thì bạn có thể tìm thấy hàng trăm hàng ngàn kết quả na ná như “Em nên học ngôn ngữ lập trình nào”, “Ngôn ngữ lập trình nào nên học”, “Ngôn ngữ lập trình nào dễ tìm việc”, …. Khi bắt đầu học lập trình thì câu hỏi thường gặp nhất và khó nhất là chọn ngôn ngữ nào dễ học nhất, học xong thì dễ tìm việc nhất, dễ kiếm tiền nhất.

Mình code vì tiền … à nhầm vì đam mê nên không quá đặt nặng vấn đề ngôn ngữ nào lắm. Mỗi ngôn ngữ như C, Java, PHP, Python, Go, Javascript,… có điểm mạnh điểm yếu riêng. Ngôn ngữ là công cụ nên không có công cụ nào xịn nhất chỉ có cái nào phù hợp nhất. Ngôn ngữ nào có thể giải quyết tốt bài toán đang gặp một cách nhanh nhất, hiệu quả nhất thì nên chọn.

Bẻ lái 2 – Hôm nay mình sẽ giới thiệu về Python – 1 ngôn ngữ mình nghĩ là sẽ hot trong năm 2020.

Chú ý: Đối tượng bài viết này là các anh em developer đã có kinh nghiệm lập trình và đang tìm một ngôn ngữ mới để học, làm việc.

Python được dùng rộng rãi trong giới developer nhà giàu?

Python – Ngôn ngữ lập trình ra đời từ năm 1991 bởi Guido van Rossum và rất phổ biến. Python đang ngày càng trở nên hot.

Theo phân tích của Stack Overflow thì dựa trên lượng truy cập từ các quốc gia thu nhập cao – thu nhập của developer cũng cao – developer nhà giàu , Python cũng có vị thế đang tăng đáng chú ý. (bài gốc: https://stackoverflow.blog/2017/09/06/incredible-growth-python/)

Python được sử dụng rộng rãi ở nước có thu nhập cao

Tại sao gần đây Python lại hot

Sự phát triển của Machine Learning (ML) /AI

Những năm gần đây đánh dấu sự phát triển mạnh mẽ của lĩnh vực ML và AI. Trong giới software developer chắc bạn cũng cảm nhận được làn sóng này, nhiều công ty cá nhân bắt đầu dịch chuyển sản phẩm từ outsourcing sang lĩnh vực này.

Python có thế mạnh sẵn có là các thư viện hỗ trợ phân tích dữ liệu nên được sử dụng rộng rãi trong nhiều công ty lớn. Trong lĩnh vực ML , Python được sử dụng rộng rãi trong việc build model, thuật toán trong AI/ML. Các thư viện nghiên cứu & áp dụng Machine Learning đều làm việc bằng Python. TensorFlow nổi tiếng của Google cũng chủ yếu làm việc với Python. Hầu hết các khóa học về ML / AI đều dùng Python.

Tại sao web developer cũng nên học Python

Càng ngày càng có nhiều công ty, tổ chức áp dụng ML/ AI vào trong sản phẩm của mình. Dẫn đến việc triển khai các model của ML/AI lên nền tảng Web / API là không thể thiếu.

Để tối ưu thời gian phát triển và triển khai model lên môi trường production thì các công ty, developer thường chọn Python vì nó dễ tiếp cận với ML/AI researcher – những người phát triển & nghiên cứu ML/AI. Hơn nữa, Khi muốn triển khai một model ML lên nền tảng ngôn ngữ khác như PHP, Java thì bắt buộc phải xử lý convert model hoặc phải phát triển phần adapter giữa 2 ngôn ngữ. Việc convert một thuật toán hoặc model ra ngôn ngữ khác thì mất rất nhiều chi phí vì các thư viện ML/AI thì chủ yếu làm việc với Python.

Bên cạnh các dự án phát triển ML/AI model thì dự án phát triển API dùng Python cho hệ thống sử dụng ML/AI cũng rất hot. Gần đây mình cũng làm khá nhiều dự án liên quan đến tư vấn, phát triển hệ thống web, API có tích hợp ML/AI model. Python luôn là sự lựa chọn hàng đầu của mình và khách hàng.

Các công ty lớn sử dụng Python

Nhiều công ty công nghệ, tài chính hot hít trên thế giới sử dụng Python. Có thể kể sương sương như Uber, PayPal, Google, Facebook, Instagram, Dropbox, Netflix, Reddit, Goldman Sachs đều dùng Python để phát triển và thử nghiệm.

Bạn sẽ có cơ hội được làm việc cho các công ty lớn, dự án lớn hơn.

Hơn nữa, các công ty lớn thường có nhiều đóng góp mã nguồn mở giúp cho cộng đồng Python lớn mạnh.

Túm lại

Nếu đánh giá về độ phổ biến, tương lai và mức lương thì Python là một ngôn ngữ lập trình nhất định phải master trong năm 2020

Đây hoàn toàn là ý kiến suy nghĩ (thiên kiến) cá nhân của mình nên nếu bạn có ý kiến đóng góp hay nhận xét gì xin để lại comment hoặc liên hệ mình theo email tuantranf[at]gmail.com

Remote working – Những đúc kết cá nhân.

From: https://thefunnybeaver.com/30-funny-memes-anyone-work-home-remote-worker/

Dịch N Covid-19 đã và đang có những ảnh hưởng nghiêm trọng đến nền kinh tế thế giới cũng như cuộc sống hằng ngày. Khi mà biện pháp hiệu quả nhất để hạn chế lây nhiễm là cách ly các ca nhiễm, hạn chế tối đa tụ tập đông người, tránh tiếp xúc gần thì mô hình Remote working (làm việc từ xa) đã trở thành một điều không thể tránh khỏi.
N Covid-19 thay đổi cách tổ chức vận hành một cách đột ngột khiến cho nhiều cá nhân, tổ chức còn đang rất lúng túng trong việc áp dụng mô hình làm việc mới . Tuy nhiên, mình nghĩ đây cũng chính là cơ hội để thử nghiệm và áp dụng các mô hình làm việc này trong thực tế.

Mình rất may mắn tiếp xúc mô hình Remote work cũng được gần 4 năm. Công ty mình có nhiều văn phòng ở nhiều quốc gia, múi giờ khác nhau như UK, Spain, Finland, Japan, Singapore, Thailand, Malaysia, Việt Nam. Hơn nữa, phần lớn nhân viên làm việc online ví dụ team dev của mình gần 10 người nhưng mỗi lần daily meeting thì cũng đã 7 location rồi, người thì họp từ nhà, từ quán cafe, từ sân bay hay đang di chuyển trên đường,…

Theo nhiều kết quả nghiên cứu cho thấy làm việc từ xa, được tự do lập trình thời gian làm việc, giúp chúng ta cân bằng tốt hơn công việc và những trách nhiệm gia đình hằng ngày. Nhưng làm thế nào để có thể làm việc hiệu quả, mình sẽ chia sẻ một số kinh nghiệm mình đúc kết trong quá trình làm việc với remote team.


PS, những điểm này đều là trải nghiệm cá nhân của mình nên có thể nhiều điểm không phù hợp hoặc không đúng với nhiều cá nhân, công ty.

Team

Core working time: Thời gian cả team làm việc cùng lúc. Theo kinh nghiệm của cá nhân, tốt nhất là mỗi ngày khoảng 3-4 giờ mỗi ngày. Nhờ thời gian này giao tiếp trong team diễn ra trơn tru hơn, đồng bộ hơn và các thành viên sẽ cảm thấy đoàn kết.

Chia sẻ tiến độ của thường xuyên: Mỗi ngày team mình có Daily meeting tầm 15-20 phút vào đầu ngày, mỗi người sẽ chia sẻ tiến độ của mình. Việc chia sẻ thông tin tiến độ của bạn với mọi người sẽ thúc đẩy bạn làm việc tốt hơn và giúp các thành viên khác nắm được tình trạng công việc của bạn tốt hơn.

Chia sẻ thông tin : Hãy tận dụng các dịch vụ lưu trữ chia sẻ tài liệu và giữ các tài liệu và thông tin cần thiết luôn mới nhất, đúng nhất và luôn trong tầm tay của mọi người mọi lúc, mọi nơi

Thống nhất quy tắc về liên lạc của team: Nếu câu hỏi mà bạn có thể đợi trong vài giờ, hãy gửi email cho họ. Nếu bạn muốn trả lời trong vòng vài phút, hãy nói chuyện trên các công chat như Slack, … Nếu bạn đang trong tình trạng khẩn cấp, hãy dùng chức năng cuộc gọi trên công cụ chat hoặc gọi điện thoại . Điều quan trọng hãy thống nhất quy tắc này với team của bạn.

Cố gắng sắp xếp cơ hội gặp mặt trực tiếp với team: Khác với làm việc trực tiếp, khi làm remote bạn sẽ không cảm nhận được cái sướng khi hoàn thành dự án, release phiên bản mới lên AppStore, hay không khí căng thẳng khi deadline dí sát đít,…. Team remote nên sắp xếp thời gian để các thành viên có thể ngồi lại làm việc với nhau ít nhất 1-2 lần 1 năm để khích lệ lẫn nhau.

Cá nhân

Hãy lập thời khóa biểu và tuân thủ nghiêm túc: Thời gian cá nhân lấn át thời gian làm việc thì sẽ không hoàn thành công việc. Nhưng ngược lại để thời gian làm việc ảnh hưởng đến thời gian cá nhân thì ý nghĩa của việc remote working sẽ không còn nữa. Mình làm việc ở nhà nhiều lúc thấy vất vả hơn lên công ty nhiều vì vừa phải giỏi việc nước mà phải đảm cả việc nhà nữa. Mãi làm việc mà không chơi với con hoặc quên cắm cơm cho vợ , … thì ôi thôi. 🙁 .Theo kinh nghiệm của mình thì nên chia nhỏ khung thời gian làm việc 30-40 phút, có alarm để báo hết giờ, báo giờ giải lao, uống nước, … Tốt nhất là nên chia sẻ thời khóa biểu này với vợ hoặc người thân trong gia đình.

Đừng quá kỳ vọng nhận được câu trả lời ngay lập tức: Khác với làm việc trên văn phòng, bạn có thể nhìn thấy được đối phương có rảnh tay hay không, làm việc từ xa thì rất khó. Hồi đầu, mình thường xuyên thấy nóng ruột khi chờ reply của người khác. Take it easy.

Hãy ra ngoài thay đổi không khí: Nếu bạn đã quen với môi trường làm việc có nhiều người vui vẻ, sự cô độc khi làm việc một mình có thể khiến bạn mệt mỏi. Nếu bạn ở nhà một mình, tốt hơn là nên thay đổi chọn một nơi khác chẳng hạn như trong một quán cà phê hoặc không gian làm việc chung.

Đầu tư cho môi trường làm việc thoải mái: Công việc nào cũng cần có sự sáng tạo. Nhằm mục đích thúc đẩy sự sáng tạo thì việc đầu tư cho môi trường làm việc, các công cụ phục vụ làm việc là rất xứng đáng. Hãy đầu tư vào bàn ghế, bàn phím, chuột, màn hình, ….

Công cụ

Slack: công cụ chat

Zoom: Gọi video online

Trello: Quản lý Todo cá nhân

Google Drive: Quản lý, chia sẻ tài liệu

Time Out: Quản lý khung thời gian làm việc

Kết luận

Mục đích của remote working là làm việc một cách thoải mái nhất cho mọi người. Không có quy tắc rằng nhất định bạn phải làm điều này hoặc không được làm điều kia. Làm việc từ xa thì phải chấp nhận một số nhược điểm

Nhược điểm 1: Không có cơ hội gặp gỡ đồng nghiệp: sẽ mất đi cơ hội thảo luận trực tiếp, hoặc đi ăn trưa, chém gió thoát FA
Nhược điểm 2: Rất khó để chuyển mode của bạn sang chế độ làm việc. Nếu bạn làm việc ở nhà có con nhỏ thì sẽ thường xuyên bị mất tập trung.

Túm lại, không có gì là tốt 100% cả (kể cả lấy vợ). Điều quan trọng nhất mình nghĩ để có thể hạnh phúc với remote working là (1) tận hưởng tối đa cái tốt; (2) giảm tối thiểu thiệt hại của các hạn chế, nhược điểm.

Quản lý file docker-compose.yml cho nhiều môi trường

From: https://www.docsity.com/en/news/it/funny-aspects-related-developers/

Trong quá trình làm việc Docker của mình thì docker-compose là một phần không thể thiếu được. Compose giúp định nghĩa và chạy một application với nhiều container (multi-container application). Chỉ với 1 file yaml thiết định và docker-compose up mình có thể dễ dàng tạo và chạy toàn bộ các services phục vụ cho việc chạy ứng dụng như Mysql, Fluentd, Redis, Nginx,..

Compose là một công cụ tuyệt với không chỉ dùng cho development, testing, staging environments, mà còn ứng dụng trong CI workflows.

Cũng giống như các công nghệ khác, luôn có rất nhiều điều để tìm hiểu về Docker, thường có 2 cách tiếp cận broad strokes (học rộng) and deep dives (học sâu).

Nhưng cách tiếp cận cá nhân của mình là tìm hiểu 1 lượng kiến thức vừa đủ để tự tin bắt đầu sử dụng một công nghệ, và để môi trường thực tiễn dạy cho mình những gì cần học tiếp theo. Phần lớn của việc sử dụng Docker trong môi trường thực tế.

Hôm nay mình sẽ chia sẻ cách quản lý file docker-compose.yml cho nhiều môi trường khác nhau như thế nào.

Mình dùng docker-compose file cho môi trường làm việc ở local, và môi trường staging, production. Bài toán thường gặp ở đây là mỗi môi trường khác nhau yêu cầu thiết định khác nhau. Ví dụ:

  • Port dùng ở local thường không được dùng ở môi trường production vì lý do security,…
  • Phải chạy nhiều docker-compose trên cùng một server
  • Cần thiết định logging driver cho từng môi trường khác nhau. Ví dụ trên production dùng AWS Cloudwatch logs, …
  • Ở môi trường production thì volume path khác
  • Dùng các cloud storage như RDS trên môi trường production, …

Rất may mắn là Docker-compose hỗ trợ cho các nhu cầu này bằng định nghĩa file docker-compose.yml

Compose supports two methods of sharing common configuration:

– Extending an entire Compose file by using multiple Compose files

– Extending individual services with the extends field (for Compose file versions up to 2.1)

https://docs.docker.com/compose/extends/

Có 2 cách tiếp cận
1) Tạo 1 file gốc docker-compose.yml base và nhiều file docker-compose cho các môi trường khác nhau để override các thiết định của file gốc

2) Định nghĩa file của từng service và tạo nhiều file docker-compose cho các môi trường khác nhau, các file này dùng cấu trúc extends để tùy chỉnh thiết định của từng service cho các môi trường.

Cá nhân mình thích cách 1) hơn vì nó tổng hợp các thiết định của môi trường vào từng file nên quản lý dễ dàng hơn. Chắc có lẽ mình đã quá quen với việc sử dụng .env để tùy biến các môi trường web rồi.

Việc sử dụng nhiều docker-compose file cho phép người dùng có thể override thiết định cho các môi trường staging, production.

Khi cần override thiết định cho môi trường staging thì mình sẽ thêm 1 file docker-compose.staging.yml, và viết các thiết định cần override vào đấy

Mình sẽ chuẩn bị 2 file

docker-compose.yml

# docker-compose.yml
web:
  image: example/my_web_app:latest
  depends_on:
    - db
    - cache

db:
  image: postgres:latest

cache:
  image: redis:latest

docker-compose.staging.yml với các thiết định volume, port, biến môi trường

web:
  build: .
  volumes:
    - '.:/code'
  ports:
    - 8883:80
  environment:
    DEBUG: 'true'

db:
  command: '-d'
  ports:
    - 5432:5432

cache:
  ports:
    - 6379:6379

Sau đấy chỉ cần chạy lệnh

docker-compose \
    -f docker-compose.yml \
    -f docker-compose.staging.yml \
    up -d

Khi chạy thì compose sẽ tự động override các thiết định trong docker-compose.yml bằng các thiết định trong docker-compose.staging.yml

Thật tuyệt vời đúng không? Bây giờ, các file tùy chỉnh cho môi trường sẽ được quản lý riêng biệt, có thể được lưu trữ trong một repo git khác hoặc được quản lý bởi một nhóm khác. Như thế vừa đảm bảo các thông sensitive, các file docker-compose.staging.yml, docker-compose.production.yml sẽ được team DevOps quản lý riêng biệt với team phát triển.

Happy hacking! Happy Docker life.

Additional, Other Kubernetes related topics is here. https://tuantranf.me/tag/kubernetes/