Home Blog Page 54

Năm 2022 rực rỡ tại EPAM Vietnam – Hiện thực hoá tương lai từ nguồn lực nhân sự mạnh mẽ

Vào tháng 12 vừa qua, EPAM chính thức kỉ niệm 3 năm thành lập với nhiều sự tăng trưởng mới tại thị trường Việt Nam.

EPAM là công ty cung cấp dịch vụ chuyển đổi số và phát triển phần mềm hàng đầu thế giới được thành lập từ năm 1997. EPAM tập trung vào việc xây dựng mối quan hệ lâu dài với các đối tác, hỗ trợ họ tái cơ cấu doanh nghiệp thông qua lăng kính số.

Không chỉ có thế, EPAM còn giúp khách hàng tăng trưởng nhanh hơn, agile hơn và thích ứng nhanh nhất với thị trường thông qua những dịch vụ đổi mới sáng tạo, kỹ thuật, chiến lược, thiết kế, tư vấn và đào tạo tối ưu nhất. Hiện tại EPAM đang hoạt động tại 50 nước trên thế giới với hơn 61,300 nhân viên. EPAM Vietnam được thành lập năm 2019 và đang phát triển mạnh mẽ với hơn 200 nhân viên, đem đến nhiều cơ hội việc làm cho các chuyên gia và kỹ sư phần mềm. EPAM Vietnam tập trung vào phát triển các công nghệ Java, JavaScript, Full-stack web, Mobile development, Automation testing, Data Engineering và liên tục cập nhật các công nghệ mới như Microservies, Cloud Native, Serverless và các công nghệ thế hệ tiếp theo (next-gen technologies) khác.

EPAM Vietnam

Trong năm 2022,  EPAM Vietnam chào đón gần 100 thành viên mới với hơn 16 dự án trọng điểm. Nhờ chính sách làm việc remote (từ xa), hybrid và relocation linh động, các thành viên của EPAM Vietnam hiện đang làm việc từ hơn 10 tỉnh thành và chào đón nhiều đồng nghiệp nước ngoài đến từ Ukaraine, India, Hungary, Mỹ, Nga,… Không những thế, EPAM tiếp tục phát triển mạnh mẽ hơn với việc khai trương văn phòng chính thức tại Hà Nội vào tháng 8 vừa qua.

Nhờ những nỗ lực không ngừng của đội ngũ People và Talent Acquisition nhằm tạo nên một môi trường làm việc Đa dạng và Hoà Hợp (Diversity and Inclusion), EPAM đã xuất sắc đạt vị trí thứ 2 với giải thưởng “Nơi làm việc tốt nhất Việt Nam 2022™” bởi tổ chức Great Place to Work™.

Không chỉ quan tâm đến đời sống nhân viên thông qua loạt sự kiện Family Day, Woman’s Day, Trung Thu,… EPAM còn đóng góp cho xã hội thông qua nhiều hoạt động CSR đáng chú ý. Tiêu biểu có thể kể đến chuỗi sự kiện trồng cây trong Earth Day, nâng cao ý thức về bệnh ung thư vú với Pinktober hay hợp tác, tài trợ cho nhiều tổ chức như SheCodes, AmCharm, và Passerlles numériques Việt Nam.

Việc làm IT tại HCM tại đây

EPAM Vietnam

Không dừng lại ở đó, EPAM cũng tham gia chia sẻ tại nhiều sự kiện công nghệ lớn như Vietnam Mobile Day, Vietnam Web Summit, Google Devfest và các trường Đại học trên khắp Việt Nam. Chỉ trong đầu năm 2023, EPAM tiếp tục nhận được công nhận từ toàn bộ nhân viên với 93% xác nhận đây là Great Place to Work™.

EPAM Vietnam

Để không ngừng tăng trưởng mạnh mẽ trong năm 2023, phát triển nhân lực là yếu tố quan trọng hàng đầu. Ngoài hàng trăm chương trình đào tạo nội bộ hấp dẫn, EPAM Vietnam cũng tung ra nhiều chương trình tuyển dụng hấp dẫn nhằm thu hút nguồn nhân lực chất lượng cao. Trong đó có thể kể đến chương trình Giới thiệu ứng viên External Referral Program hấp dẫn dành riêng cho các đối tượng ngoài công ty (non-employee) với cơ hội nhận $500 bonus và Iphone 14 ProMax, Apple Watch… Nếu bạn cũng đang tìm kiếm một môi trường làm việc quốc tế, chuyên nghiệp với nhiều dự án thú vị, hãy ứng tuyển ngay vào EPAM Vietnam tại: https://epa.ms/EPAM-Vietnam. EPAM luôn chào đón các bạn gia nhập và phát triển bản thân!

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

Đừng bỏ qua việc làm IT tất cả level có trên TopDev nhé!

Linux là gì? Tại sao lập trình viên nên biết cách sử dụng Linux

linux là gì

Bài viết được sự cho phép của tác giả Phạm Bình

Chào các bạn,

Cái tên Linux chắc bạn nghe nhiều rồi nhỉ, và có thể bạn đã biết Linux là tên một hệ điều hành máy tính được các lập trình viên yêu thích, thế nhưng bạn mới chỉ nghe vậy thôi, chứ tại sao các lập trình viên lại yêu thích hệ điều hành này thì bạn chưa biết, có phải vậy không? Nếu đúng thì … bạn thật giống mình ngày trước. Trước kia, khi nghe các “developer nhà người ta” khuyên rằng “là lập trình viên thì nên biết cách dùng Linux” mình cũng rất tò mò, không hiểu Linux là gì? cái OS này có gì hay ho mà lại được họ ca ngợi như vậy. Mình cũng có bỏ công tìm hiểu, thì chỉ thấy họ nói: Linux nhẹ, Linux linh hoạt, Linux miễn phí,… nhưng từng đó lý do là chưa đủ để mình cảm thấy “thích” hệ điều hành này, phải mãi cho tới khi…

Cho tới khi đi làm, vì công việc mà bắt buộc phải sử dụng tới Linux để phát triển dự án, mình mới hiểu được lý do tại sao các developer tiền bối lại khuyên vậy. Cụ thể lý các do là gì, mình xin được chia sẻ lại qua bài viết ngắn gọn này.

I. LINUX VÀ CÁC BẢN PHÂN PHỐI CỦA LINUX

1.1 Linux là gì?

Dẫu ai cũng biết rằng nó là cái gì đó rồi. Nhưng mình vẫn muốn nhắc lại chút để chúng ta có chung khái niệm về Linux mà mình đề cập ở dưới.

Ngày nay, Linux được biết đến là tên một hệ điều hành máy tính (để dễ hiểu thì bạn cứ tưởng tượng nó là cái gì đó tương tự như Windows, MacOS vậy). Nhưng nói một cách chính xác thì Linux chỉ là kernel (hạt nhân) của hệ điều hành.

Còn hệ điều hành Linux mà ngày nay mọi người vẫn nhắc đến thì có tên đầy đủ là GNU/Linux – chắc do cái tên GNU/Linux dài quá nên người ta mới gọi tắt là Linux cho ngắn gọn.

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

Giới thiệu thêm về GNU/Linux

GNU là một dự án được ra đời vào năm 1983 bởi Richard Stallman. Dự án này hướng đến một hệ điều hành miễn phí, nơi mà mọi người có thể tự do chỉnh sửa, phát triển, sao chép theo ý mình.

Bản thân dự án GNU sau khi ra đời đã đạt được nhiều thành tự lớn, đóng góp nhiều sản phẩm hữu ích cho cộng đồng. Nhưng GNU vẫn còn thiếu một thành phần vô cùng quan trọng để trở thành một hệ điều hành hoàn chỉnh, đó chính là kernel – thành phần tương tác với phần cứng máy tính.

Trong dự án GNU, một kernel có tên GNU Hurd cũng được nhắc đến, nhưng do chưa sẵn sàng ra mắt nên các kernel phi GNU cũng có thể sử dụng được với GNU – mà nổi bật nhất chính là Linux kernel. Kể từ đó cái tên GNU/Linux đã ra đời và được biết đến là hệ điều hành phát triển bằng cách kết hợp giữa GNU với Linux kernel.

Để phù hợp với nhiều tài liệu khác, cũng như cách mà mọi người vẫn hiểu Linux là gì, thì khái niệm Linux mà mình nhắc tới trong bài viết này là chỉ hệ điều hành GNU/Linux hoặc các bản phân phối của Linux, chứ không phải là Linux kernel. Bạn hãy chú ý.

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

1.2 Các bản phân phối của Linux

Bản phân phối của Linux (Linux distribution hay Linux distro) là chỉ những hệ điều hành được phát triển dựa trên hệ điều hành Linux. Một bản phân phối của Linux thường sẽ được tích hợp sẵn một số phần mềm tiện ích, một trình quản lý gói (packages manager), một window system (phần lớn sử dụng X Window System), window manger và một môi trường desktop.

Lưu ý: X Window System và window manager không liên quan gì tới hệ điều hành Windows của Microsoft.

Một số bản phân phối điển hình của Linux đang phổ biến hiện nay (2020) có thể kể đến như: Ubuntu, CentOS, Fedora – chắc bạn cũng từng nghe qua những cái tên đó rồi chứ nhỉ.

  5 lý do lập trình viên nên sử dụng hệ điều hành Linux

II. TẠI SAO LẬP TRÌNH VIÊN NÊN BIẾT CÁCH SỬ DỤNG LINUX?

Mình nhấn mạnh từ “nên”, nghĩa là không bắt buộc, nghĩa là bạn vẫn có thể trở thành lập trình viên mà không cần phải biết cách dùng Linux. Nhưng nếu bạn muốn trở thành một lập trình viên “hợp thời”, muốn khám phá những giải pháp công nghệ hiện đại, muốn trở thành “hổ thêm cánh” thì chắc chắn phải biết cách dùng Linux. Và dưới đây là một số lý do điển hình:

2.1 Các server phần lớn đều sử dụng hệ điều hành Linux

Mặc dù rất khó để tìm thấy một chiếc laptop của người dùng thông thường lại được cài hệ điều hành Linux. Nhưng đối với các server thì lại khác, Linux là hệ điều hành phổ biến nhất trên các server bởi những lý do sau:

  • Miễn phí: Bạn sẽ không phải tốn chi phí bản quyền khi sử dụng hệ điều hành Linux.
  • Ít tốn tài nguyên phần cứng: Linux được cho là ít tốn tài nguyên phần cứng hơn là hệ điều hành Windows, hay cũng có thể nói Linux có thể chạy tốt trên các phần cứng thông thường (phần cứng rẻ).
  • Bảo mật và cập nhật nhanh chóng: Vì linux là mã nguồn mở, nên khi phát hiện lỗi, sẽ nhận được sự đóng góp nhiệt tình từ cộng đồng người sử dụng trên khắp thế giới.

Từ những lý do trên, có thể thấy rằng Linux là hệ điều hành “tối ưu cho túi tiền”. Bạn có thể tập trung chi phí cho phần cứng của server thay vì phải mất một khoản để trả cho bản quyền của hệ điều hành.

Mặt khác, các lập trình viên lại là đối tượng thường xuyên tọc mạch vào các server để nghịch ngợm. Vì vậy, bạn nên biết sử dụng Linux để có thể làm chủ server của mình.

Nếu bạn chưa bao giờ làm việc với server Linux, thì có nghĩa là chưa tới lúc bạn động đến chúng, chứ không có nghĩa là bạn không cần chúng.

Blog phambinh.net cũng được cài đặt trên VPS Linux.

2.2 Là môi trường lý tưởng cho các công nghệ Open Source

Bản thân Linux là một open source, nên nó rất dễ dàng kết hợp với các công nghệ open source khác. Ngoài ra, các công nghệ open source phần lớn đều tương thích với hệ điều hành Linux (thật ra mình chưa gặp một open source nào mà không hỗ trợ Linux cả).

Mặt khác, phát triển sản phẩm open source lại đang là xu hướng. Bằng chứng là ngay cả ông lớn Microsoft – nổi tiếng với cách làm closed source cũng đã có sản phẩm open source cho riêng mình là VsCode – một editor được nhiều lập trình viên yêu thích. Hay trong mấy năm gần đây, Microsoft cũng đã mua lại github và npm, vốn là 2 nền tảng liên quan nhiều tới các open source. Bạn cũng có thể thêm các open source của Microsoft tại đây: https://opensource.microsoft.com

Việc cài đặt thêm các nền tảng open source khác trên Linux thật sự dễ dàng thông qua các trình quản lý gói. Ví dụ để cài đặt PHP trên Ubuntu (một distro của Linux) bạn chỉ cần chạy lệnh sau trên CLI:

sudo apt install php

Nếu như bạn là một web developer (PHP, NodeJS), android developer thì môi trường phát triển tốt nhất có lẽ là Linux.

2.3 Có ứng dụng CLI mạnh mẽ

Mình đã phân vân không biết có nên đưa mục này vào không. Vì trên các bản distro của Linux thường sẽ có sẵn một app CLI là Terminal, và điều khiến mình cho rằng CLI trên Linux mạnh mẽ hơn các hệ điều hành khác, cụ thể là với Windows là do cái app Terminal này dễ dàng sử dụng hơn so với Command Prompt hay Powershell có sẵn trên Windows. Nhưng mình cũng gặp rất nhiều bạn chuyển qua dùng Linux đơn giản chỉ vì cái cái Terminal của Linux dùng được tổ hợp phím control + C / control + V để copy và paste, thay vì phải sử dụng chuột hoặc một tổ hợp phím “lạ lùng” nào đó để thực hiện công việc tương tự trên Windows.

Sau khi suy nghĩ, mình quyết định đưa mục này vào bài viết.

III. MỘT SỐ LƯU Ý VỀ LINUX

Phía trên toàn là thấy khen Linux không à, sợ các bạn sẽ gỡ Windows để mà cài đặt Linux nên mình viết thêm mục này để lưu một số điều về Linux.

3.1 Nếu bạn chuyên làm các stack liên quan tới Windows, biết Linux có thể không giúp ích cho bạn

Nếu bạn chỉ làm C#, aps.net, Visual basic, hay bất kỳ công nghệ độc quyền nào của Microsoft thì biết linux sẽ không giúp ích gì cho bạn. Bởi bản thân ông lớn Microsoft đã trang bị sẵn một hệ sinh thái khép kín cho các công nghệ của mình.

3.2 Linux không phù hợp với các ứng dụng văn phòng hay thiết kế

Linux tuy rất phù hợp để lập trình, để phát triển các sản phẩm trên nền tảng open source, nhưng lại không hỗ trợ tốt các ứng dụng văn phòng như MS world, Excel, Power Point,… Mặc dù trên Linux có hai bộ ứng dụng là LibreOffice và OpenOffice để giải quyết vấn đề này, nhưng nó vẫn không mượt mà và ổn định như MS Office có trên Windows được. Cũng đúng thôi, MS Office là một trong những niềm tự hào của Microsoft mà, đâu dễ dàng thay thế được.

Tuy lập trình viên ít khi phải động tới các ứng dụng dạng này, nhưng không phải là không có.

Một phần mềm nữa là Photoshop cũng không có bản hỗ trợ trên Linux, với những bạn có nhu cầu cắt giao diện từ Photoshop thì đây cũng là vấn đề đang lưu ý đó.

Về cách khắc phục, thao tác với các ứng dụng văn phòng bạn có thể sử dụng LibreOffice, OpenOffice, hoặc Google docs, Google sheet, Google slide để thay thế. Với việc cài photoshop, bạn có thể cài trên máy ảo windows để sử dụng, hoặc chọn một nền tảng khác photoshop để sử dụng.

Lưu ý: Cách khắc phục trên chỉ giải quyết được phần nào, chứ không giải quyết được triệt để vấn đề. Cách giải quyết triệt để là không dùng Linux nữa.

3.4 Sao chỉ thấy so sánh Linux với Windows vậy, sao không thấy so sánh với MacOS?

Có một câu chuyện dài phía sau câu hỏi này.

Có thể bạn đã biết, MacOS được phá triển dựa trên BSD – một hệ điều hành thuộc họ nhà UNIX. Còn Linux thì chính là GNU (như mình nói ở phần đầu), trong khi đó GNU là một hệ điều hành clone (nhân bản, học tập ý tưởng, bắt chước) UNIX. Do đó, tuy GNU không được phát triển dựa trên UNIX và không được coi là hệ điều hành thuộc họ nhà UNIX, nhưng lại có khá nhiều điểm tương đồng với các hệ điều hành thuộc họ nhà UNIX, cụ thể là MacOS. Vì vậy có thể coi MacOS và Linux là hai anh em tuy không cùng bố mẹ, nhưng lại khá giống nhau. Mà giống nhau, thì người ta không cần phải so sánh.

Ngoài ra, MacOS là độc quyền của Apple, trong khi đó Apple lại chưa có dịch vụ nào liên quan tới cloud server giống như Windows cả – một trong những điều khiến người ta phải so sánh với Linux nhất.

IV. CÀI ĐẶT UBUNTU ĐỂ NGHỊCH

Sau cùng, nếu bạn muốn trải nghiệm Linux, thì dưới đây là vài gợi ý của mình để bạn có thể cài đặt và trải nghiệm Ubuntu – distro nổi bật nhất của Linux:

  • Mua một máy tính mới và cài đặt Ubuntu làm hệ điều hành: Cách này giành cho những bạn có tiền, chịu đầu tư để học hỏi :D.
  • Cài Ubuntu song song với hệ điều hành chính: Dành cho những bạn muốn có trải nghiệm mượt mà với Ubuntu nhưng lại không muốn mua máy tính mới.
  • Cài máy ảo Ubuntu: Dành cho những bạn muốn trải nghiệm nhanh hệ điều hành này.

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

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

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

