Home Blog Page 34

Tận dụng phong cách xử trí lỗi của Rust trong lập trình web

Làm thế nào để tận dụng phong cách xử trí lỗi của Rust trong lập trình web?

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

Gần đây, tôi chuyển đổi website này sang viết bằng Rust và rất tâm đắc với phong cách xử trí lỗi (error handling) của Rust, khi ứng dụng vào việc viết web. tôi sẽ trình bày tại sao.

Trước Rust, hầu hết các ngôn ngữ lập trình tôi kinh qua đều dùng phong cách xử trí lỗi là exception handling. Một hàm đang chạy nửa chừng, nếu gặp lỗi sẽ bắn ra một exception và dừng ngay tại đó. Hàm nào gọi nó bên ngoài sẽ dùng cấu trúc try ... excepttry ... catch để phòng bị, bắt những exception này và có hướng xử trí tương ứng khi exception xảy ra. Cách làm này có ưu điểm là không cần nghĩ nhiều, giúp lập trình viên làm nhanh, cho ra sản phẩm lẹ. Tuy nhiên nó có nhược điểm là nhìn vào signature (mô tả kiểu dữ liệu đầu vào và đầu ra) của một hàm, không có cách nào biết được hàm đó có thể bắn ra những exception nào. Rust thì khác, những lỗi nào có thể xảy ra sẽ buộc phải khai báo trong signature của hàm. Ví dụ nhìn signature của hàm dùng để parse một chuỗi thành số nguyên:

fn from_str(src: &str) -> Result<i8, ParseIntError>

ta biết ngay nếu thất bại (ví dụ parse chuỗi “z” thành số) thì hàm sẽ trả về một giá trị thuộc kiểu ParseIntError, từ đó giúp ta viết code cho phần xử trí lỗi nhanh hơn, tiện hơn, tự tin hơn (không sợ bỏ sót).

Ghi chú nhỏ: Nói một cách chính xác thì những hàm có kiểu trả về Result như trên không trả về giá trị mong muốn một cách trực tiếp, mà bọc trong một enum kiểu Result để chỉ thị trạng thái thành công hay thất bại. Ví dụ với hàm parse phía trên, nếu ta gọi i8::from_str("1") thì nhận được Ok(1), nếu gọi i8::from_str("z") thì nhận được Err(e) với e thuộc kiểu ParseIntError.

Đọc tới đây, người chưa viết Rust chắc sẽ thắc mắc: “Ủa, vậy là không làm nhanh được nhỉ. Ví dụ với phong cách exception, khi tôi đang định nghĩa một hàm cho người khác sử dụng, và gọi nhiều lớp hàm con, nếu một trong những hàm con bắn ra exception, và tôi muốn chuyển tiếp exception đó ra ngoài, thì tôi chẳng cần phải viết thêm code gì cả, cứ để mặc. Còn với Rust thì cứ phải kiểm tra giá trị trả về của hàm con, rồi dùng return Err(e) để trả ra bên ngoài”. Vâng, đúng là như vậy, nhưng Rust có một cú pháp để làm việc ấy một cách rất ngắn gọn, đó là dùng toán tử ?. Ví dụ xem đoạn code sau trong một sản phẩm khác của tôi (Duri):

fn main() -> eyre::Result<()> {
    let opts = Opts::parse();
    let l = opts.verbose.log_level_filter();
    Logger::try_with_str(l.as_str())?.start()?;
    color_eyre::install()?;
    // More code
}

Các bước Logger::try_with_str()logger.start() đều có thể xảy ra lỗi (ví dụ tên log level không đúng, thiết bị console chưa sẵn sàng v.v…). Khi ấy toán tử ? sẽ truyền những lỗi ấy lên hàm main() và ngừng hàm main ngay tại bước xảy ra lỗi. Chưa dừng tại đó, toán tử & còn có một tính năng thú vị nữa là tự động chuyển đổi kiểu lỗi, nếu lỗi trả về bởi hàm con khác kiểu với kiểu mà hàm cha mong muốn. Cũng ở ví dụ trên, hàm Logger::start() trả về lỗi FlexiLoggerError trong khi hàm main mong đợi lỗi thuộc kiểu eyre::Report và toán tử & sẽ làm thêm bước chuyển đổi. Tất nhiên, chuyển đổi như thế nào thì & không tự “chế” được mà phải nhờ vào việc một trong hai kiểu (nguồn và đích) kia phải implement trait From hoặc Into.

  Viết Reminder Parser dùng Rust

  Rust và Lập trình Web

Thế thì những điều kia liên quan gì tới web? Tôi nóng ruột quá!

Vâng, quay lại với chuyện lập trình web. Để sinh ra response trả về cho người dùng, server có thể phải làm các bước sau, và bước nào cũng có thể gặp lỗi:

  • Kiểm tra xem người dùng đã login chưa. Có thể gặp lỗi khi đang đọc session, từ Redis hay từ file (ví dụ Redis sập hay ổ đĩa bị lỗi).
  • Lôi dữ liệu từ database lên. Có thể gặp lỗi khi hệ thống database cấu hình không đúng, schema không khớp, hay bị treo.
  • Tính toán, xử lý dữ liệu trước khi trả về cho người dùng. Có thể gặp lỗi vì dữ liệu có định dạng không như mong muốn.
  • Dùng template để render dữ liệu. Có thể gặp lỗi vì đường dẫn file bị sai, hay code của template không phù hợp với dữ liệu.

Xem thêm các việc làm Web developer jobs hấp dẫn trên TopDev

Tất cả những lỗi trên, nếu không được bắt và xử trí thì nhẹ sẽ sinh ra nội dung mù mờ khó hiểu (người dùng chỉ thấy trang trắng với dòng chữ “500 Internal Server Error” hoặc “Connection Reset”) hoặc nặng thì sẽ sập luôn cả ứng dụng server. Nếu có bắt lỗi thì ta sẽ có hành xử tốt hơn:

  • Hiện thông báo để cáo lỗi người dùng, và giữ được giao diện chuẩn của trang web.
  • Ghi log để giúp lập trình viên điều tra nguyên nhân gây ra lỗi, để sửa code cho đúng.
  • Giữ cho server không bị sập, tiếp tục phục vụ các request khác.

Để đạt được điều trên thì ta nên thiết kế hàm handler (trả về response tương ứng với request) dưới dạng một hàm trả về Result, trong đó Ok tương ứng với response thành công, và Err tương ứng với response báo lỗi, kết hợp với toán tử ? để viết code ngắn hơn.

Thật may là đa số các framework web của Rust đều hỗ trợ các handler kiểu này. Dưới đây tôi sẽ minh họa với framework Axum.

Ví dụ source code của hàm dùng để trả về bài viết mà bạn đang xem:

pub async fn show_post(
	// Params...
) -> AxumResult<Html<String>> {
	// Code...
	let post = get_detailed_post_by_slug(slug, &db)
        .await
        .map_err(PageError::EdgeDBQueryError)?
        .ok_or((StatusCode::NOT_FOUND, "No post at this URL"))?;
	// Code...
}

Tôi khai báo kiểu trả về của hàm là AxumResult<Html<String>>, đây là cách viết tắt, dùng type alias, thực ra nó sẽ là Result<Html<String>, ErrorResponse>. Tức là nếu xảy ra lỗi, hàm cần trả về giá trị thuộc kiểu axum::response::ErrorResponse, để Axum tạo ra response cho người dùng.

Lưu ý rằng hàm handler trong Axum không nhất thiết phải có kiểu trả về Result<T, ErrorResponse>, nó được phép có kiểu trả về Response hay impl IntoResponse nữa. Trong bài này tôi tập trung vào <Result<T, ErrorResponse> để vừa tận dụng được toán tử ? cho code ngắn hơn và để luồng code trông tường minh, rạch ròi được trạng thái bình thường / lỗi.

Xem lại ví dụ show_post phía trên, tại dòng code:

let post = get_detailed_post_by_slug(slug, &db)
	.await
	.map_err(PageError::EdgeDBQueryError)?
	.ok_or((StatusCode::NOT_FOUND, "No post at this URL"))?;

tôi đã hai lần dùng ? để kiểm tra và trả về lỗi.

Đầu tiên, hàm get_detailed_post_by_slug có signature là:

async fn get_detailed_post_by_slug(slug: String, client: &Client) -> Result<Option<DetailedBlogPost>, edgedb_tokio::Error>

Đây là hàm lấy dữ liệu từ EdgeDB nên khi gặp lỗi, nó sẽ trả về lỗi thuộc kiểu edgedb_tokio::Error. Tuy nhiên edgedb_tokio::Error không được implement trait IntoResponse nên ta không dùng trực tiếp nó làm giá trị trả về cho handler show_post được. Ta sẽ dùng method map_err() để chuyển đổi nó qua kiểu lỗi trung gian PageError, là kiểu mà ta tự định nghĩa và thêm implement trait IntoResponse. Việc ứng dụng kiểu lỗi trung gian này sẽ được trình bày sau.

Tiếp đến, nếu việc giao tiếp với EdgeDB thành công, hàm get_detailed_post_by_slug sẽ trả về dữ liệu kiểu Option<DetailedBlogPost>, tức là sẽ lấy được DetailedBlogPost hoặc không. Option là kiểu dữ liệu đặc biệt của Rust, bên cạnh Result, mà những người đến từ các ngôn ngữ lập trình hướng đối tượng truyền thống sẽ ngạc nhiên. Trong Rust không có kiểu dữ liệu null / None / nil như các ngôn ngữ phổ biến khác. Thay vào đó, để diễn tả được sự thiếu vắng dữ liệu, Rust dùng Option, là một enum với hai mặt Some và None. Cụ thể, nếu hàm get_detailed_post_by_slug lấy được dữ liệu, nó trả về Some(DetailedBlogPost) và nếu không có dữ liệu, nó trả về None. Giống như ResultOption bao trùm dữ liệu thực nên bạn buộc phải ứng xử với trạng thái “thành công / lỗi”, “có dữ liệu / không có dữ liệu” rồi mới lấy được giá trị thực. Đây là cách Rust khiến bạn lập trình cẩn thận, kỹ càng hơn và tránh được bug.

Quay lại hàm show_post, nếu người dùng truy cập vào một URL không có thật, không tương ứng với bài post nào, thì ta nên trả về lỗi 404 Not Found. Tình huống “URL không có thật” đó tương ứng với lúc get_detailed_post_by_slug trả về None, bởi vậy ta có đoạn .ok_or((StatusCode::NOT_FOUND, "No post at this URL"))? là để trả về response với status 404 (Not Found) nếu get_detailed_post_by_slug trả về None.

Nếu dùng một trình soạn thảo có hỗ trợ inlay hint, bạn có thể thấy được giá trị trả về của từng đoạn trong một dòng code, và thấy được tác dụng của ? tại từng đoạn, vừa khiến hàm trở về sớm trong điều kiện không mong muốn, vừa “bóc vỏ” ResultOption để lấy giá trị thực trong điều kiện thành công:

Tận dụng phong cách xử trí lỗi của Rust trong lập trình web

Trong một lần giao tiếp với người dùng, ứng dụng web phải kết tập dữ liệu từ nhiều nguồn, qua nhiều bước xử lý. Mỗi bước đều có thể phát sinh lỗi, nhưng thường thì những lỗi đó đều không thể dùng trực tiếp làm giá trị trả về cho handler được, vì chúng là của các thư viện khác và không implement trait IntoResponse. Khi đó ta sẽ định nghĩa một kiểu lỗi riêng làm trung gian, sẽ được chuyển đổi từ các kiểu lỗi của các thư viện khác, và có implement trait IntoResponse để có thể tạo ra response. Ví dụ khi xây dựng website này thì tôi tạo hai kiểu lỗi: PageError dùng cho các trang bên ngoài, trả về HTML, và ApiError dành cho các đầu API, trả về JSON:

