Học back end cần học những gì? Lộ trình cho người mới bắt đầu

8070

Thường meme liên quan tới backend luôn là thứ gì đó ẩn mình phía sau đầy ghê rợn. Không được đẹp đẽ hào nhoáng như phía Frontend.

Backend developer

Sự thật thì Backend hay Backend developer không hề đáng sợ như vậy. Backend cũng bao gồm nhiều kiến thức. Những kiến trúc lộng lẫy tuyệt vời nằm ở phía dưới đó. Vậy để trở thành backend developer hoặc học để trở thành backend anh em cần gì?

Tất cả sẽ được trình bày qua bài viết dưới đây

1. Programming Languages

Đầu tiên không thể thiếu với anh em developer backend rõ ràng là ngôn ngữ lập trình backend. Không chỉ hiểu phần core, hiểu cách thức hoạt động của ngôn ngữ. Anh em còn cần có lộ trình cụ thể để trở thành master trong từng loại ngôn ngữ mà mình lựa chọn.

Dưới đây là 3 ngôn ngữ thường được sử dụng cho backend:

  • Java: Đây là ngôn ngữ mà nhiều anh em thường nhầm với JavaScript. Tuy nhiên, Java và Javascript là khác nahu. Java thường sử dụng để tạo ra hệ thống mạnh mẽ. Mức độ phổ biến cao, chính vì vậy đây là ngôn ngữ cần thiết cho anh em developer.
  • PHP: Về phía web, ngôn ngữ thường hay sử dụng là PHP. Một số trang web đang được phát triển bằng php, vừa là mã nguồn mở mà còn free. Vì vậy, kỹ năng PHP cũng là kỹ năng mà anh em backend cần có.
  • Python: Với sự phát triển vượt bậc của AI, ML thì Python cũng trở thành ngôn ngữ backend cần phải biết. Đây là một trong những ngôn ngữ hàng đầu, muốn dùng cho cái đơn giản cũng ok mà dùng cho cái phức tạp cũng ok. Mấy ứng dụng phổ biến như Spotify và Dropbox cũng được viết bằng Python.

Programming Languages

Viết tới đây chắc sẽ có một số anh em thắc mắc về Nodejs, tất nhiên Nodejs cũng là ngôn ngữ backend đáng để học. Ngôn ngữ nào cũng có cái hay và phía trên chỉ là ví dụ 3 ngôn ngữ. Còn lại anh em muốn tiếp cận ngôn ngữ nào trước cũng được.

Chỉ cần chọn cho mình 1 ngôn ngữ, vẽ ra roadmap cụ thể là anh em có thể bắt đầu trên con đường trở thành master 1 ngôn ngữ phía Backend rồi.

  Top 7 câu hỏi phỏng vấn Backend Developer
  Mechanical Sympathy Là Gì? Lập Trình BackEnd bằng Java

2. Frameworks

Sau khi đã có kiến thức về ngôn ngữ lập trình, anh em sẽ hiểu khi cần xây dựng một cái gì đó to lớn, chỉ với ngôn ngữ sẽ khó khăn như thế nào. Ví như anh em xây cả lâu đài, mà từng cái bai, cục gạch anh em cũng phải tự làm, mày mò từng chút một. Vậy lúc nào mới xong?

Chính lúc này ta cần với frameworks.

Frameworks xây dựng trên 1 ngôn ngữ backend nào đó. Nó hỗ trợ đầy đủ những thứ từ cơ bản đến nâng cao giúp cho anh em xây dựng hệ thống dễ dàng hơn.

Một số framework phổ biến anh em có thể tham khảo bao gồm:

  • Ruby on Rails: Một số thứ ở Ruby on Rails giúp nó nổi bật hơn mấy frameworks phái dưới. Ông này base trên nền Ruby, có automated testing, có libraries, nếu làm đa ngôn ngữ có localization. Nó cũng là open-source web app development framework. Tất. nhiên, luôn sử dụng ngôn ngữ Ruby.
  • Django: Là open-source và một trong những web frameworks tốt nhất viết trên nền ngôn ngữ Python. Rất tốt cho việc mở rộng (scalability) và bảo mật (security). Ngoài ra Django cũng hỗ trợ lập trình bất đồng bộ.
  • Flask: Cũng base trên nền Python và có thể sử dụng để xây dựng web app framework rất nhanh. Nhiều tính năng chính của Flask bao gồm hỗ trợ WSGI cho phép xây dựng rất nhanh web application.
  • Express: Là framework nhẹ và nổi tiếng nhất sử dụng ngôn ngữ Node.js. Sử dụng để xây dựng web app framework. Express cho phép phát triển rất nhanh và development side-server cũng khá dễ dàng.