CLI là gì? Tại sao developer nên làm quen với CLI

CLI là gì?

Bài viết được sự cho phép của tác giả Phạm Bình

Chào các bạn,

Command line interface (CLI) là một loại giao diện khá quen thuộc đối với các anh em developer. Tuy nhiên lúc mới bắt đầu học lập trình, mình không thích sử dụng các tool trên CLI vì cảm thấy chúng khó sử dụng, khó tiếp cận hơn các tool sử dụng GUI. Nhưng càng về sau, do các tool sử dụng GUI không đáp ứng được nhu cầu công việc, buộc mình phải sử dụng tới CLI thì mình mới nhận ra rằng CLI có rất nhiều cái hay, cái lợi mà GUI không có.

Hơn nữa, mình nhận ra rằng developer thì nên biết cách sử dụng CLI hơn là không, tại sao lại như vậy thì các bạn hãy theo dõi bài viết này của mình nhé.

I. GUI VÀ CLI

Mình giới thiệu qua một chút về CLI và GUI cho bạn nào chưa biết nhé.

GUI – Graphical User Interface: Là giao diện sử dụng ở dạng đồ họa, đây là loại giao diện phổ biến và gần gũi với hầu hết người dùng.

Giao diện này mình dám chắc 100% ai cũng từng nhìn thấy và sử dụng rồi, có điều là mọi người có biết là mình vừa sử dụng nó hay không thôi. Hình dung đơn giản, thì tất cả các phần mềm mà trên giao diện xuất hiện các nút bấm, các menu, hình ảnh,… có cách sử dụng trực quan thì đều là GUI (bạn sẽ hiểu rõ thế nào là GUI hơn sau khi hiểu về CLI).

CLI – Command Line Interface: Là giao diện dòng lệnh, đây là loại giao diện mà không phải ai cũng biết, cũng như không phải ai cũng biết cách sử dụng.

Command-Line-Interface

Đặc điểm chung của các phần mềm CLI là đều có cách sử dụng không mấy dễ chịu đối với người mới bắt đầu, do có cách sử dụng không trực quan như GUI, không có nút bấm, không có các menu chỉ dẫn. Cách duy nhất để bạn tương tác với CLI là sử dụng dòng lệnh.

Ví dụ để tạo ra một thư mục mới trên máy tính với GUI. Bạn sẽ “Nhấp chuột phải > New > New folder”, còn đối với CLI thì bạn phải gõ lệnh “mkdir ten-thu-muc”.

Vấn đề lớn nhất của các bạn mới sử dụng CLI là do giao diện “xấu” nên nhìn không quen mắt, cách sử dụng khó do không biết hoặc không nhớ lệnh để thực hiện đúng yêu cầu.

  Tự tạo một chương trình CLI trong quản lý công việc

II. TẠI SAO LẠI CẦN CÓ CLI?

Mặc dù được cho là khó sử dụng hơn so với GUI, thế nhưng CLI vẫn có đất dụng võ, lý do là vì:

Không phải phần mềm nào cũng có GUI để sử dụng: Một phần mềm GUI sẽ tốn công sức và thời gian để lập trình ra hơn là CLI. Nên các nhà phát triển sẽ cân nhắc việc sử dụng CLI nếu GUI không cần thiết. Ví dụ như các phần mềm chạy ẩn trên máy tính chẳng hạn, có GUI hay không không quá quan trọng.

Không phải hệ điều hành nào cũng hỗ trợ GUI: Các hệ điều hành quen thuộc với chúng ta như là windows, android, ios, macOs đều hỗ trợ GUI nhưng bên cạnh đó có những hệ điều hành không hỗ trợ GUI như MS-DOS hoặc lược bỏ đi phần GUI như Linux cài trên các máy chủ ảo (VPS). Trong trường hợp không hỗ trợ GUI hoặc lược bỏ GUI như vậy thì chỉ còn một cách duy nhất để tương tác với máy tính là sử dụng CLI.

CLI đơn giản hơn GUI: GUI tuy dễ hiểu, dễ tiếp cận nhưng lại rườm rà, cần nhiều bước để thực hiện. Ví dụ để xem địa chỉ IP của máy tính, bạn sẽ phải thực hiện một vài thao tác như vào “Control panel > New working > bla bla gì đó mà mình cũng không nhớ”, nhưng nếu sử dụng CLI thì bạn chỉ cần gõ lệnh ifconfig (hoặc ipconfig tùy hệ điều hành) là có thể xem được ngay. Không chỉ có thao tác xem địa chỉ IP, mà còn có nhiều thao tác nữa cho thấy rằng CLI tiện lợi hơn GUI.

Tham khảo việc làm Linux mới nhất trên TopDev

III. TẠI SAO DEVELOPER NÊN LÀM QUEN VỚI CLI?

3.1 Tiết kiệm được nhiều thời gian thao tác nếu thành thạo

CLI tuy khó tiếp cận lúc ban đầu, nhưng khi quen tay thì mọi thứ lại trở nên đơn giản. Chưa kể nếu sử dụng thành thạo CLI, bạn có thể không cần dùng tới chuột do các thao tác di chuyển con trỏ, thay đổi cửa sổ làm việc hoàn toàn có thể thực hiện từ bàn phím. Tay phải của bạn sẽ không phải chuyển qua chuyển lại giữa bàn phím – chuột rồi lại chuột – bàn phím nữa, vừa nhìn chuyên nghiệp hơn mà lại tiết kiệm được kha khá thời gian trong công việc.

  Xác định đối tượng giao diện UI trong ứng dụng Android

3.2 Đa số các tool cho developer đều là CLI

Đúng vậy đó, các tool cho developer đa phần đều là CLI. Ví dụ điển hình như là npm, yarn, composer, docker, git,… đều được ưu tiên sử dụng trên CLI hơn là trên GUI. Nguyên nhân là do các developer thì đều yêu thích sự đơn giản, nhanh chóng và linh hoạt. Để đáp ứng được các yêu cầu đó thì CLI là sự lựa chọn tốt hơn GUI. Nếu như bạn phản đối quan điểm này thì sẽ có cực kỳ ít tool cho bạn sử dụng, nên cách tốt nhất là nên học cách làm quen với CLI.

3.3 Có thể sẽ phải làm việc nhiều với các server Linux

Đa phần các server đều sử dụng các bản phân phối của Linux làm hệ điều hành và thường bị lược bỏ đi phần GUI. Vậy chỉ còn cách sử dụng CLI để giao tiếp với các server này. Mặt khác, đã là developer thì ít nhiều gì cũng có lúc bạn động đến việc cấu hình, cài cắm thêm các gói, các module cần thiết cho server chạy Linux, nên bạn sẽ không thể tránh khỏi việc phải sử dụng tới CLI.

IV. KẾT LUẬN

Qua bài viết này, mình muốn đem tới cho các bạn những ưu điểm của CLI so với GUI, và lý do tại sao developer nên làm quen với CLI, tóm tắt lại có một vài ý quan trọng như sau

  • Không phải chỗ nào cũng có GUI cho bạn sử dụng
  • Các tool cho developer thì đa phần đều là CLI
  • Vận dụng CLI thành thạo sẽ tiết kiệm thời gian hơn là GUI

Bài viết được viết dựa trên kinh nghiệm cá nhân, xin nhận mọi gạch đá.

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

Xem thêm:

Chuyện gõ tiếng Việt trên Linux

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

Top 10 câu hỏi phỏng vấn JavaScript cực chi tiết

Top 10 câu hỏi phỏng vấn JavaScript

Theo khảo sát dành cho các lập trình viên hàng năm của Stack Overflow (Stack Overflow Developer Survey) thì trong 2 năm trở lại đây, JavaScriptngôn ngữ lập trình phổ biến nhất hiện nay. Mức phổ biến của JavaScript (JS) khiến cho nhu cầu tuyển dụng lập trình viên về ngôn ngữ này trở nên rất lớn trong những năm trở lại đây. Nếu bạn cũng đang có dự định chuẩn bị cho việc cuộc phỏng vấn tuyển dụng vị trí lập trình viên JS, bài viết này sẽ dành cho bạn. Chúng ta cùng nhau đi qua top 10 những câu hỏi phỏng vấn về JavaScript phổ biến nhất nhé.

Câu 1: JavaScript là gì? Nó thường sử dụng để làm gì?

Đây là câu hỏi cơ bản mà thường để bắt đầu phỏng vấn chuyên môn thì nhà tuyển dụng sẽ hay hỏi. Tất nhiên nếu bạn apply vào vị trí Senior thì sẽ không nhà tuyển dụng nào hỏi câu này đâu, mặc dù vậy hãy nên chuẩn bị kiến thức chuẩn chỉnh 1 chút để trả lời câu này nhé.

JavaScript là 1 ngôn ngữ lập trình thông dịch dựa trên nguyên mẫu (prototype-based) với cú pháp phát triển từ C. JS được phát triển bởi Netscape từ tháng 5 năm 1995, đến hiện nay nó đã được sử dụng rộng rãi cho các trang web ở cả phía người dùng (client) và phía máy chủ (server) sử dụng NodeJS.

Ban đầu, JS được tạo ra để giúp các trang web có thể tương tác 1 cách linh hoạt hơn với người dùng; sau này với sự phát triển của nó, các nhà phát triển JS đã tạo ra nhiều thư viện, framework khác nhau giúp JS có thể chạy bên ngoài trình duyệt, đồng thời có thể hoạt động được ở cả client và server.

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

  Những câu hỏi phỏng vấn React thường gặp

Câu 2: ECMAScript là gì? 

ECMAScript là 1 chuẩn hóa của các ngôn ngữ client-side cho Jscript, JavaScript, ActionScript.

Trước đây khi các ngôn ngữ kịch bản được ra đời thì nó chỉ được hỗ trợ riêng cho các trình duyệt nhất định, ví dụ như JavaScript cho trình duyệt Netscape Navigator, Jscript hỗ trợ Internet Explorer, … Để các web có thể chạy được cùng lúc trên nhiều trình duyệt khác nhau thì ECMAScript ra đời như 1 tiêu chuẩn giải quyết vấn đề trên.

Phiên bản ECMA thứ 6 (ES6) hay ECMA2015 ra mắt năm 2015 bổ sung thêm các cú pháp mới quan trọng liên quan đến class, module hay function; đây là phiên bản được sử dụng rộng rãi hiện nay (hoặc các bản update sau) trong các dự án.

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

Câu 3: Những tính năng mới trong ES6

Có tương đối nhiều update về tính năng trong phiên bản ES6, bạn có thể nêu càng nhiều càng tốt; tuy vậy hãy cố gắng nắm được 1 vài điểm sau:

  • Arrow Function: cú pháp viết function sử dụng mũi tên (arrow) giúp viết code gọn và clear hơn
  • Default Parameters: sử dụng phép gán giá trị mặc định ngay ở vị trí khai báo tham số cho function
  • Rest Parameters: giúp truyền tham số vào 1 hàm mà không cần khai báo clear từ đầu hay bị giới hạn số lượng tham số
  • Let và Var: khai báo biến sử dụng let để xác định phạm vi hoạt động trong 1 khối
  • Template Literals: hiển thị chuỗi string chứa biến sử dụng cặp dấu “ (backtick)
  • Promise: xử lý các vấn đề bất đồng bộ (lưu ý là async/await mới được bổ sung từ ES7 nhé)

Câu 4: Các kiểu dữ liệu trong JavaScript

Trong JS, có 6 kiểu dữ liệu nguyên thủy (primitive data type) bao gồm: undefined, boolean, number, string, bigint và symbol. Kiểu dữ liệu còn lại được gọi là kiểu dữ liệu tham chiếu (reference data types), bao gồm object, array và function (lưu ý là trong JS thì mọi thứ được đều thuộc loại object). 

Điểm khác nhau cơ bản giữa 2 kiểu dữ liệu này là cách lưu trữ dữ liệu lên bộ nhớ: với dữ liệu nguyên thủy, giá trị thực của biến sẽ được lưu trữ trực tiếp; ngược lại với kiểu dữ liệu tham chiếu thì các object sẽ chứa các địa chỉ bộ nhớ (tham chiếu) đến 1 vị trí khác trong bộ nhớ.

Câu 5: “this” trong JS là gì?

“this” trong JS được dùng để đại diện cho 1 object – Object ở đây là đại diện cho chủ thể của ngữ cảnh và nó phụ thuộc vào lúc runtime chứ không phải lúc khởi tạo. Hiểu đơn giản hơn thì “this” đóng vai trò là 1 con trỏ, trỏ đến chính object gọi hàm đó.

Về bản chất thì 1 function bất kỳ đều có property giống như object; khi chúng ta thực thi 1 function, nó sẽ có property “this” chứa item của object đang gọi đến function đó.

Câu 6: Promise trong JS là gì?

Promise là 1 đối tượng được sử dụng cho tính toán bất đồng bộ, nó đại diện cho 1 tiến trình hay 1 tác vụ chưa thể hoàn thành ngay được. Trong tương lai, 1 Promise sẽ trả về giá trị hoặc là được giải quyết (resolve) hoặc là bị từ chối (reject). Promise ra đời nhằm giải quyết vấn đề callback hell trong các tác vụ cần chờ kết quả từ 1 hành động chưa xác định ngay được kết quả như call API lên server.

Với ES7 trở đi, chúng ta có thể sử dụng async/await để tạo 1 Promise ngắn gọn và clear hơn.

Câu 7: Những method để truy cập đến phần tử HTML trong JS

 Có 1 số method cho việc truy cập đến các phần tử trên DOM như sau:

  • getElementById(): lấy 1 element thông qua id
  • getElementByClass(): lấy 1 element thông qua class
  • getElementsByTagName(): lấy 1 element bằng tên của tag name
  • querySelector(): function css style selector và sẽ trả về giá trị đầu tiên

Câu 8: Sự khác nhau giữa forEach và map

.forEach là vòng lặp dựa vào các phần tử có trong mảng, nó sẽ thực hiện callback trong mỗi vòng lặp và không trả về giá trị.

.map cũng xử lý vòng lặp dựa vào các phần tử có trong mảng, tuy vậy khác với forEach thì nó sẽ trả về giá trị để tạo ra 1 mảng với dựa trên các giá trị trong vòng lặp.

  12 Thư viện JavaScript trực quan hoá dữ liệu hot nhất năm 2024

Câu 9: Kể tên 1 số pattern thường dùng trong lập trình JS

Design pattern là các phương pháp để giải quyết vấn đề thường gặp mà có thể tái sử dụng được. Với JS, có 1 vài pattern nổi tiếng như:

  • Module Pattern: 1 kiểu đóng gói code trong JS hay giả lập tính chất đóng gói của hướng đối tượng
  • Revealing Module Pattern: 1 phiên bản nâng cấp của Module Pattern với việc tạo ra các public function để gọi tới các private function và variables
  • Singleton Pattern: tạo ra những object chỉ khởi tạo 1 lần duy nhất giúp tối ưu bộ nhớ
  • Factory Pattern: tạo ra các object mà không cần chỉ định rõ chính xác class hay constructor nào
  • Decorator Pattern: sử dụng để mở rộng chức năng của 1 object mà không làm thay đổi class hay hàm hiện tại.

Câu 10: Kể tên 1 số framework, thư viện hay dùng của JS

1 số thư viện và framework về UI phổ biến hiện nay:

1 số thư viện hữu ích:

  • Moment.js: thư viện xử lý datetime
  • Lodash: cung cấp các hàm tiện ích cho các tác vụ lập trình bằng cách sử dụng mô hình lập trình hàm
  • Chart.js: trực quan hóa dữ liệu, dựng biểu đồ

Trên đây là danh sách 10 câu hỏi phổ biến khi phỏng vấn tuyển dụng vị trí JavaScript mà mình tổng hợp được. Còn rất nhiều câu hỏi khác liên quan đến kiến thức chuyên môn cũng như kinh nghiệm làm việc của bạn. Vì vậy hãy cố gắng nắm vững kiến thức cơ bản về JS và điều đó sẽ giúp bạn tự tin hơn trong cuộc phỏng vấn sắp tới. 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 mới nhất trên TopDev

Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng

Java Service Provider Interface

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

Hầu hết vòng đời của một ứng dụng xoay quanh việc bảo trì. Một ứng dụng có thể mở rộng cho phép bảo trì dễ dàng, tức là nâng cấp một tính năng mà không ảnh hưởng đến toàn bộ ứng dụng. Trong bài viết này chúng ta sẽ tìm hiểu về Java Service Provider Interface (SPI) và cách chúng ta có thể áp dụng nó vào trường hợp sử dụng thực tế để tạo các ứng dụng dễ dàng mở rộng, tạo ứng dụng theo các kiến trúc module, plugin.

Các thành phần của Java Service Provider Interface (SPI)

Một Service Provider framework là một hệ thống trong đó nhiều nhà cung cấp dịch vụ (Service Provider) implement một Service và hệ thống này cung cấp các implement cho client sử dụng. SPI giúp giảm kết dính và che dấu thông tin giữa các thành phần của ứng dụng.