#[derive(Debug, thiserror::Error)]
pub enum PageError {
    #[error(transparent)]
    EdgeDBQueryError(#[from] edgedb_errors::Error),
    #[error(transparent)]
    JinjaError(#[from] minijinja::Error),
    #[error("Permission denied")]
    PermissionDenied(String),
}

impl IntoResponse for PageError {
    fn into_response(self) -> Response {
        // Code to create response for each case of error
    }
}

#[derive(Debug, thiserror::Error)]
pub enum ApiError {
    #[error(transparent)]
    PathRejection(#[from] PathRejection),
    #[error(transparent)]
    JsonRejection(#[from] JsonRejection),
    #[error(transparent)]
    JsonExtractionError(#[from] serde_json::Error),
    #[error(transparent)]
    EdgeDBQueryError(#[from] edgedb_errors::Error),
    #[error("{0} not found")]
    ObjectNotFound(String),
    #[error("Please login")]
    Unauthorized,
    #[error("Error logging in")]
    LoginError(String),
    #[error("Not enough data")]
    NotEnoughData,
    #[error(transparent)]
    ValidationErrors(#[from] validify::ValidationErrors),
    #[error("Other error: {0}")]
    Other(String),
}

impl IntoResponse for ApiError {
    fn into_response(self) -> axum::response::Response {
        // Code to create response for each case of error
    }
}

Ở đây, tôi dùng thư viện thiserror để giúp viết code chuyển đổi ngắn gọn hơn. Ngoài ra, kiểu lỗi trung gian này nên ở dạng enum để có thể có cách lưu trữ thông tin riêng cho từng trường hợp lỗi, và tạo ra response khác nhau cho từng trường hợp (ví dụ cùng là lỗi nhưng có lúc ta trả về 500, có lúc ta trả về 422).

Thông tin thêm, có thể bạn để ý rằng, mặc dù trên signature của hàm tôi kí hiệu kiểu dữ liệu trả về là ErrorResponse nhưng nhiều lúc trong thân hàm tôi lại viết giá trị trả về là:

(StatusCode::NOT_FOUND, "No post at this URL")
// or
StatusCode::SERVICE_UNAVAILABLE

Đó là nhờ cơ chế trait và toán tử ? của Rust. Bạn có thể xem tài liệu của Axum để biết những kiểu dữ liệu nào có thể được tự động biến đổi thành ErrorResponse. Ví dụ biểu thức tuple sau

(StatusCode::NOT_FOUND, "No post at this URL")

là tương ứng với dòng sau trong tài liệu:

Tận dụng phong cách xử trí lỗi của Rust trong lập trình web

và đến lượt IntoResponse được implement trait From:

Tận dụng phong cách xử trí lỗi của Rust trong lập trình web

nên tuple đó có thể được chuyển đổi tự động.

Như vậy, tôi đã trình bày xong một trường hợp ứng dụng phong cách error handling của Rust. Khi lập trình website này, nhờ luật chặt chẽ của Rust mà tôi tránh được khá nhiều bug, điều dễ xảy ra với các ngôn ngữ khác, từ đó tiết kiệm được thời gian test đi test lại. Đây cũng là một trong những lý do tôi chọn Rust làm ngôn ngữ tiếp theo để đầu tư (sau Python), thay vì chọn Go như khá nhiều đồng nghiệp khác.

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

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

Các bước lập trình PLC cơ bản cho người mới (Phần 2)

Các bước lập trình PLC cơ bản cho người mới

Lập trình PLC đôi khi được đánh giá là khó nhằn cho những anh em mới bắt đầu. Tuy nhiên hướng tiếp cận được đề cập trong bài viết này sẽ giúp anh em dễ dàng hơn khi bắt đầu. Chia nhỏ các bước khi lập trình PLC giúp anh em dễ kiểm soát task tốt hơn và dễ dàng lập trình hơn.

Như đã đề cập ở lập trình PLC phần 1, phần 2 này sẽ đem tới cho anh em 1 ví dụ cơ bản khi lập trình PLC. Ví dụ này tuy đơn giản nhưng lại đầy đủ các bước cần thiết để lập trình PLC.

lap-trinh-plc-1

Hi vọng với 2 bài viết liên quan tới PLC, sẽ giúp đỡ phần nào cho anh em trong quá trình tìm hiểu về lập trình PLC. Chúc anh em xây dựng hệ thống làm việc với PLC thành công, đem vào sử dụng không xảy ra vấn đề gì.

1. Định nghĩa công việc cần làm

Như phần 1, anh em cũng đã biết để điều khiển được PLC, anh em cần có Input, Output và Process. Những yếu tố này là những yếu tố bắt buộc cần có để bắt đầu lập trình với PLC

Bước đầu tiên định nghĩa task của PLC là gì? Để định nghĩa được PLC cần làm gì, anh em có thể phải hỏi nhiều người khác nhau về cách thức hoạt động của máy. Máy đó hoạt động như thế nào?

Lúc nào thì cần PLC can thiệp? Những câu hỏi này cần phải trả lời rõ ràng trước khi anh em bắt đầu code trên PLC.

Cùng xem ví dụ dưới đây:

Các bước lập trình PLC
Nguồn ảnh / Source: accautomation.ca

Hai cảm biến: công tắc giới hạn trên cho biết khi nào piston được rút lại hoàn toàn (khi pistol kéo hết).

Phía dưới anh em có 1 công tắc, công tắc này cho anh em biết khi nào piston được mở rộng hoàn toàn. Phía trên anh em cũng có thể thấy một công tắc chính được sử dụng để bắt đầu quá trình và khi cần thì tắt. Khi bật công tắc chính, piston chuyển động tịnh tiến giữa vị trí kéo dài và thu lại. Khi tắt công tắc chính, piston sẽ trở về vị trí rút lại và tất cả các van điện từ đều tắt.

  Lập trình Arduino không hề khó cho người bắt đầu
  Lộ trình học lập trình C cho người mới bắt đầu

2. Định nghĩa input và output

Sau khi đã hiểu rõ máy móc hoạt động như nào. Giờ là lúc định nghĩa PLC sẽ làm gì cụ thể hơn với input và output. Cùng xem ví dụ dưới đây khi mô tả input và output.

Tất nhiên input sẽ là công tắc, vì bản thân công tắc có thể thay đổi chế độ bật tắt.

Khi anh em đã hiểu rõ phần hoạt động của máy thì input output không còn là vấn đề khó:

  • Công tắc chính – Bật/Tắt
  • Công tắc giới hạn trên – Bật/Tắt
  • Công tắc giới hạn dưới – Bật/Tắt

Với đầu ra (output), như ví dụ được nêu ở phần 1, output đầu ra sẽ là:

  • Down Solenoid – On/Off
  • Up Solenoid – On/Off

Sau khi đã định nghĩa được đầu vào và đầu ra, giờ là lúc lập trình chuỗi logic được định nghĩa từ trước.

Xem thêm tuyển dụng iOS hấp dẫn trên TopDev

3. Chuỗi logic

Phần này là phần tốn thời gian nhất khi lập trình với PLC. Bước 1, anh em hiểu hệ thống sẽ cần làm gì. Bước 2, anh em hiểu trong hệ thống PLC sẽ cần làm gì. Bước số 3 sẽ là bước hiện thực hoá chuỗi logic cần có ở PLC.

Để hiểu được logic, anh em có thể dùng chart hoặc sequence để mô tả phần logic sẽ dự định làm. Kinh nghiệm ở đây là nhiều anh em bỏ qua bước mô tả trình tự cần làm. Dẫn tới thiếu rất nhiều logic hoặc sai logic khi thực hiện viết vào PLC.

Các bước lập trình PLC
Nguồn ảnh / Source: accautomation.ca

Như bảng tuần tự được mô tả ở đây. Anh em sẽ thực hiện tuần tự các thao tác từ trái sang phải, từ trên xuống dưới. Trạng thái 1 (bật), và 0 (tắt) hoặc X (X ở đây anh em có thể hiểu là không quan trọng), in cũng được mà out cũng ok.

Lưu ý: Anh em sẽ nhận thấy rằng ở bước 2 sau khi bật công tắc chính, điện từ lên sẽ được kích hoạt. Vì vậy, piston luôn rút lại khi bật công tắc chính lần đầu tiên. Hoạt động này đã được chọn trong quá trình phát triển trình tự logic trong PLC này.

4. Lập trình PLC

Sau khi đã định nghĩa rõ các bước, giờ là lúc anh em bắt tay vào viết code PLC. Khi đã có đầy đủ phần logic được mô tả, anh em có thể code PLC bằng nhiều ngôn ngữ, nhưng trong phạm vi bài viết này, ladder logic sẽ được sử dụng.

Anh em code các ngôn ngữ khác có thể tham khảo thêm ở các bài viết khác.

Các bước lập trình PLC
Nguồn ảnh/ Source: accautomation.ca

5. Test thử chương trình PLC đã viết

Sau khi đã phát triển PLC, giờ là lúc kiểm tra các logic PLC đã viết. Các bước được mô tả trước đó giờ là công cụ hữu hiệu để anh em kiểm tra đối chiều các phần code PLC đã viết.

Kiểm tra phát triển chương trình PLC là một bước quan trọng để kiểm tra tất cả các điều kiện logic. (Chu kỳ nguồn, Lỗi cảm biến, An toàn, v.v.).

Tất nhiên phần kiểm tra tuỳ vào từng dự án, anh em có thể kiểm tra chương trình bằng máy mô phỏng hoặc máy thật. Ở bước này, có lỗi gì anh em có thể sửa chữa ngay.

Các bước lập trình PLC
Nguồn ảnh/ Source: accautomation.ca
Ngoài ra, anh em có thể hỏi những người am hiểu nhất về thiết bị để xem liệu thiết bị có hoạt động như họ mong đợi hay không. Phần này tương tự như feedback của end user, những người trực tiếp sử dụng máy.

6. Tham khảo

Mong rằng với 5 bước được đề ra trong bài viết này, anh em khi bắt đầu phát triển PLC sẽ dễ dàng hơn. Anh em cũng có thể tham khảo thêm các bài viết dưới đây trước khi bắt đầu dự án PLC của riêng mình.

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

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

Xem thêm:

C++ Developer là gì? Cách học lập trình C++ hiệu quả

C++ Developer là gì? Cách học lập trình C++ hiệu quả

Trong ngành lập trình, C được xem như cha đẻ của rất nhiều các ngôn ngữ lập trình khác nhau. C++ được xem như một phần mở rộng của ngôn ngữ lập trình C với phần class, nhờ tính tối ưu của nó mà C++ được sử dụng để viết, tạo ra rất nhiều phần mềm hệ thống trong ngành khoa học máy tính. Từ đó mà C++ Developer luôn là một vị trí được nhiều công ty, tổ chức tuyển dụng với mức đãi ngộ cao. Bài viết hôm nay chúng ta cùng tìm hiểu C++ Developer là gìcách học hiệu quả trở thành một lập trình viên C++ nhé.

Ngôn ngữ lập trình C++

C++ là ngôn ngữ lập trình bậc trung được phát triển từ năm 1979 dựa trên C; nó bao gồm sự kết hợp của cả các tính năng của ngôn ngữ lập trình bậc cao lẫn lập trình bậc thấp.

Ngôn ngữ lập trình C++

C++ có thể chạy được trên nhiều nền tảng khác nhau từ Windows, Mac OS đến các phiên bản của UNIX. Trải qua hơn 30 năm phát triển, C++ được bổ sung rất nhiều tính năng để trở thành một ngôn ngữ thương mại và phổ biến của nhiều lập trình viên. Tính năng của C++:

  • Lập trình tổng quát
  • Lập trình hướng đối tượng
  • Lập trình thủ tục
  • Lập trình đa hình
  • Các công cụ thao tác với bộ nhớ cấp thấp

Trong thực tế, C++ đang được sử dụng trong nhiều lĩnh vực như Games, hoạt hình, tạo ra các trình biên dịch, hệ điều hành. C++ cũng luôn đứng trong top 10 những ngôn ngữ lập trình phổ biến nhất hiện nay.

  Top 5 câu hỏi phỏng vấn C++ hay và khó

  So sánh giữa C++ và Golang 

C++ Developer là gì?

Lập trình viên C++ là những người sử dụng ngôn ngữ C++ để xây dựng, phát triển hay thực hiện các tính năng của chương trình, phần mềm. C++ được ưa chuộng sử dụng trong các ngành khoa học máy tính, kỹ thuật và phân tích toán học; vì vậy lập trình viên C++ thường là những người có kiến thức chuyên sâu về hệ thống, về ngành khoa học máy tính và thường xuyên làm việc, tương tác với tài nguyên phần cứng và hệ thống cấp thấp.

C++ Developer là gì?

Công việc thường ngày của những lập trình viên C++ bao gồm:

  • Phân tích yêu cầu khách hàng qua các tài liệu kỹ thuật. Đề ra giải pháp kỹ thuật cần thiết để đáp ứng yêu cầu
  • Thiết kế và phát triển các giải pháp phần mềm với ngôn ngữ C++
  • Tối ưu hóa, bảo trì, duy trì hoạt động của các hệ thống phần mềm
  • Xây dựng các ứng dụng bao gồm ứng dụng desktop (máy tính để bàn) , ứng dụng di động và các hệ thống nhúng
  • Thực hiện kiểm thử, phân tích, sửa lỗi

Nhiều vị trí tuyển dụng C++ đãi ngộ tốt trên TopDev

Kỹ năng của C++ Developer

Lập trình viên C++ cần được trang bị các kỹ năng cứng và kỹ năng mềm, cụ thể:

  • Thông thạo ngôn ngữ C++, cần có sự quan tâm đặc biệt đến cấu trúc source code của dự án cho khả năng mở rộng và quản lý trong tương lai
  • Có kiến thức, kỹ năng về lập trình hướng đối tượng để giải quyết các vấn đề lập trình một cách hiệu quả
  • Nên có kỹ năng, hiểu biết cơ bản về cơ sở dữ liệu quan hệ và cơ sở dữ liệu tài liệu
  • Kỹ năng tự học hỏi, tìm tòi và phát triển bản thân, luôn cập nhật các tính năng liên quan đến phiên bản mới

Kỹ năng của C++ Developer

Phương pháp học C++

C++ hay C là những ngôn ngữ lập trình thường được sử dụng trong việc giảng dạy lập trình ở các trường Đại học, và cũng là một ngôn ngữ quan trọng trong các dự án, quá trình nghiên cứu của các lập trình viên. Khi bắt đầu học C++, bạn có thể sẽ gặp khó khăn vì nó cần phải hiểu được nguyên lý hoạt động của chương trình với một số thiết lập trên các nền tảng hệ điều hành khác nhau.

Một số gợi ý sau có thể giúp bạn dễ tiếp cận học và trở thành C++ Developer hơn:

  • Lựa chọn sách dạy C++ và học theo: C++ là một ngôn ngữ lâu đời, vì thế có rất nhiều sách hay ebook nổi tiếng và hữu ích; bạn có thể tham khảo và đọc hiểu thêm để nắm rõ hơn về ngôn ngữ này. Một số quyển C++ bạn có thể tham khảo: The C++ Programming Language (4th Edition) By Bjarne Stroustrup, C Programming Language (2nd Edition) By Brian W. Kernighan & Dennis M. Ritchie, Head First C: A Brain-Friendly By David Griffiths and Dawn Griffiths
  • Sử dụng lưu đồ chương trình: lưu đồ (sơ đồ khối) là một loại sơ đồ biểu diễn thuật toán hoặc một quá trình. C++ là ngôn ngữ lập trình thủ tục, vì thế luồng xử lý logic là điều quan trọng trong chương trình C++; sử dụng lưu đồ giúp bạn viết code một cách tốt hơn và logic hơn.
  • Thực hành nhiều nhất có thể: Bất cứ khi học một ngôn ngữ lập trình nào thì việc thực hành viết code sẽ giúp bạn va chạm và tìm cách giải quyết bài toán một cách tốt nhất. Bạn cũng nên tham khảo các source code của người khác cùng với việc sử dụng các thư viện trong C++ để tăng khả năng viết code hiệu quả.
  • Tham gia các cộng đồng C++: C++ là một ngôn ngữ lâu đời với mức độ phổ biến cao, vì thế cộng đồng lập trình viên C++ cũng rất đông với sự hỗ trợ tuyệt vời. Bạn nên tham gia vào một số cộng đồng uy tín giúp đỡ cho việc học lập trình của bạn. Ngoài ra cũng có thể sử dụng các cộng đồng chung nổi tiếng như StackOverflow, Codechef, CodeProject để trao đổi và tìm hiểu sâu hơn về C++.

Kết bài

Qua bài viết này chúng ta đã cùng nhau tìm hiểu về C++ Developer là gì và một số gợi ý về cách học lập trình C++ hiệu quả. C++ luôn là một ngôn ngữ được đánh giá cao về mặt hiệu năng và tối ưu với tốc độ cao, vì thế trong tương lai nó vẫn sẽ là một ngôn ngữ hot với nhu cầu tuyển dụng cao. Hy vọng bài viết này hữu ích dành cho bạn và hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

So sánh AWS, Google Cloud và Azure năm 2024

So sánh AWS, Google Cloud và Azure năm 2023

Giải pháp cloud (cloud solutions) là cơ hội để các doanh nghiệp chuyển đổi số cho doanh nghiệp của mình. Tạo ra các cơ hội kinh doanh mới, các giải pháp đột phá.

Áp dụng cloud, theo thống kê của McKinsey sẽ giúp doanh nghiệp tăng năng suất lên tới hơn 30%, giảm chi phí tới hơn 20% và đẩy nhanh quá trình phát triển, triển khai các sản phẩm mới. Về doanh thu còn tăng hơn tận 20%.

So sánh AWS, GCP và Azure năm 2023

Rõ ràng mà nói, trong lĩnh vực điện toán đám mây (cloud) thì 3 ông lớn là Amazon AWS, Google Cloud Platform (GCP)Microsoft Azure đang thống trị thị trường. Khách hàng của các công ty này phục vụ cũng là những tập đoàn lớn như Netflix, Boeing, Golmansachs. Xu hướng chuyển lên cloud là xu hướng không thể đảo ngược.

Chính vì vậy, bài viết này đem tới cho anh em một cái nhìn tổng quan, cũng như so sánh chi tiết về 3 ông lớn này.

Bắt đầu thôi anh em!

1. Tại sao phải so sánh

So sánh nhằm cung cấp cho anh em cái nhìn vừa tổng quan vừa là chi tiết từng bên cung cấp. Có cái nhìn tổng quan này giúp anh em dễ so sánh nếu phải đưa ra lựa chọn. Tất nhiên còn phụ thuộc vào dự án, công nghệ và nhiều yếu tố khác.

Tuy nhiên kiến thức tổng quan này sẽ giúp ích anh em rất nhiều trong việc đưa ra lựa chọn. Trước khi bắt đầu với chi tiết, dưới đây sẽ là một số tổng kết rút ra sau khi so sánh. Có gì anh em đọc trước.

1.1 Những so sánh chính

    • Ông AWS cung cấp giải pháp cloud với hạ tầng hoàn thiện và trải rộng trên nhiều lĩnh vực.
    • Ông Azure thì cũng mạnh cloud, nói về toàn diện thì khá toàn diện bởi không chỉ có Cloud mà còn tích hợp thêm nhiều thứ khác trong hệ sinh thái của Microsoft.
    • Ông Google thì mạnh ở data analytics và machine learning, cho phép các công ty sử dụng hoặc áp dụng các công nghệ tiên tiến.

  Hướng dẫn tạo Let’s Encrypt Certificates dưới local và import vào AWS Certificate Manage
  Triển khai Cloud tại Digital Banking: Đâu là yếu tố để đảm bảo chuyển đổi thành công?

1.3 So sánh vui

“AWS and GCP are the Volkswagen and Volvo of cloud computing. You always know you can rely on them for any service and that they’ll take you where your business needs to be with predictable performance. Meanwhile, Azure is akin to a sports car with impressive technology under the hood, but it’s not for everyone.” AWS và GCP là Volkswagen và Volvo trong giới cloud computing. Bạn luôn biết rằng bạn có thể tin cậy vào họ cho bất kỳ dịch vụ nào họ đưa ra và họ sẽ đưa bạn đến cái mà doanh nghiệp của bạn cần với hiệu suất có thể dự đoán được. Trong khi đó, Azure giống như một chiếc xe thể thao với công nghệ ấn tượng bên dưới mui xe, nhưng nó không dành cho tất cả mọi người.

Đây là đánh giá của công ty công nghệ Acropolium. Họ đã theo dõi quá trình phát triển của cloud từ những năm 2009 (đối với AWS), Azure là từ năm 2011, DigitalOcean và OpenStack là từ những năm 2013.

Tham khảo việc làm Cloud cao, hấp dẫn trên TopDev!

1.4 Thị phần của 3 ông lớn

Các doanh nghiệp ngày nay nhận thấy tiềm năng to lớn của cloud computing. Việc thanh toán cho những gì mình sử dụng (pay as you go) lại là điểm cộng lớn khi chuyển đổi lên cloud. Thay vì setup cho thừa mứa như trước đây với chi phí cao, các doanh nghiệp giờ chỉ trả tiền cho những gì họ sử dụng.

Ngoài ra các vấn đề về bảo mật cũng được các nhà cung cấp dịch vụ cloud đảm bảo, càng củng cố thêm cho quyết định dịch chuyển lên cloud đối với các doanh nghiệp từ lớn, vừa cho tới nhỏ.

Trong năm 2022, thị trường cloud được định giá 484 tỷ USD và dự kiến ​​sẽ tăng trưởng khoảng 14% mỗi năm từ năm 2023 đến năm 2030. Một con số khủng khiếp

Nói về thị phần năm 2022:

    • Amazon Web Services — 32%
    • Microsoft Azure — 23%
    • Google Cloud Platform — 10%

Ông lớn AWS tỏ ra là người mạnh mẽ nhất trong cuộc đua tam mã này rồi!

2. AWS (Amazon Web Service)

Nếu lựa chọn AWS là nền tảng của công ty, anh em sẽ có một vài ông hàng xóm cũng sử dụng AWS. Tất nhiên những ông hàng xóm này đều là những ông hàng xóm nổi bật

    • Netflix
    • Expedia
    • Apple
    • Verizon
    • Philips

Đây chỉ là một vài cái tên nổi bật, còn hàng triệu các doanh nghiệp nhỏ và vừa khác còn sử dụng AWS nữa nha anh em.

3. Azure

Nếu lựa chọn Microsoft Azure, cũng có một vài ông hàng xóm nổi đình nổi đám bao gồm

    • PepsiCo
    • Boeing
    • Adobe
    • Bosch
    • Uber

3. Google Cloud

Google Cloud cũng không khiến anh em thất vọng, dùng GCP sẽ đồng hành cùng với

    • Goldman Sachs
    • eBay
    • Twitter
    • PayPal
    • Etsy

Google Cloud

Một số công ty áp dụng chiến lược đám mây để đảm bảo an toàn cho hệ thống nhờ sức mạnh tính toán ngày càng mạnh mẽ và phạm vi dịch vụ đám mây toàn diện hơn. Biết đâu được đây cũng là kèo anh em đặt an toàn nhất.

4. Bảng so sánh

Sau khi điểm qua danh sách một số ông hàng xóm, giờ là lúc đi vào so sánh 3 dịch vụ đám mây phổ biến hiện nay. Để xem chúng có gì giống và khác nhau

Tiêu chí AWS Azure Google Cloud
Tốt với số lượng services (Suite of services) 200+ 200+ 100+
Cloud regions (khu vực có cloud) 31 60+ 37
Availability zones (cái này đánh vào tính availability – sẵn sàng) 99 3 cái mỗi region 112
Độ phủ sóng (Global coverage) 245 quốc gia và vùng lãnh thổ 140 quốc gia 200+ quốc gia và vùng lãnh thổ
Compliance offerings (dịch vụ cung cấp) 143 100+ 100+
Compute (tính toán) Amazon Elastic Compute Cloud Azure Virtual Machines, Azure Container Instances, Azure App Service, etc Google Compute Engine
Relational and non-relational databases (Database RDS và non RDS) 15 10 9
Storage (Lưu trữ) Simple Storage Service Azure Blob Storage Cloud Storage
Hybrid and multi-cloud strategy support AWS Outposts Azure Stack Anthos
IoT AWS IoT Core Azure IoT Hub Cloud IoT Core
Serverless AWS Lambda Azure Functions Cloud Run
AI/ML (trí tuệ nhân tạo, học máy) Amazon SageMaker, Amazon Augmented AI, Amazon Forecast, Amazon Personalize, … Applied AI Services, Amazon Bot Services, Azure Cognitive Services, Anomaly Detector, Kinect DK Vertex AI, Speech-to-Text, Text-to-Speech, Translation AI, Dialogflow
Giá cả Pay-as-you-go (xài nhiêu trả nhiêu) Pay-as-you-go (xài nhiêu trả nhiêu) Pay-as-you-go (xài nhiêu trả nhiêu)
Có free tier Free account + 12-month Free account + $200 credit to spend in the first 30 days Free account + $300 credit to spend

5. Một số tiêu chí

Sau khi đã xem xét thông tin toàn bộ các tiêu chí so sánh, giờ là lúc tiếp cận sâu hơn các tiêu chí so sánh đã liệt kê ở phía trên.

5.1 Availability (tính khả dụng)

Azure có tầm khoảng 3 availability trong mỗi khu vực, (tổng là hơn 60 khu vực), vậy ông Azure này có thể đảm bảo tính khả dụng cho dịch vụ của anh em cao hơn, đồng thời delay – độ trễ thấp hơn ở một số khu vực khác.

Nhưng về độ phủ sóng, Azure có vẻ lại hụt hơi hơn so với AWS và GCP, nên tính về tiêu chí này, nếu không thực sự quan trọng các tiêu chí SLA hoặc quan tâm tới availability zone. 3 ông lớn này ngang nhau về tính khả dụng.

5.2 Compliance offerings

Cả 3 ông này đều cung cấp nhiều hơn 100 dịch vụ, vậy yếu tố quyết định lựa chọn cái nào là ngành của anh em là gì? Ví dụ nếu anh em cần SaaS, cần chọn các dịch vụ cloud có HIPAA, EPCS.

Vậy tiêu chí này tuỳ thuộc vào nhu cầu của dự án anh em dự định sẽ triển khai nhé!

5.3 Compute (tính toán)

Ở khả năng tính toán thì AWS IaaS mà cụ thể ở đây là EC2, hơn 400 instances và 400 Gbps Ethernet. Song hành với đó, Azure’s Virtual Machines của Azure và Google’s Compute Engine (GCP) cũng cho phép mở rộng nhanh chóng. Với tiêu chí này, cả 3 ông đều đáng để cân nhắc.

Compute (tính toán)

5.4 Databases

Ở tiêu chí này, AWS tỏ ra vượt trội hơn về hệ cơ sở dữ liệu. AWS cung cấp tới 15 loại Database, ngoài ra ở RDS và non RDS, AWS còn cung cấp Amazon Aurora và Amazon DynamoDB. Azure và GCP chỉ cung cấp khoảng 10 loại DB (tất nhiên đây là những loại phổ biến).

Như Azure, RDS và non RDS sẽ là Azure SQL và Azure Cosmos DB. Phía GCP lần lượt là Cloud SQL và Cloud Bigtable.

6. Tổng kết

6.1 Azure

Một số yếu tố anh em có thể cân nhắc khi sử dụng Azure:

    • Hơn 95% công ty trong danh sách Fortune 500 lựa chọn Azure
    • 40% người dùng Azure ở Mỹ
    • Về tập khách hàng của Azure, theo số lượng nhân viện,thì số lượng nhân viên từ 0 đến 50 (29%), 51-100 (26%) và 101-500 (25%) nhân viên.
    • Top 5 business sử dụng Azure bao gồm: bán lẻ, công nghệ thông tin và dịch vụ, phần mềm máy tính, xây dựng và ô tô.
    • Về giá cả, 37% người dùng Azure sử dụng hoặc biết tới chiết khấu khi đặt hàng sử dụng Azure trong thời gian dài

6.2 GCP

    • 51% người dùng Google Cloud là các công ty nhỏ có tối đa 50 nhân viên
    • 59% khách hàng của GCP ở Mỹ, 7% ở Anh và 5% ở Canada
    • Về top 5 business sử dụng GCP bao gồm: bán lẻ, xây dựng, chăm sóc sức khỏe, công nghệ và dịch vụ thông tin và phần mềm máy tính
    • Về chiết khấu thì GCP chỉ đạt mức 26% người dùng sử dụng

6.2 AWS

    • 10% người dùng chọn AWS là các công ty lớn với hơn 1000 nhân viên
    • 52% khách hàng của Amazon AWS tại Mỹ và 7% ở Anh
    • 5 lĩnh vực kinh doanh (top business) gồm bán lẻ, phần mềm máy tính, công nghệ thông tin và dịch vụ, xây dựng, y tế
    • AWS ECS/EKS vượt qua Docker để giành danh hiệu số lượng người dùng nhiều nhất với 51% người dùng
    • 36% khách hàng AWS có sử dụng chiết khấu và 31% ưu tiên sử dụng tiết kiệm

Với các thông tin được cung cấp ở đây, hi vọng anh em sẽ có cái nhìn tổng quan đầy đủ về 3 ông lớn trong nhóm dịch vụ Cloud.

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
Có thể bạn quan tâm:

CodeMirror là gì? – Khung soạn thảo Code và Markdown hiệu quả

CodeMirror là gì? - Khung soạn thảo Code và Markdown hiệu quả

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

inputtextarea là hai thẻ mà HTML định nghĩa để giúp chúng ta lấy được dữ liệu người dùng nhập vào. input phù hợp trong trường hợp nội dung nhập vào tương đối ngắn và ngược lại – textarea thường là một cái gì đó rất dài và xuống dòng. Sau này tìm hiểu thêm, tôi được biết đến một cách khác nữa để lấy được dữ liệu người dùng là contenteditable, nhưng ngược lại với input và textareacontenteditable cho phép người dùng chỉnh sửa trực tiếp mã HTML. Chính vì thế dữ liệu hiển thị trong contenteditable vô cùng đa dạng.

Có một hạn chế là hai thẻ trên chỉ đơn giản là cho người dùng nhập vào những dòng chữ, thuần kí tự. Nếu muốn làm gì đó trong những nội dung này, ví dụ như định dạng chữ, highlight cú pháp, tạo shortcut… thì quả là một vấn đề khó khăn. Do đó, nếu chỉ sử dụng chúng một cách đơn thuần, chúng ta khó mà có thể tạo ra được một trình soạn thảo văn bản có định dạng phong phú. contenteditable thì lại “dính” quá nhiều mã HTML, khó có thể lọc ra được nội dung của người dùng đang nhập. Chưa kể, mỗi trình duyệt lại có cách triển khai contenteditable khác nhau cho nên nhiều khi chúng sẽ hoạt động một cách khó hiểu.

  Thuật toán tìm kiếm nội suy trong JavaScript

  Bạn biết gì về thuật toán Radix Sort trong JavaScript?

Vì lẽ đó, có khá nhiều thư viện Text Editor được ra đời và cung cấp tính năng soạn thảo, định dạng văn bản rất mạnh mẽ. Có thể kể đến những cái tên như TinyMCECKEditorWYSIWYG… Điểm chung của những công cụ này là chúng có giao diện đẹp mắt, hiện đại, với các thanh công cụ hỗ trợ định dạng văn bản như một trình soạn thảo thực thụ. Sử dụng trong những trường hợp cần nhập vào nội dung không chỉ đơn giản là thuần chữ, mà còn là cách trình bày, định dạng, hình ảnh… Hầu hết chúng đều cho đầu ra là các đoạn mã HTML, chỉ cần lưu lại và trả về cho trình duyệt hiển thị là đã có trang hiển thị “y xì đúc”.

Mạnh mẽ là thế nhưng tất cả chúng hầu như lại không đáp ứng được một nhu cầu đơn giản của tôi là trình soạn thảo Markdown với chế độ xem trước (Preview). Nếu lướt qua những cái tên bên trên, có thể bạn sẽ thấy một vài thư viện có cả chế độ Markdown. Tôi đã thử qua chúng và thấy rằng nó vẫn chưa đáp ứng được, hoặc là chỉ làm nửa vời – nghĩa là không hỗ trợ hết cú pháp của markdown…

Giới thiệu CodeMirror - Khung soạn thảo Code và Markdown hiệu quả

Nhu cầu của tôi khá đơn giản, một cái gì đó nhanh, nhẹ, hỗ trợ highlight cú pháp và có khả năng tùy biến dễ dàng – nghĩa là thêm thắt tính năng nuột nà. Trên đà đó, tôi bắt đầu tìm kiếm sang các keyword khác như là “markdown editor library”… Lúc đó, một ứng cử viên sáng giá xuất hiện là SimpleMDE.

SimpleMDE đúng như cái tên của nó, một trình editor markdown siêu “đơn giản”, tập trung vào viết, hỗ trợ hầu như đầy đủ tiêu chí mà tôi cần. Nhưng khi nghiên cứu đến API của SimpleMDE, một cái tên mới xuất hiện là CodeMirror. Đến đây, tôi hiểu rằng SimpleMDE có thể đang sử dụng CodeMirror ở dưới nền. Tiếp tục tìm hiểu thì quả không sai, CodeMirror cũng là một trình soạn thảo markdown và có lẽ là rất mạnh mẽ.

Codemirror

CodeMirror là một thư viện JavaScript mã nguồn mở được sử dụng để tạo ra trình soạn thảo mã trong các ứng dụng web. Nó cung cấp một giao diện tương tác cho người dùng để viết và chỉnh sửa mã nguồn trong nhiều ngôn ngữ lập trình khác nhau. CodeMirror hỗ trợ các tính năng quan trọng như làm nổi bật cú pháp (syntax highlighting), tự động hoàn thành mã (code autocompletion), kiểm tra lỗi (error checking), thay đổi kích thước linh hoạt và nhiều tính năng khác.

CodeMirror thường được sử dụng trong các dự án web-based, chẳng hạn như trình soạn thảo mã nguồn trong các trang web dự án mã nguồn mở, các môi trường phát triển tích hợp (IDEs), trình biên tập blog với hỗ trợ mã, và nhiều ứng dụng web khác đòi hỏi khả năng soạn thảo mã nguồn.

Tham khảo việc làm JavaScript tại Hồ Chí Minh trên TopDev

Có rất nhiều lợi ích mà Codemirror mang lại để làm lý do cho tôi và nhiều người khác sử dụng nó như:

  • Làm nổi bật cú pháp (Syntax Highlighting), tự động hoàn thành mã (Code Autocompletion, kiểm tra lỗi (Error Checking):
  • Dễ dàng tạo thêm các phím tắt (Keybindings).
  • Tùy chỉnh giao diện theo sở thích.
  • Kho plugin phong phú hoặc tự tạo thêm plugin cho mình.
  • Tương thích đa nền tảng, đây là cái hết sức cần thiết vì tôi không phải mất thêm thời gian để đi fix lỗi trong nhiều trình duyệt khác nhau.
  • Tài liệu và API rõ ràng, cộng đồng sử dụng lớn nên nhanh chóng tìm được sự trợ giúp trong quá trình phát triển.

Hiện tại tôi đang sử dụng CodeMirror ở hai nơi, một là trình soạn thảo bài viết trong AdminCP, hai là khung bình luận của blog. Mặc dù chưa được tối ưu hóa cho lắm như tôi có thể kiểm soát được tính năng mới cho chúng.

Triển khai

Vì là một thư viện JavaScript nên chúng ta có thể dễ dàng nhúng lên bất kì trang web nào. Hoặc nếu đang sử dụng một thư viện như là Vue, React… thì cũng có nhiều packages biến đổi CodeMirror thành components của thư viện.

Dưới đây là một ví dụ sử dụng CodeMirror cho một khung soạn thảo markdown đơn giản.

import {basicSetup, EditorView} from "codemirror"
import {markdown} from "@codemirror/lang-markdown"
import {languages} from "@codemirror/language-data"

let view = new EditorView({
  doc: "Hello\n\n```javascript\nlet x = 'y'\n```",
  extensions: [
    basicSetup,
    markdown({codeLanguages: languages})
  ],
  parent: document.body
})

Bạn đọc có thể xem thêm nhiều ví dụ hơn nữa tại Try CodeMirror. Hoặc xem thêm ví dụ cụ thể cho từng trường hợp sử dụng tại Examples.

Bài viết gốc được đăng tải tại 2coffee.dev

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

Hàng loạt việc làm IT hấp dẫn trên TopDev đang chờ bạn ứng tuyển

RPA là gì? Ưu điểm và tính ứng dụng tuyệt vời

RPA là gì? Xu hướng công nghệ trong kỷ nguyên 4.0

RPA là gì? Trong bối cảnh cuộc cách mạng công nghiệp 4.0 đang diễn ra mạnh mẽ, RPA đã nổi lên như một công cụ quan trọng giúp các tổ chức tối ưu hóa quy trình làm việc, giảm thiểu sai sót và tăng cường năng suất làm việc. Trong bài viết này, chúng ta sẽ cùng khám phá sâu hơn về RPA, từ cách hoạt động cho đến những ứng dụng thực tiễn của RPA trong từng ngành nghề.

Tổng quan về RPA

RPA là gì?

RPA (Robotic Process Automation) là một công nghệ tự động hóa quy trình làm việc bằng cách sử dụng phần mềm để thực hiện các tác vụ và hoạt động theo cách mà con người thường thực hiện. Mục tiêu chính của RPA là giảm bớt công việc thủ công, lặp đi lặp lại và tốn thời gian bằng cách chuyển phần lớn các quy trình do con người thực hiện sang các “robot” phần mềm.

RPA là gì?

RPA có khả năng tương tác với các ứng dụng, hệ thống và giao diện người dùng như con người thông qua các quy tắc và luật lệ được lập trình trước. Điều này cho phép RPA thực hiện các tác vụ như nhập liệu, kiểm tra dữ liệu, xử lý giao dịch tài chính, kiểm tra và cập nhật thông tin trong các hệ thống khác nhau, và nhiều hoạt động khác.

RPA không chỉ được sử dụng trong doanh nghiệp, mà còn trong nhiều lĩnh vực khác như tài chính, chăm sóc sức khỏe, ngành công nghiệp và quản lý dịch vụ. Đối với các nhiệm vụ đơn giản, lặp đi lặp lại và cần tính chính xác cao, RPA đóng vai trò quan trọng trong việc nâng cao năng suất và tối ưu hóa quy trình làm việc.

Phân loại RPA

RPA thường được chia làm 3 loại:

Attended Robot: Đây là loại RPA tương tác chặt chẽ với con người trong quá trình thực hiện nhiệm vụ. Attended Robot thường làm việc trong các tình huống cần sự can thiệp, kiểm tra, hoặc quản lý từ phía con người.

Unattended Robot: Loại này hoạt động hoàn toàn tự động mà không cần sự can thiệp của con người. Chúng thường làm việc theo lịch trình hoặc khi kích hoạt bởi các sự kiện cụ thể.

Hybrid Robot: Hybrid Robot kết hợp tính năng của cả Attended và Unattended Robot. Chúng có khả năng hoạt động tự động trong môi trường không cần sự can thiệp của con người, nhưng cũng có thể tương tác với con người trong những tình huống cần thiết. Tuy nhiên, việc tích hợp Hybrid Robot vào quy trình doanh nghiệp khá phức tạp nên thường được ít sử dụng.

  Câu hỏi phỏng vấn RPA Engineer nhất định bạn phải biết!

RPA mang lại lợi ích gì cho doanh nghiệp?

RPA mang lại lợi ích gì cho doanh nghiệp?

Việc áp dụng RPA (Robotic Process Automation) mang lại nhiều lợi ích quan trọng cho các tổ chức và doanh nghiệp. Dưới đây là một số lợi ích chính của việc sử dụng RPA:

  • Tăng Hiệu Suất và Năng Suất: RPA giúp tổ chức thực hiện các nhiệm vụ tự động, nhanh chóng và chính xác hơn. Điều này dẫn đến tăng cường hiệu suất và năng suất của nhân viên, vì họ không cần phải thực hiện các tác vụ lặp đi lặp lại và thường tốn nhiều thời gian.
  • Giảm Sai Sót: RPA loại bỏ yếu tố con người trong các quy trình làm việc, giảm thiểu sai sót do nhân factor gây ra. Điều này đặc biệt quan trọng trong các nhiệm vụ cần tính chính xác cao, như xử lý tài chính và dữ liệu quan trọng.
  • Tiết Kiệm Thời Gian và Chi Phí: Tự động hóa các tác vụ thường tốn thời gian như nhập liệu, kiểm tra dữ liệu, và xử lý giao dịch giúp giảm bớt thời gian làm việc và tiết kiệm chi phí nhân sự.
  • Linh Hoạt và Tích Hợp: RPA có khả năng tương tác với nhiều hệ thống và ứng dụng khác nhau, không yêu cầu thay đổi cơ sở hạ tầng hiện có. Điều này giúp tạo ra sự linh hoạt trong việc kết nối và tích hợp các hệ thống.
  • Giải Phóng Nhân Lực: Nhân viên có thể chuyển tập trung vào các nhiệm vụ có tính sáng tạo, tư duy chiến lược và tương tác với khách hàng, thay vì phải dành nhiều thời gian cho các tác vụ đơn giản.

Tham khảo việc làm RPA Developer hấp dẫn trên TopDev

Điểm hạn chế của RPA

Mặc dù RPA có nhiều lợi ích, nhưng cũng tồn tại một số hạn chế mà các doanh nghiệp cần xem xét khi triển khai công nghệ này:

  • Khả Năng Tự Động Hóa Giới Hạn: RPA chỉ phù hợp cho các tác vụ lặp đi lặp lại và có quy tắc rõ ràng. Những nhiệm vụ phức tạp và đòi hỏi sự hiểu biết, tư duy sáng tạo, hay quyết định chưa có sẵn trong luật lệ khó có thể được tự động hóa.
  • Phụ Thuộc vào Giao Diện Người Dùng: RPA thường tương tác với các ứng dụng và hệ thống thông qua giao diện người dùng. Nếu có sự thay đổi trong giao diện hoặc quy tắc, RPA có thể gặp khó khăn hoặc không hoạt động đúng cách.
  • Không Thích Nghi Tự Động: RPA không thể tự động thích nghi với các thay đổi không được lập trình sẵn. Khi có sự thay đổi trong quy trình hoặc môi trường, cần có sự can thiệp của con người để cập nhật và điều chỉnh RPA.
  • Thay Đổi Văn Hóa và Quản Lý: Sự áp dụng RPA có thể yêu cầu thay đổi văn hóa tổ chức và quản lý để đảm bảo rằng nhân viên có thể tương tác tốt với các hệ thống tự động hóa mới.

So sánh RPA với AI

So sánh RPA với AI

RPA (Robotic Process Automation) và AI (Artificial Intelligence) là hai khái niệm liên quan đến tự động hóa và trí tuệ nhân tạo, giữa chúng có điểm khác biệt quan trọng. Dưới đây là những điểm khác nhau chính giữa RPA và AI:

RPA AI
Mục Tiêu Chính Tự động hóa các tác vụ lặp đi lặp lại và có quy tắc trong quy trình làm việc Tạo ra khả năng học hỏi và thông minh nhân tạo
Loại Tác Vụ Tác vụ cụ thể và lặp đi lặp lại Tác vụ phức tạp và đòi hỏi thông minh suy luận
Tính Tự Động Hóa Tự động hóa các nhiệm vụ cụ thể theo quy tắc Khả năng học hỏi, tương tác, và suy luận
Dữ liệu Dữ liệu cần được cấu trúc Sử dụng free time data nên không dựa theo một quy trình nào hết
Hiệu Suất Tăng hiệu suất và năng suất với các nhiệm vụ cụ thể Tạo ra khả năng thông minh và dự đoán
Khả Năng Tự động hóa dựa trên quy tắc và quy trình Học hỏi, tương tác, phân tích, dự đoán
Tương tác Vẫn cần sự giám sát từ con người do chưa thể tự đưa ra quyết định Không cần sự giám sát từ con người nhờ khả năng phân tích data và thuật toán
Ví Dụ Nhập dữ liệu từ bảng tính vào hệ thống Phân tích dữ liệu để dự đoán xu hướng

xem thêm: công việc chính của RPA Developer là gì?

Triển vọng phát triển của RPA Developer

RPA là một công nghệ phát triển nhanh chóng và được ứng dụng rộng rãi trong nhiều ngành nghề, lĩnh vực khác nhau. Theo báo cáo của Grand View Research, quy mô thị trường RPA toàn cầu dự kiến sẽ đạt 13.74 tỷ USD vào năm 2028. Điều này cho thấy nhu cầu nhân lực RPA Developer đang ngày càng tăng cao.

Triển vọng phát triển của RPA Developer

Có thể thấy, triển vọng nghề nghiệp của RPA Developer là rất khả quan. Với những kỹ năng và kiến thức chuyên môn cần thiết, RPA Developer có thể tìm được việc làm tại các doanh nghiệp lớn, công ty khởi nghiệp, hoặc các công ty cung cấp giải pháp RPA. Mức lương của RPA Developer cũng khá cao, tùy thuộc vào năng lực và kinh nghiệm của từng cá nhân.

Để trở thành một RPA Developer, bạn cần có kiến thức nền tảng về lập trình, công nghệ thông tin, và các kiến thức chuyên sâu về RPA như:

  • Cơ bản về RPA
  • Các công cụ RPA phổ biến
  • Quy trình thiết kế, xây dựng và triển khai bot RPA
  • Quản lý bot RPA
  • An ninh và bảo mật RPA

Bạn có thể tham gia các khóa học đào tạo về RPA để trang bị cho mình những kiến thức và kỹ năng cần thiết. Ngoài ra, bạn cũng có thể tích lũy kinh nghiệm bằng cách tham gia các dự án RPA thực tế.

Tổng kết

RPA (Robotic Process Automation) đã không chỉ đơn thuần là một khái niệm công nghệ, mà còn trở thành một trong những cột mốc quan trọng trong cuộc cách mạng số hóa hiện đang diễn ra. Sự phát triển của RPA đã mở ra cơ hội mới để các tổ chức tự động hóa các quy trình phức tạp hơn, dự đoán xu hướng, và tương tác thông minh với khách hàng.

RPA là một minh chứng cho sự không ngừng tiến bộ của con người trong việc tận dụng công nghệ để đạt được hiệu suất và hiệu quả tốt nhất. Điều này cũng thể hiện khả năng thích nghi của chúng ta trong thế giới số hóa ngày càng phức tạp, và khẳng định vai trò quan trọng của con người trong việc định hình và tận dụng tiềm năng của công nghệ mới.

Xem thêm:

Việc làm IT lương cao, đãi ngộ hấp dẫn có trên TopDev. Ứng tuyển ngay!

Giới thiệu công cụ Fig.io – chuyên gia nhắc lệnh cho bạn!

Giới thiệu công cụ Fig.io - chuyên gia nhắc lệnh cho bạn!

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Nhớ lại nhiều năm về trước, khi mới bắt đầu học cách sử dụng Linux, điều tôi sợ nhất đó chính là sử dụng lệnh. Sợ vì không biết phải dùng lệnh gì tiếp theo hay kí ức về lệnh gần như là bằng con số 0. Nhiều lần cảm thấy chán nản định thôi không dùng nữa, nhưng một động lực nào đó lại khiến mình phải quyết tâm ở lại.

Đa số hướng dẫn khi thiết lập một công cụ hay phần mềm nào đó đều xuất hiện những dòng lệnh. Ban đầu thì cứ làm theo những gì họ bảo, “copy” và “paste” theo đúng nghĩa, miễn là chạy hoặc cài đặt thành công là được. Dần dần cũng quen, tôi có thể gõ lại được một số lệnh theo thói quen đó. Ví dụ sudo để sử dụng quyền Admin, sudo apt-get update để cập nhật repository của Ubuntu, sudo apt-get install xyz để cài một phần mềm “xyz” nào đó…

Trên đà đó, tôi bắt đầu quen hơn với những câu lệnh khác của Linux. Ví dụ như cd để di chuyển vào thư mục, ls -l hay ll để hiển thị danh sách các thư mục và tệp tin có trong thư mục, rm để xóa, mkdir để tạo, cp để copy, mv để di chuyển… Tôi nhận ra rằng phương pháp học hiệu quả nhất là lặp đi lặp lại cho đến khi bạn thông thạo nó. “Trăm hay không bằng tay quen” quả là một kinh nghiệm quý báu mà các cụ để lại.

Nếu thế tôi đã nhớ tất cả lệnh của Linux? Không đâu! Chắc chắn là không rồi. Số lượng lệnh của Linux là rất nhiều, chưa kể các cờ (flag) khi sử dụng chúng nữa. Ví dụ một lệnh rm thôi chúng ta sẽ có thêm rất nhiều flag kèm theo, thường hay sử dụng là rm -rf để xóa thư mục “cứng đầu” mà không cần xác nhận. Một mẹo để xem các flag của lệnh chính là sử dụng một lệnh khác: man. Ví dụ man rm:

 Giới thiệu công cụ Fig.io

Lệnh man có vẻ sẽ hữu ích trong một số trường hợp. Khi nào chúng ta quên gì đó, hãy dùng man để xem lại tất cả tùy chọn. Dĩ nhiên nếu đang gõ lệnh mà “quên” mất thì sao? Tôi cá là bạn phải xóa hết đi để gõ man, hoặc…mở một tab mới. Vậy thì còn cách nào hay hơn không?

  Tại sao trên Linux hay dùng những định dạng file nén như *.gz, *.xz thay vì *.zip, *.7z?

  Linux - Setup môi trường cho Web Developer

Fig.io là một công cụ trợ giúp gõ lệnh tiến tới đa nền tảng. Với nó, bạn có thể giảm được thời gian phải đi tìm kiếm sự trợ giúp vì nó sẽ nhắc cho bạn cú pháp tiếp theo cần gõ là gì. Fig.io cung cấp cho người dùng một giao diện dòng lệnh tương tự như Terminal hoặc Command Prompt trên hệ điều hành, nhưng có khả năng tự động hoàn thiện lệnh và cung cấp cho người dùng các gợi ý lệnh dựa trên lịch sử và tên lệnh đang được gõ.

Một điểm đặc biệt của Fig là tính năng hoàn thiện lệnh tự động. Khi người dùng bắt đầu gõ một lệnh, nó sẽ tự động hoàn thiện các từ và đưa ra các gợi ý lệnh phù hợp với lịch sử và tên lệnh đang được gõ. Điều này giúp người dùng tiết kiệm thời gian và giảm thiểu lỗi trong quá trình gõ lệnh.

Bạn có thể thấy, tôi chỉ cần gõ docker lập tức Fig sẽ nhắc cho tôi tất cả tham số tiếp theo kèm theo cả lời giải thích. Qua đó tôi có thể nhanh chóng lướt qua và nhớ ngay ra cú pháp tiếp theo cần dùng là gì.

 Giới thiệu công cụ Fig.io

Tham khảo việc làm Linux Hồ Chí Minh hấp dẫn trên TopDev

Cài đặt và sử dụng cơ bản

Hiện tại Fig chỉ mới hỗ trợ MacOS, các bản dành cho Windows hay Linux đang được phát triển, có thể sẽ phải đợi thêm một thời gian nếu như bạn không sử dụng Mac.

Cài đặt Fig thông qua homebrew:

$ brew install --cask fig

Hoặc bạn cũng có thể tải về bản cài đặt trên trang chủ của Fig.

Mở Fig lên, bạn sẽ cần phải đăng nhập và làm theo một số hướng dẫn để nó có quyền truy cập vào các phần mềm Shell. Sau khi hoàn thành, thử mở Terminal lên và gõ bất kì một lệnh nào mà bạn nhớ. Ví dụ tôi thường xuyên sử dụng docker và khi gõ docker nó sẽ nhắc cho tôi hết các tùy chọn tiếp theo.

Ngoài gợi ý lệnh ra, Fig còn hỗ trợ các tính năng khác như lưu trữ lịch sử lệnh, tạo và sử dụng các biến môi trường, quản lý các lệnh yêu thích và tính năng đa tab.

Một lưu ý là không phải tất cả lệnh Fig đều biết. Theo tài liệu, Fig hiện có hơn 500 CLI tools được hỗ trợ tự động hoàn thành. Ngoài ra bạn cũng có thể tìm kiếm thêm thông qua kho Plugin nếu CLI của bạn không hỗ trợ điều này.

Tổng kết

Với Fig, việc gõ lệnh sẽ trở nên dễ dàng hơn và giúp cho các lập trình viên tiết kiệm được nhiều thời gian trong quá trình làm việc. Fig cung cấp cho người dùng nhiều tính năng tiện ích, đặc biệt là tính năng gợi ý cũng như tự động hoàn thành và các lệnh tắt. Việc sử dụng fig.io cũng giúp cho người dùng có thể quản lý được lịch sử lệnh, các biến môi trường và các lệnh yêu thích.

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

Xem thêm các việc làm lĩnh vực IT hấp dẫn trên TopDev

NodeJS Developer là gì? Trở thành lập trình viên NodeJS có khó không?

NodeJS Developer là gì? Trở thành lập trình viên NodeJS có khó?

NodeJS là một nền tảng được viết bằng JavaScript đang phổ biến hiện nay, vì thế vị trí lập trình viên NodeJS đang có nhu cầu tuyển dụng cao cùng mức đãi ngộ hấp dẫn mà nhiều công ty đang tìm kiếm. Bài viết hôm nay chúng ta cùng nhau tìm hiểu NodeJS Developer là gì và cần học gì để trở thành một lập trình viên NodeJS nhé.

NodeJS là gì?

Trước tiên hãy cùng tìm hiểu về NodeJS và lý do tại sao nó đang được ưa chuộng sử dụng hiện nay nhé.

NodeJS là một nền tảng (platform) được xây dựng dựa trên V8 JavaScript Engine (một engine mã nguồn mở phát triển bởi Google). Lợi thế của NodeJS là nó có thể hoạt động trên nhiều nền tảng khác nhau từ Windows, Linux hay OS X; sử dụng JavaScript là một ngôn ngữ lập trình dễ học và có thể viết code được cho cả phía client và server. 

NodeJS là gì?

NodeJS sử dụng luồng đơn (Single Thread) hay non-blocking I/O để thực hiện các yêu cầu giúp nhanh chóng giải quyết các request đến từ client và trả về kết quả, tránh tình trạng tiêu tốn bộ nhớ hệ thống; giúp nó có thể hỗ trợ số lượng lớn các kết nối đồng thời. Hiện tại, cộng đồng NodeJS phát triển rất mạnh mẽ với nhiều thư viện, module được phát hành giúp đơn giản hóa và tiết kiệm thời gian lập trình.

Nhờ những ưu điểm trên, cùng với việc chi phí xây dựng và vận hành ứng dụng NodeJS thấp hơn so với các nền tảng khác; NodeJS đang được ưa chuộng và là lựa chọn lý tưởng cho các công ty startup phát triển phần mềm nhanh chóng đưa sản phẩm đến với người dùng.

  Corepack là gì và tác dụng của nó trong Node.js

  Machine Learning với Nodejs kết hợp TensorFlow.js

NodeJS Developer là gì?

NodeJS Developer hay lập trình viên NodeJS là những người sử dụng NodeJS để thiết kế, xây dựng, tạo ra các ứng dụng, phần mềm, sản phẩm, hệ thống,… theo yêu cầu của dự án hay nhu cầu của khách hàng. NodeJS không phải một ngôn ngữ lập trình, cũng không phải framework hay thư viện mà là một nền tảng giúp các framework, thư viện chạy trên đó.

JavaScript là một ngôn ngữ ra đời với mục đích ban đầu là chạy trên trình duyệt; NodeJS giúp nó có thể chạy bên ngoài trình duyệt và từ đó lập trình viên JS có khả năng viết code ở cả phía client và server. Mặc dù vậy thì thế mạnh của NodeJS vẫn là viết ứng dụng chạy trên máy chủ (server), vì thế thông thường NodeJS Developer được xem như là một Backend Developer.

NodeJS Developer là gì?

Cụ thể công việc của một NodeJS Developer sẽ bao gồm:

  • Tham gia quá trình nhận, phân tích yêu cầu và lên giải pháp cho hệ thống phần ứng dụng dành cho máy chủ (server-side). 
  • Lập trình, xây dựng ứng dụng NodeJS, các thành phần back-ends với nhiệm vụ nhận, xử lý và trả kết quả cho phía client-side thông qua giao thức như APIs, sockets,… hay liên kết với các ứng dụng khác (web services), thông thường là các bên thứ 3 như dịch vụ SMS, Notify,…
  • Xử lý lưu trữ dữ liệu hệ thống, các bản ghi log, nhật ký giúp đảm bảo hiệu quả làm việc của hệ thống; đồng thời có biện pháp bảo mật bảo vệ dữ liệu.
  • Đảm bảo các yếu tố liên quan đến hiệu suất, cùng việc thường xuyên cập nhật hệ thống, theo dõi sửa lỗi và cung cấp các giải pháp kiểm soát hoạt động ổn định của ứng dụng.

Tham khảo việc làm NodeJS tại Hồ Chí Minh lương cao, hấp dẫn!

Cần học gì để trở thành một NodeJS Developer?

NodeJS Developer cũng như các vị trí lập trình viên khác thì đều cần có những kiến thức cơ bản về lập trình cùng khả năng sử dụng tốt các công cụ hỗ trợ quản lý source code hay làm việc teamwork khác như Git, Agile, Scrum, Jira,… Vì vậy hãy trang bị cho mình đủ kiến thức để trở thành một lập trình viên trước khi bắt tay vào tìm hiểu NodeJS nhé.

Nắm vững kiến trúc của NodeJS để có thể hiểu và làm việc với platform này một cách tốt nhất.

Cần học gì để trở thành một NodeJS Developer?

Lập trình NodeJS như đã nói ở trên sẽ làm việc phía server-side (backend) nhiều hơn; vì thế bạn cần có những kiến thức chung của lập trình Backend như cách làm việc với Databases, cách viết API, các kết nối giao tiếp với các hệ quản trị cơ sở dữ liệu hay cách để thiết lập giao tiếp với các dịch vụ bên thứ 3.

Với NodeJS chúng ta có khái niệm modules và packages cùng các cách thiết lập để quản lý, sử dụng và tạo ra các packages thông qua npm. Vì vậy hãy tìm hiểu và học cách sử dụng npm, npx, cách xây dựng packages private hay public và các thiết lập bằng scripts.

Lựa chọn một trong số các frameworks nổi tiếng chạy trên nền NodeJS để học và đáp ứng được nhu cầu tuyển dụng của công ty, tổ chức mà bạn làm việc hay muốn apply. Các framework nổi tiếng được sử dụng nhiều trên NodeJS:

  • Meteor
  • Sails.js
  • Socket.io
  • Nest.js
  • Hapi.js

Sau khi trang bị đủ các kiến thức cơ bản về NodeJS, lựa chọn framework sử dụng để học chuyên sâu; hãy tìm cho mình một hướng mà NodeJS phù hợp và đào sâu nó. Với NodeJS, chúng ta có thể tạo ra những ứng dụng đặc thù (có ưu thế so với các nền tảng khác) như sau:

  • Xây dựng Backend cho các nền tảng mạng xã hội: LinkedIn và Medium là 2 tên tuổi lớn đang sử dụng NodeJS làm ứng dụng backend cho hệ sinh thái của mình
  • Phát triển các ứng dụng đơn trang: Chất lượng luồng dữ liệu không đồng bộ giúp NodeJS trở thành lựa chọn tốt cho việc xây dựng ứng dụng đơn trang hay Single Page Application
  • Data Streaming: NodeJS có lợi thế về tốc độ xử lý tệp, khả năng mã hóa và tải lên nhẹ nhàng giúp nó được ưu chuộng trong lĩnh vực streaming data, cụ thể là nền tảng Netflix đang sử dụng nó cho các hoạt động phát trực tuyến.
  • Phát triển ứng dụng IoT: NodeJS được lựa chọn là nền tảng phù hợp nhất trong lĩnh vực IoT nhờ khả năng xử lý các sự kiện đồng thời một cách liền mạch. Ngoài ra thêm vào đó là việc tiết kiệm chi phí cũng là một lựa chọn tốt dành cho các startup công nghệ.

Kết bài

Như vậy qua bài viết này chúng ta đã cùng nhau tìm hiểu về NodeJS và nghề lập trình viên NodeJS. Nếu có ý định trở thành một NodeJS Developer, hãy tham khảo những gợi ý trong bài để có thể chuẩn bị kiến thức tốt nhất giúp bước vào ngành này nhé. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

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

Xem thêm việc làm công nghệ hấp dẫn trên TopDev

Continuous Integration là gì? Giải thích chi tiết về CI

Continuous Integration là gì? Giải thích chi tiết về CI

Continuous Integration (CI) từ lâu đã là khái niệm không hề xa lạ với anh em phát triển phần mềm. Tuy nhiên, với một số anh em trước đây chỉ làm việc độc lập, CI có vẻ như là điều gì đó còn khá xa lạ.

Bài viết này cung cấp cho anh em cái nhìn đầy đủ và rõ ràng về CI, ưu điểm khi áp dụng CI vào trong dự án phát triển phần mềm.

continuous integration là gì?
Không có CI,CD là loạn tung phèo hết. Nói cho anh em hiểu là CI, CD quan trọng cỡ nào ha

Cùng bắt đầu tìm hiểu thôi anh em!

1. Cotinuous integration là gì?

Trước hết, cùng tìm hiểu định nghĩa về CI (Cotinuous integration). Đầu tiên,

Continuous integration is a DevOps software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run CI (tích hợp liên tục), là một phương pháp phát triển phần mềm DevOps trong đó các nhà phát triển thường xuyên hợp nhất các thay đổi code của họ vào kho lưu trữ trung tâm, sau đó chạy các bản dựng (demo) và thử nghiệm tự động (testing)

Định nghĩa hơi rối nhưng có thể hiểu thằng Continuous là liên tục, vậy CI là phương pháp phát triển phần mềm. Trong quá trình phát triển phần mềm, không thể tránh khỏi việc anh em developer liên tục đẩy code lên. Nhiều nhánh merge lại với nhau trong repo chính. Để có thể liên tục phát triển, ta cần chạy kiểm tra (testing), deploy và release. Vậy với CI, quá trình phát triển phần mềm này có thể diễn ra liên tục, không bị gián đoạn.

Tích hợp liên tục cũng thường đề cập đến giai đoạn xây dựng hoặc tích hợp của quy trình phát hành phần mềm và bao gồm cả thành phần tự động hóa. Mặc dù bản thân C và I không đề cập tới tự động (automation), nhưng anh em lưu ý bản thân từ tiếp tục (Continuous) đã mang ý nghĩa liên tục (cần có tự động để đảm bảo tính liên tục)

1.1 Tại sao ta lại cần CI?

Với một số anh em làm việc độc lập (theo kiểu cá nhân), trước đây rất có thể anh em sẽ ít gặp các trường hợp về conflict code. Làm cái nào cứ làm trên 1 nhánh, lúc nào xong thì release. Nhưng nếu tham gia vào team phát triển phần mềm, việc không merge code thường xuyên sẽ là thảm hoạ. Conflict tùm lum, không thể release cho khách hàng những tính năng đã phát triển.

Lý do này chính là lý do tại sao ta cần tới Cotinuous integration.

  Triển khai CI/CD với Gitlab
  Những điều bạn cần biết về mô hình CI/CD với CircleCI

1.2 CI hoạt động như thế nào?

Về cơ bản CI có thể trigger trên từng commit của anh em developer. Sau khi trigger được, CI sẽ thực hiện một số bước (ta gọi là stages). Các stages này thực hiện đầy đủ các bước cần thiết cho việc deployment.

CI hoạt động như thế nào
Nguồn ảnh / Source: aws.amazon.com

2. Tự động hoá với automation CI/CD

Thay vì phải thực hiện từng bước từng bước để deploy, với continuous integration, về mặt bản chất, ta cố gắng thực hiện tự động hoá các bước sẽ phải làm. Ví dụ

    • Pull code
    • Install các thư viện cần thiết
    • Build code
    • Shutdown hoặc restart môi trường hiện tại

Với CI, các bước sẽ được thực hiện tự động. Thông thường một CI hoàn chỉnh sẽ bao gồm những thành phần sau:

Tự động hoá với automation CI/CD
Nguồn ảnh / Source: analyticsvidhya.com

    • Microservices development
    • Serverless architecture
    • Continuous testing
    • Deployment containers

Trường hợp xảy ra lỗi, CI/CD cũng sẽ chịu trách nhiệm ghi lỗi, thực hiện một số actions khác nhau nếu gặp phải lỗi trong quá trình triển khai liên tục.

3. Áp dụng continuous integration mang lại lợi ích gì?

CI có lợi ích gì khi áp dụng vào quy trình sản xuất phần mềm? Đầu tiên, với CI, anh em developer có thể đẩy code lên hàng ngày, hàng giờ. Chính vì vậy, trong trường hợp có sự cố, sẽ dễ dàng để phát hiện và fix.

Tránh trường hợp để tới cuối của quy trình phát triển phần mềm mới thấy có lỗi, lúc đó thì toang, sửa không kịp. Ngoài ra, một số CI,CD còn cho phép gắn cờ. Ví dụ nhóm tính năng này sẽ phát triển nhưng chưa chắc sẽ được release, cả team có thể họp với nhau và gắn cờ. Với nhóm tính năng có cờ đó, sẽ không release trong đợt này.

Áp dụng continuous integration mang lại lợi ích gì?
Nguồn ảnh/ Source: cloudbees.com

Vậy với CI

    • Việc build tự động hoàn toàn, anh em không cần take time vào việc build, deploy.
    • Continuous testing (cái này cứ mỗi lần push code là mỗi lần test). Bộ test case có thể viết trước.
    • Security automation (phần kiểm tra bảo mật cho code cũng có thể tiến hành hoàn toàn tự động). Cứ mỗi lần đẩy lên là một lần test, tránh các rủi ro về bảo mật.

4. Các giai đoạn trọng continuous integration

Trước khi bàn về stages (bước) trong continuous integration. Ta cần hiểu stages là gì? Stages là từng bước được tiến hành cho 1 CI, CD pipeline hoàn chỉnh. Hiểu sơ thì nó là một bước.

Ví dụ trước khi build anh em cần pull code mới nhất về, vậy pull code là 1 stages. Build code lại là 1 stages mới khác. 2 stages này là 2 stages hoàn toàn khác nhau, nhưng cần có đủ các stages để một CI có thể hoạt động được.

Các giai đoạn trọng continuous integration
Nguồn ảnh / Source: cyberark.com

Dưới dây là ví dụ các stages cho một CI hoàn chỉnh. Tất nhiên tuỳ vào dự án, đặc thù code hoặc môi trường của từng dự án mà stages của anh em có thể khác nhau.

    • Bước 1: lấy code mới nhất + build
    • Bước 2: chạy code quality check, scan security, …
    • Bước 3: theo như infrastructure
    • Bước 4: build xong thì đem code qua môi trường cần deploy
    • Bước 5: kiểm tra môi trường, quản lý biến môi trường các kiểu
    • Bước 6: build xong thì restart hoặc start lại API, database services các kiểu
    • Bước 7: kiểm tra hết thì kiểm tra status, nếu fail thì rollback toàn bộ
    • Bước 8: ghi log thành công thất bại phục vụ quản lý sau này

Trên đây là ví dụ 8 bước của một CI, CD. Anh em có thể tham khảo, tuy nhiên tuỳ từng dự án số bước có thể khác nhau. Tuy nhiên luôn nhớ concept là cái nào tự động được thì nên tự động.

5. Các continuous integration phổ biến hiện nay

Danh sách các continuous integration phổ biến hiện nay bao gồm:

    • Argo CD
    • Buddy
    • Drone
    • Travis CI

Các continuous integration phổ biến hiện nay

Anh em có thể bấm voà từng CI, CD để tham khảo tài liệu, đọc sơ để so sánh ưu nhược điểm của từng loại CI,CD hiện nay. Biết thêm càng nhiều càng tốt phải không nào?

6. Tổng kết

Tóm lại continuous integration (CI) giúp đỡ rất nhiều trong quá trình phát triển dự án phần mềm. Ngày nay, nó đã trở thành một phần không thể thiếu trong các dự án. Không chỉ các vị trí Devops cần biết về CI, bản thân lập trình viên ngày nay cũng cần phải có kiến thức về CI, CD trong quá trình phát triển phần mềm.

CI, CD là tiêu chuẩn phổ biến trong hầu hết các doanh nghiệp. Giúp giảm bớt thời gian, công sức của team, của đội nhóm. Cung cấp nhanh chóng cho khách hàng các bản release của phần mềm. Hạn chế các rủi ro về bảo mật

7. Tham khảo

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

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

Có thể bạn muốn xem thêm:

Đừng bỏ lỡ Việc làm Developer hấp dẫn trên TopDev

Magento Developer là gì? Học gì để trở thành lập trình viên Magento

Magento Developer là gì? Học gì để trở thành Magento Developer?

Với sự phát triển của thương mại điện tử thì nhu cầu tạo ra các website e-commerce ngày càng lớn; và trong số đó thì nhiều công ty, tổ chức lựa chọn nền tảng Magento để xây dựng hệ thống của mình. Vì thế mà Magento Developer cũng đang là vị trí tuyển dụng với nhiều đãi ngộ và là lựa chọn tiềm năng dành cho các bạn lập trình. Bài viết hôm nay chúng ta cùng tìm hiểu Magento Developer là gì và cần học những gì để có thể trở thành một lập trình viên Magento nhé.

Magento là gì?

Trước tiên hãy tìm hiểu về nền tảng PHP này và tại sao nó lại đang hot nhé.

Magento là một nền tảng thương mại điện tử mã nguồn mở được viết bằng PHP; lưu ý nó không phải là một framework như nhiều bạn nhầm lẫn nhé. Magento được dựa trên nền tảng Zend framework, ra mắt lần đầu vào năm 2017; hiện tại phiên bản mới nhất là version 2.4.3 phát hành giữa năm 2021.

Nền tảng Magento có những tính năng phục vụ cho cả đối tượng doanh nghiệp vừa và nhỏ (SMB) lẫn các tổ chức kinh tế (Enterprise) với 2 phiên bản:

  • Community Edition (CE): phiên bản miễn phí giúp bạn tải xuống, chỉnh sửa và triển khai trên server cá nhân.
  • Enterprise Edition (EE): phiên bản trả phí cao cấp với nhiều tính năng nâng cao bổ sung giúp tối ưu hóa hoạt động kinh doanh cho doanh nghiệp.

Magento là gì?

Với khả năng hỗ trợ đa dạng của mình thì Magento được nhiều nền tảng doanh nghiệp lớn sử dụng như Shopify, WIX, Nike, Samsung,… Hiện nay, Magento chiếm khoảng 25% thị phần thị trường dành cho các nền tảng thương mại điện tử (thường đứng top 1); sự phổ biến của nó cũng giúp nghề lập trình Magento trở thành một trong những ngành lập trình hot hiện nay.

  Bật mí 10 câu hỏi phỏng vấn Magento Developer hay và khó

  Virtualbox Headless Frontend là gì?

Magento Developer là gì?

Lập trình viên Magento là những người làm việc trên nền tảng Magento để tạo ra những website thương mại điện tử phù hợp với nhu cầu của dự án và yêu cầu từ khách hàng; thu hút được lượng khách hàng đầu cuối truy cập cũng như phát triển hệ sinh thái sản phẩm phần mềm.

Để hiểu rõ hơn công việc của một Magento Developer, chúng ta hãy cùng đi sâu hơn vào nền tảng này.

Magento là gì?

Magento dựa trên nền tảng Zend framework, sử dụng ngôn ngữ lập trình PHP; nó sử dụng cơ sở dữ liệu MySQL hoặc MariaDB; áp dụng quy ước về lập trình hướng đối tượng và kiến trúc MVC (Model-View-Controller). Phiên bản mới nhất Magento 2 sử dụng thư viện Knockout.js của JavaScript dành cho việc viết source code cho phía frontend. Lập trình Magento sẽ làm việc cùng với kiến trúc trên theo những quy tắc, kiến trúc mà Magento quy định. Công việc chính của một Magento Developer gồm:

  • Tùy biến, phát triển hoặc xây dựng các theme hiển thị tùy chỉnh frontend phù hợp với lĩnh vực kinh doanh, yêu cầu từ khách hàng (thông thường sẽ đòi hỏi bạn cần chuyên sâu hơn về HTML, CSS và JS).
  • Xây dựng, tùy chỉnh, cải tiến phần core của Magento nhằm đáp ứng yêu cầu về nghiệp vụ của doanh nghiệp.
  • Tích hợp các hệ thống khác như ERP, CRM, POS, cổng thanh toán vào hệ thống Magento.
  • Xây dựng, phát triển hoặc tùy chỉnh các extensions riêng cho website.
  • Quản trị nội dung, danh mục, sản phẩm, quản trị viên, người dùng,… trên hệ thống website.
  • Cập nhật phiên bản sử dụng, tối ưu, đảm bảo hoạt động của hệ thống.

Tham khảo việc làm Magento hấp dẫn trên TopDev

Học gì để trở thành Magento Developer?

Magento là một nền tảng trên ngôn ngữ lập trình PHP, vì thế điều kiện tiên quyết là bạn cần nắm vững được kiến thức cơ bản về ngôn ngữ lập trình này. Magento là một nền tảng hoàn chỉnh, từ giao diện người dùng, ứng dụng backend đến việc kết nối databases và kết hợp với các services khác, vì thế trở thành Magento Developer đòi hỏi bạn có khả năng trở thành một full-stack Developer. Tất nhiên bạn cũng có thể lựa chọn tham gia một phần vào dự án như làm công việc của một người tùy chỉnh Theme với đòi hỏi cao về HTML, CSS, JS hay tùy chỉnh phần ứng dụng core với khả năng xử lý PHP.

Học gì để trở thành Magento Developer

Lập trình Magento cũng đòi hỏi bạn hiểu biết sâu về MySQL hay MariaDB cùng những thiết lập riêng tối ưu dành cho nền tảng này. Không giống như nhiều nền tảng thương mại điện tử khác, Magento được đánh giá cao nhờ khả năng tùy biến và có thể can thiệp sâu vào nền tảng; vì vậy nó đòi hỏi lập trình viên phải có kiến thức vững và sâu, không dễ dành cho những người mới bắt đầu. Phiên bản Magento 2 hiện nay có nhiều cập nhật đáng chú ý, với việc phiên bản Community hoàn toàn miễn phí và mã nguồn mở, bạn có thể tham khảo tìm hiểu sâu trong source code của Magento. 

Ngoài những yêu cầu trên, bạn cũng cần nắm được những nghiệp vụ chuyên môn về ngành thương mại điện tử như quản lý sản phẩm, quản lý danh mục, hàng tồn kho, quản lý dịch vụ khách hàng; thanh toán; các công cụ SEO, hay phân tích và báo cáo. Điều này sẽ giúp bạn hiểu về hệ thống, hiểu về nghiệp vụ là logic code xử lý đồng thời phối hợp tốt hơn với các bộ phận khác trong dự án.

Kết bài

Như vậy chúng ta đã cùng nhau tìm hiểu về Magento Developer và một số gợi ý về những gì bạn cần học để có thể trở thành một lập trình viên Magento trong tương lai. Đây là một ngành không dễ, cần có sự tìm tòi sâu về cả kỹ thuật và nghiệp vụ. Hy vọng bài viết giúp ích cho các bạn nếu có ý định trở thành lập trình viên trong ngành thương mại điện tử này. Cảm ơn các bạn đã đọc và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

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

Xem thêm tuyển dụng các vị trí IT hấp dẫn trên TopDev

Những điều cần biết về Ruby on Rail developer

Những điều cần biết về Ruby on Rail developer

Năm 2024 rồi, có nên hay không khi trở thành Ruby on Rail developer là câu hỏi thường gặp của những bạn bước chân vào học lập trình. Vậy Ruby on Rail là gì?

Những yếu tố nào vẫn còn là sức hút lớn khi bắt đầu học Ruby on Rail? Cần làm gì để trở thành một lập trình viên Ruby on Rail giỏi?

Những điều cần biết về Ruby on Rail developer

Tất cả sẽ được giải đáp qua bài viết dưới đây.

1. Ruby on Rail là gì?

Trước khi trở thành Ruby on Rail developer thì anh em cần hiểu Ruby on rail là gì? Luôn tới với phần khái niệm đầu tiên.

Ruby on Rails is an open-source server-side web application framework with an MIT license. While Ruby on Rails is written in Ruby, a dynamic, general-purpose programming language from Japan, RoR is, in fact, a framework, not a language. Many entrepreneurs and non-developers often confuse the two, thinking of Rails when hearing Ruby but rarely the other way around.

Những điều cần biết về Ruby on Rail developer

Ruby on Rails là một framework web phía server. Mã nguồn mở và có giấy phép MIT. Trong khi Ruby on Rails được viết bằng Ruby, một ngôn ngữ lập trình đa năng, năng động phát triển bởi mấy anh Nhật Bổn, thì RoR trên thực tế là một framework chứ không phải một ngôn ngữ. Nhiều doanh nhân và những người không phải là nhà phát triển thường nhầm lẫn cả hai, nghĩ đến Rails khi nghe đến Ruby nhưng hiếm khi nghĩ ngược lại.

Đấy, anh em nhớ giúp cho, Ruby là ngôn ngữ, nhưng Ruby on Rail lại là framework nha.

Ruby ra đời năm 2004 và thằng giải ngôn ngữ lập trình của năm.

Tham khảo tuyển dụng ruby on rails lương cao trên TopDev

2. Ruby on Rail developer và Web application

Kể từ khi được ra mắt vào năm 2005, Ruby on Rail lúc này đã giới thiệu một cách tiếp cận mới để xây dựng các ứng dụng Web (web application). Không chỉ nhanh chóng, thuận tiện (do các gem hỗ trợ). Ruby Rails mang theo mô hình thiết kế phần mềm dựa. Mô hình thì nhiều nhưng Ruby thiết kế mô hình sao cho anh em developer làm việc ở nhiều cấp độ.

Với Django, so sánh luôn với cả Laravel, Rails tiên phong đưa MVC và các phương pháp phát triển phần mềm tốt vào. Một số nguyên tắc thiết kế cũng được ưu tiên đem vào Rail. Chẳng hạn như nguyên tắc DRY.

Những điều cần biết về Ruby on Rail developer
Airbnb là website nổi tiếng có sự góp mặt của Ruby on Rail.

Ruby on rail lúc này như đấng cứu thế, giải phóng anh em developer khỏi mấy thứ config lặt vặt. Để cho anh em developer tập trung duy nhất vào các tính năng kinh doanh và logic của ứng dụng. Mà từ chỗ chỉ tập trung vào 1 phần, rõ ràng là tăng năng suất và giúp anh em developer giao hàng MVP nhanh thiệt nhanh.

Cho anh em nào cho biết thì MVP là phần core của product.

  5 câu hỏi phỏng vấn Ruby on Rails Developer hay, thường gặp

  Mẫu bảng mô tả công việc lập trình Ruby on Rails

3. Tại sao mọi người nghĩ không nên học Ruby on Rail?

Nếu anh em có một vài người bạn học Java, Golang. Thường là sẽ chê Ruby. Nhưng thường họ chê gì ở ngôn ngữ lập trình Ruby?.

Anh em cần tỉnh táo nhìn rõ hồng trần như thế nào để tin tưởng lựa chọn viên ngọc quý (Ruby on Rail)?

3.1 Performance (hiệu năng)

Thật sự thì nếu chấm điểm benchmark, Ruby tỏ ra hụt hơi so với golang hoặc nodejs. Tuy nhiên anh em nên nhớ sự chậm đó chỉ nhận ra khi nói về dữ liệu lớn. Tức là từ lớn tới cực lớn mới nhận ra sự khác biệt này. Ngoài ra còn các yếu tố liên quan tới server và hệ cơ sở dữ liệu.

Vì vậy, nếu nói đến chậm, cần đặt lên bàn cân, xem xét Ruby đang sử dụng cho ứng dụng lớn cỡ nào. Chưa kể các bản release gần đây Ruby cải thiến khá nhiều về tốc độ. Anh em có thể xem thử.

Những điều cần biết về Ruby on Rail developer
Bản thân Ruby có bộ đánh giá Benchmark cho riêng mình

Ruby 2.6.1, released in 2018, included performance improvements and new features. The developers behind Ruby 3 aimed to speed up the language by three times compared to Ruby 2.

Xem thêm việc làm Ruby các vị trí hấp dẫn trên TopDev

3.2 Khả năng mở rộng

Nói về khả năng mở rộng thì không nằm tại ngôn ngữ lập trình. Bản thân ngôn ngữ chỉ là công cụ. Nếu muốn hệ thống có thể mở rộng. Ngoài chip, CPU và kiến trúc lựa chọn từ trước, ta cần có thiết kế hệ thống cụ thể.

Cụ thể khi Twitter chuyển từ Rail qua Scala, anh em thường đồn thổi là do Ruby khó có khả năng mở rộng. Tuy nhiên mức độ và tốc độ được yêu cầu ở Twitter lại khác hẳn so với các ứng dụng khác. Nên khả năng mở rộng, bàn tới hay không thì anh em cần đặt vào bài toán thực tế nó như thế nào.

4. Mức độ phổ biến của Ruby on Rail

Có thể anh em vẫn còn đang lấn cấn về mức độ phổ biến của Ruby on Rail. Cũng dễ hiểu vì xung quanh chúng ta ít có nghe nói về Ruby. Số lượng Ruby developer thì lại các ít.

Đã ít lại còn hiếm có khó tìm, nhưng ít người học không có nghĩa là ngôn ngữ Ruby hiếm như số lượng Ruby on Rail developer.

Những điều cần biết về Ruby on Rail developer Bản thân Ruby có bộ đánh giá Benchmark cho riêng mình
Cụ thể nhìn vào Tiobe, trang web thống kê mức độ phổ biến thì Ruby vẫn lọt vào top 20 ngôn ngữ phổ biến. Về mức độ thì năm rồi còn tăng hẳn 0.18%.

Vậy về mức độ phổ biến mà nói thì không có gì lấn cấn khi anh em bắt đầu bước vào học Ruby ha.

5. Ruby on Rail sử dụng làm gì?

Không chỉ Ruby on Rail developer mà hầu hết các lập trình viên ở ngôn ngữ lập trình khác cũng luôn tò mò đặt câu hỏi. Ngôn ngữ lập trình mà chúng ta đã, đang và sẽ học sẽ được sử dụng vào mục đích gì?. Đối với Ruby on Rail, ta có một vài câu trả lời như sau:

5.1 Xây dựng MVP

Do nhẹ và nhanh chóng, Ruby on Rail thường được sử dụng để xây dựng các phần core. Phần các tính năng chủ chốt, xử lý phức tạp tập trung ở phần lõi. Phần này sẽ được viết, phát triển nhanh chóng bởi Ruby

5.2 Ứng dụng social

Do khả năng hỗ trợ các ứng dụng có lưu lượng truy cập lớn của Ruby nên nó hoàn hảo cho việc anh em xây dựng các ứng dụng mạng xã hội như Twitter, Facebook.

5.3 App căn hộ, đặt phòng

Ruby được tin tưởng lựa chọn bởi AirBnB. Nên Ruby cũng được sử dụng cho các ứng dụng đặt phòng và chia sẻ căn hộ – Điển hình như là 2 ông lớn Airbnb và Couchsurfing – vì nó quản lý nhanh chóng một số lượng lớn giao dịch hàng ngày và đặt chỗ bất động sản.

Những điều cần biết về Ruby on Rail developer

5.4 Ecommerce platforms

Có thể anh em không biết nhưng Ruby là ngôn ngữ lập trình được nhiều nền tảng thương mại điện tử như Shopee hoặc Shopify lựa chọn. Chủ yếu việc sử dụng ruby cho các ứng dụng lớn này thường để quản lý và xử lý nhiều giao dịch cùng một lúc.

6. So sánh với các ngôn ngữ khác

Không thể phủ nhận rằng việc trở thành Ruby on Rail developer phải đánh đổi một vài thứ. Thực tế mà nói mức độ phổ biến khi so sánh với Php và Python, Ruby on Rail tỏ ra kém cạnh hơn về mức độ phổ biến.

Nhưng nói về đóng góp (Contributor), 2 framework phổ biến dùng PHP và Python là LaravelDjango lại có ít người đóng góp hơn Ruby on Rail. Mà càng nhiều người đóng góp thì thư viện hoặc framework sẽ được coi là có chất lượng tốt.

Một số contributor phổ biến đóng góp cho Ruby on Rail

Đối với Laravel và Django ta có con số contributor lần lượt là

  • Django: 2,230
  • Laravel: 3,151

Về cơ hội việc làm, cũng không phải là ít khi xem một vài con số thống kê các ngôn ngữ lập trình

  • Ruby on Rails developer: 39,119
  • Laravel developer: 1,161
  • Django developer: 41,695
  • Ruby developer: 27,985
  • PHP developer: 62,443
  • Python developer: 147,255

Với con số này, anh em đã tự tin để học trở thành Ruby on Rail developer chưa nào?

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

Xem thêm các việc làm IT lương cao hấp dẫn tại TopDev

Học gì để trở thành C# developer? Những kiến thức quan trọng

Học gì để trở thành C# Developer? Những kiến thức quan trọng

C# Developer là gì? Học để trở thành C# Developer có khó không? Những kiến thức gì cần có đối với một C# developer?

Tất cả sẽ được giải thích tường tận trong bài viết này. Tất nhiên không có nhìn ớn ăn loằng ngoằng như cái roadmap dưới đây nên anh em khỏi lo nha!

1. Năm 2024 rồi, vậy học C# còn có lợi ích gì?

C# được sử dụng để xây dựng nền tảng Unity dùng để phát triển các ứng dụng và các ứng dụng game. Tới tận bây giờ thì .NET core.NET vẫn rất là phổ biến, đặc biệt là khu vực âu mỹ. Chính vì vậy học C# đem lại cơ hội việc làm cao nha anh em.

Chưa cần quá mới, quá cao siêu hay ứng dụng trí tuệ nhân tạo gì vào. C# đã đang và sẽ còn cần rất nhiều nhân lực trong thời gian tới.

Học gì để trở thành C# developer

.Net nói gì thì nói vẫn sẽ tồn tại lâu dài trong việc phát triển ứng dụng web và mobile. Dễ học vì anh em có một cộng đồng thân thiện gồm nhiều các ông thạo C#, những người sẽ hướng dẫn anh em thành thạo ngôn ngữ này sau vài tháng.
    • C# là ngôn ngữ hướng đối tượng và hướng thành phần (dễ học, dễ phát triển, dễ bảo trì).
    • C# được sử dụng để phát triển nhiều application như ứng dụng bảng điều khiển (HMI,…), ứng dụng máy tính để bàn và cho mobile, AI, IoT và cloud.

Nghe thôi đã thấy toàn cái mới và tất nhiên C# vẫn cứ là hot thôi. Anh em đừng lo.

  Kiểm thử đơn vị trong C# với Nunit và .Net Core
  Lộ trình học lập trình C cho người mới bắt đầu

2. Kiến thức cơ bản

Để trở thành C# Developer, tất nhiên anh em cần nắm vững kiến thức cơ bản của ngôn ngữ lập trình C#. Một số kiến thức không chỉ là cơ bản ở C# mà còn cả với các ngôn ngữ lập trình khác. Cụ thể là:

    • data types (loại dữ liệu)
    • variables (biến)
    • operators (biểu thức)
    • control structures (các câu lệnh if else,…)
    • arrays (mảng)

Ngoài các kiến thức cơ bản này ở C#, anh em cũng cần hiểu biết về các thành phần khác trong ngôn ngữ lập trình như:

    • classes
    • objects
    • inheritance
    • polymorphism
    • interfaces

Học gì để trở thành C# developer

Các tính chất của OOP (lập trình hướng đối tượng). Sau khi đã nắm vững các kiến thức này, anh em sẽ tìm hiểu tiếp về framework, bởi ngôn ngữ chỉ là ngôn ngữ và nếu không biết về framework sẽ rất khó trở nên thành thạo hơn ngôn ngữ lập trình C#. Cụ thể ở đây anh em cần biết thêm về .NET Framework, .NET Core. Phần database connect anh em tìm hiểu Entity Framework. Nếu làm web sẽ là ASP.NET.

Tham khảo việc làm lập trình C hấp dẫn trên TopDev!

3. Kiến thức nâng cao cho C# developer

Sau khi đã nắm vững các kiến thức cơ bản của C#, để trở thành Senior C# Developer, anh em cần tìm hiểu sâu hơn. Vọc vạch nhiều hơn về

    • multithreading (đa luồng)
    • async programming (bất đồng bộ)
    • LINQ
    • generics
    • delegate
    • events

Bước này cũng sẽ bao gồm các kiến thức để thiết kế ứng dụng có thể scale (mở rộng). Có performance tốt. Không những chỉ code mà còn biết cách tối ưu code. Xử lý các vấn đề khác nếu code hoặc application của anh em có vấn đề.

Kiến thức nâng cao cho C# developer
Nguồn ảnh / Source: microsoft.com
Sau khi đã nắm bững các khái niệm phía trên. Kế tiếp anh em cần đọc và hiểu thêm về:

    • Singleton, Factory, and Observer patterns (các design pattern phổ biến)
    • MVC, MVVM, và Clean Architecture

Các nội dung này là bắt buộc để hiểu hơn về kiến trúc của không chỉ ngôn ngữ lập trình C#. Còn là kiến trúc của các framework mà ta sẽ sử dụng.

4. Các phần kiến thức khác

Để trở thành C# Developer giỏi, ngoài các kiến thức liên quan tới code, kiến trúc,… Kỹ năng test cũng là một kỹ năng quan trọng mà anh em cần có.

Sau khi code sẽ là fix bug, còn đối với test sẽ là một vài khái niệm phổ biến anh em cần tìm hiểu:

    • Unit testing
    • Integration testing
    • Acceptance testing

Ngoài testing, cũng sẽ cần phải tìm hiểu thêm về CI,CD, Jenkins, GitLab CI, và Azure DevOps. Một số anh em nghĩ rằng những kiến thức này không phải là chủ yếu khi học C#, hoặc có thể là không cần thiết. Tuy nhiên hiểu biết về CI, CD luôn là một lợi thế lớn. Còn gì tuyệt hơn vừa viết code vừa có thể tự deploy. Nên là học thêm không hề thừa thãi đâu nha. Cố gắng đọc.

Về kỹ năng mềm, cần tập trung rèn luyện và phát triển các kỹ năng mềm như:

    • Giải quyết vấn đề
    • Giải thích vấn đề cho người khác
    • Thuyết trình bằng tiếng anh
    • Tìm kiếm nguyên nhân lỗi
    • Làm việc với team

5. C# Developer thường làm gì

C# developer thường làm gì, task hằng ngày là gì?. Đó là những câu hỏi thường gặp với những bạn muốn bắt đầu thử sức với C#. Để cho dễ mà nói thì C# developer không đơn thuần chỉ là code task bằng C#. Môi trường công việc thực tế sẽ yêu cầu nhiều công việc được xử lý. Cụ thể ta có

    • Phát triển giải pháp C# .NET cho tổ chức, cho nội bộ và khách hàng.
    • Fix bug và sửa lỗi cho các ứng dụng, dự án C#.
    • Bảo trì nâng cấp dự án.
    • Báo cáo và giải quyết các vấn đề liên quan đến dự án .NET.
    • Xác định và xử lý các rủi ro và vấn đề kỹ thuật.
    • Làm việc trong nhóm dự án cùng với các anh em developer khác.
    • Hỗ trợ kỹ thuật cho các dự án chạy trên nền tảng .Net.
    • Báo cáo về tình trạng và sự phát triển của dự án cho team leader.
    • Tham gia các cuộc họp dự án với team.

C# Developer thường làm gì
Nguồn ảnh / Source: cbs.nl
Đấy, có liệt kê ra mới biết không chỉ đơn giản là làm task của riêng mình. Vị trí developer đúng nghĩa luôn yêu cầu cao về kỹ năng làm việc nhóm và các kỹ năng mềm khác. Vì vậy anh em cố gắng rèn luyện thêm về kĩ năng mềm.

6. Các khoá học

Anh em có thể tham khảo thêm 1 số khoá học C# Developer

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

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

Xem thêm:

Tham khảo ngay việc làm IT mọi cấp độ trên TopDev!

Xamarin Developer là gì? Tại sao nên sử dụng Xamarin?

Xamarin Developer là gì? Tại sao nên sử dụng Xamarin?

Xamarin developer liệu có còn hot và nhiều việc trong khi đã có những cross platform khác phát triển song song như Flutter hay React Native. Muốn trở thành Xamarin Developer anh em cần những kiến thức gì? Những khoá học nào bổ ích sẽ giúp đỡ anh em nhiều trong quá trình học tập đó?

Xamarin developer là gì?

Tất cả sẽ có trong bài viết này!

1. Xamarin Developer làm gì?

Bắt đầu với định nghĩa, nếu anh em đã nghe qua Xamarin trước đó thì biết là với Xamarin mình có thể build được app cho cả AndroidiOS. Chỉ cần viết với một ngôn ngữ duy nhất là Xamarin.

A Xamarin developer uses Xamarin, an open-source tool, to design, develop, and build cross-platform mobile applications for both Android & iOS apps. The main benefit awarded to these developers is that Xamarin lets them write all their code in a single language. Xamarin developer sử dụng Xamarin, công cụ mã nguồn mở để thiết kế, phát triển và xây dựng các ứng dụng di động cho cả Android và iOS. Ưu điểm của những lập trình viên sử dụng Xamarin là chỉ viết code với một ngôn ngữ duy nhất

Xamarin developer là gì?
Nguồn ảnh / Source: 20+ Xamarin Courses & Certifications [2023] | Learn Online

Tương tự như Flutter hay React native, với Xamarin, anh em Xamarin developer chỉ viết code 1 lần, 1 ngôn ngữ. Ngôn ngữ cụ thể ở đây là C#. Tất nhiên Xamarin có hỗ trợ rất nhiều tool và plugin để phát triển cũng như kiểm thử app phát triển riêng cho Android và iOS.

  Xamarin là gì? Ưu và khuyết điểm của nó
  Biết chọn gì đây? Flutter, React Native hay Xamarin?

2. Kỹ năng cần có của Xamarin developer

Sau khi đã hiểu Xamarin Developer là gì, giờ là lúc kiểm tra lại xem mình đã có đủ kỹ năng để trở thành Xamarin developer hay chưa?

Vậy những kỹ năng nào được xem là kỹ năng cần có của Xamarin developer

    • .NET/C#,
    • Ajax
    • JSON
    • HTML

Nếu chỉ nói riêng về ngôn ngữ, vì Xamarin dựa trên C#, nên kiến thức và kỹ năng làm việc với ngôn ngữ lập trình C# là bắt buộc cần có. Ngoài C#, vì làm việc với mobile app là bao gồm cả phần UI và Backend, nên biết thêm về JS, HTML, CSS thì càng tốt.

Ngoài kỹ năng về ngôn ngữ lập trình. Vì Xamarin nằm trong hệ sinh thái Microsoft, nên sẽ tốt hơn nếu anh em có kinh nghiệm làm việc với Azure DevOps, GIT,…

Hướng đối tượng (Object-Oriented) và  iOS and Android SDKs cũng là kiến thức nên có trước khi học hoặc theo đuổi để trở thành Xamarin developer.

Xem thêm các vị trí tuyển dụng lập trình Xamarin lương cao!!

3. Tại sao nên sử dụng Xamarin?

Để giỏi hơn ở một ngôn ngữ lập trình hoặc ít nhất là có kỹ năng tốt, anh em cần biết ngôn ngữ mình đang sử dụng có gì tốt. Điểm mạnh của ngôn ngữ đó là gì?

Anh em đọc bài viết này muốn trở thành Xamarin developer tất nhiên cần biết Xamarin có những ưu điểm gì.

    • Bao trọn hầu hết các nền tảng mobile (cái này thì hỗ trợ iOS và Android là đã hỗ trợ hết rồi).
    • Gỉam giá thành (thay vì viết code Android với Java hoặc Kotlin và iOS với Swift, thì chỉ với C#, ta đã có 2 mobile app ngon lành rồi.
    • Phát triển nhanh (đúng vì chỉ cần thành thạo C# và quen với Xamarin, tốc độ phát triển sẽ nhanh hơn nhiều so với phát triển 2 app truyền thống).
    • Mã nguồn mở (Xamarin đang được chia sẻ mã nguồn mở và vẫn đang được hỗ trợ bởi Microsoft).

Tại sao nên sử dụng Xamarin?
Nguồn ảnh / Source: appfutura.com

4. Cần chuẩn bị gì cho Xamarin

Nếu anh em đang dùng Mac, lợi thế là cả Android và iOS đều đã sẵn sàng cho anh em code và build thử

    • Operating System — Từ macOS Mojave (10.14) trở lên
    • Development Environment — Anh em nên cài Visual Studio
    • Xamarin.iOS — Nên có và ưu tiên iOS 12 SDK trở lên
    • Xamarin.Android — Nên có và ưu tiên Android 6.0 / API level 23 trở lên
    • Xamarin.Forms — (Cho cả iOS và Android)

Chi tiết hơn anh em có thể tham khảo tại trang của Microsoft

Tại sao nên sử dụng Xamarin?
Nguồn ảnh / Source: learn.microsoft.com

5. App nổi tiếng xây dựng bởi Xamarin

Anh em Xamarin Developer thông thường khi tìm hiểu thường so sánh các cross platform với nhau. Cụ thể là Flutter hay React Native. Đừng lo lắng, Xamarin cũng là một cross platform đáng gờm và được tin tưởng để xây dựng nhiều ứng dụng lớn trên thế giới.

Cụ thể ở đây ta có:

    • Storyo
    • SuperGiant Games
    • The World Bank
    • APX
    • Skulls of the Shogun

Với React Native và Flutter, ta có

    • Walmart
    • SoundCloud
    • Bloomberg
    • FaceBook
    • Instagram

Tại sao nên sử dụng Xamarin?
Nguồn ảnh/ Source: worldbank.org

Mỗi platform đều có ưu và nhược điểm riêng, vì vậy tìm hiểu thật kỹ, đọc thêm thật nhiều để trở thành Xamarin Developer giỏi.

6. Khoá học nào để trở thành Xamarin Developer

Khoá đầu tiên không thể bỏ qua là khoá của Udemy. The Complete Xamarin Developer Course: iOS And Android! Khoá này cung cấp toàn bộ kiến thức nên tảng của Xamarin. Form, layout, XAML, ModelView – View models.

Tất cả đều có trong khoá học này.

Anh em cũng có thể tham khảo thêm khoá: Xamarin Forms: Build Native Cross-platform Apps with C#

Xamarin developer là gì?
Nguồn ảnh / Source: udemy.com

Kế tới là khoá học của Coursera khi anh em đã nắm vững các kiến thức nền tảng.

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

Xem thêm:

Tìm việc làm IT mới nhất trên TopDev!

Tổng hợp điểm chuẩn ngành CNTT các trường đại học năm 2023

Tổng hợp điểm chuẩn ngành CNTT các trường đại học năm 2023

Trong thời đại công nghệ 4.0, ngành công nghệ thông tin luôn được coi là một trong những ngành top đầu mỗi mùa tuyển sinh. Điểm chuẩn của ngành ở các trường đại học liên tục tăng qua các năm, có trường còn vượt qua mức 29 điểm. Điều này chứng minh cho sức hút về nhân lực công nghệ tại các doanh nghiệp ngày càng lớn.

Hiện tại, điểm chuẩn ngành CNTT tại các trường top đầu đã được công bố, nhìn chung điểm chuẩn năm nay không có nhiều biến động so với năm trước. Hãy cùng TopDev cập nhật điểm chuẩn ngành công nghệ thông tin 2023 qua bài viết dưới đây.

Top các trường Đại học đào tạo CNTT chất lượng hàng đầu Việt Nam

  • Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM
  • Đại học Bách khoa TP.HCM
  • Đại học Bách khoa Hà Nội
  • Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM
  • Đại học Khoa học và Công nghệ Hà Nội
  • Học viện Công nghệ Bưu chính Viễn thông 
  • Đại học Sư phạm Kỹ thuật TP.HCM
  • Đại học Công nghệ – Đại học Quốc gia Hà Nội
  • Đại học Kinh Tế Quốc Dân
  • Đại học Quốc tế – Đại học Quốc gia TP.HCM
  • Đại học FPT
  • Đại học Bách Khoa – Đại học Đà Nẵng
  • Đại học Cần Thơ
  • Đại học Công nghiệp Hà Nội
  • Đại học Giao thông vận tải 
  • Học viện Kỹ thuật mật mã

  Sinh viên CNTT làm thế nào để học tốt ở trường đại học?

  Top 10 Trường đào tạo ngành Công nghệ thông tin tốt nhất

Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM

Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM là một trong những trường đào tạo CNTT top đầu của cả nước. Khi học tại trường, sinh viên được trang bị kiến thức chuyên sâu và thực hành thông qua các dự án thực tế, đảm bảo tính ứng dụng và khả năng giải quyết vấn đề hiệu quả.

Năm 2023, trường Đại học Công nghệ Thông tin áp dụng 4 phương thức xét tuyển gồm tuyển thẳng và ưu tiên xét tuyển; xét tuyển dựa trên điểm thi (kết quả bài thi đánh giá năng lực của Đại học Quốc gia TP HCM và xét kết quả thi tốt nghiệp THPT năm 2023); xét tuyển dựa trên chứng chỉ quốc tế và xét tuyển theo tiêu chí riêng của chương trình liên kết với Đại học Birmingham City, Anh.

Dưới đây là điểm chuẩn đại học Công nghệ Thông tin theo kết quả thi THPT Quốc gia của UIT:

điểm chuẩn đại học 2023

Trường Đại học Bách Khoa TP.HCM

Trường Đại học Bách Khoa TP.HCM đã có hơn 50 năm kinh nghiệm đào tạo và cung cấp cán bộ kỹ thuật chất lượng cao cho ngành CNTT. Trường có phương pháp đào tạo theo xu hướng hiện đại và thực tiễn giúp sinh viên hoàn thiện xuất sắc cả về trình độ chuyên môn lẫn kỹ năng xã hội khi ra trường.

Hiện nay, ĐHBK TP.HCM đang áp dụng nhiều hình thức xét tuyển, trong đó hình thức xét tuyển kết hợp nhiều tiêu chí (kết quả thi ĐGNL, kết quả thi Tốt nghiệp THPT, điểm học THPT, năng lực khác) chiếm 60 – 90% tổng chỉ tiêu.

Sau đây là điểm xét tuyển các ngành trong lĩnh vực CNTT của trường Đại học Bách Khoa TP.HCM:

điểm chuẩn đại học 2023

công bố điểm trúng tuyển
Cách thức tính điểm theo phương thức xét tuyển kết hợp

Đại học Bách khoa Hà Nội

Đại học Bách Khoa Hà Nội (HUST) là một trong những trường đại học hàng đầu tại Việt Nam trong lĩnh vực đào tạo công nghệ thông tin. Tại đây, sinh viên được tiếp cận những kiến thức tổng quát và chuyên sâu về máy tính, các ngôn ngữ lập trình, quy trình phát triển phần mềm nhằm ứng dụng vào nghiên cứu, phát triển và gia công phần mềm.

Đại học Bách Khoa Hà Nội đã chính thức công bố điểm chuẩn trúng tuyển các ngành/chuyên ngành CNTT năm 2023. Mời bạn xem ngay thông tin dưới đây:

điểm chuẩn đại học 2023

Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM

Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM áp dụng chương trình giáo dục bài bản cho sinh viên, đồng thời rèn luyện khả năng tư duy và phân tích thông qua chương trình học chuyên sâu. Bên cạnh đó, sinh viên cũng được khuyến khích tham gia vào các hoạt động nghiên cứu và thực hành, từ đó rèn luyện khả năng tự tìm hiểu và phân tích thông tin một cách chính xác và sáng tạo.

Năm nay, HCMUS áp dụng tổng cộng 6 phương thức tuyển sinh. Trong đó, phương thức xét tuyển dựa trên kết quả Kỳ thi Đánh giá năng lực năm 2023 do ĐHQG-HCM tổ chức chiếm 45% – 50% chỉ tiêu ngành/nhóm ngành; phương thức Xét tuyển dựa trên kết quả Kỳ thi tốt nghiệp THPT chiếm 30% – 50% chỉ tiêu ngành/nhóm ngành.

Dưới đây là điểm xét tuyển nhóm ngành CNTT của trường KHTN – ĐHQG HCM:

điểm chuẩn đại học 2023

Đại học Khoa học và Công nghệ Hà Nội

Đại học Khoa học và Công nghệ Hà Nội (USTH) hay Đại học Việt Pháp áp dụng 3 hình thức tuyển sinh là: Xét tuyển dựa trên kết quả thi đánh giá năng lực cho USTH tổ chức; Xét tuyển thẳng theo đề án của USTH; và Xét tuyển dựa trên kết quả thi tốt nghiệp THPT.

Các nhóm ngành CNTT tại USTH luôn có mức điểm đầu vào cao ngất ngưởng. Theo số liệu năm 2022, ngành Công nghệ thông tin – Truyền thông có đầu vào cao nhất, theo sau đó là ngành Khoa học dữ liệu.

Và dưới đây là điểm xét tuyển 2023 nhóm ngành công nghệ thông tin của USTH:

điểm chuẩn đại học 2023

Học viện Công nghệ Bưu chính Viễn thông

Học viện Công nghệ Bưu chính Viễn thông tuyển sinh năm 2023 với các ngành công nghệ quan trọng như: An toàn thông tin, Khoa học máy tính, Công nghệ Internet vạn vật và Công nghệ thông tin. Các sĩ tử có thể đậu vào học viện thông qua 4 hình thức tuyển sinh: Tuyển thẳng và ưu tiên xét tuyển; Xét tuyển dựa vào kết quả điểm thi tốt nghiệp THPT năm 2023; Xét tuyển kết hợp; và Xét tuyển dựa vào kết quả các kỳ thi đánh giá năng lực.

Điểm xét tuyển nhóm ngành CNTT 2023 của Học viện Công nghệ Bưu chính Viễn thông:

điểm chuẩn đại học 2023

Đại học Sư phạm Kỹ thuật TP.HCM

Năm 2023, Đại học Sư phạm Kỹ thuật TP.HCM áp dụng 4 hình thức xét tuyển bao gồm: Xét điểm học bạ Trung học phổ thông (THPT); Xét điểm học bạ Trung học phổ thông (THPT); Xét điểm thi tốt nghiệp THPT năm 2023; Xét tuyển thẳng, ưu tiên xét tuyển thẳng.

Điểm chuẩn ĐH Sư phạm kỹ thuật TP.HCM theo hình thức xét điểm thi tốt nghiệp THPT đã được công bố. Theo đó, ngành An toàn thông tin có điểm chuẩn cao nhất 26,90 điểm. Mời bạn xem chi tiết điểm chuẩn các ngành thuộc nhóm công nghệ thông tin bên dưới:

điểm chuẩn đại học 2023

Đại học Công nghệ – Đại học Quốc gia Hà Nội

Đại học Công nghệ – Đại học Quốc gia Hà Nội hiện đang đào tạo các ngành liên quan đến công nghệ thông tin như: Trí tuệ nhân tạo, Hệ thống thông tin, Mạng máy tính và truyền thông dữ liệu, Khoa học máy tính. Điểm chuẩn ngành năm nay khá cao, cao nhất là ngành Công nghệ thông tin với 27,85 điểm.

điểm chuẩn đại học 2023

Đại học Kinh tế Quốc dân

Sinh viên học CNTT tại đại học Kinh tế Quốc dân sẽ được đào tạo các kiến thức mới trong công nghệ thông tin, chú trọng đến phát triển kỹ năng trong quản trị và vận hành hệ thống thông tin quản lý; quản lý và phân tích dữ liệu; ứng dụng và chuyển giao công nghệ trong mọi lĩnh vực đồng thời phát triển năng lực tự nghiên cứu tăng cường kiến thức theo xu hướng thời đại.

Điểm chuẩn nhóm ngành CNTT 2023 đã được công bố:

điểm chuẩn đại học 2023

Đại Học Quốc Tế – Đại Học Quốc Gia TPHCM

Khoa Công nghệ Thông tin (CNTT) là Khoa đầu tiên có chương trình đào tạo đạt tiêu chuẩn các Trường Đại học Đông Nam Á và là một trong 4 Khoa đầu tiên của Trường Đại học Quốc tế, Đại học Quốc gia TPHCM. Sinh viên sẽ được trang bị kiến thức cơ bản vững vàng, cập nhật công nghệ tiên tiến, có các kỹ năng chuyên ngành và kỹ năng mềm chuyên nghiệp để phát triển nghề nghiệp bền vững theo hướng công nghiệp hoặc nghiên cứu.

Hiện trường đã công bố điểm chuẩn 3 chuyên ngành đào tạo liên quan đến CNTT là Khoa học máy tính, Kỹ thuật máy tính và Mạng máy tính. Mời bạn tham khảo điểm:

điểm chuẩn đại học 2023

Điểm chuẩn Đại học FPT

Đại học FPT là trường tư thục nổi tiếng với nhiều phân hiệu đặt tại Hà Nội, TP.HCM, Đà Nẵng, Cần Thơ. Tại FPT, sinh viên sẽ được trang bị kiến thức chuyên sâu về CNTT như phát triển phần mềm, trí tuệ nhân tạo, an ninh mạng, big data và nhiều lĩnh vực liên quan khác. Đồng thời, trường tạo điều kiện cho sinh viên thực hành thông qua các dự án thực tế và tương tác với doanh nghiệp hàng đầu trong ngành.

Năm nay, trường áp dụng nhiều hình thức xét tuyển như: Xét tuyển Học bạ; Xét tuyển thẳng; Xét tuyển dựa trên điểm THPT Quốc gia; Xét tuyển thí sinh tốt nghiệp THPT tại nước ngoài và Xét tuyển đối với thí sinh sử dụng chứng chỉ Quốc tế.

Dưới đây là điểm chuẩn xét tuyển dựa trên điểm thi THPT Quốc gia của trường FPT:

Đang cập nhật điểm

Đại học Bách Khoa – Đại học Đà Nẵng

Trường áp dụng 6 phương thức tuyển sinh, bao gồm: Xét tuyển thẳng theo Quy chế tuyển sinh, Tuyển sinh riêng theo Đề án của Trường, Tuyển sinh riêng theo Đề án của Trường, Xét kết quả thi đánh giá năng lực do ĐHQG Tp. HCM tổ chức, Xét kết quả thi đánh giá tư duy do Trường ĐHBK Hà Nội tổ chức và Xét kết quả thi tốt nghiệp THPT.

Dưới đây là điểm chuẩn nhóm ngành CNTT dựa theo kết quả thi tốt nghiệp THPT:

điểm chuẩn đại học 2023

Đại học Cần Thơ

Đại học Cần Thơ hằng năm tuyển sinh các nhóm ngành CNTT với số lượng khá lớn. Năm nay trường áp dụng 4 phương thức xét tuyển: Tuyển thẳng, ưu tiên xét tuyển; Xét tuyển điểm Kỳ thi tốt nghiệp THPT; Xét tuyển điểm học bạ THPT; Xét tuyển thẳng vào học Bồi dưỡng kiến thức.

Điểm chuẩn các ngành Công nghệ thông tin trường Đại học Cần Thơ: 

điểm chuẩn đại học 2023

Đại học Công nghiệp Hà Nội

Đại học Công nghiệp Hà Nội tuyển sinh năm 2023 với 51 ngành học và 6 phương thức xét tuyển. Trong đó, trường đào tạo các ngành liên quan đến công nghệ thông tin như: Khoa học máy tính, Mạng máy tính và truyền thông dữ liệu, Kỹ thuật phần mềm, Công nghệ kỹ thuật máy tính, Công nghệ thông tin.

Điểm chuẩn của Đại học Công nghiệp Hà Nội 2023:

điểm chuẩn đại học 2023

Đại học Giao thông Vận tải

Đại học Giao thông Vận tải đào tạo 3 ngành là Công nghệ thông tin, Công nghệ thông tin chất lượng cao và Khoa học máy tính. Trường là đối tác các một số công ty công nghệ lớn như Samsung SRV, Viettel Network, FPT Software, Nashtech,… nên đầu ra cho sinh viên luôn được đảm bảo.

Điểm chuẩn các ngành CNTT 2023 của trường đã được công bố:

điểm chuẩn đại học 2023

Học viện Kỹ thuật mật mã

điểm chuẩn đại học 2023

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

Xem thêm việc làm IT hàng đầu hot nhất trên TopDev

Google Guice là gì – Dependency injection (DI) framework

Google Guice là gì – Dependency injection (DI) framework

Bài viết được sự cho phép của tác giả Giang Phan

Trong bài trước, tôi đã giới thiệu với các bạn Dependency Injection (DI) và cách tự xây dựng 1 framework đảo ngược điều khiển (IoC) để quản lý các dependency. Trong bài này, chúng ta sẽ cùng tìm hiểu về Google Guice – một framework giúp chúng ta dễ dàng quản lý và sử dụng các dependency.

Google Guice là gì?

Google Guice (phát âm là juice), là một framework DI gọn nhẹ, mã nguồn mở, giúp chúng ta phát triển các ứng dụng dạng module. Guice được phát triển và quản lý bởi Google.

Guice tận dụng thế mạnh của Generic và Annotation – các tính năng mới được giới thiệu từ phiên bản java 5, giúp chúng ta dễ dàng quản lý và sử dụng các Dependency.

Trong Guice, Annotaion @inject được sử dụng để tiêm phụ thuộc. Nó cho phép chúng ta inject sự phụ thuộc tại các constructor, field hoặc method. Sử dụng Guice, chúng ta có thể xác định scope của instance đối tượng phụ thuộc. Nó cũng có các tính năng để tích hợp với Spring và Aspect Oriented Programming (AOP).

Cài đặt Google Guice

Để sử dụng Google Guice, chúng ta cần thêm thư viện Guice vào trong project. Trong bài viết này, tôi sử dụng maven project, chúng ta sẽ thêm thư viện này như sau:

<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.2</version>
</dependency>

Các version khác của Guice, các bạn xem tại link sau: https://mvnrepository.com/artifact/com.google.inject/guice

  Inversion of Control và Dependency Injection

  Giới thiệu về JSON Binding trong Jakarta EE

Ví dụ cơ bản về Dependency Injection với Google Guice

Để sử dụng Guice cần nhớ 2 thông tin quan trọng sau:

  • Nói với Guice cái gì cần được tiêm phụ thuộc (inject) với @Inject.
  • Nói với Guice cách tiêm mô-đun: implement Asbstract Module, bind các interface với các implementation mong muốn.

Chúng ta sẽ viết lại ví dụ ở bài viết Dependency Injection Pattern bằng cách sử dụng thư viện Google Guice.

package com.gpcoder.patterns.creational.googleguice.firstexample;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

// Step 1: Create Interface
interface MessageService {
    void sendMessage(String message);
}

// Step 2: Create Implementation
class EmailService implements MessageService {
    @Override
    public void sendMessage(String message) {
        System.out.println("Email message: " + message);
    }
}

// Step 3: Create Bindings Module
class FirstModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MessageService.class).to(EmailService.class);
    }
}

// Step 4: Create Class with dependency
class UserController {
    private MessageService messageService;

    @Inject
    public UserController(MessageService messageService) {
        this.messageService = messageService;
    }

    public void send() {
        messageService.sendMessage("Dependency injection with Google Guice example");
    }
}

// Step 5: Run application
public class GoogleGuiceFirstApplication {

    public static void main(String[] args) {
        // Step 5.1: Create Injector
        Injector injector = Guice.createInjector(new FirstModule());

        // Step 5.2: Get Object with dependency fulfilled
        UserController userController = injector.getInstance(UserController.class);

        // Step 5.3: Use the object
        userController.send();
    }
}

Output của chương trình:

Email message: Dependency injection with Google Guice example

Trong ví dụ trên, chúng ta thấy một số phần thay đổi so với ví dụ ở bài trước:

  • Step 3: chúng ta tạo một class extends từ AbstractModule, lớp này được sử dụng để định nghĩa cách mà một class/ interface sẽ được inject bởi một implement cụ thể nào. Trong ví dụ này, class MessageService sẽ được inject bởi implement EmailService.
  • Step 4: lớp UserController có dependency với MessageService. Trong ví dụ này, chúng ta sử dụng @Inject tại hàm xây dựng (constructor) để inject đối tượng EmailService đã được khai báo tại Step 3.
  • Step 5.1: Khởi tạo Guice Injector với config đã tạo ở Step 3.
  • Step 5.2: Lấy thể hiện đối tượng với các dependency để sử dụng.

Tham khảo thêm các vị trí tuyển lập trình SQL lương cao tại Topdev.

Các loại Binding

Binding trong Buice là cách chúng ta nói với Guice sẽ tiêm phụ thuộc vào vào một class như thế nào. Để làm được điều này, chúng ta sẽ tạo một class kế thừa từ AbstractModule và override phương thức configure(). Trong phương thức này chúng ta gọi phương thức bind() để xác định mỗi binding của một type ứng với một implement cụ thể. Sau khi đã binding các type trong Module, chúng ta sẽ sử dụng phương thức Guice.createInjector(module) để build một injector.

public class BasicModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Type.class).to(TypeImpl.class);
    }
}

Injector injector = Guice.createInjector(new BasicModule());

Các loại Binding được hỗ trợ bởi Google Guice:

  • Linked Bindings : ánh xạ một type với một implementation cụ thể của nó.
  • Binding Annotations : Trong trường hợp, chúng ta muốn map một Type với nhiều implementation. Chúng ta có tạo một custom Annotation để sử dụng.
  • @Named Binding : một cách khác để map binding mà không cần tạo custom annotation là sử dụng @Named annotation.
  • Constant Bindings : ngoài cách binding với các class/ interface, Guice còn cung cấp một cách để tạo binding với một giá trị của một object hay constant.
  • @Provides Annotation : khi cần khởi tạo một binding value phức tạp.
  • Provider Class : có nhiều @Provide method được định nghĩa trong một module, làm cho class này quá phức tạp, chúng ta có thể move nó sang một class độc lập và implement một Provider interface.
  • Constructor Bindings : khi một class có nhiều constructor, chúng ta có thể tạo binding với constructor cụ thể của object thông qua phương thức toConstructor().
  • In-built Bindings : binding được xây dựng sẵn bên trong Guice, chúng ta chỉ việc gọi @Inject và sử dụng.
  • Just-in-time Bindings : các binding được định nghĩa trong Module, Guice sử dụng chúng bất cứ khi nào cần tiêm phụ thuộc (inject). Trong trường hợp các binding không tồn tại, nó có thể cố gắng tạo ra các binding chỉ khi cần thiết (JIT – just-in-time).

Các loại Injection

Dependency Injection Pattern tách hành vi khỏi các phụ thuộc (dependency). Thay vì tìm kiếm các phụ thuộc trực tiếp hoặc từ các factory, mẫu này khuyến nghị rằng các phụ thuộc được truyền vào từ bên ngoài. Quá trình thiết lập các phụ thuộc từ bên ngoài vào một đối tượng được gọi là tiêm (injection).

Các loại Injection được hỗ trợ bởi Google Guice:

  • Constructor Injection : đối tượng được inject thông qua constructor.
  • Method Injection : đối tượng được inject thông qua method.
  • Field Injection : đối tượng được inject thông qua field.
  • Optional Injection : đối tượng được inject được truyền từ bên ngoài thông qua constructor, method, field hoặc sử dụng một giá trị mặc định.
  • On-demand Injection : các method hoặc field có thể được khởi tạo bằng cách sử dụng một instance đã tồn tại thông qua phương thức injector.injectMembers().
  • Static Injection : đối tượng được inject thông qua static field, loại injection này thích hợp khi migrate ứng dụng sử dụng static factory sang Guice.
  • Injecting Provider : thông thường mỗi loại (type) sẽ nhận được chính xác một thể hiện của từng loại phụ thuộc. Đôi khi chúng ta muốn có nhiều hơn một instance của type phụ thuộc. Guice cúng cấp một Provider với phương thức get(). Một instance mới được tạo ra khi phương thức get() được gọi.

Scope trong Google Guice

Theo mặc định, Guice trả về một instance mới mỗi lần nó cần cung cấp một giá trị. Hành vi này có thể cấu hình thông qua phạm vi (scope). Scope cho phép chúng ta tái sử dụng instance.

Các loại Scope được hỗ trợ bởi Google Guice:

  • @Singleton : một instance duy nhất được sử dụng trong toàn bộ ứng dụng.
  • @SessionScoped : mỗi session sẽ có một instance khác nhau.
  • @RequestScoped : mỗi request sẽ có một instance khác nhau.

Trên đây là giới thiệu cơ bản về Google Guice. Nó cung cấp một cách tiếp cận mới cho Dependency Injection, tận dụng thế mạnh của Annotation và Generic để giúp chúng ta dễ dàng hơn trong việc quản lý và sử dụng các Dependency, cũng như dễ dàng phát triển các ứng dụng dạng module.

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

Xem thêm:

Tin tuyển dụng IT mọi cấp độ trên TopDev đang chờ bạn ứng tuyển!

Sử dụng miễn phí Docker Registry của Gitlab

Sử dụng miễn phí Docker Registry của Gitlab

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Bạn có đang sử dụng Docker trong số các dự án nào đang tham gia không? Nếu có thì chắc hẳn vấn đề lưu trữ và chia sẻ Images cần phải được giải quyết, đơn giản bởi vì Registry mặc định của Docker giới hạn số lượng các hình ảnh riêng tư (Private Images). Điều đó có nghĩa là nếu có nhiều dự án thì bắt buộc bạn phải public số hình ảnh đó cho cộng đồng, mà chắc chắn là không phải ai cũng muốn vì dự án của chúng ta cần tính riêng tư.

Thông thường, có người sẽ chi trả khoản phí cho Docker để nhận được nhiều Private Images hơn, bên cạnh đó cũng có người chọn giải pháp tự triển khai cho mình một Registry để lưu trữ toàn bộ hình ảnh nội bộ của công ty, Docker rất “hào phóng” khi họ sẵn sàng cung cấp cho mọi người sử dụng mã nguồn mở để tự tạo registry lưu trữ. Chi tiết bạn đọc có thể xem tại Docker Registry.

Nếu bạn chỉ là một người dùng cá nhân và không có khả năng chi trả phí dịch vụ, cũng như không có tài nguyên để tự tạo cho mình một Registry thì đây là bài viết dành cho bạn, Gitlab hiện tại đang cung cấp kho Registry hoàn toàn miễn phí, tất cả những gì cần làm là có một tài khoản Gitlab.

  Cài đặt Redis sử dụng Docker

  Deploy ứng dụng load balancer sử dụng Nginx với Docker

Cách sử dụng

Registry mà Gitlab cung cấp hiện tại đang gắn với Repository, có nghĩa là để sử dụng chúng ta cần phải tạo Repos trước. Lúc này, Images sẽ đi theo Repository luôn, bạn lưu trữ bằng cách đẩy hình ảnh Docker lên trùng tên với Repository là Gitlab sẽ tự nhận.

Để sử dụng, chúng ta cần làm các bước như sau:

Bước 1: Tạo một Access Token bằng cách vào Profile > Preferences > Access Tokens. Nhập vào tên keys rồi nhớ chọn quyền read & write registry nhé.

 Sử dụng miễn phí Docker Registry của Gitlab

Sau khi tạo thành công nhớ lưu lại Access Tokens vào đâu đó để sử dụng cho lần sau.

Bước 2: Đăng nhập vào registry của Gitlab:

$ docker login registry.gitlab.com

Nhập username là tên đăng nhập Gitlab và password là Access Token đã tạo ở Bước 1.

Bước 3: Tạo một Repository trên Gitlab, ví dụ tôi tạo repos tên là “system”.

Bước 4: Build một Image bất kì, nhưng nhớ đặt tên trùng với Gitlab repository vừa tạo:

$ docker build -t gitlab.com/hoaitx/system:latest .

Bước 5: Push Image lên như bình thường.

$ docker push gitlab.com/hoaitx/system:latest

Bước 6: Kiểm tra Image đã lên Registry chưa bằng cách vào Repository vừa tạo > Deploy > Container Registry, bạn sẽ thấy tất cả Images cùng với tags ở đây.

 Sử dụng miễn phí Docker Registry của Gitlab

Registry này có thể pull, push như bình thường và đặc biệt nó là private registry cho nên bạn cần phải đăng nhập mới có thể thao tác được.

Limits

Một nỗi lo khi dùng các dịch vụ miễn phí đó chính là giới hạn của chúng trong khi sử dụng. Thật kì lạ là đối với Registry này của Gitlab không có bất kì một tài liệu cụ thể nào để cập đến giới hạn dung lượng lưu trữ của các Images. Tôi đã thử tìm kiếm và thấy có một câu hỏi trong cộng đồng đi đến kết luận là không hề có giới hạn nào cho việc lưu trữ!? Bạn đọc có thể tham khảo tại https://forum.gitlab.com/t/gitlab-saas-total-container-registry-size-limit/50808.

Bài viết gốc được đăng tải tại 2coffee.dev

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

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

Frontend cần học những gì để trở nên thật giỏi!

Frontend cần học những gì để trở nên thật giỏi!

Frontend Developer là những người đảm nhận vai trò xây dựng giao diện website giúp hiển thị nội dung và xử lý các tương tác của người dùng. HTML, CSS và JavaScript được xem như 3 trụ cột, hay 3 ngôn ngữ chính mà mọi lập trình viên Frontend phải nắm được. Ngoài ra, còn có rất nhiều thư viện, framework cùng các ngôn ngữ, thư viện và kỹ năng khác mà một Dev Frontend cần phải nắm được để có thể đảm nhận được vai trò của mình trong tổ chức, dự án. Hôm nay chúng ta cùng đi tìm hiểu để trả lời cho câu hỏi, lập trình viên Frontend cần học những gì nhé.

Công việc của một lập trình viên Frontend

Thông thường khi phát triển một Website, chúng ta sẽ chia ra 2 phần là frontend và backend để tách biệt công việc với những yêu cầu và kĩ năng khác nhau. Đối với Frontend, là những công việc ở client-side; mô tả công việc của một Dev Frontend như dưới đây:

  • Tham gia phát triển các dự án Web trong vai trò xây dựng chức năng front-end của Website, Web-app
  • Triển khai giao diện bằng HTML/CSSJavaScript theo yêu cầu của khách hàng
  • Đảm bảo chất lượng giao diện, UI/UX của Website; khả năng responsive trên nhiều màn hình thiết bị khác nhau
  • Xử lý tương tác của người dùng với Website, trao đổi gửi nhận dữ liệu thông qua API, Sockets,… với phía server-side (Backend) hay các services khác của hệ thống
  • Nghiên cứu, đưa ra đề xuất hay tham gia vào quá trình lên yêu cầu sản phẩm của dự án; cập nhật các xu hướng, trending thiết kế mới.

Công việc của một lập trình viên Frontend

  Lập trình Web nên học ngôn ngữ nào là phù hợp?

  Nên học Front-end hay Back-end? Sự khác biệt là gì?

Những kỹ năng cần có của Frontend Developer

Nhắc đến Frontend là nhắc đến 3 ngôn ngữ quen thuộc HTML, CSS và JavaScript. Nếu như HTML và CSS giúp chúng ta xây dựng bố cục, các thành phần cơ bản của Website cùng màu sắc, hiệu ứng, font chữ,… thì JavaScript sẽ giúp chúng ta xử lý được các tương tác của người dùng cũng như xử lý dữ liệu được server-side trả lại.

Những kỹ năng cần có của Frontend Developer
Công việc của front end

Ngoài kiến thức về HTML/CSS và JavaScript thì lập trình viên Frontend cũng cần phải có những kỹ năng khác để có thể làm việc được trong team và dự án:

  • Kỹ năng quản lý source code: Git, Code Editor và các plugins kèm theo giúp các bạn làm việc một cách tốt hơn trong team
  • Kỹ năng làm việc teamwork, sử dụng các tools quản lý task như Jira, Redmine, Trello,… hoặc giao tiếp trong team theo các quy trình Agile, Scrum, …
  • Kỹ năng testing và debugging: kỹ năng kiểm thử và gỡ lỗi cũng không thể thiếu với mọi lập trình viên. Với front-end Dev thì có một số tool riêng dành cho việc Debug như Chrome DevTools
  • CSS chuyên sâu: để có thể làm việc nhanh hơn với CSS, chúng ta cùng cần những kỹ năng liên quan đến bộ tiền xử lý CSS như SASS, SCSS. Các framework Foundation, Bootstrap hay Semantic UI sẽ giúp bạn làm việc với CSS sâu và nhất quán hơn trong toàn dự án
  • JavaScript nâng cao: các xử lý JS trong một dự án Website sẽ càng ngày càng phức tạp và để quản lý được nó, chúng ta cần đến các thư viện, framework hay các mẫu lập trình có sẵn. Để sử dụng được các thư viện nổi tiếng như React, AngularJS hay áp dụng các mô hình như MVC, MVVM, bạn cũng cần trang bị các kỹ năng tương ứng cùng kiến thức liên quan đến xử lý API tương tác với Backend.

Xem ngay các tin đăng tuyển dụng Front-end lương cao trên TopDev

Lập trình viên Frontend cần học những gì?

Cũng như các lập trình viên khác thì kiến thức lập trình là điều mà Dev Frontend cần trang bị và nắm vững. Học về cách sử dụng Git, sử dụng Jira, Slack, Trello, … là điều mà gần như mọi lập trình viên đều phải tự mình làm ngay từ lúc bước chân vào nghề chứ không thể chờ đến lúc bắt đầu đi làm.

Để trở thành lập trình viên Frontend, tương ứng với các kỹ năng kể trên, chúng ta có một danh sách các ngôn ngữ, thư viện hay kiến thức lập trình mà một Frontend Developer cần học như dưới đây:

Lập trình viên Frontend cần học những gì?

Đầu tiên bạn vẫn cần học và nắm vững được HTML, CSS và JavaScript; đây là điều kiện tiên quyết để có thể trở thành một lập trình viên Frontend. Ngoài 3 ngôn ngữ cơ bản trên, ở bước này các bạn cũng có thể tìm hiểu và học thêm và jQuery; một trong những thư viện nổi tiếng được viết bằng JavaScript mà đa số các thiết kế có sẵn trước bao gồm các HTML/CSS, JavaScript sử dụng. 

Bước tiếp theo chúng ta có thể tiến tới việc học và sử dụng các thư viện, framework dành cho Frontend; có khá nhiều lựa chọn cho bạn:

Lập trình viên Frontend cần học những gì?

React, VueJS, AngularJS,… là những thư viện, framework JavaScript nổi tiếng mà nhiều khách hàng lựa chọn sử dụng. Vì thế nếu bạn lựa chọn học thì sẽ có nhiều cơ hội việc làm hơn. 

Sau khi đã lựa chọn được thư viện và framework sử dụng cho việc phát triển Web; bước tiếp theo hãy nâng cao khả năng lập trình của mình bằng việc học thêm các kỹ năng về CSS như bộ tiền xử lý CSS; về kiến thức responsive hay về kỹ năng thiết kế trên các thiết bị di động. Bên cạnh đó, khi đã tham gia vào các dự án; bạn cũng cần học thêm về các kiến thức liên quan đến ngành, miền (Domain Knowledge).

Mỗi chuyên ngành, lĩnh vực thì sẽ có những yêu cầu đòi hỏi nhất định ảnh hưởng đến website, đến thiết kế của bạn. Ví dụ như trong lĩnh vực giải trí, tin tức; một website đòi hỏi rất nhiều banner quảng cáo, hình ảnh động, thiết kế bắt mắt, … Ngược lại thì với các trang thông tin quản trị nội dung, cần sự đơn giản nhưng đầy đủ tính năng, dễ dàng thao tác với một vài click thì điều quan trọng là UI/UX bạn xây dựng cũng sẽ quyết định nhiều đến sự thành công của dự án.

Kết bài

Qua bài viết này chúng ta cùng nhau đã trả lời được cho câu hỏi lập trình viên Frontend cần học những gì để có thể đáp ứng được yêu cầu của các nhà tuyển dụng và làm việc trong các môi trường phát triển phần mềm. Bất kỳ lĩnh vực ngành nghề nào trong lập trình cũng cần có sự tìm hiểu, học hỏi, nắm bắt được xu hướng công nghệ để đáp ứng được nhu cầu của thị trường. Hy vọng bài viết này hữu ích dành cho các bạn và hẹn gặp lại trong các bài tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Tham khảo ngay việc làm IT mọi cấp độ trên TopDev!

Tầm quan trọng của Loose Coupling trong hệ thống Backend

Tầm quan trọng của Loose Coupling trong hệ thống Backend

Bài viết được sự cho phép của tác giả Lê Nhật Thanh

Những dòng chữ bên dưới là một trong những kiến thức cực kì quan trọng để build một hệ thống backend. Bạn nếu muốn đi con đường backend hoặc fullstack developer thì hãy đọc một cách cẩn thận. Có thể đọc đi đọc lại nhiều lần, vì bài viết về Loose Coupling này mình thật sự rất tâm huyết. Trong bài viết này sẽ nhiều khái niệm như Dependency injection, DIP, IoC hi vọng các bạn sẽ thật sự hiểu được tụi này.

Bản thân là một software engineer, mình đã làm ở trong ngành cũng được một thời gian dài. Mình đã từng trãi rất nhiều hệ thống lớn có nhỏ có, và trong số đó đa phần đều bị vướng một lỗi rất lớn (Lỗi gì thì mình nói sau). Nhưng với lỗi đó, mỗi khi bạn muốn sửa một đoạn code nào đó thì sẽ ảnh hưởng để rất nhiều nơi khác. (Điều này bạn nào có kinh nghiệm rồi làm việc rồi chắc chắn sẽ từng gặp). Mình hay gọi nó với cái từ là impact list, kiểu mình fix một cái bug A nào đó, thì sau khi fix xong, 1 đống bug B, C, D, E, F xuất hiện.

Nói một cách ví von, cái nhà (hệ thống) mình xây lên, chỉ cần ai đó rung nhẹ cái là sập nguyên căn. Đó là một vấn đề rất lớn của những lập trình viên chưa có kinh nghiệm.

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

TÌM HIỂU MỘT CHÚT NHÉ.

Loose Coupling là một khái niệm dễ hiểu, nhưng khó đạt được. Và khái niệm này cũng khá rộng lớn. Ở trong phạm vi bài viết này, mình chỉ đề cập tới Loose Coupling OOP  (lập trình hướng đối tượng). Và cụ thể hơn là Loose Coupling trong việc quản lý dependency. Chứ khái niệm này khá rộng, ví dụ như việc quản lý state, flow,… . Ngoài ra khái niệm này còn xuất hiện trong cả khi thiết kế hệ thống lớn, database distributed,… khi mà các node… phụ thuộc lẫn nhau. Hoặc các module lớn phụ thuộc lẫn nhau.

Ok, quay lại vấn đề của chúng ta là Loose Coupling trong OOP.

Đi qua khái niệm một chút.

  Low Coupling và High Cohesion là gì?

  Top 6 nguyên lý thiết kế microservices cho lập trình viên có kinh nghiệm

TIGHT COUPLING VÀ LOOSE COUPLING LÀ GÌ?

Trong lập trình hướng đối tượng Tight Coupling và Loose Coupling là hai thuật ngữ liên quan đến mức độ mà một lớp (class hay module) phụ thuộc vào lớp khác.

  • Tight Coupling (phụ thuộc chặt chẽ): Khi một lớp phụ thuộc chặt chẽ vào lớp khác, nghĩa là bất kỳ thay đổi nào trong lớp này cũng có thể ảnh hưởng đến lớp kia. Điều này làm giảm khả năng maintenance, tái sử dụng (reusable) và mở rộng (extendable) của mã nguồn (source code).
  • Loose Coupling (phụ thuộc lỏng lẻo): Khi một lớp phụ thuộc lỏng lẻo vào lớp khác, nghĩa là nó chỉ phụ thuộc vào một phần nhỏ của lớp kia, thường là thông qua interface hoặc lớp trừu tượng (abstraction). Điều này giúp mã nguồn dễ dàng mở rộng (extendable), tái sử dụng (reusability) và bảo dưỡng (maintenance) hơn.

Xem ví dụ bên dưới:

class UserService {
    private MySQLUserRepository $userRepository;

    public function __construct() {
        // Dòng ở dưới là tạo ra một hard dependency
        // Dẫn tới tight coupling
        $this->userRepository = new MySQLUserRepository();
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

class MySQLUserRepository {
    public function getById(int $id): string {
        // Code to interact with DB
    }
}

Bạn hãy nhìn từ khoá new!

Như ví dụ này thì UserService phụ thuộc chặt vào MySQLUserRepository với new keywork.

Đây là tight coupling. Vì khi chúng ta thay đổi class MySQLUserRepository (ví dụ đổi tên, thay đổi param constructor) thì sẽ dẫn tới class UserService bị đổi theo. Giả sử có hàng trăm class sử dụng MySQLUserRepository thì chúng ta phải sửa hàng trăm class đó trong khi mục đích là chỉ sửa đúng 1 class.

Và trong giới lập trình, class MySQLUserRepository được gọi là một dependency của UserService.

Và khi chúng ta khởi tạo trực tiếp class (với từ khoá new) thì đây được gọi là hard dependency.

Tham khảo việc làm Back-End lương hấp dẫn trên TopDev!

VẤN ĐỀ?

Thử tưởng tượng hệ thống của bạn có hàng ngàn class và những class này chằng chịch hard dependency thì chuyện gì xảy ra? Hệ thống của bạn sẽ cực kì khó maintain, mở rộng và tái sử dụng, điều dễ thấy nhất đối với hệ thống bị tight coupling là khi refactor, hoặc fix cái gì đó rất nhỏ, nhưng impact list của nó thì rất lớn, và người ta rất ngại refactor, đôi khi phải đập đi xây lại hoàn toàn. Ngoài ra viết unit test với những trường hợp như vậy là cực hình. Và hard dependency gây ra Tight Coupling – cũng chính là cái lỗi mình đề cập ở đầu bài viết.

Bây giờ chúng ta sẽ đi theo flow bên dưới từng bước từng bước một. Để từ Tight Coupling là ví dụ trên, chúng ta sẽ tiến đến Loose Coupling.

Loose Coupling quan trọng như thế nào trong hệ thống backend

FLOW TRÊN BAO GỒM 6 BƯỚC:

  • Step 1: Chúng ta có 1 đoạn code Tight Coupling (ví dụ nên lấy 1 đoạn thôi, nhiều quá khó đọc lém)
  • Step 2: Implement IoC sử dụng Factory Pattern
  • Step 3: Apply DIP (chữ D trong SOLID)
  • Step 4: Implement DI – Dependancy Injection
  • Step 5: Sử dụng IoC Container
  • Step 6: Chúng ta đạt được Loose Coupling (Vui tại đây)

Step 1 đã giới thiệu xong, bây giờ đến step 2 nhé.

À, 6 step ở trên chắc các bạn đã hiểu được step 1 và step 6 rồi, còn 4 step còn lại, chúng ta sẽ cùng nhau đi qua từng bước một. Các bạn đừng lo, nó thật sự dễ hiểu lắm nếu bạn thật sự tập trung.

IMPLEMENT IOC USING FACTORY PATTERN

TRƯỚC TIÊN CÙNG TÌM HIỂU IOC LÀ GÌ?

Inversion of Control (IoC) là một design principle (mặc dù, một số người gọi nó là design pattern), nhớ nha, là design principle. Như tên gọi, nó được sử dụng để đảo ngược sự điều khiển (control) trong thiết kế hướng đối tượng để đạt được sự kết hợp lỏng lẻo (loose coupling). Ở đây, điều khiển bao gồm điều khiển flow của việc tạo ra một đối tượng (object creation) hoặc tạo đối tượng phụ thuộc (dependency creation) và việc quản lý, cung cấp đối tượng được tạo ra cho ứng dụng trong quá trình ứng dụng running.

Nguyên lý IoC giúp thiết kế các class trở nên lỏng lẻo hơn (loose coupling), giúp chúng có thể unit test, maintain và mở rộng dễ dàng hơn.

IoC hoàn toàn về việc đảo ngược điều khiển. Ái chà, cái “sự giải thích” ở trên khá là khoai và khó hiểu nhỉ?

Để mình giải thích điều này theo ngôn ngữ thông thường. Giả sử bạn lái xe đến nơi làm việc, điều này có nghĩa là bạn điều khiển chiếc xe. Nguyên lý IoC đề xuất đảo ngược điều khiển, có nghĩa là thay vì tự lái xe, bạn thuê một chiếc taxi, nơi một người khác sẽ lái xe. Do đó, điều này được gọi là đảo ngược điều khiển – từ bạn sang tài xế taxi. Bạn không phải tự lái xe và bạn có thể để tài xế lái xe để bạn có thể tập trung vào công việc chính của mình. Cái đích cuối cùng là bạn muốn đến nơi làm việc thôi, việc còn lại không cần quan tâm nữa.

Tới đây có thể bạn có hình dung ra phần nào rồi. Tới đoạn dưới bạn đọc code thì sẽ hiểu 100%.

TIẾP TỤC THÔI!

À xem cái hình trước.

Loose Coupling quan trọng như thế nào trong hệ thống backend

Ở hình trên thì chúng ta có khá nhiều design pattern để có thể implement IoC. Trong phần này, chúng ta sẽ sử dụng Factory pattern để implement IoC. Đằng sau chúng ta sẽ dùng pattern Dependency injection rất là bá :)))

Ok lets go!

Loose Coupling quan trọng như thế nào trong hệ thống backend

Chúng ta sẽ thử sử dụng Factory Pattern để “Invert control” hay gọi là đảo ngược sự điều khiển.

class UserService {
    // (Ở đây còn Tight coupling)
    private MySQLUserRepository $userRepository;

    public function __construct() {
        // Đảo ngược chổ này nè
        // (Ở đây cũng còn một chút Tight coupling)
        $this->userRepository = UserRepositoryFactory::getUserRepository();
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

public class UserRepositoryFactory
{
    public static function getUserRepository(): MySQLUserRepository
    {
        return new MySQLUserRepository();
    }
}

Ở ví dụ ban đầu, UserService đang điều khiển (control) MySQLUserRepository các việc như tạo, quản lý object bằng từ khoá new đó nhớ không? Nhưng khi chúng ta apply Factory thì việc điều khiển class MySQLUserRepository đã được đẩy về Factory. Nên UserService không còn điều khiển MySQLUserRepository nữa. Đây là concept của IoC. Đảo ngược sự điều khiển. Tới đây hiểu rồi chứ? Không hiểu thì quay lại nha. Quay đi quay lại 10 lần không hiểu thì mình chịu, để lại comment dưới mình sẽ giải thích thắc mắc.

Tuy nhiên, với việc apply IoC sử dụng Factory pattern, đoạn code của chúng ta vẫn chưa hoàn toàn đạt được loose coupling. Bởi vì nhìn dòng số 3, và số 8 ở đoạn code trên, UserService vẫn còn … dính tới MySQLUserRepository và UserRepositoryFactory.

Bây giờ chúng ta sẽ đi tới step tiếp theo?

Loose Coupling quan trọng như thế nào trong hệ thống backend

APPLY DEPENDENCY INVERSION PRINCIPLE (DIP)

DIP LÀ GÌ?

Là nguyên lý D trong SOLID – Dependency Inversion Principle. Mình có viết 1 bài về chữ D này ở đây. Nguyên lý này nói rằng:

  • High-level modules should not depend on low-level modules. Both should depend on the abstraction.
  • Abstractions should not depend on details. Details should depend on abstractions.

Nghe có vẻ hơi lú thật, nhưng bạn sẽ hiểu ngay thôi. Mình hứa!

Quay lại đoạn code ban đầu, thì một cách rất rất dễ hiểu:

  • High-level modules chính là UserService
  • Low-level modules chính là MySQLUserRepository

Ở ví dụ trên:

  • High-level modules và Low-level modules đang phụ thuộc cứng vào nhau (mặc dù đã dùng Factory implement IoC)
  • Và cũng chẳng có cái gì trừu tượng (abstractions) ở đây cả.

Bây giờ chúng ta sẽ làm sao đó, tìm cách implement DIP.

class UserService {
    // Bây giờ dùng interface ở đây
    private UserRepositoryInterface $userRepository;

    public function __construct() {
        $this->userRepository = UserRepositoryFactory::getUserRepository();
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

public class UserRepositoryFactory
{
    public static function getUserRepository(): UserRepositoryInterface
    {
        return new MySQLUserRepository();
    }
}

// MySQLUserRepository implement UserRepositoryInterface

Chúng ta đã tạo ra UserRepositoryInterface và bây giờ:

  • High-level modules và Low-level modules hiện tại chỉ đang phụ thuộc vào 1 interface (UserRepositoryInterface).
  • Và MySQLUserRepository phụ thuộc vào interface chứ interface không phụ thuộc vào MySQLUserRepository.

Ghê, đổi có xíu mà thoã mãn luôn cả 2 cái câu trên của DIP, thiệt là quá đỉnh :)))

ĐÃ ĐẠT ĐƯỢC LOOSE COUPLING?

Nhưng chúng ta vẫn còn cấn UserRepositoryFactory::getUserRepository(). Thử tưởng tượng khi chúng ta cần inject động vài depedency vào MySQLUserRepository thì chúng ta phải change UserServicenhư sau:

$this->userRepository 
= UserRepositoryFactory::getUserRepository($dependencyA, $dependencyB);

Hoặc đơn giản là muốn sửa đổi thằng UserRepositoryFactory thì chúng ta vẫn đôi khi phải modify thằng UserService.

Chúng ta vẫn chưa hoàn toàn đạt được LOOSE COUPLING!!

Hummmm, bây giờ phải làm sao nhỉ? Quay lại cái hình nào, chúng ta vẫn còn step 4.

Loose Coupling quan trọng như thế nào trong hệ thống backend

Mình sắp tới đích rồi các bạn. Bây giờ chúng ta sẽ thử implement Dependency Injection.

IMPLEMENT DEPENDENCY INJECTION ĐỂ HOÀN TOÀN ĐẠT ĐƯỢC LOOSE COUPLING

DEPENDENCY INJECTION – DI LÀ GÌ?

DI – Dependency Injection nghĩ đơn giản là inject (tiêm, chích, …) một dependency vào một class. Và có 3 loại inject:

  • Constructor injection (cách này hay xài)
  • Method injection (cái này cũng hay xài)
  • Property injection (cái này ít xài hơn)

Ví dụ:

// UserService.php
// Cái này gọi là inject (tiêm) $repo vào UserService
public function __construct(Repo $repo)

Quay lại ví dụ trên.

Thay vì dùng Factory pattern ở Step 2 (tới đây thì bạn hãy quên đi step 2 là được), bây giờ chúng ta thử dùng … Dependency Injection. Và bạn cần nhớ là DI là một design pattern giúp mềnh hiện thức hoá IoC.

class UserService {
    private UserRepositoryInterface $userRepository;

    // Chổ này là Dependency injection nè
    public function __construct(UserRepositoryInterface $userRepository) {
        $this->userRepository = $userRepository;
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

Đừng quên là chúng ta inject vào nhưng vẫn kết hợp DIP cùng với Dependency injection ở step 3 (nghĩa là vẫn dùng interface nhé)

Ok done! Giờ chúng ta kiểm tra lại code.

Khi muốn đổi MySQLUserRepository: Ví dụ thay đổi class name, thay đổi constructor params, hay đổi luôn thành MongoUserRepository, hay làm ABC XYZ nào đó, thì class UserService vẫn không thay đổi.

Và khi muốn viết unit test cho UserService, quá đơn giản, UserRepositoryInterface mock mốt phát một là xong! (Ở đây bạn nào chưa biết viết unit test và chưa biết mock là gì thì search google 1 chút nhé)

VẬY LÀ NGON CHƯA?

Với việc Dùng DI, kết hợp với DIP, chúng ta đã hoàn toàn đạt được Loose Coupling. Đây chính là trạng thái LOOUSE COUPLING mà chúng ta cố gắng đạt được từ ban đầu.

Loose Coupling quan trọng như thế nào trong hệ thống backend

Ấy, sẽ có bạn nhắc là ủa, sao từ step 4 nhảy cóc qua step 6 luôn gồi? À đợi mình chút nhé.

Từ đầu đến giờ, chúng ta luôn thao tác với class UserService. Mà chưa 1 lần thực sự xài nó. Bây giờ xài nha. Giả sử chúng ta xài ở UserController nha.

// Giả sử ở đây là UserController
$userService = new UserService(new MySQLUserRepository());

Ở controller, khi chúng ta muốn xài UserService, vì UserService nó cần một đối tượng nào đó phải implement cái interface UserRepositoryInterface để có thể inject vào đúng không. Ở đây chúng ta khởi tạo MySQLUserRepository để inject vào thôi.

Nếu đoạn đó ở controller thì chúng ta cứ tạm gọi là “ổn” đi cho tới khi chúng ta làm thực tế :)))

public function __construct(
        PluginService $plugin_service,
        FileRepositoryInterface $file_repository,
        MemberListService $member_list_service,
        TargetService $target_service,
        ConfigRepositoryInterface $config_repository,
        paramRepositoryInterface $param_repository
    ) {
        $this->pluginService = $plugin_service;
        $this->fileRepository = $file_repository;
        $this->memberListService = $member_list_service;
        $this->targetService = $target_service;
        $this->configRepository = $config_repository;
        $this->paramRepository = $param_repository;
    }

Thực tế thì 1 class nó phụ thuộc vào 5, 7 class hoặc nhiều hơn là chuyện bình thường. Và mỗi class dependency nó lại phụ thuộc vài class nữa

Và đây là controller trong thực tế case trên :))).