Frameworks backend

Trên đây chỉ là một vài so sánh nhỏ, anh em có thể tìm hiểu sâu hơn về các frameworks để có so sánh rõ ràng hơn các ngôn ngữ mình sẽ lập trình phía BE.
Tham khảo việc làm Back-end Developer Hồ Chí Minh hấp dẫn trên TopDev

3. Database

Nếu không có hiểu biết về hệ cơ sở dữ liệu, anh em không thể tự nhận mình là backend developer được. Đơn giản là backend sẽ thường làm việc với hệ cơ sở dữ liệu.

Ở một số hệ thống, database được xem như trái tim, nơi chứa những dự liệu quý giá nhất cần thiết cho hệ thống. Chính vì vậy, để trở thành backend developer, anh em cần có kiến thức tốt ở lĩnh vực database. Kiến thức tốt ở đây có thể được hiểu qua vài ví dụ dưới đây:

  • Hiểu về data types, hiểu về structure, hiểu về cách thức DB vận hành
  • Tối ưu tốc độ, phân tích query, tìm hiểu lý do query bị chậm
  • So sánh ưu nhược điểm các loại database, sự khác nhau giữa SQL và NoSQL
  • Thiết kế và vận hành database, hiểu sâu về quản lý database

Database

Một số cuốn sách hoặc khoá học có thể sẽ hữu ích với anh em về database:

4. Data Structures và Algorithms

Cấu trúc dữ liệu và thuật toán cũng là thiết yếu với backend developer. Thực thế thì data structure là cần thiết với tất cả các kĩ sư phần mềm. Nhưng đối với backend, anh em cần thật sự hiểu sâu về Data structures và Algorithms (thuật toán).

Một số loại cấu trúc dữ liệu phổ biến có thể liệt kê dưới đây:

  • Arrays
  • Linked Lists
  • Stacks
  • Queues
  • Graphs
  • Hash Tables
  • Binary Search Tree

Hiểu về cấu trúc dữ liệu là hiểu về cách nó hoạt động. Về performance, về độ phức tạp (complexity) là bao nhiêu. Lúc nào thì dùng loại data structure này, lúc nào thì dùng data structure kia. Chứ không chỉ đơn thuần là nhớ tên rồi muốn dùng sao thì dùng nha anh em.

Data Structures và Algorithms 
Sau khi đã nắm chắc Data Structure thì về thuật toán, anh em cần hiểu cơ bản về các thuật toán kinh điển. Hiểu ở đây là hiểu rõ cách thức hoạt động, ưu, nhược điểm. Còn lại implement thì thường đã có rất nhiều người làm rồi. Anh em chỉ nhớ sử dụng cho đúng lúc, đúng địa điểm là được.

  • Recursion
  • Bubble sort
  • Selection sort
  • Binary Search
  • Insertion Sort
  • Databases and Cache

Tìm việc làm Backend Intern HCM trên TopDev ngay!

5. API, REST, GraphQL

Anh em luôn thấy là backend với frontend đi liền một cặp, nếu chỉ có backend thì application không thể hoạt động. Tương tự vậy, nếu chỉ frontend thì ứng dụng cũng không thể hoàn thành.

Vậy backend và frontend giao tiếp với nhau như thế nào? Tất nhiên là thông qua API, vậy API có phải là yếu tố bắt buộc và backend developer cần biết không?

Câu trả lời là có, 100% các lập trình viên backend đều biết rõ về API và REST. REST có bao nhiêu method, các method đó sử dụng làm gì? Thiết kế API như thế nào là tốt. Song song với đó, anh em cũng cần có kiến thức và tìm hiểu thêm về JSON, XML. Các phương thức giao tiếp với client.

API, REST, GraphQLMột số khoá học hoặc bài viết có thể giúp anh em hiểu thêm về các công nghệ được nhắc tới ở trên gồm:

Nhiều tin tuyển dụng Backend lương cao trên TopDev

6. Devops và Server