Java SPI định nghĩa các thành phần chính sau:

  • Service : là một tập hợp các interface/ abstract class mà nó cung cấp quyền truy cập vào một số chức năng hoặc tính năng ứng dụng cụ thể.
  • Service Provider Interface (SPI): là một tập hợp interface/ abstract hoạt động như một proxy hoặc điểm cuối (endpoint) cho service.
  • Service Provider : là một triển khai cụ thể của SPI. Nó chứa một hoặc nhiều class cụ thể implements hoặc extends một Service.
  • ServiceLoader : là thành phần không thể thiếu của SPI. Nó có vai trò tìm kiếm và load các implements khi được yêu cầu. Nó sử dụng context classpath để xác định vị trí các provider implement provider và lưu chúng vào cache để tăng performance.

  Bridge Pattern trong Java – Code ví dụ Composite Pattern

  Top 5 tips and tricks hot nhất của JavaScript năm 2024

Cài đặt và sử dụng SPI

Giả sử chúng ta có một ứng dụng cung cấp các service cho các ứng dụng khác sử dụng. Mỗi service của chúng ta có nhiều provider (implementation) khác nhau. Các ứng dụng có thể lựa chọn provider mà nó cần hoặc tự implement một provider khác tuân theo đặc tả của SPI.

Cài đặt và sử dụng SPI

Để dễ dàng thêm bớt service mà không ảnh hưởng đến các ứng dụng khác, chúng ta sẽ sử dụng tính năng có sẵn trong Java 6 là ServiceLoader. Hãy xem ví dụ sau:

Đầu tiên, tạo project maven với tên là JavaSPI. Cấu hình file pom.xml như sau:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gpcoder</groupId>
    <artifactId>JavaSPI</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>JavaSPI</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
    </dependencies>
</project>

Tiếp theo tạo một Service, chẳng hạn chúng ta cung cấp Serivce hỗ trợ tìm kiếm. Service này chỉ gồm 1 phương thức đơn giản search().

Tham khảo việc làm Java mới nhất trên TopDev

SearchService.java

package com.gpcoder.spi;

import java.util.List;

public interface SearchService {

    List<Result> search(String text);
}

Tiếp theo, chúng ta sẽ tạo các Provider được cung cấp bởi hệ thống:

  • DefaultSearchService : hỗ trợ search thông thường.
  • FullTextSearchService : hỗ trợ search toàn văn.

DefaultSearchService.java

package com.gpcoder.spi;

import java.util.List;

public class DefaultSearchService implements SearchService {

    @Override
    public List<Result> search(String text) {
        System.out.println("DefaultSearchService#search()");
        return null;
    }
}

FullTextSearchService.java

package com.gpcoder.spi;

import java.util.List;

public class FullTextSearchService implements SearchService {

    @Override
    public List<Result> search(String text) {
        System.out.println("FullTextSearchService#search()");
        return null;
    }
}

Để sử dụng SPI, chúng ta cần tạo một file cấu hình:

  • Tên file: là tên đầy đủ của Service, bao gồm cả tên package. Ví dụ: com.gpcoder.spi.SearchService
  • Nội dung file: là tên đầy đủ của Service implement, mỗi implement trên một dòng. Ví dụ: com.gpcoder.spi.DefaultSearchService
    com.gpcoder.spi.FullTextSearchService
  • Vị trí: đặt file này trong thư mục resources/META-INF/services

Cuối cùng, chúng ta sẽ sử dụng ServiceLoader để lấy các Provider đã được đăng ký thông qua cấu hình SPI ở trên:

package com.gpcoder.spi;

import java.util.ServiceLoader;

public class ServiceLoaderExample {
    public static void main(String[] args) {
        System.out.println("App started ");

        ServiceLoader<SearchService> serviceLoader = ServiceLoader.load(SearchService.class);
        for (SearchService provider : serviceLoader) {
            provider.search("");
        }

        System.out.println("App finished ");
    }
}

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

App started 
DefaultSearchService#search()
FullTextSearchService#search()
App finished

Đặt trường hợp bây giờ chúng ta có một project khác, cần sử dụng các Service được cung cấp bởi project trên. Tiếp tục, chúng ta tạo một project maven khác tên là JavaSPIChild1 và cấu hình lại file pom.xml như sau:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gpcoder.child1</groupId>
    <artifactId>JavaSPIChild1</artifactId>
    <packaging>jar</packaging>

    <name>JavaSPIChild1</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>com.gpcoder</groupId>
        <artifactId>JavaSPI</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../JavaSPI</relativePath>
    </parent>

    <dependencies>
         <dependency>
             <groupId>com.gpcoder</groupId>
             <artifactId>JavaSPI</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
     </dependencies>
</project>

Tiếp theo chỉnh sửa lại một chút file pom.xml của project JavaSPI, thay đổi packing từ jar thành pom.

<packaging>pom</packaging>

Chi tiết về cách tạo và cấu hình project maven với nhiều module các bạn vui lòng xem lại bài viết: Xây dựng dự án nhiều Module với Maven.

Giả sử trong ứng dụng con này chúng ta cần sử dụng một Provider khác. Chúng ta có thể thực hiện bằng cách tạo một class mới implements từ SearchService.

package com.gpcoder.child1;

import java.util.List;

import com.gpcoder.spi.Result;
import com.gpcoder.spi.SearchService;

public class Child1SearchService implements SearchService {

    @Override
    public List<Result> search(String text) {
        System.out.println("Child1SearchService#search()");
        return null;
    }
}

Để sử dụng SPI, chúng ta cần tạo một file cấu hình com.gpcoder.spi.SearchService trong thư mục resources/META-INF/services như sau:

com.gpcoder.spi.DefaultSearchService
com.gpcoder.child1.Child1SearchService

Lưu ý: chỉ khai báo các Service mà project JavaSPIChild1 cần sử dụng. Trong ví dụ này, chúng ta chỉ sử dụng DefaultSearchService và Child1SearchService.

Bây giờ, chúng ta sẽ sử dụng ServiceLoader để lấy các Provider đã được đăng ký thông qua cấu hình SPI ở trên:

package com.gpcoder.child1;

import java.util.ServiceLoader;

import com.gpcoder.spi.SearchService;

public class Child1ServiceLoaderExample {
    public static void main(String[] args) {
        System.out.println("App started ");

        ServiceLoader<SearchService> providers = ServiceLoader.load(SearchService.class);
        for (SearchService provider : providers) {
            provider.search("");
        }

        System.out.println("Child1SearchService: ");
        SearchService service = getServiceByName(Child1SearchService.class.getCanonicalName());
        service.search("");

        System.out.println("App finished ");
    }

    public static SearchService getServiceByName(String className) {
        ServiceLoader<SearchService> providers = ServiceLoader.load(SearchService.class);
        for (SearchService provider : providers) {
            if (provider.getClass().getCanonicalName().equals(className)) {
                return provider;
            }
        }
        return null;
    }
}

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

App started
DefaultSearchService#search()
Child1SearchService#search()
Child1SearchService:
Child1SearchService#search()
App finished

Như bạn thấy, ứng dụng của chúng ta rất dễ dàng thêm/ bớt module mà không cần phải thay đổi hay chỉnh sửa code ở project cha.

Toàn bộ cấu trúc thư mục của project như sau:

  cấu trúc thư mục của projectcấu trúc thư mục của project

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

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

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

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

JSON Binding trong Jakarta EE

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

JSON Binding là một specification của Jakarta EE về convert qua lại giữa JSON data và Java object, tương tự như thư viện Jackson mà mình đã giới thiệu với các bạn. Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về JSON Binding và cách sử dụng nó với một implementation của nó là Eclipse Yasson các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

JSON Binding trong Jakarta EE

  JSON-LD là gì ? Tổng quan về JSON-LD cho người mới

Eclipse Yasson dependency như sau:

Để làm ví dụ, mình sẽ định nghĩa một class Student chứa thông tin sinh viên như sau:

Student student = new Student("Khanh", 35);

Để convert đối tượng Student này qua chuỗi JSON, các bạn cần khởi tạo đối tượng của class Jsonb từ class JsonbBuilder của JSON Binding API như sau:

Implementation của những class này trong thư viện Yasson lần lượt là JsonBinding và JsonBindingBuilder.

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

Sau khi đã có đối tượng Jsonb thì chúng ta có thể sử dụng phương thức toJson() với tham số là đối tượng cần convert qua chuỗi JSON để convert nó qua JSON data:

String result = jsonb.toJson(student);

Toàn bộ code như sau:

package com.huongdanjava.jakartaee;

import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;

public class Main {

  public static void main(String[] args) {
    Student student = new Student("Khanh", 35);

    Jsonb jsonb = JsonbBuilder.create();
    String result = jsonb.toJson(student);
    System.out.println(result);
  }
}

Kết quả khi chạy ứng dụng ví dụ này như sau:

JSON Binding trong Jakarta EE

Nếu các bạn có chuỗi JSON cho thông tin sinh viên và cần convert nó qua đối tượng Student, các bạn cũng có thể sử dụng phương thức fromJson() để làm điều này.

Ví dụ mình có chuỗi JSON chứa thông tin sinh viên như sau:

String json = "{\"age\":20,\"name\":\"Thanh\"}";

Mình có thể convert qua đối tượng Student như sau:

Kết quả:

JSON Binding trong Jakarta EE

  Chuyển đổi JSON qua CSV sử dụng thư viện Jackson

Các bạn có thể định nghĩa đối tượng của class JsonConfig để thêm một số cấu hình về chuỗi JSON sẽ được generate. Ví dụ như nếu các bạn muốn output JSON được format thì các bạn có thể viết code như sau:

package com.huongdanjava.jakartaee;

import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;
import jakarta.json.bind.JsonbConfig;

public class Main {

  public static void main(String[] args) {
    Student student = new Student("Khanh", 35);

    JsonbConfig config = new JsonbConfig()
        .withNullValues(true)
        .withFormatting(true);

    Jsonb jsonb = JsonbBuilder.create(config);
    String result = jsonb.toJson(student);
    System.out.println(result);
  }
}

Kết quả:

JSON Binding trong Jakarta EE

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

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

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

Quy tắc BEM trong CSS – Bạn không cần phải đau đầu với cách đặt tên class nữa

bem trong css

Bài viết được sự cho phép của tác giả Phạm Bình

Chào các bạn,

Bạn có bao giờ code CSS mà không biết phải đặt tên class như thế nào không? Mình thì có đấy. Nhất là khi maintain dự án, mất bao nhiêu công mới nghĩ ra được cái tên hay thì lại bị người người trước dùng mất rồi. Tự nghĩ Code CSS thì nên tập trung vào việc căn chỉnh các thuộc tính, chứ không nên mất nhiều thời gian vào cách đặt tên, nên mình đã đi tìm hiểu xem có cái quy tắc nào trong cách đặt tên không, để rồi cứ theo quy tắc là làm, đỡ phải nghĩ nhiều.

Sau một hồi lục sục trên mạng, mình thấy có cái quy tắc BEM này khá hay nên viết bài để chia sẻ tới mọi người.

I. Quy tắc BEM là gì?

BEM là viết tắt của Block Element Modifiers – một quy tắc giúp bạn đặt tên các selector của CSS.

Block Element Modifiers nghĩa là “Khối – Phần tử – Biến thể”, dịch ra Tiếng Việt nghe không được sát nghĩa và có vẻ không “chuyên nghiệp”, nên thôi mình cứ để Tiếng Anh nhé.

Với quy tắc BEM, nó sẽ chia các class css ra làm 3 loại:

  • class định nghĩa cho một block
  • class định nghĩa cho các element trong block
  • class định nghĩa các “biến thể” cho block hoặc cho element trong block.

Rắc rối nhỉ, thôi thì xem cái ví dụ này để dễ hiểu hơn bạn nhé.

  Cảm giác khi bạn viết CSS như thế nào trong năm 2024

  Tổng hợp CSS tips tricks hay mà có thể bạn chưa biết

CSS viết theo quy tắc BEM

/* class định nghĩa một block */
.product { }

/* class định nghĩa element của block */
.product__title { }
.product__description { }
.product__image { }

/* class định nghĩa các "biến thể" của block */
.product--style-1 { }
.product--big { }
.product--small { }
.product__title--style-1 { }

HTML sử dụng CSS viết theo quy tắc BEM

<div class="product product--small">
    <div class="product__image">
        <img src="..." alt="">
    </div>
    <div class="product__title product__title--style-1">Iphone 11 Pro</div>
    <div class="product__description">Siêu đắt</div>
</div>

Từ hai đoạn code trên bạn có thể thấy:

  • product là một block, style của nó được định nghĩa thông qua class .product
  • .product__title.product__image.product__description lần lượt là các class element.
  • .product--style-1.product--big.product--small.product__title--style-1 là các class “biến thể”.

Tổng quát lại, chúng ta có thể thấy một class viết theo quy tắc BEM sẽ có cấu trúc như sau

Block__Element--Modifier

Với cách đặt tên kiểu này, các css selector sẽ khó mà trùng nhau được

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

II. Lợi ích khi sử dụng BEM

Lợi ích mà ai cũng thấy được ngay đó là BEM giúp chúng ta giảm khả năng 2 css selector bị trùng nhau – giống như ngay từ đầu mình đề cập. Nhưng ngoài ra, BEM còn có một số lợi ích khác:

  • Giúp bạn hình dung ra được cấu trúc của một block HTML sẽ sử dụng các class này.
  • Dễ dàng nắm bắt được các thành phần phụ thuộc lẫn nhau.
  • Với BEM, nó làm “phẳng” các class, không có sự lồng cấp kiểu .a .b .c, giúp bạn không cần phải để ý tới độ ưu tiên (specificity) khi code css.
  • Giảm công sức của developer trong việc phải cố nghĩ ra một cái tên vừa hay vừa chưa tồn tại.

Ngoài các lợi ích kể trên, BEM còn phù hợp để triển khai với SCSS

Ví dụ: Vẫn là đoạn CSS ở ví dụ trên, nhưng giờ mình viết theo SCSS.

.product {
    &__title {
        &--style-1 { }
    }

    &__description { }
    &__image { }

    &--style-1 { }
    &--big { }
    &--small { }
}

III. Một số ý kiến không đồng tình với quy tắc BEM

Dù có nhiều lợi ích, nhưng có nhiều người không thích dùng quy tắc này vì

Nó dài và xấu

Mình công nhận điều này, nếu không cận thận bạn sẽ có .Mot-cai-class__dai--ngoang-ngoang-the-nay.

Nhưng dài mà mang đủ ý nghĩa, đảm bảo không bị trùng thì cũng không sao. Còn xấu thì… nhìn nhiều khắc quen.

Nó có vẻ không cần thiết

Quay trở lại với ví dụ ở phần đầu, mình có thể viết CSS không tuân theo quy tắc BEM và vẫn đáp ứng được một số lợi ích của BEM như sau:

.product { }

.product .title { }
.product .description { }
.product .image { }

.product.style-1 { }
.product.big { }
.product.small { }
.product .title.style-1 { }

Nhìn còn có vẻ gọn ngàng hơn đấy chứ, nhưng khi dự án phát triển tới một “cảnh giới” nhất định thì liệu bạn có chắc chắn các class sẽ không bị đặt tên chồng chéo không? Giả sử ở đâu đó trong project đã có ai đó định nghĩa các class .title.image.description rồi thì sao?

// Ai đó đã định nghĩa trước các selector thế này
.title { }
.description { }
.image { }

Không biết bạn có cảm thấy không hài lòng với BEM ở chỗ nào không?

IV. Tổng kết

Tổng kết lại thì:

  • BEM là quy tắc đặt tên class cho CSS, mang lại nhiều lợi ích nhưng quan trọng vẫn là giúp developer bớt phải nghĩ ra cái tên vừa hay vừa chưa được sử dụng.
  • BEM sẽ tuyệt vời hơn khi sử dụng với SCSS
  • Có nhiều người không thích BEM vì nó làm tên class dài và xấu, hoặc họ tự có phương pháp khác thay thế BEM.

Còn bạn thế nào, bạn có thấy BEM cần thiết trong dự án của mình không? Hãy để lại comment cho mình biết với.

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

Xem thêm:

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

VPS là gì? Hosting là gì? Sự khác nhau giữa VPS và Hosting

VPS và Hosting

Bài viết được sự cho phép của tác giả Phạm Bình

Chào các bạn,

Trong lập trình nói chung và trong lập trình web nói riêng, chúng ta thường hay nghe tới các khái niệm như vps, hosting,… vậy chúng thật sự là gì, chúng khác nhau như thế nào và và tác dụng của chúng là gì thì mình sẽ giải thích ngắn gọn trong bài viết này nhé.

I. VPS là gì?

VPS – Virtual Private Server, tạm dịch là máy chủ ảo riêng tư. “Riêng tư” trong trường hợp này ám chỉ nó là một chiếc máy hoạt động độc lập, không chung đụng với ai, nếu bạn sở hữu nó, bạn có toàn quyền bật, tắt, cài cắm thêm phần mềm, v.v mà không ảnh hưởng tới ai, không ai cấm bạn, bạn có toàn quyền sử dụng, toàn quyền quyết định định mệnh của nó, giống như bạn sở hữu một chiếc máy tính cá nhân.

Về cơ bản VPS là một chiếc máy tính ảo – tuy không có thật, nhưng vẫn có đầy đủ các thông số cấu hình như RAM, CPU, dung lượng ổ cứng,… và cũng có hệ điều hành không khác gì một chiếc máy tính thật.