$use_case = new ViewPlugin(
            new PluginService(
                new MySQLPluginRepository(), 
                new MySQLUserRepository()),
            new InMemoryFileRepository(),
            new MemberListService(),
            new TargetService(
                new TargetRepository(),
                new MemberListService(new MySQLUserRepository())
            ),
            new ConfigRepository(),
            new ParamRepository()
        );

$use_case->execute($plugin_id);

Nhìn hoảng thật!!!!

Làm sao để giải quyết vấn đề trên? IoC Container sẽ giúp chúng ta giải quyết vấn đề nan giải này.

Loose Coupling quan trọng như thế nào trong hệ thống backend

SỬ DỤNG IOC CONTAINER

IOC CONTAINER LÀ GÌ?

IoC thì hiểu rồi đó, thế nó thêm chữ container vào làm gì nhỉ? Xe container chăng?

Chúng ta hiểu đơn giản, nó là cái hộp (box hay container) thật.

IoC Container (hay còn được gọi là DI Container) là một framework để thực hiện việc tiêm phụ thuộc tự động (automatic dependency injection). Nó quản lý việc tạo đối tượng (object creation) và thời gian sống của đối tượng, cũng như tiêm các phụ thuộc vào lớp khi cần.

Nghĩa là sao?

  • IoC —> Đảo ngược sự điều khiển
  • Dependency injection —> Implement thằng IoC để đảo ngược sự điều khiển, nhưng ông developer phải làm bằng tay (dùng new ở controller ở trên đó)
  • Và IoC Container —> nó vừa đảo ngược sự điều khiển và nó làm luôn nhiệm vụ tạo ra đối tượng và tự inject vào luôn. Chúng ta sẽ không thấy chữ “new” nữa

