Thử làm một “lập trình viên Odoo”

Thử làm một “lập trình viên Odoo”

Python odoo là gì

Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng

Odoo là gì?

Ố đù tự mô tả về mình trên GitHub:

Odoo is a suite of web based open source business apps. The main Odoo Apps include an Open Source CRM, Website Builder, eCommerce, Warehouse Management, Project Management, Billing & Accounting, Point of Sale, Human Resources, Marketing, Manufacturing, Purchase Management, … Odoo Apps can be used as stand-alone applications, but they also integrate seamlessly so you get a full-featured Open Source ERP when you install several Apps.

Nó là một bộ các web app phục vụ các công việc trong kinh doanh như quản lý quan hệ khách hàng, quản lý dự án, tính tiền/kế toán, tuyển dụng… đầy đủ đến mức nó là một giải pháp “ERP” cho doanh nghiệp. Odoo là tên mới từ bản 8.0 (giờ đang là 10.0) của phần mềm OpenERP.

Đó là nhìn từ phía người dùng. Còn về phía lập trình viên, Odoo là gì?

  • Odoo không phải đơn thuần là 1 webapp, nó không dùng bất cứ web framework nào như Django, Flask, Tornado…
  • Odoo LÀ một web framework, trong code của Odoo có đủ các thành phần cần thiết của 1 web framework:
    • Router: https://github.com/odoo/odoo/blob/10.0/odoo/http.py#L419
    • ORM (Django có sẵn Django ORM, Flask thì phải cài thêm như SQLAlchemy), Odoo tự viết luôn 1 ORM ở đây: https://github.com/odoo/odoo/blob/10.0/odoo/models.py (gần 6000 dòng code) chỉ hỗ trợ PostgreSQL.
    • Template render: Qweb (http://www.odoo.com/documentation/10.0/reference/qweb.html) – của nhà tự trồng, code tại https://github.com/odoo/odoo/blob/10.0/odoo/addons/base/ir/ir_qweb/qweb.py#L228.
    • WSGI: werkzeug (như Flask)

Kiến trúc

Odoo sử dụng kiến trúc server – client.

  • Code server viết bằng Python, chạy phía server.
  • Code client viết bằng Javascript, chạy trên trình duyệt web, nó tương tác với server bằng JSON-RPC trên nền HTTP request: https://github.com/odoo/odoo/blob/10.0/odoo/http.py#L91

Mỗi chương trình (webapp), được đóng thành 1 python module (thư mục với file __init__.py), và nằm trong thư mục addons https://github.com/odoo/odoo/tree/10.0/addons

Vài phút làm lập trình viên Odoo

Lấy code về

Yeah, 1.67 GB

Nếu tải sourcecode bằng file zip (không có git)

Giải nén file zip rồi cài.

Code Odoo không tuân theo chuẩn PEP8 nhưng khá sạch sẽ và dễ đọc. Tài liệu cho developer đầy đủ, dễ xem. http://www.odoo.com/documentation/10.0/index.html

Đứng ở góc độ của lập trình viên, việc phát triển một “module/addon” cho Odoo không có gì quá khác biệt hay cao siêu so với viết một web app bằng bất cứ framework nào (Django, Flask…), ngoài chuyện clone 1.6GB git repo.

Cài đặt và chạy thử

Code Python cài từ source có một số thư viện yêu cầu lập trình viên phải cài thêm các thư viện C (bằng apt trên Ubuntu):

  • Yêu cầu chung: python-dev
  • lxml: libxml2-dev libxslt1-dev
  • python-ldap: libsasl2-dev libldap2-dev libssl-dev
  • psycopg2: libpq-dev

Phải cài npm để cài less, xem chi tiết tại https://www.odoo.com/documentation/10.0/setup/install.html#setup-install-source

Tạo virtualenv Python2 (Odoo hỗ trợ Python 2.7+, ko hỗ trợ 3), cài các requirements:

Mặc dù dùng qweb template engine, Odoo vẫn có vài chỗ dùng jinja2 hay Mako template engine:

[2] although it uses a few others, either for historical reasons or because they remain better fits for the use case. Odoo 9.0 still depends on Jinja and Mako.

Sau khi cài

Thử làm một "lập trình viên Odoo"

Giao diện quản lý dự án

Thử làm một "lập trình viên Odoo"

Cảm nhận chung là Odoo vẫn chậm như thời OpenERP, khá ngốn RAM, 180MB cho process Python chạy Odoo, chưa làm gì cả + một đống process chạy postgres.

Làm lập trình viên Odoo

Khi vận hành trang tổng hợp việc Python của PyMi, những tin tuyển lập trình viên Odoo hiện lên hàng ngày, lặp đi lặp lại, với mức lương phổ biến trong khoảng 6-10 triệu.

Các nhà tuyển dụng thì lại bắt buộc lập trình viên phải có sẵn kinh nghiệm với Odoo… NOOOOOO!

Chẳng có lập trình viên web Python nào đầu tư vào 1 framework không dùng ở đâu ngoài để phát triển chính Odoo module/addon, họ học Django, Flask. Một lập trình viên Django hay Flask có thể viết Odoo webapp chỉ sau vài tiếng chuyển đổi những kiến thức tương tự sang những thư viện của Odoo framework.

Tại sao anh đòi hỏi thứ không ai có, mà lại trả lương thấp?

Bài viết gốc được đăng tải tại pymi.vn

Có thể bạn quan tâm:

  • Từ lập trình viên đến nhà đầu tư thiên thần
  • Từ lập trình viên Junior, cùng mình trở thành 1 lập trình viên mid-level nhé
  • Bỏ túi những kinh nghiệm đi thực tập hay dành cho lập trình viên!

Xem thêm Việc làm Developer hấp dẫn trên TopDev