Khi bạn sở hữu một VPS, cũng giống như bạn sở hữu một chiếc máy tính bình thường. Tuy nhiên không ai sử VPS về để làm các công việc như một máy tính thông thường cả, thay vào đó VPS thường được sử dụng để làm các máy chủ web, máy chủ database,…

  Chuyển hosting bao lâu thì mới cập nhật?

Để có kết nối, điều khiển, sử dụng VPS người ta thường sử dụng giao thức ssh để truy cập vào VPS. Sau khi truy cập thành công, mọi thao tác với VPS như cài đặt thêm phần mềm, copy file, tạo thư mục,v.v sẽ được thực hiện thông qua command line thay vì sử dụng giao diện GUI như trên một chiếc máy tính bình thường.

Để sở hữu một VPS, thường thì bạn sẽ phải mua của một bên thứ 3 như digitalocean.com, vultr.com,vv chứ ít ai (hoặc không ai) tự mình tạo ra một VPS rồi sử dụng cả – trừ khi chính bạn cũng là nhà cung cấp. Chi phí để trả cho một VPS cũng có nhiều mức giá khác nhau, có thể chỉ từ vài đô cho tới cả nghìn đô mỗi tháng.

Để có thể sử dụng được VPS, đòi hỏi bạn cần có một chút kiến thức về các giao thức mạng như ssh, biết cách thao tác với command line, am hiểu về một số hệ điều hành thường dành cho máy chủ như linux.

Tham khảo việc làm WordPress mới nhất trên TopDev

II. Hosting là gì?

Hosting hay host, shared host cũng đều là một. Khái niệm này thường được nghe tới nhiều khi bạn là một web developer.

Về cơ bản, hosting là nơi đã được cài đặt sẵn môi trường, bạn chỉ việc đưa ứng dụng của mình lên là có thể sử dụng được. Ví dụ như:

  • PHP hosting: sẽ được cài đặt sẵn PHP và một số phần mềm khác như mySQL, apache, nginx,.. với mục đích để chạy được các website viết bằng PHP.
  • Java hosting: sẽ được cài đặt sẵn java và các phần mềm khác liên quan, mục đích là để chạy được các website viết bằng java.
  • Nodejs hosting: sẽ được cài đặt sẵn nodejs và các phần mềm liên quan, mục đích là để chạy được các website viết bằng nodejs.

  13 web hosting miễn phí dành cho lập trình viên

III. Sự khác nhau VPS và Hosting

3.1 Tính riêng tư

VPS

Cũng giống như mình đã trình bày ở mục VPS là gì, thì VPS giống như một máy tính “riêng”, vì vậy mà nó có tính riêng tư cao, ít bị phụ thuộc vào các yếu tố khác.

Hosting

Hosting thì độ riêng thấp hơn, về cơ bản hosting có thể được tạo ra từ một VPS, và một VPS có thể tạo ra nhiều hosting. Như vậy nếu VPS bị tắt hoặc gặp sự cố thì toàn bộ các hosting cũng sẽ bị ảnh hưởng. Ngoài ra, hosting là môi trường được cài đặt sẵn nên sẽ rất hạn chế nếu bạn muốn bổ sung thêm các thành phần khác, thường thì các nhà cung cấp sẽ chỉ cho bạn tùy biến một số thành phần quen thuộc.

Ví dụ, website của mình chạy tốt trên php 7.4, tuy nhiên hosting chỉ được cài sẵn php 7.2, và đương nhiên mình sẽ không thể tự nâng php từ 7.2 lên php 7.4 được mà phải đợi nhà cung cấp họ nâng giúp. Hay website của mình có sử dụng Redis để làm cache, tuy nhiên hosting thì không hỗ trợ Redis,…

VPS vs Hosting

3.2 Tính dễ sử dụng

VPS

Đương nhiên VPS sẽ khó sử dụng hơn. Vì VPS là của riêng bạn, nên mọi thao tác cài đặt môi trường, cấu hình an toàn thông tin,… đều phải do bạn tự làm, vì thế mà bạn cần phải có khá nhiều kiến thức.

Hosting

Hosting thì lại dễ sủ dụng hơn, vì mọi thứ đã được cài đặt sẵn, bạn chỉ cần đưa source code của mình lên, cấu hình một số thông tin nho nhỏ là có thể chạy được. Hosting có thể được sử dụng bởi một người ít am hiểu về máy tính, mạng mẽo,…

Mình quen khá nhiều các anh chị chỉ làm marketing, SEO, content nhưng cũng sử dụng hosting vô cùng rành rọt.

À mà hosting có dễ sử dụng hay không còn phụ thuộc một phần vào nhà cung cấp, nếu họ cho bạn một công cụ quản lý trực quan thì sử dụng sẽ dễ dàng hơn, còn không sẽ ngược lại. Nhưng thường thì hosting sẽ rất rễ sử dụng.

Chí phí cho một hosting cũng rẻ hơn so với VPS rất nhiều.

3.3 Khi nào sử dụng hosting, khi nào sử dụng VPS

Sự khác nhau cơ bản nhất giữa hosting và VPS nằm ở tính riêng tư. Nếu sản phẩm của bạn cần một môi trường ổn định, dễ dàng tùy biến theo ý bạn, thì VPS là lựa chọn bắt buộc. Ngược lại bạn có thể chọn hosting.

Xét trên một số sản phẩm cụ thể thì:

  • Hosting: website blog cá nhân, website bán hàng cho shop nhỏ, website giới thiệu doanh nghiệp.
  • VPS: website tin tức lớn, website bán hàng lớn, website mang các business phức tạp, máy chủ lưu trữ dữ liệu.

V. Tổng kết

Tổng kết lại thì có một số ý quan trọng như sau:

  • VPS: là một máy tính ảo, của riêng bạn. Để sử dụng được thì cần nhiều kiến thức về mạng, về máy tính, về hệ điều hành cho máy chủ. Phù hợp với những sản phẩm phức tạp.
  • Hosting: là một môi trường được cài đặt sẵn, khả năng tùy biến thấp nhưng lại dễ sử dụng. Phù hợp với những sản phẩm nhỏ, đơn giản.

Hy vọng với bài viết ngắn gọn này sẽ giúp các bạn hiểu rõ hosting là gì và VPS là gì.

Chào tạm biệt.

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

Xem thêm:

Tham khảo thêm các vị trí tuyển dụng ngành CNTT lương cao tại Topdev

5 game kinh điển bạn từng chơi được lập trình bằng Python

5 game kinh điển bạn từng chơi được lập trình bằng Python

Bài viết được sự cho phép của ucode.vn

Chúng ta đã từng nghe hoặc ít nhất từng chơi một trong những trò chơi phổ biến kinh điển này: Snake (con rắn), Flappy bird, Pac man, Tetris hoặc các trò chơi dân gian như cờ vua, Cờ Ca rô, Oẳn tù tì … Nhưng bạn có biết những trò chơi này được viết bằng Python không?

1. Snake (Con rắn)
Snake là một trò chơi vui nhộn cổ điển, trong đó bạn có được một con rắn trên một hộp lưới bảng. Bạn cho nó ăn, và mỗi lần con rắn của bạn ăn, nó sẽ dài ra một đoạn. Tránh những viên thuốc độc hoặc bất kỳ chướng ngại vật nào có thể giết chết nó. Giới hạn các bức tường ranh giới của bạn hoặc sử dụng chúng làm kích thước, như trong điện thoại di động Nokia. Một trò chơi thú vị mà bạn có thể thực hiện bằng cách sử dụng mã Python.
game snake

Phát triển trò chơi Snake trong python rất đơn giản. Và mọi thứ còn trở nên dễ dàng hơn với thư viện Pygame. Sử dụng kiến thức cơ bản Snake của bạn để tạo màn hình, rắn, thức ăn và chức năng tăng chiều dài. Cuối cùng, hiển thị thông báo Game Over khi con rắn va chạm vào phần cơ thể của nó.

  Python: Top 18 module hữu ích nhất

  Top 5 Ngôn Ngữ Lập Trình Game Không Thể Bỏ Qua 2024

2. Tetris (Xếp gạch)
Tetris (xếp gach) là một trò chơi ghép hình vui có thể được tạo bằng mã Python. Nó bắt đầu với một hộp rỗng và các hình dạng ngẫu nhiên rơi xuống theo chiều dọc. Cố gắng không làm lộn xộn các hình dạng và để chúng chạm vào đường viền tối đa. Nếu nó xảy ra, bạn sẽ thua! Tập trung vào từng hình dạng và đặt chúng sao cho vừa vặn và tạo thành một hàng ngang hoàn hảo. Các hàng hoàn hảo sẽ biến mất và bạn nhận được điểm. Hãy ghi điểm cao nhất có thể!
game tetris

Việc xây dựng trò chơi Tetris hơi khó đối với người mới bắt đầu. Phần khó nhất trong việc tạo ra trò chơi này là quản lý các phần xoay. Vì mỗi mã màu sẽ xoay cùng với chuyển động, bạn phải liên kết các màu với các con số. Theo cách đó, một số đề cập đến một màu cụ thể và nó giống như các tập hợp con ([1, 5, 9, 13]). Hoặc bạn có thể tạo của riêng bạn (điều này sẽ rất nặng nề) hoặc tìm kiếm một nơi nào đó trên internet để sao chép phần này. Và viết phần còn lại của phần mã hóa của riêng bạn. Bằng cách này, bạn có thể tận dụng tối đa python. Không cần phải nói, thư viện Pygame chắc chắn sẽ đóng một vai trò lớn trong việc học lập trình…

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

3. Space Invader ( Kẻ xâm lược không gian)
Space Invader là một trò chơi arcade (chơi bằng tiền xu bỏ vào máy game). Bằng lập trình python, trò chơi này có thể được thực hiện từ đầu. Trong trò chơi này, bạn sẽ thực hiện một nhiệm vụ ngoài không gian. Trên đường đi của bạn, một số máy bay phản lực xâm lược tấn công máy bay của bạn, hãy né tránh chúng! Đối mặt với các cuộc tấn công của chúng và tiến lên phía trước. Hoàn thành tất cả các giai đoạn, mỗi giai đoạn tiếp theo sẽ nâng cao mức độ khó khăn.
game Space Invader

Để bắt đầu xây dựng một trò chơi kẻ xâm lược không gian, bạn sẽ cần cài đặt thư viện Pygame. Sau đó, hãy thiết lập những việc quan trọng như tạo màn hình, Alien-ship tàu vũ trụ (để chúng từ từ rơi xuống từ trên cao). Và thiết kế anh hùng chính của bạn phải khác về ngoại hình, kích thước so với người ngoài hành tinh và đặt nó ở giữa dưới cùng của màn hình. Đối với lửa, hãy sử dụng các chấm di chuyển lên trên. Khi nó va vào một con tàu, con tàu sẽ biến mất.

Ứng tuyển ngay các vị trí tuyển dụng lập trình Game lương cao trên TopDev

4. Pac-man
Pac-man – một trò chơi nổi tiếng từ thập niên 80, thậm chí còn được Hollywoood làm phim, là một trò chơi thú vị khác trong danh sách mà python có thể thực hiện. Bạn sẽ nhận được một hộp hình vuông chứa đầy các hạt nhỏ xung quanh. Trên hộp, sẽ có các dòng ngẫu nhiên như đường hầm mở để nhân vật của bạn đi bộ. Ăn nhiều nhất có thể, đồng thời tránh chạm vào kẻ thù sẽ ở đó sau bạn. Bạn chạm vào, bạn thua! Xây dựng các giai đoạn khác nhau để tăng thêm niềm vui!
game pac-man

Để bắt đầu xây dựng trò chơi Pac-man, bạn sẽ phải tạo một mê cung nơi bạn có thể di chuyển anh hùng của mình – A-squared 800, 600, một chiếc hộp sẽ hoạt động tốt cho việc này. Sau đó, chúng ta cần tạo ra những vật thể quan trọng như Mê cung, những con ma để ăn nhân vật chính của chúng ta, Quả bóng để Anh hùng của chúng ta ăn chúng và một số món tăng sức mạnh để ăn những con ma đó! Cuối cùng, thành thật mà nói, ở đây, việc tạo ra trò chơi này không dễ dàng như người ta vẫn tưởng. Phần khó nhất ở đây là lập trình những con ma để đuổi theo Hero.

5. Sudoku (Điền số)
Sudoku là một loại trò chơi giải đố cũng được viết hoàn toàn bằng Python. Về cơ bản, đây là một trò chơi dựa trên số nhiều người chơi, trong đó mỗi người chơi cố gắng ghi điểm cao hơn đối thủ bằng cách liệt kê các số trên lưới hoặc thứ gì đó tương tự như thế này. Trò chơi đòi hỏi bạn phải suy luận, điền chữ số thích hợp từ 1-9 vào ô trống sao cho hàng ngang, hàng dọc và khung 9 ô không bị trùng chữ số, bạn giải đố nhanh hơn đối thủ bạn sẽ thắng. Tăng độ khó bằng cách tạo ô trống nhiều hơn.
game soduku

Điều đầu tiên, nó giống như một trò chơi giải đố có thuật toán riêng. Điều này có nghĩa là tất cả những gì bạn phải trải qua là Thuật toán của nó; để biết cách thức hoạt động và cách xáo trộn chúng để tăng độ khó.

Giả sử như này, bạn sẽ lập trình sau khi đã có thuật toán của trò chơi này. Sau đó, hãy tiếp tục, cố gắng đưa tất cả chúng vào Pycharm IDE của bạn. Bạn có thể thực hiện điều này mà không cần sử dụng bất kỳ thư viện GUI python nào.

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

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

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

Tích hợp Bootstrap CSS vào dự án thế nào là tốt nhất

Tích hợp Bootstrap CSS vào dự án

Bootstrap css chắc không xa lạ với các web developer, nhưng mình thấy có rất nhiều bạn sử dụng Bootstrap sai cách trong các dự án web. Tại sao mình lại nói vậy, thì các bạn hãy theo dõi bài viết này nhé.

I. Không nên tích hợp bằng cách Download.zip

Trong thực tế khi làm việc với Bootstrap, chúng ta thường hay tùy biến lại những styles mặc định mà Bootstrap cung cấp như màu sắc, box-shadow, border,… Thế nhưng khi tích hợp Bootstrap vào dự án, nhiều bạn lại chọn cách download file .zip chứa các file css, js – là những file đã được compile và không có khả năng tùy biến cao.

Khi tích hợp Bootstrap theo cách này, mà muốn tùy biến lại css thì mình thấy Tích hợp Bootstrap CSS vào dự áncác bạn hay làm là viết các css muốn ghi đè vào một file là custom.css, sau đó cho file này load sau các css của Bootstrap. Nghe thì cũng hợp lý đấy, nhưng cách này có một số nhược điểm như sau:

Khó có thể override được hết các thuộc tính css của Bootstrap: Quả đúng như vậy, mình lấy ví dụ trong trường hợp bạn muốn đổi màu primary của Bootstrap chẳng hạn. Mặc định màu primary của Bootstrap có tông màu xanh da trời, và tông màu này được áp dụng ở rất nhiều chỗ như border, button, text, background… Nếu bạn muốn đổi màu primary này đồng nghĩa bạn phải ghi đè hết styles của các class về border, button, text, background,… Chỉ cần bỏ sót một class thì coi như bạn thất bại.

CSS bị thừa – phí tài nguyên: Khi ghi đè, kết quả bạn sẽ thấy css của mình. Nhưng trước đó trình duyệt vẫn phải load các css của Bootstrap, điều này gây lãng phí tài nguyên máy chủ cho một lý do không đáng có.

Không sử hết các components: Bootstrap dựng sẵn cho mình cả một bầu trời components, thế nhưng chẳng bao giờ mình dùng hết cả. Những component như well, jumbotron rất ít khi dùng, vậy mà vẫn được load trong css của bootstrap – khá thừa thãi.

  Một vài best practice khi sử dụng Bootstrap CSS

Import css của bootstrap

II. Tích hợp thế nào là tốt nhất

Không biết bạn có để ý không, chứ ngoài việc cung cấp các file css đã được compile, Bootstrap còn cung cấp cả những file scss. Nếu muốn tùy biến styles, chúng ta nên tùy biến trong những file scss này.

Về công cụ compile từ scss ra css, mình sẽ sử dụng Laravel Mix cho gần gũi. Bạn nên đọc 2 bài viết của mình dưới đây nếu chưa hiểu scss là gì cũng như chưa biết cách sử dụng Laravel Mix để compile scss ra css.

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

Bước 1: Tạo một project sử dụng Laravel Mix.

Nếu bạn nào lười thì có thể clone github repo của mình về rồi cài đặt theo các bước sau đây:

git clone https://github.com/phambinh217/laravel-mix-stand-alone.git
cd laravel-mix-stand-alone
npm install
npm install bootstrap --save-dev

Bước 2: Tùy biến theo cách của bạn.

Theo như tài liệu về phần Theming của Bootstrap, có 2 cách để bạn có thể tùy biến lại styles.

Cách 1: Import toàn bộ scss của Bootstrap.

Bạn ở file src/app.scss, xóa hết nội dung và thay thế bằng:

@import “../node_modules/bootstrap/scss/bootstrap”;

Cách 2: Dùng component nào thì thì import component đấy.

Bạn mở file src/app.scss, xóa hết nội dung và thay thế bằng:

// Bắt buộc phải import những file này
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";