Nói dài hơn là thế này: IoC container tạo một đối tượng của lớp được chỉ định và cũng tiêm tất cả các đối tượng phụ thuộc thông qua một constructor, một thuộc tính hoặc một phương thức tại thời gian chạy và hủy nó vào thời điểm thích hợp. Điều này được thực hiện để chúng ta không phải tạo và quản lý các đối tượng một cách thủ công.

Cho nên khi chúng ta apply IoC Container, chúng ta hoàn toàn chuyển quyền điều khiển “control“ về framework. Container sẽ quản lý dependency và tiêm nó vào lúc chúng ta cần.

Thử apply 1 vài cái container xem nào :)))

MỘT VÀI VÍ DỤ

Ví dụ khi apply PHP-DI Container:

// binding / mapping, ...
[
    'PluginRepositoryInterface' => MySQLPluginRepository::class,
    'UserRepositoryInterface'   => MySQLUserRepository::class,
    'FileRepositoryInterface'   => InMemoryFileRepository::class,
    ...
];

$container = new DI\Container();
$use_case = $container->get('ViewPlugin'); // Đúng 1 dòng này

Cái ViewPlugin ở trên nó phụ thuộc cả chục dependency nhớ không các bạn? Bây giờ với việc apply PHP-DI container, chúng ta chỉ cần config chỉ định cho container biết là interface nào sẽ được map với class nào trong quá trình running. Còn việc new new new chục cái dependency và tự động inject vào khi cần đã thuộc về container, chúng ta không cần làm gì nữa. Chỉ cần đúng 1 dòng: $use_case = $container->get('ViewPlugin');