Để backend có thể hoạt động, tất nhiên không thể thiếu server. Vậy anh em cần tìm hiểu thêm về các loại server, Windows thì khác gì Linux? Services mình viết lên sẽ chạy ở đâu, chạy như thế nào? Cấu hình 1 máy như thế nào là đủ.

Sau khi đã hiểu về server. Vậy giờ cần hiểu thêm về CI,CD. Hai cái này khác nhau như thế nào? Để triển khai auto deployment ta cần những gì. Tất tần tật những kiến thức đó là kiến thức bắt buộc với backend developer. Các môi trường development, staging và production khác gì nhau? Tại sao ta lại cần những môi trường này?

Ngoài ra khi tìm hiểu sâu hơn, anh em sẽ cần biết thêm về quản lý version. Kỹ năng điều tra, giải quyết vấn đề. Xử lý sự cố trong trường hợp production down.

Devops và Server

Lộ trình trở thành Backend Developer

Bạn có thể xem full roadmap lộ trình Backend Developer trong ảnh dưới, sẽ có phần giải thích từng bước chi tiết ở bên dưới.

Lộ trình trở thành Backend Developer

Trước khi bắt đầu với lộ trình backend, mặc dù chúng tôi chưa list ra các kiến thức về HTML/CSS trên roadmap trên, bạn cũng nên tự tìm hiểu và ít nhất đã nắm được cách viết HTML/CSS căn bản.

Các bước cần thiết cho lộ trình backend:

Bước 1 – Học một ngôn ngữ mới

Có cả tá lựa chọn về ngôn ngữ dành cho bạn. Tôi có chia nhỏ nó ra các categories để bạn dễ lựa chọn hơn. Đối với những người mới thì tôi khuyên bạn nên chọn các ngôn ngữ scripting vì chúng có nhiều demand và cho phép bạn bắt kịp nhanh chóng. Nếu bạn có một ít kiến thức frontend, bạn sẽ thấy Node.js dễ hơn nhiều và có rất nhiều job về nó đang mở.

Nếu bạn đang làm backend và biết một số scripting language, tôi đề xuất không chọn một ngôn ngữ scripting language khác nữa mà chọn trong section “Functional” hoặc “Multiparadigm”. Ví dụ, nếu bạn đang làm PHP hoặc Mode.js, đừng nên chọn Python hoặc Ruby, mà hãy thử Erlang hoặc Golang. Nó sẽ giúp bạn tư duy xa hơn và open với những mảng khác hơn.

Bước 2 — Thực hành ngay những cái đã học

Học phải đi đôi với hành. Một khi bạn đã chọn được ngôn ngữ phù hợp và có được nền tảng căn bản về nó, hãy dùng nó ngay. Hãy tạo nên càng nhiều app nhỏ càng tốt. Dưới đây là một số gợi ý cho bạn:

  • Ứng dụng các command mà bạn dùng trên bash, ví dụ ứng dụng function ls
  • Viết một command để fetch và lưu các post reddit trên /r/programming dưới dạng file JSON
  • Viết một command cung cấp directory structure dưới dạng format JSON ví dụ jsonify dir-name cho ra file JSON có structure bên trong dir-name
  • Viết một command đọc JSON của bước trên và tạo ra directory structure
  • Nghĩ một vài task hằng ngày của mình và automate chúng

Bước 3 — Học Package Manager

Một khi đã học được những cái cơ bản của một ngôn ngữ và tại nên một vài app mẫu, hãy học cách dùng package manager ngôn ngữ đó. Các package manager sẽ giúp bạn dùng các thư viện ngoài  và phân phối các thư viện cho người khác dùng.

Nếu bạn chọn PHP thì bạn có thể học về Composer, Node.js sẽ có NPM hoặc Yarn, Python có Pip và Ruby có RubyGems. Dù cho bạn chọn cái nào đi nữa, hãy cứ tiếp tục và học về package manager.

Bước 4 — Các tiêu chuẩn và Best Practices

Mỗi ngôn ngữ có những tiêu chuẩn riêng và best practices (cách làm tốt nhất). Hãy tìm ra và học hỏi từ nó. Ví dụ, PHP có PHP-FIG và PSRs. Với Node.js sẽ có rất nhiều hướng dẫn phục vụ cộng đồng cũng như nhiều ngôn ngữ khác.

Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev

Bước 5 — Bảo mật