// Những components bạn cần
// Bạn có thể xem danh sách các components
// ở trong file 'node_modules/bootstrap/scss/bootstrap.scss'
@import "../node_modules/bootstrap/scss/reboot";
@import "../node_modules/bootstrap/scss/type";
@import "../node_modules/bootstrap/scss/images";
@import "../node_modules/bootstrap/scss/code";
@import "../node_modules/bootstrap/scss/grid";

Ở đây, mình sẽ chọn Cách 2 để tăng khả năng tùy biến.

Không chỉ cho phép tùy biến các components, Bootstrap còn cho bạn tùy biến các thông số về màu sắc, khoảng cách giữa các col, kích thước xs, sm, md, lg,… thông qua giá trị của các biến.

  Hướng dẫn sử dụng bootstrap tourist để làm trợ giúp cho phần mềm

Để xem chi tiết Bootstrap có những biến nào, mỗi biến mang ý nghĩa là gì bạn có xem trong file node_modules/bootstrap/scss/variables.

Để chỉnh sửa các biến, bạn chỉ cần override chúng trước khi import những file scss của Bootstrap là được. Trong ví dụ sau đây, mình sẽ override lại màu nền, mà màu chữ thông qua 2 biến là $body-bg và $body-color.

// Các biến cần ghi đè
$body-bg: #000;
$body-color: #111;

// Import scss của Bootstrap
@import "../node_modules/bootstrap/scss/bootstrap";

Bước 3: Compile thôi.

Bạn chạy:

npm run watch

Hoặc chạy command sau trong trường hợp command trên không hoạt động với hệ điều hành của bạn:

npm run watch-poll

Toàn bộ scss của Bootstrap sẽ được compile ra dist/app.css – rất cùng gọn gàng và sạch sẽ.

III. Kết luận

Mình làm việc với Bootstrap được một thời gian khá dài rồi mới phát hiện ra cách làm này. Do khi vào trang chủ của Bootstrap, là nó gợi ý ngay một nút Download to tướng, thế là mình chỉ biết đường tải .zip về rồi dùng thôi, mãi về sau tự đặt ra câu hỏi “Làm sao để tùy biến lại css của bootstrap hiệu quả hơn” thì mới chịu tìm tòi thêm.

Bài viết được viết dựa trên kinh nghiệm cá nhân. Rất mong nhận được góp ý từ các bạn.

Chào tạm biệt, hẹn gặp lại trong những bài viết sau.

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

Xem thêm các bài viết hữu ích:

Xem thêm các việc làm Developer hấp dẫn tại TopDev

Bridge Pattern trong Java – Code ví dụ Composite Pattern

Bridge Pattern trong Java

Bài viết được sự cho phép của tác giả Trần Hữu Cương

1. Bridge Pattern là gì?

Bridge Pattern là một mẫu cấu trúc (Structural Pattern).

Bridge Pattern được dùng khi có sự phân cấp giao diện trong cả thành phần interface lẫn thành phần implement nó.

2. Bridge Pattern UML Diagram

Bridge Pattern UML Diagram

  Hướng dẫn Java Design Pattern – DAO

  Hệ thống 23 mẫu Design Patterns

3. Ví dụ

Ta có 1 tin nhắn với 2 cách log là ghi ra file và show ra màn hình mỗi cách lại được thực hiện làm 2 kiểu là thực hiện với kết quả là text rõ hoặc text đã được mã hóa.

bridge-pattern-2

Message: là 1 lớp trừu tượng khai báo chức năng log

MessageLogger: là 1 interface thực thi chức năng log của Message

ConsoleLogger: thừa kế MessageLogger, có chức năng show message ra console

FileLogger: thừa kế MessageLogger, có chức năng ghi message vào file

TextMessage và EncryptedMessage: thừa kế Message, quyết định xem việc log tin nhắn là text rõ hoặc text đã được mã hóa.

Tham khảo việc làm Fresher Java mới nhất trên TopDev

Code ví dụ:

MessageLogger.java

public interface MessageLogger {
  public void log(String msg);
}

ConsoleLogger.java

public class ConsoleLogger implements MessageLogger {

  @Override
  public void log(String msg) {
    System.out.println(msg);
  }

}

Xem tin tuyển dụng Java mới nhất trên TopDev

FileLogger.java

public class FileLogger implements MessageLogger {

  @Override
  public void log(String msg) {

     // viet ham ghi ra file log.txt
     try {
       FileWriter fw = new FileWriter(new File("log.txt"), true);
       fw.append((char) 10);
       fw.write(msg);
       fw.close();
     } catch (Exception ex) {
       System.out.println("loi log trong FileLogger: " + ex);
     }
  }

}

Message.java

public abstract class Message {

  MessageLogger messageLogger;

  public Message() {
  }

  public Message(MessageLogger messageLogger) {
    this.messageLogger = messageLogger;
  }

  public abstract void log(String msg);
}

TextMessage.java

public class TextMessage extends Message {

  public TextMessage() {
  }

  public TextMessage(MessageLogger messageLogger) {
  super(messageLogger);
  }

  public MessageLogger getMessageLogger() {
  return messageLogger;
  }

  public void setMessageLogger(MessageLogger messageLogger) {
  this.messageLogger = messageLogger;
  }

  public String preProcess(String str) {
  return str;
  }

  @Override
  public void log(String msg) {
  this.messageLogger.log(preProcess(msg));
  }

}

EncryptedMessage.java

public class EncryptedMessage extends Message {

  public EncryptedMessage() {
      }

  public EncryptedMessage(MessageLogger messageLogger) {
          super(messageLogger);
      }

  public MessageLogger getMessageLogger() {
    return messageLogger;
  }

  public void setMessageLogger(MessageLogger messageLogger) {
    this.messageLogger = messageLogger;
  }

  public String preProcess(String str) {
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      byte[] messageDigest = md.digest(str.getBytes());
      BigInteger number = new BigInteger(1, messageDigest);
      String hashtext = number.toString(16);
      while (hashtext.length() < 32) {
        hashtext = "0" + hashtext;
      }
      return hashtext;
    } catch (NoSuchAlgorithmException e) {
      throw new RuntimeException(e);
    }
  }

  @Override
  public void log(String msg) {
    this.messageLogger.log(preProcess(msg));
  }

}
Demo:
public class MainApp {
public static void main(String[] args) {
 // chọn log kiểu show ra console
 MessageLogger messageLogger = new ConsoleLogger();

 // chọn cách thức hiển thị kiểu mã hóa
 Message message1 = new EncryptedMessage(messageLogger);

 // chọn cách thức hiển thị kiểu text rõ
 Message message2 = new TextMessage(messageLogger);

 // thực thi phương thức log
 message1.log("stackjava.com");
 message2.log("stackjava.com");
}

}

Kết quả:

29c4fdeeb3e62a969f69ad4601589fac
stackjava.com

Okay, Done!

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

Xem thêm:

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

Các chứng chỉ Tester nên có để theo đuổi sự nghiệp

Các chứng chỉ Tester nên có để theo đuổi sự nghiệp

Bài viết được sự cho phép của BBT Tạp chí lập trình

Có rất nhiều các loại chứng chỉ tester dành cho các kiểm thử viên từ nghiệp dư đến chuyên nghiệp. Các chứng chỉ này sẽ hỗ trợ người kiểm thử ở từng cấp độ để nắm vững các kiến thức chuyên sâu trong lĩnh vực này.

Bài viết này xin giới thiệu các loại chứng chỉ mà một kiểm thử viên có thể học để cải thiện kiến thức và kỹ năng của mình trên hành trình sự nghiệp

Chứng chỉ ISTQB

ISTQB là chứng chỉ kiểm thử phần mềm hàng đầu. ISTQB có rất nhiều level thi, bạn nên có ít nhất 1 hoặc 2 loại chứng chỉ này.

  1. ISTQB–Foundation Level: Cung cấp kiến thức nền tảng và những kỹ năng cần thiết về kiểm thử phần mềm, thiết kế test case, estimation, quản lý trong kiểm thử phần mềm.
  2. ISTQB- Advanced Level: Mức độ nâng cao với 3 chứng chỉ riêng biệt, bạn có thể chọn 1 trong 3 chứng chỉ để thi.
  • ISTQB Test Analyst: Dành cho các tester chuyên kiểm tra functional test với các kỹ thuật thiết kế test case và coverage nâng cao.
  • ISTQB Test Manager: Dành cho người quản lý test, cải tiến quy trình test và kiểm soát hoạt động test.
  • ISTQB Advanced Technical Test Analyst: Dành cho tester chuyên kiểm thử về structure test và non-functional test.
  1. ISTQB Expert Level: Mức độ chuyên gia

  Tester là gì? Kỹ năng cần thiết để trở thành một Tester

  Giao tiếp giữa Tester và Dev

Chứng chỉ Tester ISTQB Foundation Level (CTFL)

Chứng chỉ ISTQB Foundation Level (CTFL) dành cho bất kỳ ai quan tâm đến việc thể hiện kiến ​​thức cơ bản về kiểm thử phần mềm. Bao gồm các loại kiểm thử phần mềm, lập kế hoạch và thiết kế kiểm thử, quản lý lỗi và đánh giá rủi ro của dự án và sản phẩm.

Chứng nhận này phù hợp để đóng góp các vai trò nền tảng trong thử nghiệm, chẳng hạn như người thử nghiệm, nhà phân tích thử nghiệm và chuyên gia tư vấn thử nghiệm. Không có tiêu chí đủ điều kiện cho chứng chỉ ISTQB Foundation Level (CTFL).

Xem thêm Tuyển dụng tester hcm hấp dẫn trên TopDev!

Chứng chỉ ISTQB Agile Tester

Kiểm thử nhanh là một cách tiếp cận mới hơn đối với kiểm thử phần mềm đang được ưa chuộng gần đây. Nó dựa trên phương pháp phát triển phần mềm Agile. Chứng nhận này dành cho:

  • Tester quan tâm đến kiểm thử Agile.
  • Tester có kinh nghiệm trong các cách tiếp cận truyền thống để phát triển phần mềm.
  • Các nhà phát triển chuyên nghiệp gắn liền với các dự án Agile với kiến ​​thức cơ bản về kiểm thử.

Chứng chỉ ISTQB Agile Tester là một phần bổ sung cho chứng chỉ ISTQB Foundation Level (CTFL). Điều này có nghĩa là các ứng viên quan tâm trước tiên phải có chứng chỉ ISTQB Foundation Level (CTFL) hợp lệ để đăng ký chứng chỉ ISTQB Agile Tester.

Chứng chỉ tester CAST

CAST là chứng chỉ tester quốc tế được cung cấp bởi Viện Đảm bảo Chất lượng tại Hoa Kỳ cho những người có từ 3 đến 4 năm kinh nghiệm trong ngành công nghệ thông tin hoặc đại học và những ứng viên học 2 năm đại học với 1 năm kinh nghiệm.

Đây sẽ là chứng chỉ phù hợp cho những ai đang theo học lập trình nhưng muốn học hỏi thêm về kiểm thử phần mềm để hỗ trợ cho các dự án của mình. Kỳ thi lấy chứng chỉ CAST được tổ chức tại Trung tâm Khảo thí Pearson VUE. Sau khi đơn đăng ký được gửi thành công cho CAST, ứng viên sẽ nhận được một bản PDF 367 trang có tên là Cơ quan kiểm tra kiến ​​thức phần mềm (STBOK) cho CAST.

Chứng chỉ Tester CSTE

Chứng nhận Certified Software Testing Engineer được sử dụng để chứng nhận đảm bảo năng lực ở cấp độ chuyên nghiệp về các nguyên tắc và thực hành kiểm soát chất lượng. Đây được xem là chứng chỉ tốt nhất để bất kỳ ai yêu thích lĩnh vực lập trình thử sức ở vị trí kiểm thử viên.

Để đạt đủ điều kiện đăng ký chứng chỉ CSTE ứng viên phải làm việc trong lĩnh vực kiểm thử phần mềm trong vòng 18 tháng trước khi đăng ký và phải sở hữu bằng đại học cùng 2 năm kinh nghiệm trong lĩnh vực CNTT.

Chứng chỉ Tester CMST

Đây là chứng chỉ toàn cầu phù hợp với vị trí quản lý cấp cao. Ngoài việc đảm bảo rằng người được cấp chứng chỉ có năng lực ở cấp độ làm việc trong các nguyên tắc và thực tiễn của kiểm thử phần mềm, CMST cũng chứng minh rằng người được cấp chứng chỉ có bộ kỹ năng để quản lý các dự án kiểm thử phần mềm.

Để sở hữu chứng chỉ này, ứng viên phải đáp ứng các yêu cầu như sau:

  • Sở hữu bằng cử nhân và có 4 năm kinh nghiệm trong lĩnh vực kiểm thử phần mềm.
  • Bằng cao đẳng hoặc 6 năm kinh nghiệm kiểm thử phần mềm
  • Có 8 năm kinh nghiệm làm việc trong lĩnh vực kiểm thử phần mềm

Để chuẩn bị cho bài kiểm tra, các ứng viên đủ điều kiện nhận được giáo trình 609 trang cho CMST (STBOK) PDF. Kỳ thi có hai bài thi, với thời gian nghỉ 10 phút, đánh giá kiến ​​thức và kinh nghiệm của thí sinh trong 4 lĩnh vực sau:

  1. Quản lý kiểm tra
  2. Phân tích thử nghiệm
  3. Lập kế hoạch và Thực thi Kiểm tra
  4. Truyền thông và các mối quan hệ

Tùy theo công việc và các doanh nghiệp các Tester đang làm yêu cầu để các bạn lựa chọn thi các chứng chỉ cần có, không nhất thiết phải thi toàn bộ các chứng chỉ này.

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

Xem thêm:

Xem thêm tuyển dụng việc làm IT hấp dẫn trên TopDev

Lời khuyên tốt nhất cho một lập trình viên mới vào nghề là gì?

Lời khuyên tốt nhất cho một lập trình viên mới vào nghề là gì?

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh

1. Uống cà phê. Cà phê giúp bạn tỉnh táo trong một ngày dài. (Đây là ý kiến ​​cá nhân)

2. Hãy giải quyết vấn đề của bug đúng cách. Đừng fix bug theo kiểu bưng vá. Nó sẽ phản tác dụng với bạn.

3. Commit code của bạn theo định kỳ và push code của bạn ít nhất một lần trong 2 ngày. Đừng để code dưới máy của bạn quá nhiều. Bạn không bao giờ biết khi nào máy tính bị hỏng đâu.

4. Đừng đặt tên biến quá ngắn. Sẽ là một cơn ác mộng khi bạn đọc lại code của bạn sau vài tháng.

5. Hãy luôn thêm comment vào code khi có thể.

Tài liệu luôn cập nhật với code. Sử dụng các cách viết tài liệu trực tiếp trong code, ví dụ /** Javadocs comments */

Xem thêm các việc làm Java Fresher hấp dẫn trên TopDev

7. Đặt tất cả các biến static ra bên ngoài hàm. Nó sẽ giúp bạn dễ dàng hơn trong việc quản lý biến static.

8. Luôn luôn viết unit test với độ phủ 95%. Điều này giúp bạn biết được những thay đổi nhỏ của code có làm hỏng phần mềm không.

9. Cấu hình linters trong IDE của bạn, nó sẽ giúp code của bạn sạch hơn.

10. Luôn có code-style chung cho dự án của bạn.

11. Khi nghi ngờ, hãy luôn hỏi. Bạn không bao giờ biết những gì những người khác trong nhóm của bạn biết. Đừng bao giờ đánh giá thấp bất kỳ ai.

12. Liên quan đến điểm trên: Đừng hỏi những câu hỏi ngu ngốc. Tra cứu nó trên google trước khi bạn hỏi những người xung quanh. Rất có thể ai đó đã từng có câu hỏi tương tự trước đây và đã hỏi trên internet.

Đừng chỉ viết code trong các case đúng, hãy thử các case có khả năng sinh lỗi. Hãy viết test cẩn thận.

14. Khi các thành viên trong team bạn có câu hỏi, hãy giúp họ. Bạn không biết được bao giờ bạn cần sự giúp đỡ từ họ đâu.

Cuối cùng nhưng không kém phần… Đừng ngần ngại học các công nghệ mới. Ra khỏi vùng an toàn của bạn đi. Đó là cách bạn tồn tại trong ngành công nghiệp phần mềm.

Điều quan trọng nhất trong tất cả.
Khi có lỗi hãy thử khởi động lại máy tính của bạn xem. Biết đâu nó fix bug đấy.

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

Chuẩn coding convention trong PHP với PSR

coding convention trong PHP

Bài viết được sự cho phép của tác giả Phạm Bình

Chào các bạn,

Ngày xưa lúc mới học lập trình, thì cứ vài hôm mình lại thay đổi phong cách code một lần. Lúc thì đặt tên biến kiểu ten_bien, lúc thì đặt kiểu tenbien, lúc thì tenBien,… đến lúc hoàn thành dự án, mặc dù code chạy không sai đọc lại thấy ngu không tả nổi, cảm giác cứ như nhìn vào tờ giấy nháp vậy.

Mình đặt ra câu hỏi “Làm một mình còn code khuyết tật thế này, thế làm team thì sao, chẳng lẽ lại mạnh ai người ý code à?”. Không, không thể nào như vậy được, mình cho rằng phải có một quy ước chung nào đó. Thế là mình thử lên mạng tìm hiểu xem, thì thấy có khái niệm về coding convention giải quyết được vấn đề mình gặp phải.

