[P2: Back-end] Mình đã trở thành Web developer như thế nào?

backend

Phần 2: BACK-END

Sau phần 1 về Front-end hôm trước, hôm nay mình tiếp tục viết về Back-end. Ở bài này mình sẽ đưa ra những kinh nghiệm về việc học Back-end của mình. Học những gì? Bắt đầu học từ đâu? Học ở đâu?

Phần 1: Front-end http://tuyendung.misa.com.vn/minh-da-tro-thanh-web-developer-nhu-the-nao-front-end/

Nhìn chung, đi đến back-end là mọi người đã đi sâu hơn vào lập trình, không còn nhiều tính “nghệ thuật” như front-end nữa, mà thay vào đó là những logic, giải thuật, kiến trúc, nhưng nó vẫn có những điều hứng thú riêng!

Bắt đầu vào học back-end cần những gì nhỉ?

Well, chúng ta nên khởi động từ những kiến thức bắt buộc của một lập trình viên, đây là những kiến thức có thể ứng dụng ở nhiều ngôn ngữ, nhiều nền tảng. Cho dù bạn là một lập trình viên Java, C#, PHP, Python,… làm về Web, Mobile, Desktop,… đều cần những kiến thức này. 

Cấu trúc dữ liệu và giải thuật

Cái này thì hiển nhiên rồi phải không nào. Đây là điều kiện tiên quyết khi học lập trình, bất kỳ một ngôn ngữ nào thì các bạn đều dùng đến các hàm sắp xếp, tìm kiếm, các cấu trúc dữ liệu mảng, danh sách, cây,… Vậy nên việc hiểu về các kiến thức này rất quan trọng.

Về mức độ thì mình thấy kiến thức trên giảng đường cũng đủ dùng, chỉ cần bám sát giáo trình đại học là cũng đủ để vẫy vùng ở level Junior rồi. Tuy nhiên, mình biết là đối với anh em sinh viên thì giảng đường nó không hấp dẫn bằng những phút giây combat, chạy bo hay đi chơi với gấu (nếu có) nên bị hổng phần này khá nhiều. Do vậy mình gợi ý anh em một vài khóa học, quyển sách để bù đắp cho những ngày tháng sinh viên máu lửa:

Khóa của Khan Academy (xem tại đây)

Khóa này đơn giản và dễ hiểu, chỉ nói các kiến thức cơ bản như sắp xếp, tìm kiếm, đồ thị. Kiến thức rất dễ hiểu và nhanh gọn, thích hợp cho các bạn mới bắt đầu.

Khóa Algorithm của Đại học Princeton trên Cousera(xem tại đây)

Có 2 khóa, hoàn toàn miễn phí nha các bạn – 2 khóa này rất đầy đủ nhưng kiến thức hơi hàn lâm, đúng chất giáo trình đại học, phù hợp cho các bạn muốn tìm hiểu rõ ràng hơn, học xong part này lên trình Senior vẫn áp dụng được.

Cá nhân mình thì chỉ học theo kiến thức trong trường, giáo trình Cấu trúc dữ liệu & giải thuật của thầy Nguyễn Đức Nghĩa thấy quá đủ để dùng. Nếu các bạn cần các quyển sách dễ hiểu hơn thì mình gợi ý Algorithm in Nutshell – một quyển sách khá nổi tiếng (anh em tìm trên mạng là ra nha). 

Cơ sở dữ liệu

Có 2 loại hình cơ sở dữ liệu chính: SQL và noSQL

Về SQL, cơ bản thì chỉ cần nắm vững các khái niệm ở trong SQL như bảng, khóa, function, có khả năng viết các câu truy vấn select, update, delete, thực hiện các phép join, group,… Những điều này thì đều được dạy ở trường, nếu các bạn muốn tự học thì có thể tham khảo quyển SQL Cookbook – một quyển khá tốt để bắt đầu từ cơ bản. 

Ở các dự án nhỏ, hầu hết truy vấn đều chỉ là Thêm/Xem/Sửa/Xóa (gọi tắt là CRUD – Create, Read, Update, Delete) không quá phức tạp, cần thì join ở vài bảng vào với nhau là được, còn đối với các dự án lớn thì sẽ có hẳn những vị trí chuyên biệt thao tác với cơ sở dữ liệu để đảm bảo hiệu năng, bảo mật. 

Mục tiêu sau khi học xong phần này là khi đưa ra một bài toán, VD quản lý sách ở trong thư viện, quản lý sinh viên của một trường đại học, làm một game đơn giản,… thì chúng ta cần vẽ ra được một mô hình dữ liệu gồm các bảng nào, trong mỗi bảng có các trường nào, kiểu dữ liệu là gì, khóa là gì, các procedure/function nào để thao tác với dữ liệu.