Hãy nhớ đọc về các best practices trong mảng bảo mật. Đọc OWASPguidelines để hiểu về nhiều vấn đề bảo mật khác nhau và cách phòng tránh nó đối với từng ngôn ngữ mà bạn chọn.

Bước 6 — Thực hành thêm nữa

Sau những nền tảng cơ bản, tiêu chuẩn và best practice, bảo mật cũng như cách dùng package manager, bây giờ là lúc tự tạo nên một package và phân phối nó đi cho người  khác dùng, nhớ follow các tiêu chuẩn và best practices đã học. Ví dụ như, nếu bạn chọn PHP, bạn có thể release nó trên Packagist, còn nếu chọn Node.js thì release trên Npm registry,…

Sau khi đã xong, bạn có thể search thêm một số project trên Github và mở một số pull request trong các projects. Dưới đây là một vài gợi ý cho bạn:

  • Refactor và ứng dụng những best practice mà bạn học được
  • Xem các vấn đề mở và thử giải quyết nó
  • Add thêm một số functionality

Bước 7 — Học thêm về Testing

Hiện có rất nhiều kiểu test, mục tiêu đó là phải hiểu rõ các loại này là gì. Nhưng trước mắt hãy cách viết Unit Test và Integration test cho app trước đã. Đồng thời hãy tìm hiểu thêm về các phương pháp testing như mocks, stubs,…

Bước 8 — Thực tế

Hãy viết thử unit test cho một số task thực tế mà bạn đã làm, đặc biệt là những cái bạn đã làm ở Bước 6.  

Đồng thời nhớ tính toán thử mức độ cover của các test đã viết.

Bước 9 — Học về Relational Database

Làm thế nào để bảo toàn data trên relational database (dữ liệu quan hệ). Trước khi bạn lựa chọn tool để học, hãy tìm hiểu trước về các phương pháp database terminologies khác nhau như các key, index, normalization, tuple, v.v

Có rất nhiều sự lựa chọn, tuy nhiên nếu bạn học một cái rồi, thì những cái còn lại sẽ trở nên dễ hơn. Một trong những cái lý tưởng để bắt đầu đó là MySQL, MariaDB (khá giống nhau và là một mảnh của MySQL) và PostgreSQL. Pick MySQL.

Tìm việc làm Backend Intern HCM trên TopDev ngay!

Bước 10 —  Thời gian thực tế

Bây giờ bạn sẽ đem tất cả những thứ bạn đã học ra để sử dụng. Tạo nên một ứng dụng đơn giản, bất cứ idea nào, ví dụ một ứng dụng viết blog, rồi áp dụng các feature dưới đây:

  • User Account  — Đăng ký và Đăng nhập
  • Những user đã đăng ký có thể tạo các bài blog
  • User có thể xem tất cả các bài blog mà mình đã viết
  • User có thể xoá bài blog
  • User chỉ xem được blog của mình chứ không xem của người khác được
  • Viết các unit/integration test cho app
  • Bạn có thể áp dụng index cho các query. Phân tích queries để biết chắc là các index đang hoạt động

Bước 11 — Học một Framework

Tuỳ vào project và ngôn ngữ mà bạn chọn thì bạn có thể cần hoặc không cần đến framework. Mỗi ngôn ngữ có rất nhiều lựa chọn, hãy tìm hiểu và xem xem ngôn ngữ của bạn có gì và chọn một cái liên quan.

Nếu bạn chọn PHP, tôi đề xuất bạn nên dùng Laravel hoặc Symfony hoặc đối với các framework nhỏ thì bạn có thể dùng Lumen hoặc Slim. Nếu bạn chọn Node.js thì cũng có rất nhiều lựa chọn nhưng cái mạnh nhất đến nay đó là Express.js.

Bước 12 — Thời gian thực hành

Để thực hành bước này, hãy convert app và bạn đã làm ở Bước 10 để áp dụng framework mình đã chọn. Nhớ port mọi thứ kể cả các test nhé.

Lộ trình trở thành Backend Developer
HTML and CSS code developing screenshot. Abstract web site source listing on black background with colored syntax

Bước 13 —  Học NoSQL Database

Đầu tiên hãy tìm hiểu nó là cái gì, chúng khác dữ liệu quan hệ chỗ nào và tại sao cần dùng đến nó. Có rất nhiều sự lựa chọn, chỉ cần tìm kiếm một chút và so sánh các feature sẽ thấy được sự khác nhau. Một số option phổ biến gồm có MongoDB, Cassandra, RethinkDB và Couchbase. Nếu phải chọn một thì bạn nên chọn MongoDB.