I. CODING CONVENTION LÀ GÌ?

Coding convention dịch ra Tiếng Việt là quy ước coding. Hiểu nôm na nó là một tập hợp các quy ước về phong cách code, cách đặt tên biến, tên hàm, tên file,… để các coder tuân theo.

Coding convention sẽ đem lại lợi ích nhiều hơn khi bạn làm việc nhóm. Hãy tưởng tượng nhóm 5 người và cùng tuân theo một phong cách code, thì khi người này đọc code của người kia sẽ dễ hiểu hơn, không cảm thấy “ngứa mắt” hay muốn đánh đồng nghiệp.

Ý kiến cá nhân: Code không có convention là dấu hiệu thất bại đầu tiên khi làm phần mềm.

Ngay cả khi bạn làm một mình, thì tuân theo coding convention cũng vẫn rất quan trọng. Những dòng code chuẩn chỉ sẽ khiến bạn có hứng thú đọc hơn là những dòng code xiên xẹo đúng không.

  Format (Làm đẹp) code php trong VS Code

  4 lý do để VS Code là Text Editor ưa thích của mọi lập trình viên

II. PSR PHP LÀ GÌ?

Coding convention nói chung rất rộng, tùy vào ngôn ngữ lập trình, tùy vào team mà có thể có coding convention khác nhau. Còn với PSR, nó là coding convention được áp dụng phổ biến nhất khi code PHP.

PSR là viết tắt của PHP Standards Recommendations – khuyến nghị về tiêu chuẩn của PHP.

Bạn có thể tìm hiểu chi tiết về PSR tại trang chủ chính thức https://www.php-fig.org, còn trong bài viết này mình sẽ tóm tắt một số ý cơ bản về PSR.

Tính đến thời điểm hiện tại, PSR có tất cả 12 chuẩn (bao gồm cả các chuẩn đã lỗi thời), chia làm 4 nhóm:

STT Nhóm Mô tả Phiên bản PSR
1 Autoloading Quy ước về cách code để có thể sử dụng namespace dễ dàng PSR-4
2 Interface Quy ước về cách code thư viện liên quan tới log, cache,… PSR-3PSR-6PSR-11PSR-13PSR-14PSR-16
3 HTTP Quy ước về cách code làm sao để tương tác với các request, response HTTP một cách tốt nhất PSR-7PSR-5PSR-15PSR-17PSR-18
4 Coding styles Quy ước về phong cách code PSR-1PSR-12

Trong các nhóm kể trên, mình muốn nhấn mạnh vào nhóm Coding styles nhất, bởi đây chính là nhóm quy định về phong cách code, cách đặt tên biến, tên hàm, tên class,… cũng chính là nội dung mà mình muốn đề cập tới trong bài viết này. Các nhóm còn lại sẽ ít sử dụng hơn, sử dụng chủ yếu khi bạn có ý định code các thư viện hay framework cho PHP.

Xem thêm các việc làm PHP lương cao trên TopDev

III. PSR-1, PSR-12, 2 CHUẨN VỀ CODING STYLES

Tính đến thời điểm mình viết bài này, PSR-1 và PSR-12 là 2 chuẩn được sử dụng cho coding styles.

Bạn cũng có thể nghe thấy đâu đó người ta nhắc về chuẩn PSR-2 nữa, nhưng PSR-2 đã được đánh dấu là “lỗi thời” trên trang chủ của https://www.php-fig.org. Không tin thì bạn có thể đọc tại đây: https://www.php-fig.org/psr/psr-2. PSR-2 giờ đây được thay thế bằng PSR-12.

3.1 Tìm hiểu về PSR-1

3.1.1 Đối với file PHP

Nguyên tắc 1: File PHP chỉ được phép sử dụng <?php và <?=<?php được sử dụng để mở đầu cho code PHP, và <?= là cú pháp short-echo (thay vì code là <?php echo $a ?>, bạn có thể code là <?= $a ?>)

Nguyên tắc 2: File code PHP sử dụng encode UTF-8 without BOM.

Nguyên tắc 3: File PHP NÊN dùng để khai báo các thành phần của PHP (class, function, const) và các hiệu ứng phụ (include, thiết lập init PHP), nhưng KHÔNG NÊN dùng cả hai trong một file. Để hiểu rõ hơn nguyên tắc này, bạn hãy xem ví dụ sau

Không nên code thế này

<?php
// hiệu ứng phụ: đổi thiết lập ini
ini_set('error_reporting', E_ALL);

// hiệu ứng phụ: nạp file vào
include "file.php";

// hiệu ứng phụ: xuất dữ liệu
echo "<html>\n";

// khai báo hàm
function foo()
{
    // function body
}

Đoạn code trên bao gồm cả việc khai báo các hiệu ứng phụ (init_set, include) và cả việc khai báo thành phần của PHP (function foo). Chúng ta KHÔNG NÊN code như vậy. Thay vào đó, hãy tách chúng ra làm 2 file.

functions.php

<?php
// functions.php

// khai báo hàm
function foo()
{
    // function body
}

index.php

<?php
// index.php

// hiệu ứng phụ: đổi thiết lập ini
ini_set('error_reporting', E_ALL);

// hiệu ứng phụ: nạp file vào
include "file.php";
include "functions.php";

// hiệu ứng phụ: xuất dữ liệu
echo "<html>\n";

3.1.2 Đối với khai báo namespace và class

Nguyên tắc 1: namespace và class phải thuân theo chuẩn “autoload” PSR-0, PSR-4.

Mỗi class được khai báo trên một file PHP riêng và có namespace tối thiểu một cấp, cấp đầu tiên là tên vendor (tên đơn vị phát hành)

Tên class PHẢI được viết dạng ClassName thay vì classnameClassnameclass_name hay Class_Name

Từ PHP 5.3, PHẢI sử dụng namespace khi khai báo class.

KHÔNG ĐƯỢC code thế này.

<?php

class Classname
{
    //
}

Mà PHẢI code thế này

<?php

namespace Vendor;

class ClassName
{
    //
}

Từ phiên bản PHP 5.2.x trở về trước. bạn có thể code thế này, nhưng giờ ai còn code trên PHP 5 nữa đâu chứ đừng nói là PHP 5.2.x.

<?php

class Vendor_ClassName
{
    ///
}

3.1.3 Hằng, thuộc tính và phương thức của class

Quy tắc 1: Hằng khai báo trong class phải được viết hoa và ngăn cách bằng dấu gạch dưới.

<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

Quy tắc 2: Thuộc tính khai báo trong class có thể viết ở dạng $ten_thuoc_tinh$TenThuocTinh hoặc $tenThuocTinh. Nhưng nếu bạn chọn một kiểu rồi thì phải thống nhất về cách code trong một phạm vi nào đó, như phạm vi trong class, trong package hoặc trong vendor.

Ý kiến cá nhân: Nên chọn $tenThuocTinh

Quy tắc 3: Tên phương thực phải được đặt ở dang tenPhuongThuc()

<?php

namespace Vendor\Model;

class Foo
{
    public function methodName()
    {
        //
    }
}

3.2 Tìm hiểu về PSR-12

Các quy tắc về PSR-12 khá dài, nên mình có hẳn một bài viết để trình bày riêng tại đây:

>> Code PHP theo chuẩn PSR-12

IV. TỔNG KẾT

Code không chỉ code một lần là xong, code xong có khi còn phải sửa lên sửa xuống. Mà khi sửa, có khi còn là sửa code của người khác chứ chẳng được sửa code của mình. Để không tạo ra sự lạ lẫm, khó chịu khi người khác đọc một đoạn code không phải do mình viết ra thì cách tốt nhất là áp dụng coding convention ngay từ đầu.

Áp dụng chuẩn coding convention là bước đầu tiên thể hiện bạn đang dần trở nên chuyên nghiệp hơn.

Một bài viết ngắn chia kiến thức của mình về coding convention. Hẹn gặp lại các bạn trong những bài viết kế tiếp.

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

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

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

Chia sẻ kinh nghiệm cắt PSD sang HTML toàn tập

kinh nghiệm cắt PSD sang HTML

Bài viết được sự cho phép của tác giả Trần Anh Tuấn

Xin chào các bạn. Lâu ngày ẩn danh tu luyện nay mềnh đã trở lại. Và để bắt đầu sự trở lại này thì mình quyết định ra series chia sẻ kỹ năng và kinh nghiệm cắt PSD sang HTML toàn tập từ A-Z cho các bạn.

Phần này rất là dài nên mình sẽ chia ra nhiều phần(modules) để cho các bạn không bị rối loạn khi làm và học. Mình đã lên danh sách các check-list nên làm khi cắt PSD của mình bao gồm:

# Phân tích design

Khi các bạn nhận được design do ai yêu cầu hoặc các bạn làm bài test thực tập hoặc tập cắt PSD tải từ trên mạng về. Thì việc đầu tiên các bạn cần làm đó là phân tích nó. Vậy các bạn nên phân tích những gì?

Sau đây là check-list (việc cần làm) của mình khi phân tích một design mà mình đã học được từ lúc ra trường đến khi đi thực tập rồi đi làm. Các bạn có thể xem và tham khảo nhé. Đầu tiên là phải mở design lên (các bạn có thể dùng Photoshop hoặc AI).

  • Màu sắc: Các bạn cần tìm màu chủ đạo của design và các màu phụ như màu chữ, màu liên kết, màu nền(background)….
  • Fonts: Fonts thì các bạn chọn công cụ text(T) của Photoshop và chọn vào đoạn text nào đó(trong design) nó sẽ hiển thị ra cho bạn biết được font gì, kích thước bao nhiêu cho tiêu đề, các đoạn chữ, button, menu….
    Sau khi tìm được fonts rồi các bạn có thể dùng Google fonts hoặc nếu trường hợp Google fonts không có fonts đó thì các bạn phải tìm và tải các file fonts dạng otf ttf woff rồi đưa vào thư mục fonts và css dẫn tới các file fonts là xong
  • Hình ảnh: Dùng Photoshop hoặc AI cắt ra thôi. Bài sau hướng dẫn cắt PSD mình sẽ chỉ cho các bạn nhé
  • Icons: Nếu icons nào mà font-awesome có thì dùng nếu icons nào mà font-awesome không có thì các bạn có thể dùng các icons tương tự trong font-awesome cũng được hoặc cắt nó thành 1 tấm hình nhỏ
  • Kích thước Design: Các bạn đo kích thước của design để biết nó rộng bao nhiêu 1200px 1600px hay 1920px… để làm cho đúng cũng như kích thước(width, height) của các block trong design như banner, top menu, about block,….
  • Spacing: Các bạn cần kiểm tra các khoảng cách margin, padding của các thành phần, khoảng cách giữa các đoạn text, line-height, canh giữa trái phải nữa để code ra cho đúng chuẩn nhá.

  Lit HTML là gì?

# Tạo cấu trúc thư mục cơ bản

Sau khi các bạn đã đo kích thước, biết được fonts là gì, màu sắc ra sao, khoảng cách thế nào, hình ảnh, icons đã cắt ra hết. Thì việc tiếp theo các bạn cần làm đó là tạo cấu trúc thư mục đơn giản để chuẩn bị code.

Thư mục bao gồm 1 file index.html – 1 thư mục css (hoặc styles) chứa các files .css – 1 thư mục images để chứa hình ảnh – 1 thư mục fonts để chứa fonts. Nếu các bạn có code thêm Javascripts thì thêm một thư mục js nữa nhé.

Cấu trúc thư mục đơn giản của mình

Ngoài thư mục images và fonts ra thì thư mục css(styles) các bạn nên có file reset.css để reset các style mặc định của các thẻ ở các trình duyệt khác nhau. Và một file fontawesome.css để dùng fontawesome (nếu có) và cuối cùng style.css là file mà các bạn sẽ code vào trong đó.

[sc name=”Courses Affiliates” ]

Tham khảo việc làm HTML & CSS hấp dẫn trên TopDev!

# Dựng HTML và CSS theo từng block

Sau khi chúng ta tạo xong cấu trúc thư mục cơ bản rồi thì việc tiếp theo sẽ là dựng HTML cho từng phần (block) trong design. Thường thì chỗ này có người sẽ code hết HTML cho toàn bộ từ trên xuống dưới rồi CSS 1 lần.

Nhưng mình thì không. Mình làm theo từng block và tới block nào thì dựng HTML và CSS cho nó thậm chí làm responsive luôn cho dứt điểm rồi mới tới block khác. Các bạn lưu ý cái này tùy mỗi người nha.

Giả sử nhìn vào design ở trên thì mình sẽ tạo trong file index.html 1 block là menu với các thẻ HTML và class đặt tên theo chuẩn BEM (Block Element Modified). Mình sẽ nói về cách đặt tên ở bài sau khi chúng ta cắt một PSD luôn nhé.

<nav class="menu">
 <ul class="menu__list">
  <li class="menu__item"><a href="#" class="menu__link">About us</a>
  </li>
 </ul>
</nav>

# Mobile first vs Desktop first

Khi làm thì các bạn nên xác định là làm theo giao diện nào trước. Nghĩa là đoạn code CSS khi các bạn bắt đầu vào code nó chính là giao diện mobile hay là desktop.

Nếu là mobile thì CSS các bạn đang làm là dành cho mobile rồi sau đó các bạn dùng @media min-width cho các giao diện từ mobile trở lên(tablet, pc). Ngược lại nếu là desktop thì CSS các bạn đang làm chính là desktop và sau đó các bạn dùng @media max-width cho các thiết bị nhỏ hơn(tablet, mobile)

  Hô biến một file PSD thành giao diện web với HTML, CSS

# Trình duyệt hỗ trợ

Đây là vấn đề các bạn nên cân nhắc khi làm nếu khách hàng hoặc công ty bạn yêu cầu dùng các trình duyệt cũ như IE thì chắc chắn các bạn không thể dùng CSS Grid hay CSS Flexbox vì nó sẽ không hỗ trợ trình duyệt IE. Các bạn phải dùng các thuộc tính CSS khác như float hay display inline block….

Vì thế trước khi làm thì nên tìm hiểu yêu cầu của họ là gì, nếu không cần IE mà chỉ cần Edge, Chrome hay Firefox và sau đó check Caniuse xem có hỗ trợ grid hay flexbox không ? Nếu có thì ngại gì mà không chiến cho lẹ nà.

# Testing

Đây là bước quan trọng cho dù làm ngôn ngữ nào hay công việc gì khác, thì công việc testing luôn quan trọng để cho ra một sản phẩm hoàn hảo không có lỗi.

Việc test giao diện thì đơn giản các bạn resize trình duyệt hoặc dùng giả lập giao diện thiết bị của Chrome để test xem ở các màn hình giao diện đã đẹp chưa(UI) và trải nghiệm có tốt không(UX) ?

Sau đó copy trang web qua trình duyệt khác như Firefox, Edge hay Safari Opera Coccoc…để test thêm nếu tất cả trình duyệt màn hình mà hiển thị như nhau hết thì quá ngon rồi. Nếu có lỗi ở trình duyệt nào thì tìm cách fix nhé. Google và Stackoverflow luôn chờ đợi bạn ^^

# Hoàn thành

Sau khi làm xong và testing đã hoàn chỉnh (bao gồm đã fix bug) thì công việc tiếp theo là đưa cho leader (làm trong công ty) kiểm tra hoặc up lên mạng (Github) để cho nhiều người khác họ có thể xem sản phẩm của bạn và nhận xét góp ý giúp bạn.

Những lời nhận xét góp ý sẽ giúp bạn lên trình rất nhiều vì có khi họ phát hiện ra nhiều lỗi mà bạn không biết hoặc góp ý về giao diện như UI không đẹp, cần cải thiện hiệu ứng, nút này dưới mobile nằm đây không đẹp, button ngắn quá…. Kiểu vậy.

Tuy nhiên các bạn nên chọn lọc các góp ý nhé rồi cải thiện chứ đừng thấy ai góp ý rồi cũng làm theo, mỗi người 1 ý không làm hài lòng hết được. Chỉ cần làm đúng design đẹp ít lỗi và hài lòng khách hàng là được vì họ là người trả tiền cho chúng ta mà hehe.

# Lời kết

Phù!!! Thế là xong phần chia sẻ ngắn gọn súc tích cho các bạn nà. Ở phần tiếp theo chúng ta sẽ cắt một PSD và áp dụng những thứ mình đã nói ở trên đây vào luôn để các bạn có thể hiểu và áp dụng thực tế nó như thế nào luôn.

Hãy nhấn nút icon nhận thông báo và đón chờ siêu phẩm nhá. Cuối cùng vẫn như mọi khi chúc các bạn học tốt và có một ngày tuyệt vời ông mặt trời =))

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

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

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

Trở thành Solution Architect có khó không?

Solution Architect

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

Solution Architect hay còn được gọi là Kiến trúc sư Giải pháp là một job title trong các công ty software.

Bài viết này nhằm cung cấp cho các bạn đang là software engineer một lộ trình để có thể up skill của mình lên vai trò mới là Solution Architect. Lưu ý bài viết chỉ mang tính chất tham khảo từ kinh nghiệm cá nhân của mình.

Trước tiên, định nghĩa về Solution Architect

Có rất nhiều role về Architect trong một doanh nghiệp bao gồm: Enterprise architects, Domain architects, Solution architects, Data architects, Technical architects, Security architects, Infrastructure architects, Application architects hoặc thậm chí là Cloud Architect như AWS Architect hoặc Azure architects, …

