Lập trình Môi trường phát triển Python
Nguyễn Nhân  

Kinh nghiệm dành cho người mới bắt đầu lập trình Python

Gần đây mình bắt đầu quay lại với Python, thứ mà mình đã bắt đầu tìm hiểu từ lúc Python 3 ra mắt, nhưng lúc đó thực sự chỉ là cưỡi ngựa xem hoa, nên đến lúc tìm hiểu lại thì cũng chỉ là số 0 tròn trĩnh, dù cảm xúc yêu mến python thì vẫn còn chút gì gợi nhớ. Bài viết này tổng hợp những kiến thức, kinh nghiệm dành cho người mới bắt đầu lập trình Python mà mình đã trải nghiệm, tổng hợp được trong thời gian vừa qua. Hi vọng sẽ giúp ích cho những ai cũng mới bắt đầu như mình vậy, mặc dù cách tiếp cận của mình có hơi khác 1 chút là mình chú trọng đến môi trường phát triển, làm sao để “thực hành” mà không bị gặp các trục trặc, chứ không chuyên vào lý thuyết, vì cũng đã có rất nhiều tài liệu rồi.

Nội dung chính

Python đáng yêu như thế nào

Lần học Python đầu tiên, Python và cộng đồng Python không mạnh như bây giờ, Python giờ giống cô gái sếc-xi mà bao chàng trai đều muốn sở hữu, mình cũng không phải ngoại lệ :D. Chắc các bạn cũng biết bây giờ đang là trào lưu của Machine Learning, Deep Learning mà Python là ngôn ngữ có thể gọi là phù hợp nhất để triển khai, thực hiện.
Bên cạnh đó, Python được thiết kế đa mục đích, có thề lập trình web (Django rất tuyệt), devops, Internet of Things…, hầu như python có thể sử dụng được ở tất cả các lĩnh vực, mặc dù ở một số lĩnh vực thì có thể cũng không thể mạnh hơn so với các ngôn ngữ khác, nhưng trong bài này mình sẽ không đi sâu vào vấn đề này.
 
Được sử dụng nhiều và mạnh mẽ nhưng Python lại khá dễ học, vì vậy mà Python là ngôn ngữ chính được chọn để dạy lập trình cho trẻ em, do vậy bạn hoàn toàn có thể học python một cách nhanh chóng.

So sánh một chút với Javascript