Còn đây là ví dụ khi dùng Spring IoC Container:

@Service
public class ViewPlugin {

    private PluginService pluginService;
    private FileRepositoryInterface fileRepository;

    ...
    @Autowired
    public ViewPlugin(
        PluginService pluginService, 
        @Qualifier("InMemoryFileRepository") FileRepositoryInterface fileRepository
    ) {
        this.pluginService = pluginService;
        this.fileRepository = fileRepository;
    }

    public void execute(String pluginId) {
        // ...
    }
}

Tương tự trong Spring IoC Container, chúng ta cần chỉ định class nào sẽ được map với interface bằng Anotation @Qualifier, và dùng @Autowired để thông báo cho container biết rằng chổ này tôi cần tiêm 1 số dependency vào.

Ok tới đây cũng gần kết rồi, bài viết thì cũng dài, bạn nào đọc được dòng này và “wow” lên thì xin chúc mừng bạn đã thấu hiểu được 1 trong những concept quá là đỉnh khi làm việc với OOP và cụ thể hơn là thiết kế backend.

TÚM CÁI VÁY LẠI MỘT XÍU CHO DỄ NHỚ VỀ LOOSE COUPLING

LOOSE COUPLING GIÚP HỆ THỐNG CỦA CHÚNG TA XỊN HƠN!!!!

  • IoC: Đảo ngược sự điều khiển, thường là đùn đẩy trách nhiệm điều khiển cho framework làm luôn
  • DI: Tiêm đối tượng vào class/module
  • DIP: Xem xét xử dụng abstraction (interface)
  • IoC Container: Một cái hộp – tạo, quản lý, và tự động inject dependency khi cần