Bài viết này không nhằm mục đích là giải thích từng role architect ở trên, mà tập trung vào Solution architects.

Có thể hiểu Solution Architect là người chịu trách nhiệm xây dựng giải pháp cho một bài toán hoặc yêu cầu cụ thể từ phía khách hàng. Solution Architect thường chịu trách nhiệm thiết kế mô hình kiến trúc giải pháp và tập trung giải quyết các yêu cầu phi chức năng (non-functional requirements), chẳng hạn như bảo mật, hiệu suất và khả năng mở rộng (scalability).

Để hiểu rõ hơn về các công việc phải làm của 1 Solution Architect, bạn có thể đọc series bài viết SOLUTIONS ARCHITECT SERIES

  Đâu là điểm khác biệt giữa Solution Architect và Software Architect?

  Giới thiệu về Clean Architecture – Phần 1

Tuy nhiên trong thực tế, Solution Architect có thể đảm nhận luôn vai trò của các Architect khác ví dụ như thiết kế infrastructure, security, data trên nhiều nền tảng khác nhau như on-premise hoặc on Cloud.

Có 2 role Architect rất dễ nhầm lẫn với Solution Architect đó là Technical ArchitectApplication Architect.

Trong khi Solution Architect chịu trách nhiệm thiết kế giải pháp toàn diện về nhiều khía cạnh như đã nói ở trên, thì Technical Architect có kiến thức chuyên sâu về một nền tảng hoặc công nghệ và họ có kinh nghiệm thực tế. Họ thường coaching các Developer, DevOps engineer trong việc triển khai giải pháp bằng việc đi sâu vào chi tiết kỹ thuật trong bản thiết kế high-level của Solution Architect.

Application Architect tập trung vào việc xây dựng các tính năng mà được yêu cầu. Không giống như các kiến trúc sư khác, họ không quan tâm nhiều đến các yêu cầu phi chức năng. Vai trò của họ là áp dụng các best practices và các pattern để tạo ra các ứng dụng dễ bảo trì và dễ đọc.

Tham khảo thêm các vị trí tuyển dụng Solution Architect lương cao tại Topdev

Các bước để trở thành một Solution Architect

Như đã đề cập, một Solution Architect cần phải có hiểu biết rất rộng về thiết kế hệ thống. Mô hình kiến thức họ áp dụng thường là T-shaped. Nghĩa là có chiều sâu về 1 hoặc vài lĩnh vực nào đó, và có chiều rộng về rất nhiều khía cạnh khác. Điều đó có nghĩa, con đường để trở thành Solution Architect không thể một sớm một chiều mà cần qua quá trình tôi luyện từ một developer bình thường đến một Technical Architect hoặc Application Architect để phát triển về chiều sâu trước.

Sau đó, để phát triển chiều ngang (rộng), có rất nhiều cách, và mình sẽ chia sẻ 1 số nguồn kiến thức để các bạn tham khảo.

Đầu tiên, hãy đọc sách để hiểu được một kiến trúc hoàn chỉnh cần có những thành phần nào cần chú ý khi thiết kế, và các công việc của 1 Solution Architect là gì. Mình khuyên đọc cuốn Solutions Architect’s Handbook được viết bởi Saurabh Shrivastava và Neelanjali Srivastav. Mình đã có 1 series tóm tắt cuốn sách ở đây: SOLUTIONS ARCHITECT SERIES

Tiếp theo là học các khái niệm, concept khi thiết kế một một hệ thống large scale gồm những thành phần gì. Bạn có thể tìm đọc về Software Architecture và System Design nó sẽ giúp bạn có thêm rất nhiều từ vựng trong việc thiết kế hệ thống sau này.

Sau đó hãy tìm đọc thêm các sách hoặc course nói về cách để thiết kế một hệ thống hoàn chỉnh. Ví dụ như: làm sao để thiết kế được ứng dụng chat như Whatsapp, thiết kế 1 sàn giao dịch chứng khoán như thế nào. Điều này sẽ giúp cho bạn có cái hình hands-on hơn từ những concept đã đọc ở phía trên. Có rất nhiều nguồn để tham khảo, chỉ cần Google với keyword: “System design” sẽ cho bạn nhiều kết quả. Mình recommend cuốn System Design Interview của Alex Xu.

Một xu hướng không thể không nhắc đến gần đây đó là Cloud Computing. Nói đến Cloud, chúng ta cũng cần có các vai trò như Cloud Developer, Cloud Architect, Cloud DevOps, Cloud Administrator… Rất nhiều doanh nghiệp đã và đang dịch chuyển lên Cloud. Cloud giúp cho việc hiện thực hóa các yêu cầu về phi chức năng trở nên dễ dàng hơn ví dụ như auto scaling, high availability, auto recovery, … nhưng cũng đặt ra nhiều thách thức hơn về chi phí, bảo mật và quản lý vận hành. Nếu bạn có ý định trở thành một Solution Architect thì hãy đi theo một nền tảng Cloud và trở thành một Cloud Architect. Có rất nhiều khóa học và chứng chỉ để giúp bạn thiết kế giải pháp trên Cloud ví dụ như: Exam AZ-305: Designing Microsoft Azure Infrastructure SolutionsAWS Certified Solutions Architect, …

Và cuối cùng, hãy tìm kiếm cơ hội được thử nghiệm và áp dụng kiến thức của mình vào các dự án thực tế.

Chúc bạn may mắn trên con đường trở thành một Solution Architect.

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

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

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

7 Xu hướng Mobile Marketing đáng mong chờ nhất năm 2023

Các xu hướng trong năm 2022 đang thay đổi nhanh hơn mong đợi khi bước qua 2023. Trong thời đại digital, không còn ai theo đuổi những chiến lược marketing tốt nhất mà thay vào đó là đón đầu các xu hướng. Vậy 7 xu hướng mobile marketing được mong chờ sẽ xuất hiện trong năm 2023 là gì?

1. Chatbot

Chắc chắn người dùng Internet nào cũng đã tương tác với Chatbot ít nhất một lần. Chatbot về cơ bản là một chương trình máy tính mô phỏng cuộc trò chuyện với người dùng, có thể ở dạng văn bản, như chat trên website hoặc tương tác bằng lời, như Siri của Apple hay Alexa của Amazon.

chatbot

Chatbot không phải là một công nghệ mới nhưng càng ngày nó càng thông minh và được cải tiến, được sử dụng nhiều hơn trong năm 2023. Nhiều kênh bán hàng sử dụng Facebook Messenger làm giao diện chatbot.

Theo Facebook, có hơn 300.000 bot trên Messenger để xử lý khoảng tám tỷ tin nhắn hàng tháng giữa doanh nghiệp và người tiêu dùng, và con số này chắc chắn còn tăng hơn nữa.

Tại sao Chatbot sẽ “làm nên chuyện”? Mỗi con bot được lập trình bài bản có thể trả lời câu hỏi, đặt chỗ, đặt hàng, huỷ dịch vụ hay thậm chí thu thập thông tin cá nhân theo từng mục đích sử dụng. Danh sách các chức năng của Chatbot còn tiếp tục phát triển, vì đây là giải pháp hàng đầu cho các khách hàng, nơi không chỉ là kênh tương tác với khách mà còn có thể tìm hiểu thêm về người tiêu dùng.

Cũng khá thuận tiện khi thực hiện các khảo sát người tiêu dùng một cách nhanh chóng, các số liệu dễ dàng được quản lý và không dẫn đến việc treo máy vì mọi thứ đều được tự động hoá. Vào năm 2023, bot sẽ cạnh tranh với app để tiếp cận khách hàng.

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

2. Phát triển nhiều ứng dụng AR

Kính thực tế ảo tăng cường (AR) ngày càng trở nên phổ biến. Sự thành công của Pokemon Go hoặc bộ lọc AR trong app nhắn tin của Snapchat và Instagram đã minh chứng cho khả năng ứng dụng mạnh mẽ của công nghệ này.

Các “ông lớn” trong giới công nghệ như Apple đã bắt đầu phát triển công nghệ AR vào các thiết bị thông minh của họ. Apple đã kết hợp với IKEA để tạo ra ứng dụng trưng bày đồ nội thất vào ngay trong nhà của người mua. Điều này giúp người dùng dễ dàng lựa chọn sản phẩm, tiết kiệm thời gian và mua sắm hiệu quả hơn.

Với xu hướng mới này, dự đoán năm 2023 sẽ có hàng loạt những ứng dụng sử dụng AR ra đời, giải quyết được nhiều vấn đề trong hàng loạt các lĩnh vực khác nhau.

3. 5G phát triển mạnh mẽ

5G sẽ nhanh chóng trở thành tiêu chuẩn công nghệ trên các thiết bị di động trong năm 2023 này. Sự ưu việt của 5G với độ trễ thấp, tốc độ đường truyền siêu nhanh và ổn định sẽ thúc đẩy việc tạo ra các ứng dụng chất lượng cao hơn.

Điều này kéo theo sự tăng trưởng trong lĩnh vực phát triển Mobile App từ việc tăng sản lượng, tăng người dùng và tăng số lượng nhà phát triển.

Theo một nghiên cứu của CSS, Trung Quốc sẽ tiếp tục dẫn đầu cuộc đua 5G với hơn một nửa dân số sử dụng 5G đến cuối năm 2023.

4. Content

70% người dùng bày tỏ rằng họ không thích việc các quảng cáo trên điện thoại cứ xuất hiện một cách liên tục mà nội dung lại nhàm chán. Điển hình là các popup quảng cáo khi ta sử dụng các App hay Youtube, …  Để chống lại các chương trình chặn quảng cáo và cái nhìn tiêu cực dành cho quảng cáo trên thiết bị di động, các doanh nghiệp đã chuyển nhiều hơn sang Content Marketing

content marketing

Content marketing không phải là nội dung mới nhưng càng ngày càng được sử dụng nhiều và thường xuyên hơn. Trong khi số lượng người dùng tương tác trên điện thoại ngày càng tăng, các nội dung ngày càng phải được trau chuốt và mang tính sáng tạo hơn trước. Vì vậy, content cần thực sự mang lại giá trị hữu ích cho người dùng, minh bạch và dễ đọc. Người tiêu dùng có xu hướng trở nên tiết kiệm và ít kiên nhẫn hơn. Họ không muốn dành thời gian lãng phí cho việc đọc một bài báo nhảm nhí với các liên kết bán hàng ở mỗi câu hay xem một đoạn clip trên youtube 3 phút nhưng quảng cáo đã gần 1 phút.

5. Marketing tạo bởi người dùng (User-generated Marketing)

Marketing do người dùng hay marketing thương hiệu thông qua khách hàng là cách thức tiếp thị hiệu quả. Loại hình marketing này khác hẳn so với KOL (Key Opinion Leader) khi các thương hiệu mời những người nổi tiếng có lượng followers (người theo dõi) đông đảo trên mạng xã hội, đây từng là chiêu thức marketing phổ biến nhưng người tiêu dùng ngày không còn tin tưởng hoàn toàn vào hình ảnh người nổi tiếng được trả tiền để tạo dáng với bộ bikini và cầm tách trà giảm cân.

User-generated Marketing

Thay vào đó khách hàng muốn thấy những thứ thật và đáng tin hơn, những khách hàng cũ đã mua và trải nghiệm sản phẩm. Khảo sát cho thấy 60% người dùng cho biết lời giới thiệu từ bạn bè và gia đình sẽ ảnh hưởng đến quyết định mua hàng trong khi lời giới thiệu từ người nổi tiếng chỉ chiếm 23%. 85% người tiêu dùng tin tưởng vào các review online. Review của người dùng dễ dàng tìm trên mạng có thể gầy dựng cũng như đánh đổ danh tiếng của một nhãn hàng. Thay vì marketing bằng những hình ảnh vĩ mô hay xây dựng content từ góc nhìn của những người chưa sử dụng sản phẩm, các nhãn hàng nên bắt đầu tập trung đánh mạnh vào trải nghiệm thực tế của khách hàng.

6. Ít app hơn

Thời gian trước khi nhà nhà đều xây dựng một ứng dụng trên di động cho việc kinh doanh của họ, từ chuỗi cửa hàng giặt là cho tới dịch vụ đăng ký thức ăn cho thú cưng, và cũng người người download những ứng dụng ấy.

Tuy nhiên, tần suất mà những ứng dụng này được sử dụng lại không thường xuyên. Năm 2018, ở Mỹ trung bình 1 người sử dụng khoảng 9 ứng dụng khác nhau mỗi ngày, đây có vẻ là con số lớn nhưng chiếm trong đó là các ứng dụng phổ biến trên điện thoại (email, nhắn tin, lịch). Sau cùng chúng ta chỉ sử dụng một vài ứng dụng theo sở thích và nhu cầu cá nhân hàng ngày, dù cho có hàng trăm ứng dụng khác được tải về.

ít app hơn

Trong tương lai, điều chúng ta có thể thấy là các app không còn phát huy tối đa các công dụng. Thay vì xây dựng app chỉ để gắn liền với thương hiệu, các công ty có xu hướng kiểm tra chỉ số ROI (lợi tức đầu tư). Nếu khách hàng không sử dụng ứng dụng thường xuyên, vậy app của bạn có thực sự xứng đáng với chi phí và công sức không? Thay vì vậy, các doanh nghiệp sẽ hướng tới tương tác một cách hiệu quả hơn với khách hàng của họ, như Chatbot và các công cụ định hình khác.

Xem thêm các vị trí việc làm Android, việc làm IOS mới nhất

7. Đặt vấn đề bảo mật lên hàng đầu

Smartphone là nơi lưu trữ rất nhiều thông tin cá nhân của người dùng, đây chính là “món mồi béo mỡ” cho các nhóm tội phạm mạng. Khi người dùng ngày càng quan tâm đến quyền riêng tư thì vấn đề bảo mật thông tin cá nhân trở thành những mối quan tâm hàng đầu đối với các nhà phát triển ứng dụng.

Các ứng dụng nhắn tin được mã hóa như Telegram, trình duyệt di động bảo vệ quyền riêng tư người dùng, các bản cập nhật bảo mật tự động trên smartphone đang có xu hướng tăng nhanh. Điều này dự báo cho xu hướng bảo mật di động vào năm 2023.

Tham khảo các vị trí tuyển dung it lương cao tại Topdev

Được xem như một kênh giao tiếp và truyền thông giữa thương hiệu và người tiêu dùng, Mobile Marketing khiến bạn tiếp cận với lượng khách khổng lồ mọi nơi mọi lúc, và quan trọng hơn là tỷ lệ người tiếp cận được nội dung, thông điệp của bạn cao hơn. Toàn bộ kinh nghiệm và các case study thực tế từ các công ty đứng đầu trong ngành sẽ được cập nhật tại một trong các sự kiện Mobile lớn nhất trong năm – Vietnam Mobile Day sắp trở lại sau hơn 8 năm thành công trước đó.

TopDev Blog via keap.com

QA QC là gì? Nhiệm vụ và Chức năng của QA QC

qa qc là gì

QAQC là một thuật ngữ khá quen thuộc trong lập trình. Tuy nhiên, với những người mới bước chân vào nghề thì thường hay nhầm lẫn giữa 2 vị trí công việc này. Bởi cả QA và QC đều liên quan đến chất lượng, tuy nhiên mỗi thuật ngữ đều có những khác biệt rõ rệt từ khái niệm đến đặc điểm. Bài viết này sẽ giúp bạn trả lời được QA là gì? QC là gì? Nhiệm vụ và chức năng của QA QC là gì?

Định nghĩa QA là gì? QC là gì?

QA và QC là gì

QA là gì?

QA (Quality Assurance) là những người chịu trách nhiệm đảm bảo chất lượng sản phẩm thông qua việc đưa ra quy trình làm việc giữa những bên liên quan. QA sẽ tập trung vào việc hoạch định, xây dựng tài liệu và tạo ra một hệ thống tiêu chuẩn chất lượng cho từng sản phẩm. Từ đó đưa ra các nhiệm vụ cụ thể cần làm của từng cấp bậc nhân viên tham gia vào quy trình đó.

QC là gì?

QC (Quality Control) là những người chịu trách nhiệm đảm bảo chất lượng của sản phẩm. QC sẽ thực hiện các bài kiểm tra chất lượng nhằm đảm bảo sản phẩm đáp ứng đủ và đúng yêu cầu mà QA đã đề ra.

  Quality Assurance QA trong Software là gì

Nhiệm vụ và chức năng của QA QC là gì?

Đối với QA

  • QA sẽ làm nhiệm vụ đề xuất, đưa ra những quy trình phát triển (development process) cho sản phẩm để phù hợp với từng dự án cụ thể. Thông thường, các quy trình này được phát triển dựa trên mô hình V-model hay Agile. Ngoài ra, cần phải thông qua việc áp dụng những mô hình sẵn có như ISO hoặc CMMI.
  • Đưa ra những tài liệu, hướng dẫn, biểu mẫu có liên quan nhằm đảm bảo chất lượng sản phẩm.
  • Kiểm tra, đánh giá việc thực hiện quy trình của các bộ phận trong nhóm xem đã đúng với những gì bên QA đã đề ra không. 
  • Nhắc nhở, thúc đốc đội ngũ phát triển tuân thủ theo đúng quy trình đã được đề ra.
  • Dựa vào từng đội ngũ mà có những giải pháp, thay đổi phù hợp nhất để thúc đẩy tiến độ công việc. 