Mục tiêu của blog này là nói về hệ sinh thái Fullstack, thứ mà javascript rất mạnh, tuy nhiên sau khi học python và hoàn thành xong dự án với Django, mình thấy có một điểm mạnh khi kết hợp giữa Django và hệ sinh thái của Javascript, mà nòng cốt là React. Khi sử dụng Django, chúng ta sẽ quay trở lại mô hình cũ Frontend-Backend, trong đó Frontend là hệ sinh thái React, Backend là Django dễ dàng cung cấp API và Admin dashboard. Khi sử dụng Django, mình chỉ cần quan tâm đến thiết kế model (ORM) là mình đã có Admin Dashboard với đầy đủ chức năng bảo mật, phân quyền, dashboard cho CRUD (Create-Read-Update-Delete), tạo API cũng đơn giản hoặc sử dụng Django Rest Framework.
Mặc dù mình rất thích thiết kế của Graphql cho backend, nhưng với những ưu thế mà Django mang lại thì cũng sẽ có nhiều dự án phù hợp.
Chú ý là sự kết hợp này không mạnh để:
– Thiết kế ứng dụng có tính chất reactive (ứng dụng có tính realtime), nếu muốn realtime thì phải kết hợp thêm nodejs hoặc dùng [Channel](https://channels.readthedocs.io/en/latest/) cho Django.
– Ứng dụng sử dụng những điểm mạnh của Graphql
 

Một số kinh nghiệm

Cài đặt python

Python 2 đã ngưng phát triển và sẽ ngưng hỗ trợ từ 2020, chỉ còn 2 năm nữa thôi nên mọi thứ bây giờ bạn nên bắt đầu với Python 3, không cần phải suy nghĩ.
Nếu bạn dùng Window thì cứ vào trang chủ Python.org(https://www.python.org/downloads/windows/) tải về, nhưng với MacOS thì do đã được cài đặt Python 2 nên nếu bạn cài đặt từ Package Installer của Python sẽ phức tạp hơn 1 chút để chuyển sử dụng mặc định python 3. Mình từng sử dụng Package Installer và sau khi cài là không biết đã được cài python ở đâu 😀
Mình đề nghị sử dụng homebrew để cài đặt, sẽ đơn giản hơn, hướng dẫn cài đặt ở đây.
Trước lúc cài đặt bằng homebrew thì mình cũng thử cài bằng Anaconda, nhưng thấy không thuận tiện bằng do máy đã có sẵn homebrew.
(Bài viết này mình dùng MacOS, nên nếu bạn dùng Window có thể sẽ có nhiều ý về thiết lập môi trường sẽ không đúng.)

Virtualenv

Chỉ với Python và PIP thì chúng ta cần cài đặt ở mức hệ thống, nhưng sau đó tất cả những gì bạn cần làm tiếp theo là phải dùng virtualenv (Môi trường ảo). Virtualenv rất quan trọng, nó ảnh hưởng hầu như các bước đi tiếp theo có trôi chảy hay không.
Bởi vì khi dùng PIP của hệ thống nó dính tới phân quyền, lúc nào cũng phải dùng sudo pip install XYZ thì sẽ phức tạp và có rủi ro bảo mật, bạn chỉ cài PIP không phải từ Virtualenv với những thứ liên quan trong hệ thống máy tính của mình.
Với Virtualenv thì bạn có thể hình dung như node_modules của Nodejs và vendor trong composer của PHP, mọi thư viện đều được cài đặt tách biệt với hệ thống và chỉ sử dụng trong nội bộ dự án.
Sử dụng
pip install virtualenv
Giả sử thư mục của dự án là /path/to/my_project/
virtualenv venv
# nếu máy bạn có cả python2, thì phải chỉ rõ đường dẫn đến python thông qua tham số `-p`
virtualenv venv -p `which python3`
Với venv là thư mục chứa python và các package. Xem giải thích về việc chọn thư mục venv ở phần VSCode
Sau khi có virtualenv, bạn cần kích hoạt:
source ./venv/bin/activate
Sau khi không dùng nữa thì dùng lệnh deactivate để thoát khỏi môi trường ảo. Thường mình không dùng lệnh này, cứ bật tab khác của Terminal thôi, vả lại mình không shutdown máy bao giờ :D, chỉ sleep rồi bật lên là xài tiếp nên không cần deactivate.

Text Editor/IDE

Mình có nghe giới thiệu tốt về Pycharm, nhưng không dùng vì phải trả phí, vả lại mình dùng VSCode đã lâu cho các dự án liên quan đến Javascript, Nodejs, PHP và bây giờ là Python đều thấy tốt (riêng đối với PHP thì khá tệ nếu so sánh với PHPStorm).

Sử dụng VSCode

Cài đặt extension Python
Mọi thứ cần thiết chỉ là cài đặt extension Python cho VSCode là xong, biến VSCode thành IDE cho Python thực thụ. Với những thiết lập mình đưa ra bên dưới, bạn sẽ chiến bất kỳ dự án nào mà ko sợ ảnh hưởng đến các dự án khác. Nói chung, cách đơn giản là thiết lập có giá trị cho từng dự án riêng biệt dựa trên VirtualEnv.
Thiết lập cài đặt cho dự án
Lý do mình dùng thư mục `venv` ngay trong thư mục của dự án, một phần là để phối hợp với VSCode tốt hơn, trong `Workspace Settings` của VSCode:
bạn thêm dòng
"python.pythonPath": "${workspaceRoot}/venv/bin/python"
Với ${workspaceRoot} là thư mục gốc của dự án.
Như vậy, kể từ lúc này, các package liên quan đến VSCode được sử dụng để hỗ trợ sẽ được cài đặt trong thư mực venv như pylintdùng để phân tích mã nguồn hay autopep8 hỗ trợ format code python tự động theo chuẩn pep8, hay để autocomplete, code definition, navigation các thư viện được sử dụng trong dự án rất dễ dàng.
 
Cách này có thêm điểm lợi là cấu hình đi theo dự án, không phụ thuộc vào cài đặt python của máy, dù mình có cài máy lại, hay code trên nhiều máy thì cấu hình không thay đổi.
Trong trường hợp sử dụng ở máy cá nhân hay ở máy chủ, thì vì môi trường “venv” là đường dẫn tương đối, nên nếu 2 dự án khác nhau nhưng chung python 3.6 chẳng hạn, thì python được sử dụng chung nhưng `site-packages` thì độc lập.
Ví dụ:
# tại /path/to/projectA
source venv/bin/active
pip install packageA

# chuyển thư mục qua dự án B
cd /path/to/projectB

# trở thành (venv)/path/to/projectB
# chú ý là không cần deactive môi trường vẫn có thể cài đặt package cho projectB được.
pip install packageB

=> 2 package A và B được cài đặt cho 2 dự án hoàn toàn độc lập.

Cấu hình pylint
Trong thư mục gốc của dự án tạo file: .pylintrc
[MASTER]
load-plugins=pylint_common, pylint_django

[FORMAT]
max-line-length=120

[MESSAGES CONTROL]
disable=missing-docstring,invalid-name

[DESIGN]
max-parents=13


Trong file trên, mình có sử dụng  pylint_django, là do mình dùng Django, nếu bạn dùng Flask thì cài và thay bằng pylint_flask chẳng hạn, tuỳ theo framework bạn dùng để cài plugin tương ứng. Mặc định thì pep8 quy định 1 dòng 80 ký tự, mình thấy mức này khá ngắn cho một file bình thường, với mình thì để ở mức 120 thì thoải mái hơn.

Tài liệu, thực hành

Nếu bạn đã có kiến thức ở ngôn ngữ khác rồi, thì nên sử dụng tài liệu LearnXinYminutes, có cách nhìn tổng quan về Python3 một cách nhanh nhất.

Nếu bạn cũng từng làm về PHP thì có thể đọc cuốn “Python rất là cơ bản” của bạn Võ Duy Tuấn – người có kinh nghiệm 10 năm lập trình PHP chuyển sang Python. Cuốn này thì bạn chỉ cần đọc từ chương 1 đến chương 5 là đủ, các chương khác tuỳ theo nhu cầu bạn có thể đọc sau.

Thực hành thì mình dùng LeetCode (http://leetcode.com/) hoặc HackerRank(http://hackerrank.com), vì để giải quyết các vấn đề ở LeetCode, HackerRank chúng ta cần các kiến thức cơ bản của python (ví dụ xử lý số, chuỗi hay xử lý mảng), cũng như cấu trúc dữ liệu khiến cho kiến thức python sâu hơn.

Khi làm dự án về Django thì giúp mình có kiến thức về class trong python, cách thừa kế, khai báo hàm static, method, …Vì vậy, nếu bạn có kiến thức về web rồi thì cũng nên chọn Django để bắt đầu để tận dụng kiến thức web của bạn.

Python Shell: cứ gõ python trong command line rồi bắt đầu quậy thôi. Mình lúc nào cũng bật thêm cửa sổ này để tìm hiểu 1 số lệnh cơ bản, khi chưa dùng VSCode với cấu hình ở trên thì bạn có thể dùng lệnh dir ví dụ dir(className) để liệt kê các phương thức của class đó, hoặc help ví dụ import os rồi help(os) sẽ biết được module os bao gồm những gì. Với VSCode thì chỉ cần Ctrl+Click hoặc Alt+Click là sẽ đến tập tin khai báo module os, thì bạn sẽ đọc được tài liệu về module này.

Bạn có thể sử dụng thêm MyPy để tăng hiệu quả của code, xem thêm tại Mypy 

Fullstack Station Tips

Dù thích python trước đây nhưng mình cũng từng ghét python chỉ vì có khi bị lỗi khi cài đặt qua pip mà không hiểu nguyên nhân. Kinh nghiệm mình đúc kết được ở đây cũng tốn kha khá thời gian tìm hiểu lúc mới bắt đầu lập trình Python, hi vọng sẽ có ích cho các bạn mới bắt đầu lập trình python khác. Python khá dễ học, kết hợp thêm những kinh nghiệm này sẽ khiến cho quá trình học trở nên trôi chảy hơn.

Comments

5 thoughts on “Kinh nghiệm dành cho người mới bắt đầu lập trình Python

  1. Nguyễn Nhân

    5

  2. Khách

    5

  3. Khách

    4.5

  4. Phuong Phan

    Xin chia sẻ kinh nghiệm của tôi là với python 3 thì giờ tạo môi trường ảo virtualenv sẽ là : python3 -m venv venv. Tức là dùng venv package chứ ko phải virtualenv module để tạo virtualenv. VSCode hay nhưng cũng chỉ ngang với sublime và atom thôi. Riêng với python, thì PyCharm vẫn là hay nhất. PyCharm CE cũng là quá tốt rồi ko cần tốn phí mua PyCharm Pro đâu.

    1. lee

      yes, I just change to pycharm, and It’s really cool.
      Thanks for your guide (^_^)

Leave A Comment