Và một điều cũng quan trọng, loose coupling là trạng thái lỏng lẽo thôi, chứ không phải là hoàn toàn không phụ thuộc nữa. Đó chính là đặc tính của lập trình hướng đổi tượng vì interface thường ít bị thay đổi hơn….

Và không phải lúc nào chúng ta cũng phải sử dụng interface đâu nhé. Việc này là phải cân nhắc, ví dụ interface thường được dùng ở tầng repository và tầng service. Và một số nơi khác khi chúng ta muốn switch qua lại giữa các implementation (giống như lúc thì xài cái này, lúc xài cái kia nhưng cả 2 cái đều có hành vi là giống nhau, chỉ khác nhau phần logic ruột – method body).

KẾT LUẬN

Để quản lý tốt dependency khi thiết kế phần mềm (đạt được loose coupling), chúng ta có thể dùng:

  • DIP (hiểu đơn giản là dùng interface hoặc abstract khi cần thiết)
  • Dependency injection (DI là 1 design pattern của IoC) để inject dependency vào class.
  • Khi đã sử dụng 2 ông trên chúng ta đã đạt được loose coupling. Và để quản lý việc khởi tạo, tự động inject dependency, chúng ta sử dụng thêm IoC Container là mọi thứ … ỔN

VÀ ĐÂY LÀ KIẾN TRÚC CỦA HẦU HẾT BACKEND FRAMEWORK HIỆN TẠI.