QA là gì

>>> Xem thêm công việc của nhân viên QA là gì tại đây

Đối với QC 

  • Tìm hiểu hệ thống, từ đó đưa ra những phân tích và mô tả được thiết kế một cách hợp lý.
  • Xây dựng hệ thống test case phục vụ cho quá trình test phần mềm trước khi giao cho khách hàng.
  • QC Leader sẽ lên kế hoạch testing những dự tính đã đề ra trước đó.
  • Viết script cho automation test.
  • Sử dụng các test tool để thực hiện script chi tiết.
  • Phối hợp với nhóm lập trình fix bug, báo cáo chi tiết đến Project Manager cùng các bên liên quan khác của dự án để đảm bảo không có sai sót xảy ra.

Xem thêm nhiều việc làm QC lương cao trên TopDev

Những kỹ năng cần thiết cho QA và QC

Kỹ năng QA cần có

  • Hiểu sâu về kiến trúc toàn bộ hệ thống của phần mềm bởi QA sẽ bao thầu rộng hơn QC.
  • Có khả năng phân tích và làm việc dựa trên số liệu.
  • Có nền tảng kỹ thuật vững chắc, thành thạo automation testAPI.
  • Tiếp thu khối lượng kiến thức lớn về nhiều lĩnh vực của phần mềm mà teams được giao.
  • Yêu cầu sự cẩn thận, tỉ mỉ vì một chi tiết bị bỏ sót cũng sẽ ảnh hưởng đến toàn bộ ứng dụng.
  • Kỹ năng giao tiếp tốt để khai thác thông tin sản phẩm, yêu cầu của dự án từ các developers khác và các bộ phận liên quan.
  • Hiểu rõ các chứng chỉ CMMI, ISO,… trong phần mềm để xây dựng được quy trình chuẩn nhất cho team.

  Vai trò của QA trong dự án: Cảnh sát, thám tử hay là nhà tư vấn?

Kỹ năng QC cần có

  • Bạn cần có kỹ năng code nếu làm Automation.
  • Có kiến thức tốt về các khía cạnh cũng như những chức năng của sản phẩm vì bạn là người review các yêu cầu của requirement.
  • Kỹ năng quản lý và điều hành giúp bạn làm chủ được thời gian và công việc cũng như quản lý tốt hơn nhân viên cấp dưới của mình.
  • Yêu cầu sự cẩn thận, kỹ tính và luôn đặt sự chính xác lên trên hết để hoàn thành tốt nhiệm vụ được giao.
  • Yêu cầu kỹ năng giao tiếp vì bạn phải làm việc với nhiều người trong team nhất là việc trao đổi ý kiến, phản hồi của mình với Developer, Project Manager.

  Nhân Viên QC Và Những Kỹ Năng Không Thể Thiếu Trong Công Việc

Mối liên hệ giữa QA và QC 

mối liên hệ giữa QA và QC

Có thể thấy, QA và QC đều rất quan trọng với đội ngũ phát triển phần mềm, đảm bảo phần mềm đạt chuẩn chất lượng, hoàn thành đúng tiến độ dự án mà vẫn phù hợp với ngân sách.

Mặc dù, nhiệm vụ của QA và QC khác nhau nhưng chúng vẫn có những mối liên hệ với nhau:

  • QA sẽ đưa ra các quy trình và giám sát quy trình cho đội ngũ phát triển sản phẩm, lên kế hoạch kiểm thử cho QC ở một giai đoạn cụ thể, quy định các công cụ sử dụng, tiêu chuẩn để sản phẩm đạt yêu cầu.
  • QA đưa ra quy trình, QC sẽ thực thi các bước QA đã đề ra, QA tham gia giám sát và theo dõi sự tuân thủ của QC sau đó tiến hành chỉnh sửa để phù hợp với tiến độ và ngân sách của dự án.

Tuy nhiên, do vai trò tương đối giống nhau nên nhiều công ty chỉ sử dụng QA và phân tách ra làm 2 vị trí mới.

  • SQA (Software Quality Assurance): Đóng vai trò như một QC thực thụ, thực hiện công việc kiểm thử sản phẩm.
  • PQA (Process Quality Assurance): Là người chịu trách nhiệm các công việc liên quan đến quy trình. Vì công việc khá đặc thù và mang tính hệ thống  nên chỉ những công ty lớn như FPT Software, Harvey Nash, KMS,… mới tuyển vị trí QA, còn lại đa số các công ty phần mềm thường tuyển QC, SQA hoặc Tester.

Tìm việc làm QA QC lương cao trên TopDev

Các resources hữu ích để trở thành QC:

  • Software Testing Help: chuyên trang về Testing với kiến thức từ căn bản đến nâng cao.
  • Tutorials Point: chuyên trang về kiến thức Testing nâng cao.
  • Test this Blog by Eric Jacobson: kinh nghiệm Testing rất hữu ích từ blogger Eric Jacobson.
  • Automation Beyond: kiến thức vể Automation Test.
  • uTest: forum hỏi đáp về Testing nhanh chóng, tiện lợi.
  • SQA Forum: diễn đàn về kiểm thử phầm mềm rất nổi tiếng giúp giải đáp mọi thắc mắc về testing và nghề.
  • Software Test Automation Forums: diễn đàn về automation testing.
  • Rainforest QA Blog: blog về SQA với nhiều kiến thức thực tế và hữu ích.
  • SoftwareQATest: chuyên trang về kiến thức cơ bản và nâng cao nghề Testing.
  • Software Testing Fundamentals: chuyên trang về nghề SQA  với cực nhiều thông tin hay, được phân từ cơ bản đến nâng cao.
  • Testing VN: diễn đàn về Kiểm thử Phần mềm bằng Tiếng Việt rất sôi động, trao đổi rất nhiều thông tin hữu ích.

Con đường sự nghiệp của nhân viên QA, QC

Đối với một doanh nghiệp dù lớn hay nhỏ thì bộ phận QA và QC luôn giữ một vai trò quan trọng. Bởi việc hoạch định quy trình vận hành, sản xuất và kiểm tra, đánh giá chất lượng sản phẩm sẽ quyết định đến sự thành công hay thất bại của công ty. Chính vì vậy cơ hội việc làm QA/QC luôn rộng mở cho các bạn trẻ trong ngành IT.

Nhìn chung, một nhân viên QA hay QC sẽ có những hướng phát triển như:

  • Bắt đầu từ vị trí Tester khi chưa có kinh nghiệm.
  • Bước lên vị trí Test Design khi đã có kinh nghiệm.
  • Sau đó là các vị trí Test Lead hoặc Test Manager.
  • Khi đã đạt đến trình độ Manager bạn sẽ chuyển sang lĩnh vực quản lý.

Tổng kết

QA và QC là hai công việc khác nhau và được yêu cầu như một phần của quản lý chất lượng. QA sẽ kiểm tra bao quát hệ thống chất lượng, liên quan đến toàn bộ các phòng ban trong tổ chức. QC sẽ giúp kiểm tra chất lượng sản phẩm theo từng giai đoạn nhằm mục đích phát hiện và sửa chữa vấn đề.

Hy vọng bài viết này sẽ giúp bạn trả lời được câu hỏi QA là gì? Cũng như các đặc điểm, kỹ năng cần có của một nhân viên QA/QC. Đừng quên theo dõi các bài viết mới nhất về công nghệ trên TopDev nhé!

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

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

Giới thiệu về ngân hàng NAB & NICV

National Australia Bank (NAB) hiện là ngân hàng thương mại lớn nhất tại Úc, với hơn 170 năm lịch sử trong ngành tài chính ngân hàng. Chúng tôi hiện có hơn 33,000 nhân sự, phục vụ cho 8 triệu khách hàng tại 700 địa điểm khắp toàn cầu, đồng thời chúng tôi cũng có một trong những đội ngũ nhân sự công nghệ đông đảo hàng đầu tại Úc. NAB là môi trường của những khả năng và cơ hội mới, nơi bạn có thể chứng tỏ và phát triển tài năng của mình và được hỗ trợ tối đa để đạt được mục tiêu trong công việc.

National Australia Bank NAB

Được thành lập từ năm 2019, NAB Innovation Centre Vietnam (NICV) kết nối những tài năng công nghệ Việt Nam với NAB để mang tới những trải nghiệm công nghệ tuyệt vời và đồng thời đóng góp vào sự phát triển của cộng đồng công nghệ Việt Nam. Chúng tôi cung cấp cho những kỹ sư Việt Nam cơ hội làm việc trực tiếp với những đồng nghiệp tại Úc, nhằm tận dụng những công nghệ hiện đại để mang lại những trải nghiệm tuyệt vời cho khách hàng.

Trên hành trình số hoá trong lĩnh vực tài chính – ngân hàng, NAB tự hào giữ vững vị trí tiên phong trong công nghệ: chúng tôi là ngân hàng đầu tiên của Úc triển khai chiến lược cloud-first, với mục tiêu đưa 80% ứng dụng và quy trình vận hành lên cloud vào năm 2023.

Vì vậy, chúng tôi nỗ lực tăng cường tiềm lực về công nghệ điện toán đám mây cho nhân sự của mình qua việc phối hợp cùng các đối tác quốc tế – AWS và Microsoft Azure – để đào tạo và chứng nhận cho nhân sự NAB. Chúng tôi cũng tạo ra nhiều cơ hội cho nhân sự của mình nghiên cứu và ứng dụng nhiều công nghệ mới vào quy trình vận hành.

  Hiểu sâu về trí tuệ nhân tạo & Machine Learning tại Apple

  Sách hay nhất dành cho lập trình viên (2024)

National Australia Bank NAB

Khi bạn quyết định phát triển sự nghiệp tại NAB, bạn sẽ cùng chung tay mang lại những tác động tích cực tới khách hàng, đồng nghiệp và cả cộng đồng. Là một trong 100 doanh nghiệp phát triển bền vững nhất thế giới, chúng tôi làm việc để thay đổi tương lai ngành ngân hàng, và bạn sẽ là một phần của đội ngũ giải quyết các vấn đề lớn của xã hội. Chúng tôi tạo nên khác biệt một cách thiết thực, vì một sự nghiệp tại ngân hàng NAB cũng như slogan của chúng tôi – “More than money”.

Tham khảo việc làm Back-end HOT trên TopDev

National Australia Bank NAB

Tại NICV, chúng tôi thấu hiểu rằng nguồn nhân lực tốt sẽ tạo nên một tương lai phát triển bền vững. Vì vậy, chúng tôi mang tới nhiều phúc lợi hàng đầu để hỗ trợ bạn trong công việc và cuộc sống. Bên cạnh mức đãi ngộ cạnh tranh, chúng tôi còn đặt sức khỏe của nhân sự lên hàng đầu, bằng việc trang bị những gói bảo hiểm y tế cao cấp cho bạn và 02 người thân cùng 20 ngày nghỉ phép hàng năm. Nhân sự của chúng tôi cũng có được sự linh hoạt trong công việc, thể hiện qua chế độ làm việc hybrid – một nửa thời gian tại văn phòng, còn lại tùy chọn; đi kèm rất nhiều lựa chọn thử sức ở vị trí mới với 150 đội nhóm khác nhau tại công ty. Ngoài ra, chúng tôi còn gắn kết với nhau thông qua nhiều hoạt động ý nghĩa hàng tháng, và được phát triển năng lực tiếng Anh và những kỹ năng khác nhờ các chương trình đào tạo bài bản.

National Australia Bank NAB

Sau chặng đường 3 năm hoạt động, NICV có thể tự tin khẳng định rằng chúng tôi đang đi đúng hướng trên con đường hiện thực hóa tầm nhìn của NAB cho cộng đồng công nghệ Việt Nam. Hãy tham gia cùng chúng tôi để trải nghiệm và đại diện cho tinh thần “More Than Money” danh tiếng của NAB.

Xem thêm:

Xem thêm Top vị trí tuyển dụng it HOT trên TopDev

Nên sử dụng đơn vị EM hay REM?

Nên sử dụng đơn vị EM hay REM?

Bài viết được sự cho phép của tác giả Trần Anh Tuấn

Sau khi viết xong bài trước về sự khác nhau giữa 2 đơn vị em và rem thì nhiều bạn có nói rằng “nếu có demo thì tốt hơn” thế nên hôm nay mình viết bài “nên sử dụng em hay rem vào dự án” này kèm theo demo là 1 trang mình cắt đơn giản sử dụng 2 đơn vị này. Các bạn có thể xem tại đây.

Việc sử dụng đơn vị nào hay như thế nào là tùy thuộc vào mỗi người có thể là do công ty yêu cầu hoặc bạn quen sử dụng đơn vị này, đơn vị kia rồi. Bài này mình chia sẻ về cách của mình, nếu các bạn thích các bạn có thể áp dụng, nếu không thì thôi hihi.

# Áp dụng

EM hay REM

  Dùng Px, Em hay Rem để viết media query

  Những gợi ý sử dụng jQuery bạn nên biết

Đầu tiên thì các bạn inspect code(F12) rồi các bạn chọn thẻ <html> các bạn sẽ thấy mình set giá trị của thuộc tính font-size: 62.5%Tại sao vậy ?

html {
 font-size: 62.5%;
}

Ở bài trước mình có nói mặc định font-size ở hầu hết trình duyệt là 16px tức là 100%. Nghĩa là 1em = 1rem = 100% = 16px. Thế mình muốn có một div nào đó có width là 50px đi thì mình phải tính toán 50px / 16px được bao nhỉ? Lấy máy tính ra tính à được 3.125(em-rem). Như vậy mất thời gian quá nhỉ?

Đó là lý do mình set ở thẻ <html> font-size 62.5%. 100% thì được 16px suy ra 62.5% thì được 10px. Lúc này 1em = 1rem = 10px. Hehe. Giờ box có width 50px à dễ thôi cho width = 5rem là xong vì giờ tính toán lẹ hơn, tính được trong đầu ngay lập tức 50/10 = 5.

Thế là mình áp dụng chúng vào cái template này như thế. Các bạn có thể thấy cách mình làm ở div có class task__item(F12 rồi chọn thẻ div có class này nhé)

.task__item {
   margin-bottom: 4rem;
   padding: 2.5rem;
   background-color: white;
   -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.2);
   box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.2);
}

Việc làm CSS lương cao đang chờ bạn apply!

Mình cho margin-bottom 4rem thì sẽ tương ứng 40px vì đơn vị rem chỉ phụ thuộc vào thẻ<html> nên mình không lo lắng.

Tại sao mình không chọn em trong trường hợp này là vì nó phụ thuộc vào giá trị của thuộc tính font-size của chính nó hoặc phần tử cha chứa nó nên mình sợ nảy sinh nhiều vấn đề. Các bạn xem ví dụ dưới nè.

.task__item {
   margin-bottom: 4em;/*Mình đổi ở đây*/
   padding: 2.5rem;
   background-color: white;
   -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.2);
   box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.2);
   font-size: 2rem;/*Thêm thuộc tính font-size vô đây*/
}

Giờ mình thay đổi giá trị margin-bottom thành 4em và thêm font-size là 2rem(20px) thì lúc này margin-bottom 4em sẽ tương đương với 80px chứ ko phải là 40px như của đơn vị rem, như vậy sẽ không được như bạn mong muốn. Các bạn phải tính toán kỹ khi dùng với đơn vị em nhé.

EM hay REM
Đơn vị rem và em khi dùng margin-bottom

Bây giờ khi resize xuống màn hình nhỏ hơn như IPad, Mobile mình thấy toàn website kích thước to quá nhìn không hợp. Thay vì chỉnh từng cái thì mình set giá trị font-size của thẻ <html> xuống còn 50%(bao nhiêu % tùy design hoặc yêu cầu) lúc này toàn bộ size sẽ nhỏ lại theo size của từng element.

html {
 font-size: 50%; /* Các bạn có thể set bao nhiêu tùy yêu cầu hay design nhé */
}

Các bạn có thể mở template mình đã làm rồi Inspect code, resize trình duyệt và check code để xem cách mình áp dụng đơn vị rem như thế nào nhé. Nếu không hiểu thì có thể bình luận ở dưới mình sẽ trả lời nha.

Ah còn 1 điểm lưu ý nữa đó là trong @media queries mình ít sử dụng px hay là rem mà mình lại sử dụng em. Ở đây mình nói là bên trong cái dấu () của @media queries chớ không phải nội dụng bên trong dấu {} này nha các bạn đừng hiểu sai ý mình.

@media only screen and (max-width: 60em /*giá trị này*/){}

Có rất nhiều lý do ở đây giữa 3 đơn vị này khi dùng cho @media queries. Nó rất dài để giải thích nên mình có tìm tòi và đọc được 1 bài viết khá hay, chi tiết nói về vấn đề này các bạn có thể xem tại đây nha.

# Lời kết

Thì theo quan điểm của mình thì mình sử dụng cả 2 vào project luôn. Đơn vị rem thì dùng cho toàn website kết hợp với px ở những chi tiết nhỏ như border 1px solid #abc chẳng hạn và đơn vị em thì dùng trong @media queries.

Còn các bạn thì dùng như thế nào? Cùng chia sẻ ở bên dưới bình luận nhé. Hy vọng với những kiến thức mà mình chia sẻ sẽ giúp ích cho các bạn phần nào trong việc học tập và code. Chúc các bạn ngày tốt lành.

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

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

Xem thêm các IT Jobs for Developer hấp dẫn tại TopDev