Bước 14 — Caching

Hãy tìm hiểu cách ứng dụng app level caching cho ứng dụng của mình. Hiểu được cách sử dụng mà bạn đã build ở Bước 12.

Bước 15 —  Tạo các RESTful API

Tìm hiểu về REST và học cách tạo ra các RESTful API và nhớ đọc về REST trong bài viết gốc của Roy Fielding, để cứ hễ ai bảo REST chỉ dành cho HTTP API là bạn sẽ có thể sửa lưng họ ngay.

Bước 16 —  Học các Auth Method khác nhau

Bạn cần phải biết chúng là gì, sử dụng thế nào và cái này khác cái kia ở chỗ nào

  • OAuth — Open Authentication
  • Basic Authentication
  • Token Authentication
  • JWT — JSON Web Tokens
  • OpenID

Bước 17 —  Các Message Broker

Cũng có nhiều lựa chọn cho bạn nhưng có 2 cái nổi bật hơn đó là RabbitMQKafka. Nếu phải chọn một thì nên hãy học RabbitMQ trước.

Khi app đã bắt đầu phát triển, các query đơn giản dù cho trên dữ liệu quan hệ hay dữ liệu NoSQL sẽ không từ cắt ra và bạn sẽ phải resort riêng công cụ search. Bạn nên cân nhắc tuỳ nhu cầu, vì có rất nhiều option và mỗi option đều có những điểm đặc biệt riêng.

Bước 19 —  Học cách dùng Docker

Docker có thể giúp bạn rất nhiều trong quá trình lập trình ứng dụng, không chỉ tạo lặp một môi trường tương tự khi produce,  giữ cho hệ điều hành luôn sạch sẽ hoặc thúc đẩy code, test và deploy. Tôi sẽ cho bạn một câu hỏi để tìm hiểu và tự trả lời cho mình “Nó sẽ giúp tôi bằng cách nào?”. Cứ thế hãy tìm hiểu và học cách dùng Docker.

Bước 20 —  Trau dồi kiến thức về các Web Server

Nếu đã đến bước này, bạn chắc chắn đã phải tiếp xúc với nhiều server. Lúc này chủ yếu bạn sẽ tìm điểm khác nhau giữa các web server, hiểu được những giới hạn và các configuration option có sẵn cũng như cách viết app để tối ưu hoá các giới hạn này.

Bước 21 — Học cách dùng Web Socket

Mặc dù không bắt buộc, có thêm kiến thức này có thể giúp ích cho bạn rất nhiều. Tìm hiểu xem cách viết web app real-time và một số app mẫu bằng web-socket, bạn có thể dùng nó trên blog application để ứng dụng các update real-time trên blog posts listing.

Bước 22 —  Học GraphQL

Hiểu rõ nó khác chỗ nào REST và tại sao lại gọi nó là REST 2.0.

Bước 23 —  Xem các biểu đồ dữ liệu

Các Biểu đồ đồ thị sẽ giúp bạn linh hoạt hơn khi xử lý data, cũng như cung cấp cho bạn nguồn lưu trữ nhanh chóng và hiệu quả để dễ thu hồi hoặc query nó. Học thêm về Neo4j or OrientDB.

Bước 24 —  Không ngừng khám phá thêm

Một khi bạn đã bắt tay vào học và làm, chắc chắn bạn sẽ vấp phải thêm nhiều thứ mà chúng tôi chưa liệt kê hết trên đây. Hãy luôn ở trong tâm lý mở không ngại học cái mới, vì kết quả thế nào là do bạn chọn. 

Hi vọng thông tin trên đây đã có thể làm rõ thắc mắc của bạn về Backend Developer là gì cũng như lộ trình trở thành Backend Developer. Mọi thông tin đều mang tính tham khảo, bạn hãy tìm hiểu thật kỹ và đưa ra lộ trình phù hợp với bản thân nhé. Điều quan trọng là hãy đam mê và thật kiên trì.

Anh em có thể tham khảo thêm về Devops và các kỹ năng khác:

7. Tham khảo

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Bạn có thể quan tâm:

Đừng bỏ lỡ hàng loạt việc làm IT hấp dẫn trên TopDev nhé!