Cám ơn các bạn đã đọc bài viết.

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

Lập trình Web nên học ngôn ngữ nào là phù hợp?

Lập trình Web nên học ngôn ngữ nào là phù hợp?

Với xu hướng phát triển hiện nay, lập trình Web trở thành một lựa chọn hấp dẫn dành cho các bạn trẻ theo đuổi ngành lập trình. Để có thể tạo ra được các Website hoàn thiện theo yêu cầu của người dùng, lập trình viên cần học một hoặc nhiều ngôn ngữ lập trình khác nhau. Bài viết hôm nay chúng ta cùng nhau đi trả lời cho câu hỏi Lập trình Web nên lựa chọn học ngôn ngữ lập trình nào nhé.

Cấu trúc Website

Trước tiên chúng ta cùng tìm hiểu về cấu trúc cơ bản của một Website phổ biến hiện nay. Đa số website thường gồm 2 phần khá tách biệt: Frontend, Backend.

Cấu trúc Website

Frontend là phần giao diện hiển thị và tương tác với người dùng; được xây dựng bằng bộ 3 huyền thoại HTML, CSS và JavaScript. Backend là phần bao gồm ứng dụng chạy trên máy chủ và tương tác với cơ sở dữ liệu; được xây dựng với đa dạng công nghệ cùng ngôn ngữ lập trình như Java, PHP, Python, Ruby, … Để trở thành một lập trình viên Web, bạn có thể lựa chọn tham gia xây dựng Frontend hoặc Backend hay tham gia cả 2 phần trên và trở thành một Fullstack Developer. Chúng ta cùng đi sâu vào từng phần để xem ngôn ngữ lập trình cần học nhé.

  9 Câu Hỏi Phỏng Vấn Frontend Developer Có Thể Bạn Chưa Biết

  Tiêu chuẩn Coding Backend hiệu quả là gì