Về noSQL thì cũng mới nổi lên và được sử dụng trong thời gian gần đây, tuy nhiên trong các dự án thuần về quản lý, nghiệp vụ thì cũng ít có đất sử dụng và cũng không phức tạp bằng SQL, thông thường thì tùy nhu cầu mà dự án sẽ lựa chọn sử dụng dữ liệu noSQL nào cho phù hợp như Key – value, Document, Graph,… anh em có thể tham khảo bài giới thiệu tại đây.

Lập trình hướng đối tượng (OPP) và cú pháp ngôn ngữ

Kinh nghiệm đi phỏng vấn và ngồi phòng vấn ở nhiều công ty thì kiến thức kinh điển hỏi level Fresher, Junior là các tính chất của OOP. Bật mí là chương trình Fresher ở MISA cũng ngoại lệ. Đây cũng là các kiến thức nền tảng vì hầu hết ngôn ngữ chủ yếu hiện nay để tuân theo cơ chế hướng đối tượng. 4 tính chất cơ bản cùng với các ứng dụng của nó đã là nền tảng để thi công hầu hết các ứng dụng. 

Về học hướng đối tượng thì mình nghĩ nên kết hợp với học ngôn ngữ luôn, hầu hết các khóa học/sách dạy ngôn ngữ đều sẽ nói về hướng đối tượng. 

VD như C# anh em có thể tham khảo quyển Head first C#, mình đã có review quyển này rồi đó (xem tại đây)

Hay các ngôn ngữ khác có Head first JavaHead first PHP,… (hoặc bất kỳ quyển sách/khóa học phổ biến nào về các ngôn ngữ) 

Clean code

Đến đây thì hầu hết anh em đã ở level “code được”, chúng ta cần thêm các kỹ năng hơn một chút ở level “code tốt”. Điều đầu tiên đó là code phải clean. Sẽ có các điều không phải là lập trình nhưng chúng ta phải học như cách đặt tên biến, cách comment, cách viết các hàm, cách chia class,… sao cho hợp lý. 

Không có những điều này, code của bạn vẫn chạy, nhưng áp dụng những điều này sẽ giúp code của chúng ta đễ đọc, an toàn hơn, chương trình của chúng ta dễ thi công và triển khai hơn, giảm thiểu việc đồng nghiệp lấy dây chuột siết cổ bạn hoặc đập đầu bạn bằng bàn phím. 

Tin tôi đi, tôi đã chứng kiến không ít vụ cãi nhau lên bờ xuống ruộng vì viết code “tồi” dẫn đến không hiểu nhau, mất nhiều thời gian debug mà không sửa được lỗi rồi đấy. 

Các bạn có thể tham khảo seri bài viết về clean code của anh Toidicodedao tại đây

Các kỹ năng khác

Kỹ năng Search Google, Stackoverflow,… : cái này cực kỳ quan trọng nha, khi gặp một vấn đề, lỗi chúng ta cần biết cách tìm kiếm hướng giải quyết trên internet, thường thì sẽ là copy lỗi -> paste lên google thì sẽ ra, một vài lỗi hiếm gặp hơn thì ta phải đặt câu hỏi trên Stackoverflow hoặc lê lết trên các group, diễn đàn để hòi

Version control: Git, SVN,… : chắc chắn là khi làm dự án thì chúng ta không thể để code ở máy, khi cần thì copy code gửi qua Mesenger cho nhau hay copy vào USB rồi gửi chim bồ câu đến địa chỉ được, sẽ phải có các trình quản lý phiên bản. Thường thì cứ học Git cho nó cơ bản, vì hầu hết luồng vận hành của các trình quản lý phiên bản đều tương đối giống nhau. Các bạn có thể tham khảo seri học Git của Vietjack, khá đầy đủ và chi tiết tại đây

Đọc và vẽ các loại biểu đồ (diagram) : diagram là công cụ để phác thảo thiết kế của hệ thống, nó giúp chúng ta hình dung ra hệ thống cấu tạo như nào, có các thành phần gì để từ đó lập trình ra một hệ thống chạy đúng với mục đích ban đầu. Chính thế nên việc hiểu về UML rất quan trọng, tránh tình trạng code xong bị sếp gọi vào phòng uống nước chè tâm sự xong được xin chữ ký.

Vân vân và mây mây nhiều những kỹ năng nữa mà mình cũng chưa kịp liệt kê hết, hầu hết chúng đều khá dễ học, chỉ thời gian ngắn là nắm được nhưng sẽ giúp cho việc lập trình của chúng ta dễ thở hơn rất nhiều.

Tóm lại

Nắm vững những kiến thức trên là hoàn toàn đủ cho các bạn tự tin đi apply vị trí Fresher/Junior rồi, đủ để ở level “chỉ đâu đánh đấy”, sếp bảo gì làm nấy, còn để lên cao hơn thì sẽ cần thêm nhiều kỹ năng nữa, hẹn các bạn ở các phần sau nha. 

Trên đây thì cũng chỉ là kinh nghiệp cá nhân của mình, nếu có gì thiếu sót mong các bạn góp ý nha.

Mr.Chí tham gia các hội thảo