Frontend

Nhắc đến Frontend là nhắc đến HTML, CSSJavaScript. HTML – Hypertext Markup Language và CSS – Cascading Style Sheets là 2 ngôn ngữ cơ bản nhất để xây dựng nên giao diện của một Website. 

Frontend

HTML và CSS không phải là ngôn ngữ lập trình, trong khi HTML là ngôn ngữ đánh dấu siêu văn bản, sử dụng các thẻ để xác định các loại nội dung khác nhau; còn CSS là một ngôn ngữ định dạng sử dụng để mô tả cách trình bày như màu sắc, cách bố trí hay phông chữ,… HTML và CSS khi kết hợp với nhau sẽ tạo ra nội dung cần hiển thị lên cho người dùng; và để bắt được những tương tác, phản hồi từ người dùng thì chúng ta cần một ngôn ngữ lập trình, đấy chính là JavaScript. Như vậy để làm được Frontend Web, trước tiên chúng ta cần học 3 ngôn ngữ HTML, CSS và JavaScript.

Sau khi nắm vững được 3 trụ cột này thì bạn có thể lựa chọn một trong những các thư viện, framework dành cho việc lập trình Frontend, có thể kể ra dưới đây:

Hầu hết các thư viện hay framework dành cho Frontend đều đã bao gồm các thành phần CSS, HTML và JavaScript, ngoài ra nó giúp hỗ trợ bạn thiết kế các UI/UX một cách nhất quán, đảm bảo responsive trên nhiều thiết bị màn hình khác nhau và tối ưu hóa khả năng làm việc teamwork.

Tham khảo nhiều vị trí JavaScript Developer hấp dẫn trên TopDev

Backend

Nếu như với Frontend, JavaScript được xem là ngôn ngữ chủ đạo; thì Backend lại cho phép bạn có nhiều lựa chọn về mặt ngôn ngữ và công nghệ. Bản chất của Backend là tạo ra ứng dụng chạy trên máy chủ (server), mỗi server sẽ được cài đặt những hệ điều hành khác nhau; từ đó có nhiều công nghệ, framework cùng ngôn ngữ khác nhau được sử dụng.

Backend

Có rất nhiều ngôn ngữ có thể viết được ứng dụng Backend, phổ biến là Java, JavaScript, Python, PHP, C#, Ruby, … đi kèm với đó là đa dạng các thư viện, framework phong phú. Ví dụ như với JavaScript, chúng ta có thể lựa chọn NodeJS, Express hay Next là những framework phổ biến. PHP thì có Laravel, CodeIgniter, CakePHP hay Zend,…

Khi lựa chọn một ngôn ngữ để học làm Backend, trước tiên hãy cân nhắc đến mức độ phổ biến của ngôn ngữ đó trong những công ty, tổ chức mà bạn định hướng sẽ làm việc. Ví dụ những công ty startup mới phát triển sẽ thường sử dụng ngôn ngữ JavaScript, Java,… cùng các framework opensource miễn phí, triển khai trên các hosting sử dụng hệ điều hành mã nguồn mở để tiết kiệm chi phí.

Ngược lại đối với các công ty, khách hàng có đòi hỏi cao về bảo mật hay sử dụng các hệ thống chạy Window Server thì bạn nên lựa chọn học C#, sử dụng dotNet cho việc phát triển website. Ngoài ra các yếu tố về cộng đồng cũng sẽ ảnh hưởng đến lựa chọn học ngôn ngữ của bạn, ví dụ như ở Việt Nam, cộng đồng phát triển web bằng PHP rất lớn mạnh, vì thế đấy cũng là lý do mà nhiều bạn lựa chọn sử dụng.

Fullstack

Nếu bạn muốn “cân” cả dự án, làm bất cứ task nào trong một hệ thống website thì lựa chọn trở thành Fullstack Developer là dành cho bạn. Điều đó có nghĩa là bạn phải chọn học 1 ngôn ngữ có thể làm được Frontend và thêm 1 ngôn ngữ có thể làm được Backend. Lựa chọn tiện lợi nhất cho bạn là sử dụng JavaScript, bạn có thể làm được cả 2 phía; mặc dù vậy vẫn có nhiều sự khác nhau trong logic xử lý cũng như tư duy lập trình giữa 2 phần này.

Fullstack

Ngoài ra còn 1 yếu tố bạn nên tham khảo là việc thông thường sẽ có các cặp đôi framework, thư viện Frontend và Backend đi kèm với nhau. Chẳng hạn như PHP được ưa chuộng kết hợp với Vue.js hay Spring Boot (một Java framework viết ứng dụng Web Backend) đi với React. Đây là lựa chọn của một số khách hàng, công ty cho việc phát triển hệ thống Website; vì thế nếu bạn có dự định apply vào tổ chức đó là trở thành Fullstack Developer thì cũng cần tìm hiểu trước về mặt công nghệ và ngôn ngữ họ sẽ sử dụng để có lựa chọn hợp lý.

Kết bài

Như vậy qua bài viết này chúng ta đã cùng nhau trả lời được cho câu hỏi Lập trình Web nên học ngôn ngữ nào. Có nhiều lựa chọn dành cho bạn, điều quan trọng là hãy nắm được kỹ năng lập trình và học hỏi được hết những kiến thức cần thiết của ngôn ngữ bạn lựa chọn. Hy vọng bài viết hữu ích dành cho bạn, và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Tìm việc làm IT lương cao, đãi ngộ hấp dẫn trên TopDev!

7 chính sách thu hút nhân tài IT đột phá cho doanh nghiệp

tuyển dụng IT
tuyển dụng IT

Tuyển dụng nhân tài trong lĩnh vực công nghệ thông tin (IT) là một trong những vấn đề khó khăn mà nhiều doanh nghiệp đang phải đối mặt. Sự phát triển nhanh chóng của công nghệ đã tạo ra nhu cầu ngày càng tăng về nhân lực chất lượng cao trong lĩnh vực này. Tuy nhiên, việc tìm kiếm và tuyển dụng nhân tài IT phù hợp vẫn còn gặp nhiều khó khăn do sự khan hiếm của nguồn nhân lực chất lượng.

Do đó, việc triển khai các chính sách thu hút nhân tài công nghệ ngay lúc này là vô cùng cần thiết. Vậy các doanh nghiệp cần đưa ra những chính sách gì? Làm thế nào để tạo được sự chú ý cho các nhân tài IT? Tất cả sẽ có trong bài viết dưới đây!

Vì sao tuyển dụng nhân tài IT ngày càng khó?

Có một số lý do khiến việc tuyển dụng nhân tài IT ngày càng khó khăn. Lý do đầu tiên là nhu cầu về nhân tài IT đang tăng lên nhanh chóng, trong khi nguồn cung lại không đủ để đáp ứng nhu cầu. Theo báo cáo thị trường IT Việt Nam 2022 của TopDev, từ năm 2022 – 2024, Việt Nam sẽ vẫn thiếu hụt 150.000 – 195.000 lập trình viên / kỹ sư hàng năm. Điều này là do sự phát triển nhanh chóng của công nghệ, khiến các doanh nghiệp cần nhiều nhân tài IT hơn để phát triển và duy trì các hệ thống và ứng dụng của họ.

tuyển dụng IT

Một lý do khác khiến việc tuyển dụng nhân tài IT ngày càng khó khăn là yêu cầu về trình độ của các vị trí IT ngày càng cao. Cũng theo báo cáo của TopDev, hiện nay chỉ có 35% trong tổng số 57.000 sinh viên chuyên ngành Công nghệ thông tin đáp ứng được yêu cầu của doanh nghiệp. Các doanh nghiệp đang tìm kiếm những nhân viên có trình độ chuyên môn cao, có kinh nghiệm và có thể làm việc độc lập cũng như theo nhóm. Điều này khiến việc tìm kiếm những nhân tài IT phù hợp trở nên khó khăn hơn, đặc biệt là đối với các doanh nghiệp nhỏ.

Ngoài ra, các nhân viên IT hiện nay cũng có xu hướng nhảy việc nhiều hơn, khiến việc giữ chân họ cũng trở nên khó khăn hơn. Điều này là do các nhân viên IT có nhiều cơ hội việc làm với mức lương cao hơn, điều kiện làm việc tốt hơn và cơ hội thăng tiến hơn.

7 chính sách thu hút nhân tài IT cho doanh nghiệp

Chính sách thu hút và giữ chân nhân tài IT cho doanh nghiệp là một yếu tố quan trọng để nâng cao hiệu suất và cạnh tranh của các doanh nghiệp trong ngành công nghệ thông tin. Dưới đây là một số chính sách thường được các doanh nghiệp áp dụng nhất để thu hút nhân tài:

Mở rộng phạm vi tuyển IT

Việc mở rộng phạm vi tuyển dụng ra nhiều nơi như tuyển dụng IT tại HCM và các khu vực khác. Điều này giúp định hình các khu vực tiềm năng. Đồng thời, đó cũng được xem là một chính sách thu hút nhân tài thông minh trong thời điểm đầy cạnh tranh như hiện nay.

tuyển dụng IT
Mở rộng phạm vi là cách thức hiệu quả

Từ việc mở rộng, nhà tuyển dụng ngành IT có thể khoanh vùng, tìm kiếm, chọn lọc và khai thác nguồn lực ứng viên một cách tốt hơn.

Thế nhưng, các doanh nghiệp cần xây dựng một quy chuẩn chung về cách thức hoạt động nhân sự. Từ thiết kế JD, và phát triển thương hiệu nhà tuyển dụng nhằm thu hút ứng viên tốt hơn. Có như thế thì dù là ứng viên mới hay đến các freelancer IT đều có thể nắm bắt được thông tin tuyển dụng hiệu quả.

Mức đãi ngộ cần được cân nhắc

Các công ty/doanh nghiệp sẵn sàng chi những mức lương ổn định, đáp ứng nhu cầu của ứng viên nếu họ thật sự phù hợp với tiêu chuẩn của doanh nghiệp. Đồng thời, việc đính kèm các quyền lợi về đãi ngộ, môi trường làm việc, lộ trình phát triển – thăng tiến trong sự nghiệp,… là các yếu tố quan trọng.

Tuy vậy, nên đảm bảo việc cân nhắc. Nhà tuyển dụng dựa vào kinh nghiệm, kỹ năng và tiềm năng phát triển của ứng viên. Các vị trí như tuyển dụng Data Scientist, Senior Developer,… đều là những vị trí nhận được sự quan tâm lớn từ doanh nghiệp.

Bên cạnh khía cạnh lương thưởng, mỗi doanh nghiệp cần đảm bảo cung cấp các công cụ công nghệ hỗ trợ họ trong việc thực hiện các nhiệm vụ. Tất cả những yếu tố đó sẽ góp phần tạo ra sự thú hút lớn đối với ứng viên IT.

Đưa ra những thách thức tuyển dụng

tuyen dung it da nang
Thách thức được xem là yếu tố tạo ra sự thu hút lớn đối với ứng viên

Thách thức trong tuyển dụng là một chính sách thu hút nhân tài các doanh nghiệp thường bỏ qua. Các ứng viên IT tài năng họ rất thích sự thách thức. Vì vậy, nhà tuyển dụng mảng IT và doanh nghiệp cần nắm bắt điều này để tạo ra sự thú vị trong quá trình tuyển chọn nhân lực. Ứng viên đều mong muốn thể hiện năng lực của mình. Do vậy, việc đưa ra các thách thức để giúp họ trải nghiệm bản thân, thử sức với nhiều điều mới sẽ tạo ra sự kết nối với họ tốt hơn. Kỹ năng viết CV IT Developer cũng là một trong những thử thách thú vị đối với ứng viên.

  Cách đăng tin tuyển dụng trên Facebook với 5 tuyệt chiêu tối ưu

  Cách tìm ứng viên trên LinkedIn không phải HR nào cũng biết

Chính cơ sở đó mà các doanh nghiệp cần lồng ghép khéo các thử thách trong tuyển dụng.

Không đơn thuần chỉ là phỏng vấn, các bài test. Hãy thật sự quan tâm đến khía cạnh tạo ra trải nghiệm cho ứng viên. Điều này cũng có ý nghĩa quan trọng vì họ được tiếp xúc với các kiến thức chuyên môn, những công việc thực tế mình sẽ phải đối mặt nếu trúng tuyển.

Tuyển người đúng nơi – Tìm người đúng chỗ

Hầu hết những nhân tài IT đều đang ở thế bị động. Đó cũng chính là lý do việc thu hút ứng viên trở nên khó khăn hơn. Nhà tuyển dụng cần có những chiến lược cụ thể hơn nhằm tăng khả năng tiềm kiếm ứng viên. Phải tối ưu hóa quá trình tương tác giữa ứng viên để chiêu mô những ứng viên tài năng nhất cho tổ chức.

Tổng hợp các việc làm Back-end đang tuyển trên TopDev

Hãy tuyển các ứng viên IT đúng nơi và đúng thời điểm. Sau đây là list dành cho lập trình viên hay lui tới. 

+ Các website công nghệ cộng đồng

+ Diễn đàn công nghệ

+ Các mạng xã hội về việc làm

+ Sự kiện công nghệ cộng đồng tại địa phương

Sức mạnh từ Event IT (Sư kiện công nghệ)

Event IT là một chính sách thu hút nhân tài doanh nghiệp không thể bỏ qua. Sự kiện công nghệ luôn tạo ra sức hút lớn đối với những ứng viên IT. Mỗi doanh nghiệp có thể kết hợp sự kiện để phát triển thương hiệu nhà tuyển dụng IT. Đồng thời, tạo cơ hội cho các ứng viên trải nghiệm thực tế thông qua sự kiện.

Ngoài việc có cơ hội tiếp xúc, kết nối với những nhân tài công nghệ, đây còn là dịp để bạn có thể giới thiệu và quảng bá con người cũng như văn hóa của công ty mình. 

Sự kiện Vietnam Mobile Day 2023 do TopDev tổ chức
Sự kiện Vietnam Mobile Day 2023 do TopDev tổ chức

Xây dựng thương hiệu nhà tuyển dụng

Thương hiệu nhà tuyển dụng là hình ảnh mà doanh nghiệp thể hiện ra bên ngoài, thể hiện giá trị, văn hóa và môi trường làm việc của doanh nghiệp. Một thương hiệu nhà tuyển dụng IT tích cực sẽ giúp doanh nghiệp thu hút được nhiều ứng viên tiềm năng.

Doanh nghiệp có thể xây dựng thương hiệu nhà tuyển dụng IT tích cực bằng cách:

  • Đăng tải thông tin về doanh nghiệp, văn hóa và môi trường làm việc trên các trang web tuyển dụng, mạng xã hội và các phương tiện truyền thông khác.
  • Tham gia các hội nghị, hội thảo về công nghệ và nhân sự.
  • Tổ chức các chương trình đào tạo và phát triển nhân tài IT.
  • Hỗ trợ nhân viên IT tham gia các hội nghị, hội thảo và các sự kiện về công nghệ.

Chủ động thu hút những ứng viên không có nhu cầu tìm việc

Một trong những cách thu hút nhân tài IT hiệu quả là chủ động tiếp cận và thu hút những ứng viên không có nhu cầu tìm việc. Thay vì chỉ nhắm vào những người đang tìm kiếm việc làm, công ty có thể tiếp cận những ứng viên đang làm việc trong các công ty đối thủ, những cựu nhân viên đã nghỉ việc, hoặc những người có kỹ năng đặc biệt mà công ty đang tìm kiếm. Điều này giúp công ty tăng cơ hội tìm được nhân tài phù hợp và có lợi thế cạnh tranh.

Công ty có thể tìm cách gặp gỡ và giao tiếp với những ứng viên không có nhu cầu tìm việc thông qua các sự kiện networking, hội thảo chuyên đề, hoặc các trang mạng xã hội chuyên về lĩnh vực công ty hoạt động. Điều này giúp xây dựng một mối quan hệ gắn kết và tăng khả năng thu hút họ khi có nhu cầu tìm việc trong tương lai.

Tổng kết

Trong bối cảnh nguồn cung và cầu nhân sự IT chất lượng mất cân bằng, cuộc đua thu hút nhân tài CNTT ngày càng ác liệt, yêu cầu các nhà quản lý phải áp dụng chiến thuật mới để giành được lợi thế cạnh tranh. Hy vọng rằng những chính sách thu hút nhân tài trên sẽ giúp các doanh nghiệp nhanh chóng tìm kiếm được đội ngũ nhân lực IT đủ mạnh mẽ và đóng góp cho sự phát triển của doanh nghiệp.


Tuyển Dụng Nhân Tài IT Cùng TopDev
Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products

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

Xem thêm việc làm Developers hàng đầu tại TopDev