Xem thêm việc làm mobile hấp dẫn nhất
Để biết thêm thông tin về AppsFlyer, vui lòng truy cập www.appsflyer.com
Xem thêm việc làm mobile hấp dẫn nhất
Để biết thêm thông tin về AppsFlyer, vui lòng truy cập www.appsflyer.com
Tác giả: Tobias Merkle
Bạn đã bao giờ có một ý tưởng tuyệt vời cho một dự án cuối tuần, bắt đầu vào chiều thứ bảy, và sau đó dần dần nhận ra dự án sẽ mất ít nhất sáu tháng để thực hiện đầy đủ? Google đã có một khoảnh khắc như vậy khi họ bắt đầu ghi lại tài liệu các hoạt động bên trong của ANGULAR WEB DEVELOPMENT FRAMEWORK. Sau đó, họ cho một thực tập sinh ăn không có gì ngoài espresso trong nhiều tuần cho đến khi cô có một dự án mã hóa Hello World mà họ có thể thực hiện như một tài liệu hoàn chỉnh về toàn bộ stack của mình.
Không có lỗi nào bạn gặp phải trong khi xây dựng ỨNG DỤNG WEB trên ANGULAR WEB DEVELOPMENT FRAMEWORK sẽ được liệt kê ra trong tài liệu này. Thật vậy đấy, rất ít trong số các design pattern hoặc khái niệm cốt lõi mà bạn cần được ghi lại trong đó. Nếu bạn muốn tìm hiểu cách thực sự xây dựng một công cụ với ANGULAR, bạn sẽ cần mua một khóa học trực tuyến (tôi có thể giới thiệu Hướng dẫn toàn diện của Maximillian Schwarzmueller) sẽ tiết lộ cho bạn tất cả những khoảnh khắc cạm bẫy đang chờ đợi người dùng ngây thơ khi tin rằng họ có thể đơn giản bắt đầu viết Javascript như một nhà phát triển React hoặc Vue.
Tài liệu của Angular thực tế là có nhiều công dụng hơn bạn nghĩ, mà tôi sẽ giải mã dưới đây.
Bạn có nhận thấy gì không? Đúng vậy đó: khi sửa lỗi trong ANGULAR, bạn cần loại trừ cụ thể cụm từ `angularjs` khỏi mọi tìm kiếm của mình. Bạn có thể gắn thêm 2 hoặc 7 hoặc hy vọng rằng chỉ cần `”ANGULAR”`sẽ đủ để loại trừ phiên bản đầu tiên không hợp lệ của ngăn xếp phát triển “phần mềm toàn diện” này.
Nhưng sau đó, bạn có thể đọc đủ các giải pháp Stack Overflow về vấn đề này, và nó bắt đầu cho bạn thấy rằng giữa mã bạn viết và mã chạy trong trình duyệt, không chỉ có một trình biên dịch sẽ tự tay phá vỡ tất cả CSS của bạn, mà còn có một hộp đen thực sự yêu cầu bạn định dạng ứng dụng của mình theo cách chính xác như vậy nếu không toàn bộ mọi thứ sẽ thất bại trong âm thầm hoặc tệ hơn, phát ra một thông báo lỗi không chính xác. Bạn thực sự không thể tin bất cứ điều gì từ ANGULAR bởi vì thậm chí nó còn không biết hệ thống của chính nó hoạt động như thế nào.
Toàn bộ trải nghiệm sử dụng ANGULAR là như thế này. Sau nhiều lần bạn chạy hết tốc lực tông thẳng vào một bức tường, cuối cùng bạn cũng học được cách bò xung quanh để tránh nó nhưng lại phải đi với tốc độ ốc sên, dò dẫm thảm hại cho bất kỳ chướng ngại vật tùy ý nào mà cái FRAMEWORK này có thể bày ra chỉ để cản đường bạn.
Hãy tưởng tượng một chiếc ô tô có cốp xe không bao giờ mở và bảng điều khiển của nó chỉ nói DASHBOARD trong ánh sáng chói mắt mà không thể tắt. Chiếc xe không thể được sửa chữa một khi bị hỏng; nó chỉ có thể được thay thế hoặc sửa đổi từ bên ngoài. Nó phè khí lạnh ngay cả khi bạn không bật máy. Thậm chí còn không có cả hướng dẫn sử dụng tồn tại. Nếu bạn muốn biết làm thế nào nó hoạt động thì phải đọc qua cuốn sách dài 5.280 trang. Chúc may mắn!
ANGULAR rất là chậm. Quá trình viết ứng dụng luôn mất nhiều thời gian và các chúng luôn hoạt động rất chậm chạp một khi ứng dụng của bạn trở nên phức tạp hơn mức `Hello World`. Điều này có thể được tạm chấp nhận nếu ANGULAR FRAMEWORK mang lại bất kỳ lợi ích nào cho người dùng hoặc lập trình viên, chẳng hạn như biên dịch nhanh hoặc tăng cường bảo mật ứng dụng. Nhưng ANGULAR không sở hữu bất kì điều gì trong số này. Thậm chí thực tế là nó còn sụp đổ ngay khi chỉ mới nghe nhắc đến một loại `Uncaught TypeError`.
Về cơ bản, cách duy nhất để hiểu Angular đang làm gì là đọc hàng triệu dòng mã nguồn mà các nhà phát triển vui vẻ cung cấp trên GitHub. Vì không ai thực sự làm điều đó, các nhà phát triển WEB ANGULAR thường chỉ học một hoặc hai design pattern có vẻ ổn định nhất và xây dựng toàn bộ ứng dụng từ chúng. Lựa chọn duy nhất khác của bạn là đắm mình trong sự điên rồ vô nghĩa trong khi chờ đợi các nhà phát triển cố gắng tìm hiểu cách ANGULAR hoạt động.
Mở IDE ưa thích của bạn ra đi nào các coder! Sau đó nhập License Key cho IntelliJ IDEA của bạn để bắt đầu. Sau đó vui lòng chọn Type Script “Linter” mà bạn muốn sử dụng để “Lint” Type Script Code của mình. À bạn phải sử dụng IDE tương thích với Type Script. Loại Script thỉnh thoảng sẽ được cập nhật. Điều này sẽ khiến code của bạn bị sập và mọi thứ dính dáng tới nó. Đừng quá lo lắng điều này hoàn toàn bình thường! Hãy thư giãn và bắt đầu tìm kiếm một công việc khác phù hợp hơn!
Đừng hoảng hốt nếu thư viện dependency của bạn thỉnh thoảng phát sinh các thay đổi gậy sập mọi thứ sau khi một thuộc tính trên một class bạn không bao giờ sử dụng bị sửa đổi. Song song đó, bạn chỉ có thể thêm một bước chỉnh sửa tệp thủ công cho mọi quy trình xây dựng. Hoặc bạn có thể đóng băng thư viện ở phiên bản tương thích và mất tất cả các cải tiến trong tương lai. Cảm ơn bạn đã chọn dùng Type Script và ANGULAR.
Bạn có ghét viết CSS dễ đọc? Đừng lo vì ANGULAR sẽ cung cấp tất cả các cách khó hiểu nhất có thể để chuyển đổi các quy tắc style rõ ràng sang giả HTML mà sẽ cần biên dịch lại mỗi khi bạn thay đổi một yếu tố của class. Thậm chí, bạn không cần phải học FLEXBOX, cho đến khi, người quản lý yêu cầu biết lý do tại sao bố cục của bạn không phù hợp với tiêu chuẩn THIẾT KẾ – và rồi đột nhiên, bạn nhận ra rằng mọi thứ sắp sụp đổ, nhưng lại không thể sửa chúng mà không phải tốn nhiều tuần liền.
ANGULAR làm cho tôi trở thành một lập trình viên giỏi hơn bởi vì nó dạy cách viết một ứng dụng trong hoàn cảnh cực kì khổ đau. Bất cứ điều gì tôi làm đều không phải là cách hiệu quả nhất. Bất kỳ lỗi nào ở bất cứ nơi nào trong ỨNG DỤNG ANGULAR sẽ khiến phần còn lại của nó trở nên điên loạn theo.
Nhưng tôi vẫn luôn hy vọng rằng một ngày nào đó mình được sếp cho xài framework khác như React hoặc Redux. Còn bây giờ, tôi vẫn sẽ tiếp tục chiến đấu với nó. Chiến đấu chỉ để tồn tại qua một ngày khác.
Bài viết gốc được đăng tải tại hackernoon
Trong hai bài viết gần đây tôi đấ chia sẻ những kinh nghiệm cá nhân về những điều mà lập trình viên và nhà quản lý không nên làm để tránh những căng thẳng không đáng có.
Trong bài này, tôi muốn nhấn mạnh những kết quả tích cực từ hai bài báo trước và những gì tôi đã học được từ chúng, và tôi cũng hy vọng rằng nó giúp ích được cho bạn.
Tôn trọng thời gian của nhau
Tôi nghĩ đây là bài học quý báu nhất mà tôi từng học. Tôn trọng thời gian nên được thực hiện từ cả hai phía để có một mối quan hệ tốt.
Đối với nhà quản lý, điều này có nghĩa là tránh giao các công việc mang tính thách đố đối nhằm giữ cho lập trình viên luôn bận rộn. Điều đó có nghĩa là không đặt ra các deadlines phi thực tế, không yêu cầu quá nhiều thời gian của developers trong một ngày, một tuần hay một tháng nào đó.
Đối với các developers, điều này không liên quan đến công việc chuyên môn nhưng nó vô cùng quan trọng. Bởi vì, bên cạnh công việc họ còn có cuộc sống riêng và các mối quan hệ xã hội khác, và nó thực sự cần được tôn trọng.
Cùng nhau phát triển
Theo tôi, đây cũng là một yếu tố khá quan trọng đối với cả hai!
Đối với các nhà quản lý, điều này có nghĩa là họ phải luôn hiểu rõ về yêu cầu công việc và khả năng cũng như trách nhiệm mà mỗi lập trình viên đang phụ trách. Điều đó có nghĩa là, cần có sự sắp xếp công việc một cách hợp lý đúng với những nguyện vọng và chuyên môn của họ, nhưng đồng thời cũng trao cho những lập trình viên cơ hội được thử thách bản thân ở những vị trí khác ( mà học chưa bao giờ đảm nhiệm )
Đối với lập trình viên, điều này có nghĩa là trước hết cần tuân thủ các yêu cầu công việc thể. Nó không chỉ giúp nhà quản lý hiểu được công việc của lập trình viên và nắm được những vấn đề mà các lập trình viên đang gặp phải và có những sự hỗ trợ phù hợp.
Tích cực hỗ trợ lẫn nhau
Đối với các nhà quản lý, nó có thể đơn giản là thể hiện uy tín của họ đối với một công việc, đảm bảo tiến độ, sử dụng hợp lý ngân sách. Nói một cách đơn giản là giao tiếp với developer (và điều này giúp mở rộng mối quan hệ với bất kì nhân viên nào) rằng họ đang cùng đồng hành cùng với developers. Các developers có thể cảm thấy không an toàn, ngay cả khi họ có cái tôi lớn, vì vậy vài lời khen ngợi thật lòng về những nỗ lực của họ sẽ mang lại những hiệu quả bất ngờ. Bạn đang giúp các developers cảm thấy thành công hơn và giúp họ có thêm động lực hoàn thành tốt công việc.
Đối với các developers, bạn có lẽ nên cân nhắc đến việc gửi feedback bạn đến sếp của bạn. Lần cuối bạn cảm ơn sếp vì đã giao cho bạn một công việc tuyệt vời là khi nào? Tôi có một vài mối quan hệ công việc, và hiện giờ chúng đã trở thành bạn bè, cần có rất nhiều sự trao đổi để đạt được điều đó. Tôi không mong nghe câu ” Làm tốt lắm! ” nếu tôi không nói ” Tôi thích làm việc ở đây” hoặc “Đó là một dự án thú vị! Cho tôi thêm một dự án khác nhé!”.
Góp ý dựa mang tính chất xây dựng
Chủ đề này là phần tiếp theo của chủ đề trên.
Theo ý kiến cá nhân của tôi, đó là một nghệ thuật. Về bản chất, tôi là người hướng nội và tôi thấy các bối cảnh trong đời thực rất khó giải quyết. Tôi phải chiến đấu rất nhiều để vượt qua những cảm xúc đó.
Cho dù bạn là nhà lãnh đạo hay lập trình viên, hãy thể hiện sự quan tâm lẫn nhau. Đứa con mới sinh của tôi có thể là một đề tài để chia sẽ với nhau. Ghi chép những điều bạn nói chuyện với người khác nếu bạn cảm thấy khó nhớ.
Thật khó để nhìn thấy mối quan hệ 1:1 giữa cuộc sống và công việc lập trình nhưng tôi đảm bảo bạn có ít nhất một mối quan hệ. Khi bạn cảm nhận được sự kết nối với những người bạn đang làm việc chung, sự khác biệt sẽ rất lớn.
TopDev via dev.to
Xem thêm: Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P2)
Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev
Trách nhiệm chính của một Android Developer là phát triển ứng dụng cho các thiết bị được cung cấp bởi hệ điều hành Android. Ngoài ra, một nhà phát triển Android phải đặc biệt chú ý đến khả năng tương thích của ứng dụng với nhiều phiên bản Android và loại thiết bị. Hy vọng, Mẫu bảng mô tả công việc lập trình Android này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.
Tuyển lập trình android hấp dẫn trong tháng
Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây
Quy trình phát triển phần mềm là một tập hợp các hoạt động tổ chức mà mục đích của chúng là xây dựng và phát triển phần mềm.
Có 4 thao tác là nền tảng của hầu hết các quy trình phát triển phần mềm:
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
Example:
Diagram:
Tham khảo thêm: http://istqbexamcertification.com/what-is-incremental-model-advantages-disadvantages-and-when-to-use-it/https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
Example:
Diagram:
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
Tham khảo thêm Quy trình phát triển phần mềm: http://istqbexamcertification.com/what-is-rad-model-advantages-disadvantages-and-when-to-use-it/
Tham khảo thêm Quy trình phát triển phần mềm: http://istqbexamcertification.com/what-is-rad-model-advantages-disadvantages-and-when-to-use-it/
Mô tả: Scrum là một phương pháp linh hoạt (agile), vì thế nó tuân thủ các nguyên tắc của Agile Manifesto (xem thêm Tuyên ngôn Agile). Ngoài ra Scrum hoạt động dựa trên ba giá trị cốt lõi, còn gọi là Ba chân của Scrum bao gồm Minh bạch, Thanh tra và Thích nghi.
Là một quy trình phát triển phần mềm theo mô hình linh hoạt (agile). Với nguyên tắc chủ đạo là chia nhỏ phần mềm cần sản xuất ra thành các phần nhỏ để phát triển (các phần nhỏ này phải đọc lập và Release được), lấy ý kiến khách hàng và thay đổi cho phù hợp ngay trong quá trình phát triển để đảm bảo sản phẩm release đáp ứng những gì khách hàng mong muốn. Scrum chia dự án thành các vòng lặp phát triển gọi là các sprint. Mỗi sprint thường mất 2- 4 tuần (30 ngày) để hoàn thành. Nó rất phù hợp cho những dự án có nhiều sự thay đổi và yêu cầu tốc độ cao.
Scrum khác với các mô hình Agile ở chỗ nó là mô hình hướng khách hàng (Customer oriented), vai trò của khách hàng trong việc đánh giá sản phẩm rất quan trọng. Chỉ sau mỗi sprint (2-4 tuần) khách hàng sẽ thấy được sự thay đổi của sản phẩm của mình qua đó đưa ra phản hồi sớm để định hướng -> Thích ứng nhanh với sự thay đổi yêu cầu.
Tham khảo thêm: Tuyển dụng lập trình Scrum lương cao tại Topdev.
Một cách đơn giản có 03 thành tố quan trọng cấu thành nên SCRUM: Tổ chức (Organization), Qui trình (Process), Tài liệu (Atifacts). Trong mỗi thành tố có 03 thành tố con. Như vậy, chúng ta chỉ cần hiểu và áp dụng được 9 thành tố này là có thể áp dụng SCRUM.
Product Owner là người sở hữu sản phẩm, người quyết định sản phẩm có những chức năng nào và là người quyết định Product Backlog, họ sẽ tham gia 1 phần vào quy trình phát triển phần mềm. Thông thường Role này được khách hàng hoặc người đại diện cho khách hàng đảm nhận.
Scrum Master là người đảm bảo các qui trình của Scrum được thực hiện đúng và thuận lợi, giúp đỡ cho Team thực hiện công việc phát triển sản phẩm một cách tốt nhất.
Một nhóm từ 4-7 kỹ sư phần mềm chịu trách nhiệm phát triển sản phẩm. Nhóm dự án phải làm việc với Product Owner để quyết định những gì sẽ làm trong Sprint (giai đoạn )này và kết quả sẽ ra sao. Đồng thời nhóm cũng thảo luận để đưa ra các giải pháp, ước lượng thời gian thực hiện công việc, họp đánh giá kết quả công việc. Nếu dự án lớn chúng ta cần chia ra thành các dự án nhỏ.
Product Backlog là danh sách các chức năng cần được phát triển của sản phẩm trong quy trình phát triển phần mềm. Danh sách này do Product Owner quyết định. Nó thường xuyên được cập nhật để đáp ứng được nhu cầu thay đổi của khách hàng cũng như các điều kiện của dự án.
Sprint là một giai đoạn phát triển trong quá trình phát triển sản phẩm, nó được khuyến khích có chiều dài từ 2 – 4 tuần. Mỗi Sprint được xác định bằng thời gian phát triển, danh sách các chức năng phát triển (Sprint Backlog).
Mỗi sprint phải Release được sản phẩm để đảm bảo lấy được ý kiến khách hàng, qua được các qui trình phát triển của sản phẩm nhằm rút kinh nghiệm và tránh sự cố sau này.
Sprint Backlog là danh sách chức năng phát triển trong Sprint, nó được quyết định bởi cuộc họp Sprint Planning. Sprint Backlog là các chức năng được chọn từ Product Backlog dựa trên mức độ ưu tiên và khả năng của team phát triển.
Trong SCRUM thì các thành viên của Team sẽ tự lựa chọn Task cho mình và ước lượng thời gian phát triển dự kiến và chịu trách nhiệm với ước lượng này. Sau khi hoàn thành sẽ cập nhật vào bảng Sprint Backlog.
Như chúng ta đã biết ở trên Sprint là một giai đoạn phát triển có thời gian từ 2-4 tuần. Để chuẩn bị cho mỗi Sprint team cần phải họp để xác định những chức năng nào (story) sẽ phát triển trong giai đoạn này (sprint backlog), kết quả đầu ra dự kiến (Goal, kết quả Release), Estimate (ước lượng ai làm việc gì) và thảo luận các giải pháp. Tất cả được ghi thành biên bản để có cơ sở thực hiện và Review sau này.
Là cuộc họp để đánh giá lại kết quả thực hiện của Sprint vừa qua, xác định những chức năng được Release, những chức năng tiếp tục sửa hoặc phát triển thêm, xác định những vấn đề phát sinh và bàn phương án giải quyết, bổ sung Product Backlog v….
Đặc điểm | Waterfall | Spiral | Scrum |
Xác định các giai đoạn phát triển | Bắt buộc | Bắt buộc | Chỉ có giai đoạn lập kế hoạch và kết thúc |
Sản phẩm cuối cùng | Được xác định trong quá trình lập kế hoạch | Được xác định trong quá trình lập kế hoạch | Xác định trong suốt quá trình dự án |
Chi phí sản xuất | Được xác định trong quá trình lập kế hoạch | Thay đổi cục bộ | Xác định trong quá trình xây dựng dự án |
Ngày hoàn thành sản phẫm | Được xác định trong quá trình lập kế hoạch | Thay đổi cục bộ | Xác định trong quá trình xây dựng dự án |
Via Techtalk
Có thể bạn muốn xem thêm:
Xem thêm tin tuyển dụng Developer tại TopDev!
z-index
trong css có cách thức hoạt động là mỗi element trên trang web được hiển thị ngang và dọc theo 2 trục x và y, hiển thị thứ tự chồng lấn theo trục z. Nói đơn giản hơn thì z-index càng cao thì element đó đứng trước và hiện lên trên.
Chúng ta có 3 khối grey
, blue
, gold
đều trực thuộc trực tiếp một div có class topdev-demo
. Điều này giúp cho 3 khối thuộc cùng một stacking context. Như vậy trong cùng một stacking context thì thứ tự trên dưới sẽ tuân theo quy tắc: element nào có z-index
cao hơn sẽ hiện lên trên. Nếu chưa có một element nào được set z-index
thì thứ tự sẽ phụ thuộc vào thứ tự xuất hiện từ trước ra sau của DOM tree.
<div class="topdev-demo"> <div class="grey"> <span>Grey</span> </div> <div class="blue"> <span>Blue</span> </div> <div class="gold"> <span>Gold</span> </div> </div>
.topdev-demo { margin-left: 40px; margin-top: 40px; } .grey, .blue, .gold { width: 100px; height: 100px; color: black; } .grey { background: grey; } .blue { margin-top: -40px; margin-left: 60px; background: blue; } .gold { margin-top: -40px; margin-left: 120px; background: gold; }
Kết quả:
Thử thêm z-index
vào 3 khối để cho khối grey hiện lên phía trước, khối blue đứng giữa và khối gold đứng sau 2 khôi kia. Tuy nhiên bạn lưu ý là z-index chỉ có tác dụng với các element khi bạn chỉ định thêm 3 giá trị absolute
, fixed
hay relative
.
.grey { z-index: 3; position: relative; } .blue { z-index: 2; position: relative; } .gold { z-index: 1; position: relative; }
Kết quả:
Nói tới đây là quá đủ để bạn hiểu về z-index trong css các thuộc tính đi kèm để code. Còn muốn hiểu sâu hơn, mời bạn đi tiếp xuống phần dưới đây.
Tham khảo việc làm cho lập trình CSS lương cao tại Topdev.
Đây là một trong những vấn đề với z-index: Nó quá đơn giản, thế nên hầu hết các developer sẽ không bỏ thời gian để đọc các rule của nó.
Mọi element trong một trong HTML có thể ở phía trước hay phía sau các element khác trong document. Đây được gọi là thứ tự xếp lớp (stacking order).
Thứ nhất, khi chưa tính đến 2 thuộc tính z-index
và position
, chỉ có một quy luật khá đơn giản: thứ tự xếp lớp chính là thứ tự xuất hiện trong HTML
Thứ hai, khi tính tới thuộc tính position
, thì khi đó mọi element được gán position (và cả các element con của nó) đều xuất hiện phía trước bất kì một element không gán position (Ví dụ như các thuộc tính sau để z-index có tác dụng: absolute
, fixed
hay relative
)
Thứ ba, ta có thể coi như element nào có giá trị z-index cao hơn thì sẽ đứng trước element có giá trị z-index thấp hơn. Nghe đơn giản nhưng thực ra có nhiều quy tắc hơn thế:
stacking context
.Một nhóm các element có chung một element cha sẽ cùng di chuyển chung với nhau trong stacking order
, tạo nên khái niệm gọi là stacking context
. Việc hiểu biết về stacking context chính là chìa khóa để hiểu hoàn toàn về cách z-index và stacking order hoạt động.
Mỗi một stacking context sẽ có 1 HTML element là element gốc (root element). Khi một stacking context gắn với một element, nó sẽ liên kết tất cả các element con vào 1 vị trí cố định trong stacking order. Điều đó có nghĩa là nếu 1 element nằm trong 1 stacking context nằm ở dưới cùng của stacking order, sẽ không có cách nào làm cho nó xuất hiện phía trước một element nằm trong 1 stacking context có vị trí cao hơn trong stacking order, ngay cả nếu set z-index của nó tới 9999 !
Một stacking context có thể được gắn với 1 element bằng 1 trong 3 cách:
<html>
)position
được set khác với static
và z-index
khác auto
opacity
nhỏ hơn 1
Cập nhật: Bên cạnh opacity, một số property CSS mới bây giờ cũng có thể tạo stacking context. Chúng bao gồm transforms
, filters
, css-regions
, paged media
… Như một luật chung, đó là nếu như 1 property CSS yêu cầu render trong một offscreen context
, nó sẽ tạo ra một stacking context mới.
z-index
là một tính chất hay gây nhức đầu đối với developer mới làm quen CSS. Tuy nhiên nếu nắm bắt tốt về stacking order
, stacking context
, position và những thuộc tính có thể khiến stacking context “mở nhánh” như opacity
, thì sẽ phần nào sẽ tiện code nhanh hơn trong tương lai. Mà tốt nhất là vừa đọc vừa thực hành mới nhớ, chứ đọc không sẽ bị loạn não.
Có thể bạn muốn xem thêm:
Xem thêm việc làm lập trình CSS hấp dẫn lương cao tại TopDev!
Tác giả: Trần Văn Tú
Gitignore là gì? Đã là Dev thì chúng ta đều biết đến Git để quản lý source code. Và sẽ vài lần Khi làm việc trong 1 team, bạn có bao giờ gặp tình trạng pull request của các member cứ conflict lên xuống vì mấy file biên dịch hay log chưa… Và thế là Gitignore đã ra đời để giải quyết vấn đề đó.
Gitignore là file có tên là .gitignore do Git quy định. Nhiệm vụ của nó là liệt kê những file mà mình không mong muốn cho vào git hoặc hiểu nôm na là Git sẽ bỏ qua những file đó đi. Gitignore hiện nay rất quan trọng trong team work, các bạn nên áp dụng ngay vào quy trình làm việc của team.
Có thể hiểu đơn giản là git sẽ bỏ qua file hoặc một tập các file trong project của chúng ta khi commit và push lên repository. Ví dụ:
Git quản lý các file mà chúng ta muốn “ignore” bằng file .gitignore
được đặt ở trong thư mục root project.
Khi add 1 file mới vào git, git sẽ kiểm tra danh sách những file sẽ bỏ qua trong file .gitignore và không add chúng vào git. Đó mới chỉ là điều kiện cần, điều kiện đủ là files không có trong git cache nữa thì git nó mới bỏ qua, chứ files mà nằm trong git cache thì .gitignore sẽ vô tác dụng.
Hầu hết các IDE đều hỗ trợ, nếu chưa có bạn có thể cài đặt thêm plugin hay config ở đâu đó. Mình có thể chọn loại dự án mình đang làm và nó sẽ sinh tự động file .gitignore tương ứng.
Hoặc đơn giản bạn vào gitignore.io sau đó chọn loại project mình đang làm.
Sau đó nó sẽ tạo ra 1 file .gitignore ngon lành cho bạn. Ví dụ như 1 project Node.js nó sẽ kiểu như thế này:
### Node template # Logs logs *.log npm-debug.log* # Runtime data pids *.pid *.seed # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # node-waf configuration .lock-wscript # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules jspm_packages # Optional npm cache directory .npm # Optional REPL history .node_repl_history
File .gitignore sẽ ảnh hưởng đến các file và thư mục anh em với nó hoặc là con cháu, chắt của nó. Thường thì project chỉ cần 1 file .gitignore ở ngoài cùng là đủ nhưng nếu project quá lớn ta có thể tách file .gitignore vào từng folder nhỏ để dễ quản lý.
Bất cứ project nào cũng nên dùng nó, bạn nên tạo ngay file .gitignore trong thư mục gốc ngay khi khởi tạo project của bạn và liệt kê luôn những file mà bạn muốn git bỏ qua. Tại sao phải liệt kê trước làm gì thế? Đọc phần dưới sẽ rõ ?
Giả dụ thế này! Bạn vừa join vào project và thấy project liên tục bị conflict vì mấy file rác. Nhưng may quá bạn đọc được bài viết này và bạn rất thông minh nên đã tạo luôn file .gitignore cho project và thêm luôn file rác đó vào .gitignore rồi bạn xóa file rác đi và commit lên.
Rồi sao! 1 ông khác lại pull code mới về lại tạo ra file rác đó và nó vẫn dính vào git bình thường. Đờ heo? “Em cho nó vào .gitignore rồi cơ mà?.
Vì sao à? Vì file đó đã được thằng git cache thu nạp thành của nó rồi nên thằng git nó vẫn có quyền quản lý file đó. Vậy cách giải quyết đơn giản nó phải giải thoát file đó ra khỏi git cache là xong, bằng 1 dòng lệnh:
git rm -r --cached /path/to/file_or_folder
Từ bây giờ file đó không còn là của git cache nữa nên nó không thuộc quyền quản lý của git nữa và bây giờ .gitignore mới có tác dụng. Theo lý thuyết là vậy nhưng nếu bạn cần reset lại hết project để .gitignore hoạt động đúng thì mình thường xóa bỏ hết file của git cache luôn?
git rm -r --cached .
Sau đó mình sẽ add tất cả các file lại vào project như lúc mới tạo project.
git add
Và bây giờ bạn lại commit và push như bình thường.
Bài viết gốc được đăng tải tại Blogk
Có thể bạn quan tâm:
Xem thêm các tuyển dụng ngành it hấp dẫn tại TopDev
SQL đã quá quen thuộc trong việc quản lý và thao tác cơ sở dữ liệu. Trong SQL, có nhiều công cụ mạnh mẽ để giúp quản lý dữ liệu hiệu quả, và một trong số đó là trigger. Trigger là một khái niệm quan trọng trong SQL, cho phép bạn tự động hóa các quy trình và kiểm soát chặt chẽ hơn các thay đổi xảy ra trong cơ sở dữ liệu của mình. Cùng làm rõ trigger SQL là gì và cú pháp sử dụng Trigger trong SQL.
Trigger là một đoạn mã SQL được thiết lập để tự động chạy khi một sự kiện cụ thể xảy ra trong một bảng hoặc view trong cơ sở dữ liệu. Sự kiện này có thể là một hành động như INSERT
, UPDATE
, hoặc DELETE
. Khi hành động đó xảy ra, trigger sẽ tự động được kích hoạt để thực hiện một chuỗi các hành động đã được định sẵn.
Trigger là một loại stored procedure đặc biệt (không có tham số) được thực thi (execute) một cách tự động khi có một sự kiện thay đổi dữ liệu (data modification). Trigger được lưu trữ và quản lý trong Server DB, được dùng trong trường hợp ta muốn kiểm tra các ràng buộc toàn vẹn trong DB.
Mỗi table thường sẽ có 3 thao tác làm thay đổi dữ liệu đó là: UPDATE
, INSERT
, DELETE
. Và đôi khi mỗi hành động như vậy ta sẽ có những ràng buộc trên bảng để giúp bảo toàn dữ liệu, lúc này sử dụng trigger là một giải pháp tốt.
Ví dụ bạn thiết kế cho bảng product và category, trong đó product sẽ có một column tên là total_product dùng để lưu trữ tổng số sản phẩm của category đó. Khi thêm một product thì ta phải tăng column đó lên một đơn vị. Khi update phải kiểm tra có thay đổi category không để tăng hoặc giảm cho hợp lý, khi delete thì bớt đi một. Việc này hoàn toàn có thể code bằng các ngôn ngữ đang sử dụng SQL Server, tuy nhiên bạn có thể sử dụng trigger để giúp hệ thống dữ liệu hoạt động tốt hơn.
INSERT
, UPDATE
, DELETE
), giúp tự động hóa các quy trình mà không cần can thiệp thủ công. Điều này giúp giảm thiểu lỗi do con người gây ra và đảm bảo tính nhất quán trong các thao tác.Để tạo một Trigger, bạn sử dụng câu lệnh CREATE TRIGGER
:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN ... END;
Trong đó:
CREATE TRIGGER
. Quy tắc đặt tên nên tuân theo nguyên tắc: [trigger time]_[table name]_[trigger event]
, ví dụ before_employees_update
.BEFORE
hoặc AFTER
. Cần phải chỉ định thời gian kích hoạc khi bạn xác định được tiến trình kích hoạt của nó. Sử dụng từ khóa BEFORE
nếu bạn muốn xử lý hành động trước khi thực hiện thay đổi trên bản và AFTER
nếu bạn cần phải xử lý hành động sau khi thay đổi được thực hiện xong.INSERT
, UPDATE
, DELETE
.ON
để xác định.BEGIN
và END
.Trigger có thể được phân loại dựa trên thời điểm và sự kiện kích hoạt:
BEFORE INSERT
sẽ chạy trước khi một dòng mới được chèn vào bảng.AFTER DELETE
sẽ chạy sau khi một dòng đã bị xóa khỏi bảng.Ví dụ:
Cung cấp Cơ sở dữ liệu Báo cáo Học sinh, trong đó đánh giá điểm của học sinh được ghi lại. Trong lược đồ như vậy, hãy tạo một Trigger để tính tổng số và trung bình của các bảng đã chỉ định được tự động chèn bất cứ khi nào một bản ghi được chèn.
Ở đây, vì trigger sẽ gọi trước khi bản ghi được chèn, nên có thể sử dụng thẻ BEFORE
.
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| tid | int(4) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | YES | | NULL | |
| subj1 | int(2) | YES | | NULL | |
| subj2 | int(2) | YES | | NULL | |
| subj3 | int(2) | YES | | NULL | |
| total | int(3) | YES | | NULL | |
| per | int(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
Câu lệnh trigger SQL tới sự cố.
create trigger stud_marks
before INSERT
on
Student
for each row
set Student.total = Student.subj1 + Student.subj2 + Student.subj3, Student.per = Student.total * 60 / 100;
Câu lệnh SQL trên sẽ tạo một trigger trong cơ sở dữ liệu sinh viên, trong đó bất cứ khi nào điểm môn học được nhập, trước khi chèn dữ liệu này vào cơ sở dữ liệu, trigger sẽ tính toán hai giá trị đó và chèn các giá trị đã nhập.
insert into Student values(0, "ABCDE", 20, 20, 20, 0, 0);
Query OK, 1 row affected (0.09 sec)
select * from Student;
+-----+-------+-------+-------+-------+-------+------+
| tid | name | subj1 | subj2 | subj3 | total | per |
+-----+-------+-------+-------+-------+-------+------+
| 100 | ABCDE | 20 | 20 | 20 | 60 | 36 |
+-----+-------+-------+-------+-------+-------+------+
Bằng cách này, trigger có thể được tạo và thực thi trong cơ sở dữ liệu.
Trigger trong SQL là một công cụ mạnh mẽ giúp bạn kiểm soát chặt chẽ hơn các hoạt động trong cơ sở dữ liệu, tự động hóa các tác vụ, và đảm bảo tính toàn vẹn của dữ liệu. Tuy nhiên, để sử dụng trigger hiệu quả, bạn cần hiểu rõ về cấu trúc và cách hoạt động của chúng, cũng như cân nhắc về ưu nhược điểm, hi vọng bài viết trên của TopDev đã giúp bạn hiểu rõ hơn về Trigger SQL.
Tìm việc làm SQL lương cao hấp dẫn cho bạn tại Topdev
Tài liệu tham khảo: https://www.geeksforgeeks.org/sql-trigger-student-database/
Ngày nay, ReactJS đã trở nên rất phổ biến bởi những tính năng linh hoạt và đơn giản với hơn 1,300 developer và hơn 94,000 trang web đang sử dụng ReactJS. Nhiều người ám chỉ rằng ReactJS sẽ là tương lai của việc phát triển web.
ReactJS là một thư viện JavaScript mã nguồn mở được thiết kế bởi Facebook để tạo ra những ứng dụng web hấp dẫn, nhanh và hiệu quả với mã hóa tối thiểu. Mục đích cốt lõi của ReactJS không chỉ khiến cho trang web phải thật mượt mà còn phải nhanh, khả năng mở rộng cao và đơn giản.
Sức mạnh của nó xuất phát từ việc tập trung vào các thành phần riêng lẻ. Chính vì vậy, thay vì làm việc trên toàn bộ ứng dụng web, ReactJS cho phép một developer có thể phá vỡ giao diện người dùng phức tạp thành các thành phần đơn giản hơn.
Trong lĩnh vực phát triển công nghệ, các chủ doanh nghiệp và developer luôn tìm kiếm những phương pháp tốt nhất để giúp doanh nghiệp của họ có những lợi thế cạnh tranh tốt hơn. Và một trong những công nghệ tốt nhất có thể giúp những doanh nghiệp vượt mặt đối thủ trong việc tạo ra những ứng dụng web chính là ReactJS.
Lập trình ReactJS cho phép các doanh nghiệp tạo ra những ứng dụng web với UI tốt hơn để nâng cao trải nghiệm người dùng. Đây cũng chính là công nghệ mà các doanh nghiệp cần để có được lượng tương tác của người dùng, tỉ lệ click cũng như chuyển đổi cao hơn. Hơn thế, các doanh nghiệp sử dụng ReactJS được đảm bảo có giao diện tốt hơn so với những doanh nghiệp sử dụng các framework khác bởi ReactJS giúp ngăn chặn việc cập nhật của DOM giúp ứng dụng nhanh hơn và truyền tải tốt hơn UX.
Facebook và toàn bộ đội phát triển ReactJS vẫn luôn cố gắng chứng tỏ trong việc cam kết nâng cao tính hiệu quả của ReactJS. Đây là vấn đề tiên quyết để vượt qua sự phát triển nhanh chóng của các framework khác như Vue.js. Một số cập nhật của React được mong đợi trong tương lai có thể kể đến như:
Trên đây chính là những kiến thức cơ bản nhất về ReactJS, nếu như bạn đã có một base khá ổn về ReactJS, vậy bạn có bao giờ nghĩ rằng mình sẽ thay đổi và tối ưu tốc độ của nó cũng như lấn sân sang React Native để trở thành một React Developer???
Có thể bạn muốn xem thêm:
Xem thêm việc làm IT hấp dẫn, lương cao tại TopDev!
Với Thách thức tuyển dụng Phần 1, TopDev đã đề cập về thương hiệu tuyển dụng cũng như vấn đề liên quan tới đặc điểm ứng viên. Tại Phần 2 này, TopDev sẽ giúp bạn có cái nhìn sâu hơn về những khó khăn liên quan đến chính bản thân nhà tuyển dụng và các yếu tố liên quan như công nghệ, hệ thống hỗ trợ…
Cũng như Phần 1, TopDev sẽ không dừng ở việc đưa ra vấn đề mà còn cung cấp cho bạn các giải pháp tối ưu nhất! Nào hãy cùng TopDev tìm hiểu nhé
Thiên vị là điều khó tránh khỏi trong tuyển dụng. Dù bạn cho rằng mình công tâm nhất, vẫn có những thiên vị hiện diện vô thức ảnh hưởng xấu đến quá trình tuyển dụng đấy. Một số kiểu thiên vị thường gặp như: giới tính, quê quán, tôn giáo,…
Cần làm gì? | Làm cách nào? |
Triển khai các chiến lược đa dạng để loại bỏ thiên vị trong quá trình tuyển dụng.
=> Hướng dẫn nhà tuyển dụng cách tránh khỏi sự thiên vị trong từng bước của quá trình tuyển dụng. |
-Tiêu chuẩn hóa quá trình tuyển dụng. Đảm bảo phỏng vấn các ứng viên với cùng loạt câu hỏi.
=>So sánh ứng viên dựa trên các tiêu chí định sẵn. TopDev tin rằng bạn sẽ chọn được ứng viên tốt nhất thay vì “thích” nhất. -Cung cấp khóa đào tạo đa dạng giúp những người có liên quan học cách tránh thiên vị trong tuyển dụng. -Thiết lập bảng phỏng vấn đa dạng. =>Việc gồm nhiều người trong quá trình tuyển dụng giúp bạn nhận ra những thành kiến vô thức, cải thiện sự công bằng, bình đẳng. |
Không ngạc nhiên khi có lượng lớn công ty cho rằng việc tuyển dụng của họ không hiệu quả. Theo một báo cáo của Micheals, chỉ có 19% công ty thu hút được ứng viên tài năng.
Trong 1 doanh nghiệp ít hơn 50 người, chi tiêu cho lao động cho 1 nhân viên trung bình là hơn 900 triệu đồng, theo Baron & Kreps. Một quyết định tuyển dụng sai lầm có thể khiến công ty tốn lên đến 150%-250% mức lương trung bình hằng năm của 1 nhân viên! Quả là một con số kinh khủng. Không chỉ thế mà doanh thu, năng suất, đạo đức nhân viên, quan hệ khách hàng cũng bị ảnh hưởng xấu.
Cần làm gì? | Làm cách nào? | TopDev có thể giúp bạn thế nào? |
Triển khai các phương pháp tuyển chọn ứng viên hiệu quả nhất.
=>Đảm bảo chọn đúng người cho đúng vị trí và phù hợp với văn hóa công ty. |
-Triển khai các bài đánh giá kĩ năng, các buổi phỏng vấn và kế hoạch đánh giá đa dạng.
=>Đánh giá ứng viên hiệu quả hơn. Từ đó chọn được người phù hợp nhất với vị trí và văn hóa công ty. |
Với Job Posting, TopDev cam kết tất cả CV đều được sàng lọc trước khi gửi nhà tuyển dụng. Giúp bạn đến gần hơn bao giờ hết việc chọn được nhân tài tương lai! |
Gần đây, lĩnh vực thu hút nhân tài đã chuyển mình từ mô hình tuyển dụng truyền thống sang các phương pháp tuyển dụng mang tính cộng tác hơn. Quá trình tuyển dụng hiện đại dựa trên sự hợp tác hài hòa giữa ban quản trị, nhà tuyển dụng, chuyên gia IT,…
Tuy nhiên, ngày càng nhiều người làm việc ở các khu vực khác nhau, việc đảm bảo sự hợp tác trơn tru không hề dễ dàng!
Cần làm gì? | Làm cách nào? |
Triển khai mô hình tuyển dụng hợp tác hiệu quả. | Sau khi đã áp dụng thành công mô hình trên, TopDev có vài lời khuyên cho bạn như sau:
-Tập hợp các ban lại, thiết lập tiêu chí tuyển dụng rõ ràng, xác định must-haves và nice-to-haves. -Khuyến khích mọi thành viên đưa ý kiến, nhận xét với từng ứng viên. -Đảm bảo mọi người đều có công cụ cần thiết cho phép họ giao tiếp kịp thời và hiệu quả. TopDev tin rằng khi 3 bước trên được thực hiện nghiêm túc, việc tuyển dụng của bạn sẽ khả quan hơn nhiều đấy ! |
Theo Báo cáo về thị trường IT Việt Nam 2022 của TopDev, có 18,6% ứng viên không thích quy trình tuyển dụng có quá nhiều vòng phỏng vấn. Do đó, việc sắp xếp, đơn giản hóa và tự động hóa quá trình tuyển dụng là điều cần thiết trong lúc này.
Cần làm gì? | Làm cách nào? |
Tinh giản quá trình chọn lọc và tuyển dụng để tiết kiệm thời gian và chi phí. | TopDev sẽ gợi ý cho bạn 3 bước cực kì hiệu quả để tinh gọn quá trình tuyển dụng:
B1: Xác định vấn đề còn tồn tại và cải thiện chúng. B2: Cắt gọn quy trình tuyển dụng và đơn giản hóa hệ thống theo dõi ứng viên. B3: Kết hợp việc tự động hóa càng nhiều càng tốt. => Một quá trình tuyển dụng nhất quán và tinh gọn sẽ không còn ngoài tầm với nữa! |
Thách thức tuyển dụng IT 15: Đẩy nhanh quá trình tuyển dụng
Nếu bạn muốn giật lấy ứng viên top đầu, bạn cần phải tuyển dụng thật nhanh chóng. Thế thì nhanh đến mức nào? Theo ERE Medis’s Research, ứng viên hàng đầu chỉ có mặt trên thị trường việc làm trong 10 ngày mà thôi. Hơn nữa, 57% ứng viên sẽ mất hứng nếu quá trình tuyển dụng lôi thôi dài dòng.
Tuy nhiên đáng buồn là có 70% doanh nghiệp mất đến 1-4 tháng để tuyển thêm một người mới, theo LinkedIn.
Cần làm gì? | Làm cách nào? | TopDev có thể giúp bạn thế nào? |
Rút ngắn quá trình tuyển dụng. Nếu không, bạn phải chịu thêm chi phí vì một quá trình tuyển dụng trễ nải đấy. | Ngưng phí thời gian vào các thao tác hành chính thủ công không cần thiết và kém hiệu quả.
=> Các công việc như tìm nguồn ứng viên, xem xét và phân tích CV, lên lịch phỏng vấn,… cần tự động hóa. |
Sở hữu hơn 300,000 dữ liệu IT và cộng đồng Developer lớn nhất Việt Nam, TopDev sẽ giúp bạn tiếp cận nhiều ứng viên hơn bao giờ hết, cũng như xem xét và lọc CV, việc bạn cần làm chỉ là lên lịch phỏng vấn mà thôi! Tìm hiểu thêm về tại đây! |
Số liệu tuyển dụng là nền tảng cũng như động lực thúc đẩy doanh nghiệp đạt được mục tiêu kết quả kinh doanh. Theo Global Human Capital Trends, 71% doanh nghiệp cho rằng phân tích dữ liệu là ưu tiên hàng đầu của họ. Ngược lại, các doanh nghiệp không xem trọng vấn đề này thường sẽ mất đi lợi thế cạnh tranh với đối thủ khác.
Cần làm gì? | Làm cách nào? |
Phát triển tư duy thống kê cho đội ngũ tuyển dụng của bạn.
Nếu bạn muốn có cái nhìn tổng thể về quá trình tuyển dụng, bạn cần theo dõi và đo lường các số liệu quan trọng. Điều này cũng được TopDev vận dụng và khá hiệu quả đấy. =>Giúp bạn ra quyết định tốt hơn cũng như cải thiện năng suất làm việc. |
-Xác định số liệu tuyển dụng mục tiêu và theo dõi chúng thường xuyên.
-Đo lường từng bước trong quá trình tuyển dụng TopDev mong rằng sau khi thực hiện 2 phương án trên, bạn sẽ có cái nhìn sâu sắc và đưa ra quyết định mang tính chiến lược hơn. => Giúp bạn bớt lãng phí nguồn lực |
Với sự bùng nổ của các lĩnh vực đầu tư cá nhân như tiền ảo, NFT và chứng khoán, một số cá nhân có hiểu biết và thích nghi nhanh với xu hướng đã nhanh chóng tạo lập được cơ sở tài chính cá nhân vững chắc. Viễn cảnh tốt đẹp được miêu tả như một cứu cánh khi thị trường lao động gặp nhiều khó khăn, khiến nhiều người ưa chuộng và bắt đầu theo đuổi.
Điều này trực tiếp gây ảnh hưởng đến thị trường lao động khi một thành phần lao động tách ra khỏi thị trường và theo đuổi những lĩnh vực này. Bên cạn đó, x hướng này còn khiến cho sự cạnh tranh giữa các doanh nghiệp để thu hút nhân tài ngành IT trở nên gay gắt hơn.
Cần làm gì? | Làm cách nào? |
|
|
Năm 2020, việc tuyển dụng bằng bảng tính Excel và email có vẻ không còn là sự lựa chọn phù hợp. Dù bạn có là một chuyên gia sử dụng các công nghệ chuyên môn như Applicant Tracking System (ATS), khả năng rất cao những phần mềm này trở nên lạc hậu. Các hệ thống theo dõi ứng viên thường quá tải khi đối mặt với nhu cầu ngày càng cao của quá trình tuyển dụng.
Cần làm gì? | Làm cách nào? |
Tận dụng tất cả tiện ích mà công nghệ cung cấp. | Đầu tư vào một phần mềm tuyển dụng hiện đại, đơn giản, thân thiện với người dùng. |
Nhà tuyển dụng của Base Enterprise cho biết năng suất của cô tăng ít nhất 200% so với công ty không có hệ thống hỗ trợ nào ngoài Excel cô làm trước đó. Nhờ vậy, cô không cần làm giấy tờ hành chính mà chỉ tập trung vào tương tác và nghĩ cách tối hưu hóa quá trình tuyển dụng của mình.
Công nghệ đang dần thay đổi thế giới, và thay đổi cả cách chúng ta tuyển dụng. Công nghệ tuyển dụng hiện đại hứa hẹn việc chiêu mộ nhân tài sẽ dễ dàng và hiệu quả hơn. Mặc dù nghe có vẻ thú vị, TopDev tin rằng việc áp dụng công nghệ mới có thể trở nên quá sức và đáng sợ!
Cần làm gì? | Làm cách nào? |
Nếu bạn muốn việc chiêu mộ nhân sự thành công trong năm 2024, bạn phải áp dụng giải pháp tuyển dụng mới nhất. | Đầu tư vào một phần mềm tuyển dụng hiện đại và thân thiện với người dùng. |
Thách thức tuyển dụng IT 20: Kết hợp đa dạng các giải pháp tuyển dụng
Với sự phổ biến của hàng loạt giải pháp tuyển dụng thì việc kết hợp chúng vào một hệ thống chiêu mộ nhân tài là vô cùng cần thiết. Vậy thì làm sao để sự tích hợp này được trơn tru liền mạch?
Cần làm gì? | Làm cách nào | TopDev có thể giúp bạn thế nào? |
Tích hợp các giải pháp tuyển dụng vào 1 nền tảng duy nhất. | Đầu tư vào một phần mềm hiện đại, dễ sử dụng với các tính năng tiện ích. | TopDev tin rằng Job Posting sẽ giúp bạn giải quyết tối ưu những vấn đề tuyển dụng bạn đang gặp phải, bởi:
Đây là sự kết hợp của: tiếp cận ứng viên tiềm năng, đăng tin job, quảng bá job cũng như sàng lọc CV trước khi gửi nhà tuyển dụng! =>Cực kì tiện lợi và tiết kiệm thời gian, chi phí. |
Việc xây dựng quan hệ tích cực giữa nhà tuyển dụng và ứng viên đóng vai trò cực kì quan trọng quyết định sự hiệu quả của tiến trình chiêu mộ nhân tài. Để làm được điều đó thì việc nhà tuyển dụng kết hợp nhuần nhuyễn các công cụ khác nhau để thu hút, lôi kéo ứng viên ngày càng là một bài toán nan giải. Với kinh nghiệm và chuyên môn trong ngành, TopDev tự tin là giải pháp thiết thực nhất giúp khắc phục những khuyết điểm trong khâu chiêu mộ của bạn cũng như giúp bạn tối ưu hóa thời gian, chi phí để nhận được kết quả tốt nhất!
Nếu còn gì chưa rõ, ấn vào đây và đội ngũ TopDev sẽ giúp bạn giải đáp mọi thắc mắc !
Đừng bỏ lỡ những bài viết hấp dẫn về:
TopDev via TalentLyft
Bài viết được sự cho phép của tác giả Hữu Khuyên
Hôm nay mình xin chia sẻ cách xây dựng một bộ source SASS tối ưu thời gian đồng thời giúp cho mình “Best Practices” hơn.
Cùng bắt đầu nào!
Đây là một dạng cấu trúc folder SASS của mình trong mỗi dự án. Bạn cũng có thể tham khảo:
sass/ | |– abstracts/ | |– _variables.scss // Variables | |– _functions.scss // Functions | |– _mixins.scss // Mixins | |– base/ | |– _animation.scss // Animation | |– _global.scss // Global define | |– _fonts.scss // Fonts define | |– _reset.scss // Reset/normalize | |– _utilities.scss // utilities | |– components/ | |– _buttons.scss // Buttons | |– _tabs.scss // Tabs | |– _slider.scss // Slider | |– layout/ | |– _navigation.scss // Navigation | |– _grid.scss // Grid system | |– _header.scss // Header | |– _footer.scss // Footer | |– _sidebar.scss // Sidebar | |– _forms.scss // Forms | |– pages/ | |– _home.scss // Home specific styles | |– _about.scss // About specific styles | |– _contact.scss // Contact specific styles | `– main.scss // Main SASS file
variables
, functions
, mixins
.node_modules
) bao gồm tất cả những phần code mở rộng của bên thứ 3 của thư viện như, jQuery
, Bootstrap
…main.scss
dùng import các file khác để tạo ra file css chung cho cả website.@import 'abstracts/variables'; @import 'abstracts/functions'; @import 'abstracts/mixins'; // Import library from node_modules @import 'node_modules/jquery'; @import 'node_modules/bootstrap'; @import 'base/reset'; @import 'base/fonts'; @import 'base/animation'; @import 'base/global'; @import 'layout/grid'; @import 'layout/header'; @import 'layout/footer'; @import 'layout/navigation'; @import 'layout/sidebar'; @import 'layout/forms'; @import 'components/buttons'; @import 'components/tabs'; @import 'components/slider'; @import 'pages/home'; @import 'pages/about'; @import 'pages/contact'; @import 'base/utilities';
Thông thường khi làm việc với SASS, bạn sẽ include
, extend
… Vậy sắp xếp thế nào cho đúng:
extend
luôn đặt trên cùng > sau đó đếninclude
> properties ở những line tiếp theo sẽ override phần ở trên.
.section-header { @extend .other-component; @include middle-flex(); margin: 10px; padding: 10px; }
Thông thường, chúng ta viết các thuộc tính CSS một cách tự do, việc này cũng không có vấn đề gì. Tuy nhiên, để giúp code sạch đẹp, ngăn nắp hơn thì việc sắp xếp các thuộc tính theo 1 quy tắc nhất định sẽ giúp bản thân và người người khác maintain đỡ vất vả. Khi đó code của bạn cũng được đánh giá cao.
Có người sẽ sắp xếp theo thứ tự abc… theo mình cách dễ nhìn nhất là sắp xếp theo nhóm các thuộc tính liên quan.
.component { // Layout properties position: relative; display: flex; justify-content: center; align-items: center; // Position properties top: 0; left: 0; right: 0; bottom: 0; // Box model properties width: 100px; height: 200px; padding: 10px 0; margin: 0 10px; // Visual Properties background: $white; color: $primary; border: 1px solid $dark-1; border-radius: 10px; outline: 0; box-shadow: 0 5px 0 $white; // Typography properties font-family: $font-base; font-size: $font-size-base; font-weight: bold; line-height: 1.5; text-align: center; text-transform: uppercase; // Mics properties cursor: pointer; overflow: auto; z-index: 9; // CSS3 properties transform: scale(2); transition: all .3s; // Pseudo class &:hover {} &:after {} &:before {} &:first-child {} &:last-child {} // Breakpoint sorted descending @media screen and (max-width: 1200px) {} @media screen and (max-width: 992px) {} @media screen and (max-width: 767px) {} // Selector &__list {} .selector {} }
Nên viết với định dạng .scss
thay vì .sass
. SCSS (Sassy CSS) là bản nâng cấp, thừa hưởng những gì tốt đẹp nhất từ người anh trai SASS. Tuy nhiên cũng có một vài ưu điểm điểm khiến mình lựa chọn.
SASS | SCSS | |
---|---|---|
Thể hiện quy tắc xếp chồng (Nested) | Chỉ sử dụng thụt lề (indent) | Sử dụng cặp dấu { } |
Kết thúc property | Không dùng ; (semicolon) |
Dùng ; |
Khai báo mixins | Sử dụng = |
Sử dụng @mixins |
Sử dụng mixins | Sử dụng + |
Sử dụng @include |
// ====================================================== // Abstracts :: Variables // ====================================================== // Paths $path-image: '../images'; $path-fonts: '../fonts'; // Colors $white: #fff; $black: #000; $primary: #c00400; // Fonts $font-family-base: 'Hiragino Sans', 'Noto Sans Japanese', 'Yu Gothic', 'Meiryo', 'Hiragino Kaku Gothic Pro', '游ゴシック', 'メイリオ', 'MS ゴシック', 'sans-serif'; $font-family-heading: 'Playfair Display', serif; // Breakpoints $breakpoints: ( small: 767px, medium: 992px, large: 1200px );
.title { color: $primary; background: $white; font-size: $font-family-heading; }
Những thuộc tính như font-size
, font-family
, color
, background
nên dùng biến để thống nhất, không đặt trực tiếp.
.section { .list { .items { // STOP! } } }
Selector chỉ nên viết tối đa 3 level, càng nhiều cấp sẽ làm performance bị hạn chế hiệu năng. Bạn cũng nên sử dụng BEM để hạn chế việc phải selector nhiều cấp.
.section { &__list { // .section__list &__items {} // .section__list__items } &--about {} // .section--about }
Xem thêm BEM là gì
Cách viết trên sẽ giúp chúng ta dễ phân biệt được các level của block, element, modifier và giúp ta tránh được việc selector nhiều cấp, giúp performance được tối ưu.
// Good @for $i from 1 through 3 { .fading-item { &:nth-child(#{$i}) { transition-delay: 250ms * $i; } } }
// Bad .fading-item { &:nth-child(1) { transition-delay: 250ms; } &:nth-child(2) { transition-delay: 500ms; } &:nth-child(3) { transition-delay: 750ms; } }
Trên đây là một vài chia sẻ của mình về kinh nghiệm xây dựng dự án với SASS. Hãy tạo cho mình một bộ source thật bài bản và những dòng code dễ maintain.
Chúc các bạn có một source code “sạch sẽ” và review những dòng code của người khác thật dễ nhìn.
Cảm ơn các bạn đã đọc bài viết!
Có thể bạn quan tâm:
Xem thêm Tuyển dụng IT lương cao tại TopDev
Bài viết gốc được đăng tải tại viblo.asia
Sau cả ngàn project thì chắc chắn anh em cũng muốn có một cái gì đó nhìn cho đẹp đẹp, cho mát mắt. Level sử dụng phức tạp đi kèm với load animation đẹp thì đỉnh không còn gì bằng! Giới thiệu cho anh em source 9 bộ CSS animation “sịn sò” để apply vào product của mình.
Một số animation bên dưới interactive được, chỉ cần rà chuột và click vào nhé.
Hi vọng rằng tất cả các animation “độc” trên sẽ tiếp thêm động lực cho anh em là project. Sáng tạo là một phần rất quan trong trong công việc của chúng ta và nó cần một ít thời gian mỗi ngày để phát triển thêm nữa!💆
Xem thêm việc làm Front end Developer tại TopDev
TopDev via Medium
Tôi rất yêu lập trình. Tôi thích cảm giác tại nên cái gì đó từ số không, hay việc giải bài toán lập trình rồi thấy nó lớn lên thành cái gì đó có ích. Tôi đặc biệt yêu cảm giác học những thứ hoàn toàn mới chỉ trong vài tiếng, và trở nên giỏi hơn mà tôi không cần phải trả đồng nào hết.
Tôi được học một trong những trường đại học tốt nhất đất nước về ngành CNTT. Tôi có được job đầu tiên nhờ những nỗ lực sau kì thực tập mùa hè. Tôi rất yêu công việc của mình và tôi đã làm rất tốt phần của mình. Từ vị trí junior không lâu sau tôi đã lên senior rất nhanh và được công nhận nhờ những cố gắng của mình.
Nhưng cũng đến một thời điểm, nó không còn làm tôi hứng thú nhiều nữa. Bỗng dưng tôi ghét đi làm. Mỗi ngày là một cuộc chiến và tôi không muốn đối mặt với nó một tí nào nữa.
Tôi không nhận ra rằng mình đang mắc phải Hội chứng “Tâm lý kẻ mạo danh” (Impostor Syndrome)**.
**Impostor Syndrome: Đây là hội chứng tâm lý mà người mắc phải không nhận thức được giá trị bản thân và những thành công mà họ gặt hái được. Họ thường nghĩ những thứ mình đạt được là do may mắn chứ không phải vì có thực tài. Người mắc chứng tâm lý này thường rơi vào tự ti, cho mình kém cỏi, mất dần động lực phấn đấu, thu mình và không đạt được thành tựu nào trong cuộc sống.
Tôi nhớ mọi bản demo mà tôi đã làm trong quá khứ. Tôi đã từng rất tự tin và hạnh phúc trước nhiều người. Bỗng một ngày nó biến mất. Thật sự lo lắng đến nỗi khi nói cũng lắp ba lắp bắp. Tôi sẽ suy nghĩ cực lung tung và sợ nói ra cái gì đó ngu xuẩn, và lo rằng người ta nghĩ gì về mình.
Những cơn giận dữ đột ngột cứ nhảy lên và cản trở tôi tập trung vào công việc. Và nó đã ảnh hưởng toàn diện lên sức khoẻ của tôi. Năng lượng luôn luôn dưới mức 0, và quan hệ của tôi với gia đình cũng như đồng nghiệp trở nên rất tệ, mất ngủ, mất sức, mất luôn người thân.
Thống kê cho thấy có đến 70% số người có tâm lý Kẻ mạo danh này. Vấn đề là bạn cảm thấy như bạn là người duy nhất chịu đựng nó. Nếu may mắn thì một trong những đồng nghiệp của bạn sẽ cũng mắc phải nó, nhưng đó rõ ràng không là cách giải quyết. Nó dấu mình rất tốt, và người mắc phải thì cũng rất giỏi dấu nó một cách rất chuyên nghiệp.
Giả định là mọi người đều có tâm lý kẻ mạo danh này đi. Hãy động viên họ hằng ngày, nói rằng họ đang làm tốt, họ làm tốt cái gì. Một lời động viên nhỏ sẽ có hiệu ứng rất lâu dài. Nếu có 1 team làm được như vậy với mọi người sẽ tạo nên được một môi trường rất lành mạnh.
Chúng ta cũng chỉ là những con người nhỏ bé, sợ hãi có, nghi ngờ có. Ai cũng có những vấn đề và khó khăn riêng phải đối mặt ngoài áp lực công việc. Những ý tưởng này thường bị quên mất trong môi trường chuyên nghiệp, và chúng ta sẽ trở nên cách biệt nhanh chóng. Chỉ khi chúng ta nhận ra nó và mong muốn một môi trường làm việc theo hướng cá nhân hơn và gắn kết hơn.
Tôi không dám chắc rằng hội chứng này sẽ biến mất hoàn toàn. Nó có thể sẽ phai đi dần khi bạn nhận ra và hiểu được nó. Hãy nhớ rằng, có rất nhiều người mắc phải nó và điều đó là rất bình thường. Thật mừng khi tôi đang dần quay lại thời điểm mà tôi có hứng thú với lập trình.
Nó sẽ tấn công bạn bất cứ lúc nào. Có thể ngay từ lúc bạn mới học code, hoặc khi bạn đã già nghề được 10 năm. Có thể là khi bạn bắt đầu có đứa con đầu lòng, cũng có thể khi bạn phỏng vấn xin việc và không được ngay.
Cái quan trọng nhất vẫn là nhận biết nó. Hãy nghiêm túc xử lý nó. Một khi nó đã đến thì hãy đối diện xử lý nó, đừng ủ nó để nó lớn thêm nữa. Hãy nói chuyện với người khác và giúp họ nếu họ đang gặp phải vấn đề này. Có thể đây cũng là cách để bạn thoát khỏi nó. Hãy cùng nhau phấn đấu thêm nữa, để không còn cảm giác mặc cảm và giữ lửa đam mê lập trình.
Tác giả: Dương Ngọc Thái
Tôi nhận được thư từ của nhiều bạn hỏi về việc nên học gì và như thế nào để có thể tìm được việc làm và làm được việc trong ngành an toàn thông tin (information security). An toàn thông tin là một ngành rộng lớn với rất nhiều lĩnh vực. Những gì tôi biết và làm được chỉ gói gọn trong một hai lĩnh vực. Có rất nhiều mảng kiến thức cơ bản mà tôi không nắm vững và cũng có nhiều kỹ năng mà tôi không thạo. Hack tài khoản Yahoo! Mail là một trong số đó. Tôi cũng không biết cách tìm địa chỉ IP của bạn chat :-(.
Xét theo năm mức ngu dốt thì tôi nằm ở mức “1OI – thiếu kiến thức” ở hầu hết các lĩnh vực trong an toàn thông tin. Cũng có lĩnh vực tôi nằm ở mức “2OI – thiếu nhận thức”. Nhiều lần đọc sách vở hoặc nói chuyện với đồng nghiệp, tôi hay nhận ra rằng có nhiều thứ tôi không biết là tôi không biết. Theo ý của anh Ngô Quang Hưng thì đây là chuyện bình thường:
Dân máy tính thường phải đọc/học rất nhiều để theo kịp sự phát triển với tốc độ ánh sáng của ngành mình. Trong quá trình này, với mỗi vấn đề X của ngành, ta sẽ chuyển dần dần từ 3OI xuống 1OI. Sau đó, nếu X là cái mà ta thật sự thích hoặc cần cho công việc thì sẽ chuyển nó lên 0OI.
Rất nhiều sinh viên và nghiên cứu sinh KHMT ở mức 3OI khi mới bắt đầu đi học. Sau đó họ tìm hiểu về quá trình nghiên cứu, quá trình tìm các vấn đề và hướng nghiên cứu mới, quá trính cập nhật kiến thức về ngành của mình, và chuyển dần các thứ lên 2OI. Để có một quá trình hiệu quả từ 3OI lên 2OI không dễ chút nào. Ví dụ đơn giản: các journals, conference nào trong ngành mình là có giá trị, làm thế nào để tìm đọc các bài trong chúng, phương pháp lọc bài đọc thế nào, vân vân.
Tôi thấy anh Hưng nói có lý, nên mục tiêu chính của bài viết này là cung cấp một quá trình hiệu quả để bớt ngu về an toàn thông tin.
Tôi muốn viết phần này vì nhiều người tưởng tôi làm bảo vệ khi tôi nói tôi làm security. Ngoài ra có lẽ là do thị trường việc làm an toàn thông tin ở Việt Nam không phong phú nên hầu hết đều nghĩ rằng làm an toàn thông tin nghĩa là đảm bảo an toàn hệ thống mạng (network/system security), trong khi thực tế đây chỉ là một trong số rất nhiều công việc trong ngành.
Trong bốn phần nhỏ tiếp theo, tôi sẽ giới thiệu bốn nhóm công việc chính trong ngành. Đối với mỗi nhóm công việc, tôi sẽ bàn một chút về triển vọng nghề nghiệp ở Việt Nam và Mỹ, hai nơi mà tôi có dịp được quan sát. Nếu bạn không biết bạn thích làm gì thì cứ chọn một công việc rồi làm thử. Các công việc này đều có liên quan nhau, nên kiến thức mà bạn học được trong quá trình thử vẫn hữu ích cho những nghề khác.
Công việc chính của nhóm này là làm việc với các đội phát triển sản phẩm để đảm bảo sản phẩm làm ra an toàn cho người dùng và an toàn cho hệ thống của công ty, cụ thể là:
Tóm gọn lại thì nhóm này chuyên tìm lỗ hổng và kỹ thuật tấn công mới. Đây là công việc của tôi và tôi thấy đây là công việc thú vị nhất trong ngành :-).
Ở Mỹ thì thông thường thì chỉ có các hãng có phần mềm và dịch vụ lớn như Facebook, Google, Microsoft, Oracle, v.v. hay các tập đoàn tài chính ngân hàng lớn mới có đội ngũ tại chỗ để đảm nhiệm công việc này. Các công ty nhỏ thường chỉ thuê dịch vụ của các công ty tư vấn. IBM và Big Four đều có cung cấp dịch vụ tư vấn này. Dẫu vậy nếu được chọn lựa thì tôi sẽ chọn làm cho các công ty chuyên sâu như Matasano, iSec, Leviathan, Gotham, IOActive, Immunity, v.v.
Ở Việt Nam thì thị trường việc làm cho người làm an toàn sản phẩm có vẻ ảm đạm hơn. Cho đến nay tôi biết chỉ có một vài công ty ở Việt Nam là có nhân viên chuyên trách lĩnh vực này. Các công ty khác (nếu có quan tâm đến an toàn thông tin) thì hầu như chỉ tập trung vào an toàn vận hành. Các công ty tư vấn an toàn thông tin ở Việt Nam cũng không tư vấn an toàn sản phẩm, mà chỉ tập trung tư vấn chung chung về các quy trình và tiêu chuẩn an toàn thông tin.
Công việc chính của nhóm này là đảm bảo sự an toàn cho toàn bộ hệ thống thông tin của doanh nghiệp, với ba nhiệm vụ chính:
Đây là công việc khó nhất, nhưng lại ít phần thưởng nhất của ngành an toàn thông tin.
Tương tự như trên, chỉ có các hãng lớn của Mỹ mới có đội ngũ tại chỗ để phụ trách toàn bộ khối lượng công việc đồ sộ này, nhất là mảng xử lý và điều tra. Đa số các công ty chỉ tập trung vào ngăn chặn và sử dụng dịch vụ của bên thứ ba cho hai mảng còn lại. Các hãng như Mandiant, Netwitness hay HBGary cung cấp dịch vụ điều tra các vụ xâm nhập và có rất nhiều hãng khác cung cấp dịch vụ giám sát an ninh mạng.
Ở Việt Nam thì thị trường việc làm cho người làm an toàn vận hành tương đối phong phú hơn so với an toàn sản phẩm. Các công ty và tổ chức tài chính lớn đều có một vài vị trí chuyên trách về an toàn vận hành. Đa số người làm về an toàn thông tin ở Việt Nam mà tôi biết là làm trong lĩnh vực này. Dẫu vậy hầu như chưa có ai và công ty tư vấn nào làm về phản hồi và điều tra sự cố.
Công việc chính của nhóm này là phát triển và cung cấp các công cụ, dịch vụ và thư viện phần mềm có liên quan đến an toàn thông tin cho các nhóm phát triển sản phẩm sử dụng lại.
Nhóm này bao gồm các kỹ sư nhiều năm kinh nghiệm và có kiến thức vững chắc về an toàn thông tin, viết mã an toàn và mật mã học. Họ phát triển các thư viện và dịch vụ dùng chung như phân tích mã tĩnh – phân tích mã động (static – dynamic code analysis), hộp cát (sandboxing), xác thực (authentication), kiểm soát truy cập (authorization), mã hóa (encryption) và quản lý khóa (key management), v.v.
Đây là dạng công việc dành cho những ai đang viết phần mềm chuyên nghiệp và muốn chuyển qua làm về an toàn thông tin. Đây cũng là công việc của những người thích làm an toàn sản phẩm nhưng muốn tập trung vào việc xây dựng sản phẩm hơn là tìm lỗ hổng.
Rõ ràng loại công việc này chỉ xuất hiện ở các công ty phần mềm lớn. Ở các công ty phần mềm nhỏ hơn thì các kỹ sư phần mềm thường phải tự cáng đáng công việc này mà ít có sự hỗ trợ từ nguồn nào khác. Ở Việt Nam thì tôi không biết có ai làm dạng công việc này không.
Ngoài an toàn sản phẩm ra thì đây là một lĩnh vực mà tôi muốn làm. Công việc chính của nhóm này là phân tích, truy tìm nguồn gốc và tiêu diệt tận gốc mã độc và các tấn công có chủ đích (targeted attack). Mã độc ở đây có thể là virút, sâu máy tính, hay mã khai thác các lỗ hổng đã biết hoặc chưa được biết đến mà phần mềm diệt virút thông thường chưa phát hiện được. Các loại mã độc này thường được sử dụng trong các tấn công có chủ đích vào doanh nghiệp.
Tôi nghĩ rằng sau hàng loạt vụ tấn công vừa rồi thì chắc hẳn các công ty lớn với nhiều tài sản trí tuệ giá trị đều muốn có những chuyên gia trong lĩnh vực này trong đội ngũ của họ. Ngoài ra các công ty chuyên về điều tra và xử lý sự cố như Mandiant, HBGary hay Netwitness mà tôi đề cập ở trên đều đang ăn nên làm ra và lúc nào cũng cần người. Các công ty sản xuất phần mềm diệt virút dĩ nhiên cũng là một lựa chọn.
Ở Việt Nam thì tôi nghĩ hầu hết doanh nghiệp vẫn chưa thấy được nguy cơ đến từ các cuộc tấn công có chủ đích, thành ra họ sẽ không tuyển người chuyên trách vấn đề này. Tôi cũng không biết có công ty tư vấn nào ở Việt Nam chuyên về điều tra và xử lý sự cố hay không. Tôi nghĩ lựa chọn khả dĩ nhất cho những người thích mảng công việc này là các công ty phần mềm diệt virus.
Tuy nhiên cũng cần lưu ý rằng trong vài năm gần đây ở Việt Nam còn xuất hiện những loại mã độc nhắm vào đông đảo người dùng máy tính bình thường. Vấn nạn này có lẽ sẽ còn kéo dài trong nhiều năm tới và lẽ đương nhiên “phe ta” lúc nào cũng cần thêm những chiến sĩ lành nghề như anh TQN. Thành ra dẫu triển vọng nghề nghiệp không sáng sủa cho lắm, nhưng tôi rất hi vọng sẽ ngày càng nhiều người tham gia vào việc phân tích các mã độc nhắm vào người dùng máy tính ở Việt Nam. Đối với tôi họ là những người hùng thầm lặng, chiến đấu đêm ngày với các “thế lực thù địch” để bảo vệ tất cả chúng ta.
Có thể bạn muốn xem:
Đa số những bạn viết thư cho tôi đều đang học đại học ngành CNTT và tất cả đều than rằng chương trình học quá chán, không có những thứ mà các bạn muốn học. Tôi nghĩ đây là một ngộ nhận.
Hối tiếc lớn thứ nhì trong sự nghiệp học tập mấy chục năm của tôi là đã không học nghiêm túc khi còn là sinh viên (hối tiếc lớn nhất là tôi đã không nghỉ hẳn, nhưng đó là một câu chuyện dài khác). Tôi cũng đã nghĩ rằng chương trình học ở đại học là lạc hậu và không cần thiết. Bây giờ nhìn lại thì tôi thấy nội dung và cách dạy của từng môn học thì đúng là lạc hậu (chỉ có mấy môn triết học Mác-Lênin là bắt kịp ánh sáng thời đại), nhưng toàn bộ giáo trình đại học vẫn cung cấp được một cái sườn kiến thức rất cần thiết cho một kỹ sư an toàn thông tin.
Ở đại học người ta có cách tiếp cận top-down, nghĩa là dạy từ đầu đến cuối những kiến thức nằm trong chương trình. Điều này dễ dẫn đến tình trạng là người học phải học những kiến thức mà họ không thấy cần thiết. Nếu chương trình học cũ kỹ và không có nhiều thực hành, hoặc người dạy không chỉ ra được bức tranh toàn cảnh, vị trí hiện tại của người học và bước tiếp theo họ nên làm là gì thì người học sẽ dễ cảm thấy rằng họ đang phí thời gian học những kiến thức vô bổ.
Trong khi khi đi làm thì cách tiếp cận là bottom-up, nghĩa là lao vào làm, thấy thiếu kiến thức chỗ nào thì học để bù vào chỗ đó. Lúc này tôi hoàn toàn chủ động trong việc học và tôi cũng hiểu rõ tôi cần học cái gì và tại sao. Điều thú vị là mỗi khi truy ngược lại nguồn gốc của những kiến thức tôi cần phải có, tôi thường thấy chúng nằm trong chương trình đại học.
Ví dụ như tôi muốn luyện kỹ năng dịch ngược mã phần mềm (reverse code engineering – RCE) thì tôi thấy rằng tôi cần phải có kiến thức về tổ chức và cấu trúc máy tính. Hoặc nếu tôi muốn học về mật mã học thì tôi phải học lý thuyết tính toán, mà khởi nguồn là lý thuyết automata. Nhưng tại sao trước đó tôi cũng đi làm nhưng không thấy được những lỗ hổng kiến thức này? Tôi nghĩ là do tôi làm không đủ sâu. Ví dụ như nếu bạn suốt ngày chỉ lập trình PHP thì bạn sẽ không thể hiểu được tại sao phải nắm vững tổ chức và kiến trúc máy tính. Hoặc giả như công việc của bạn là sysadmin thì cũng sẽ rất khó để bạn thấy được tại sao cần phải học lý thuyết automata.
Những gì tôi nói lan man ở trên có thể tóm gọn lại thế này:
Các lớp mà tôi liệt kê trong phần 4 đa số là của đại học Stanford. Bạn không cần phải đến tận nơi, ngồi trong lớp mới có thể học được. Tôi thấy trong nhiều trường hợp thì bạn chỉ cần đọc lecture notes, sách giáo khoa mà lớp sử dụng rồi làm bài tập đầy đủ thì vẫn sẽ tiếp thu đủ kiến thức. Một số lớp mà tôi liệt kê dưới đây được dạy miễn phí rộng rãi trên Coursera.
Bạn có thể tham khảo chương trình SCPD nếu muốn học chung với các sinh viên Stanford khác. Đây là chương trình học từ xa thông qua video. Buổi sáng lớp diễn ra thì buổi chiều bạn đã có video để xem. Thi cử như các sinh viên chính quy khác và điểm phải trên B mới được học tiếp. Đây là chương trình mà tôi theo học. Điểm thú vị là mỗi học kỳ bạn chỉ cần lấy một lớp, nhưng Stanford vẫn sẽ cho bạn xem video của tất cả các lớp khác.
Ngoài Stanford và Coursera ra, bạn cũng có thể tham khảo các lớp trên Udacity, OCW và MITx. Khi tôi đang viết những dòng này thì MIT và Harvard công bố dự án edX. Chúng ta đang sống trong một thời đại cực kỳ thú vị! Bây giờ chỉ cần bạn chịu học thì muốn học cái gì cũng có lớp và học liệu miễn phí. Nhưng mà học cái gì bây giờ?
Có ba món quan trọng cần phải học: lập trình, lập trình và lập trình! Để làm việc được trong ngành này, bạn phải yêu thích lập trình. Không có cách nào khác. Thề luôn!
Tôi dành khá nhiều thời gian tìm hiểu giáo trình khoa học máy tính của các trường đại học lớn trên thế giới và tôi thấy tất cả các môn học đều có phần bài tập là lập trình. Học cái gì viết phần mềm cho cái đó. Học về hệ điều hành thì phần bài tập là viết một hệ điều hành. Học về mạng thì viết phần mềm giả lập router, switch hay firewall. Cá nhân tôi cũng thấy rằng lập trình là cách tốt nhất để tiếp thu kiến thức một môn học nào đó, biến nó thành của mình. Nói cách khác, lập trình là một cách mã hóa tri thức khá hiệu quả.
Ngoài ra nhìn vào mô tả công việc ở phần 2, bạn cũng có thể thấy kỹ năng lập trình quan trọng đến dường nào, bởi hầu hết các vấn đề và giải pháp của an toàn thông tin là đến từ phần mềm. Rõ ràng muốn tìm lỗi của phần mềm thì bạn phải hiểu được phần mềm thông qua mã nguồn trực tiếp hay trung gian của nó. Rất có thể bạn sẽ không phải lập trình hàng ngày, nhưng bạn phải viết được những công cụ nhỏ hay những thư viện hỗ trợ cho công việc và các lập trình viên khác.
Vậy làm thế nào để lập trình giỏi? Câu hỏi này làm tôi nhớ đến câu chuyện cười về ông lập trình viên không thể ra khỏi phòng tắm vì trên chai dầu gội có ghi hướng dẫn sử dụng là “cho vào tay, xoa lên đầu, xả nước và lập lại”. Từ khóa trong câu chuyện này là “lập lại”: muốn giỏi lập trình thì cách tốt nhất là lập trình nhiều vô!
Nhưng mà lập trình bằng ngôn ngữ gì bây giờ? Đây là câu hỏi dễ làm cho các lập trình viên oánh nhau nhất ;-). Cá nhân tôi thấy rằng người làm an toàn thông tin bây giờ cần phải thông thạo C, x86 Assembly, Python (hoặc Ruby) và JavaScript. Tôi có nói lý do tại sao trong phần giới thiệu sách tiếp theo.
Sau khi đã có những kiến thức cơ bản ở trên, bạn có thể theo đuổi lớp CS155. Lớp này có trên Coursera với tên Computer Security. Song song với lớp CS155, bạn có thể tìm đọc các sách sau:
Chú ý đây là những cuốn sách tập trung vào công việc hàng ngày và sở thích của tôi — nói cách khác, còn thiếu nhiều sách của các mảng công việc khác. Dẫu vậy tôi nghĩ những cuốn sách này sẽ giúp bạn có được một kiến thức nền tảng vững chắc để từ đó theo đuổi các nghề nghiệp khác nhau trong ngành an toàn thông tin. Trong thời gian tới tôi sẽ cập nhật thêm những cuốn sách mà tôi đang và sẽ đọc.
Nếu bạn biết sách nào hay thì hãy giới thiệu cho tôi.Ngoài ra trong các sách mà tôi vừa liệt kê không có cuốn sách toán (và lý thuyết khoa học máy tính) nào cả. Tôi nghĩ bạn sẽ tự có câu trả lời cho câu hỏi “Có nên học toán hay không?” khi bắt đầu học mật mã. Về hai mảng này thì tôi rất thích lớp “Great Ideas in Theoretical Computer Science” của Scott Aaronson và cuốn “A Computational Introduction to Number Theory and Algebra” của Victor Shoup. Thích đến nỗi tôi phải viết đoạn này chỉ để nhắc đến chúng ;-). Tôi cũng đã từng dành ra nhiều tháng để đánh vật với Introduction to the Theory of Computation của Michael Sipser. Nhưng thôi, tôi không muốn giới thiệu sách toán nữa vì tôi rất dốt món này!
Cái mà tôi vừa “vẽ” ra là một con đường. Thú thật là tôi không biết đích đến của nó là gì — tôi chỉ biết rằng hành trình mà tôi đã đi qua (và hi vọng là những chặng đường sắp tới) đã mang đến cho tôi rất nhiều niềm vui — niềm vui của một con người đi khám phá thế giới, chinh phục những thử thách, để rồi chia sẻ những câu chuyện hay ho với tất cả mọi người.
Mỗi ngày tôi đều dành thời gian đọc sách, làm bài tập, viết mã hoặc chứng minh một cái gì đó. Không ai bắt tôi phải làm những chuyện đó. Có những thứ tôi học cũng không (hoặc chưa) có liên quan gì đến công việc. Tôi học chỉ vì tôi thích và tò mò. Tôi học vì tôi muốn hiểu thêm những thứ mà tôi cho là hay ho. Tôi học vì tôi muốn đi mãi, đi mãi, đi đến tận cùng những cái mà người ta viết trong sách, để xem ở đó có gì hay không.
Hôm rồi tôi đọc một mẩu chuyện về Richard Feynman, trong đó có đoạn kể về lúc Feynman bị bệnh gần đất xa trời, ông tâm sự rằng, “[I’m going to die but I’m not as sad as you think because] when you get as old as I am, you start to realize that you’ve told most of the good stuff you know to other people anyway”. Đương nhiên những gì tôi biết làm sao mà “good” bằng những gì Feynman biết, nhưng dẫu sao thì tôi cũng sẽ học theo Feynman: có biết chuyện gì hay ho thì kể cho nhiều người khác cùng biết. Bài này là một chuyện như thế.
TopDev via vnhacker.blogspot.com
React Native Developer sẽ xây dựng ứng dụng React Native App trên nền tảng Android và iOS bằng ngôn ngữ JavaScript. Công việc của React Native Dev thường tập trung phần Front-end của sản phẩm, nhưng họ cũng rất giỏi trong việc tìm hiểu các dịch vụ và cơ sở hạ tầng API mà ứng dụng cần tích hợp. Hy vọng, Mẫu bảng mô tả công việc lập trình React Native này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.
Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây
Mô hình O2O với lợi thế không phát sinh chi phí cho vận chuyển, kho bãi và không cạnh tranh trực tiếp với hệ thống bán hàng đã và đang là lựa chọn thành công của nhiều công ty, đơn cử đó là chuỗi Dienmayxanh.com của Thế giới di động.
Con số thống kê khổng lồ của Google Analytics DMX về Dienmayxanh.com cho thấy năm vừa qua doanh thu online tăng 120% so với năm 2017, trong đó phải kể đến một vài con số đáng chú ý như tăng 15% lượng traffic, 96% conversion rate, tăng 6% average order value cho nhóm sản phẩm giá trị điện tử, điện lạnh.
Landing page:
‣ Before cứ có chương trình mới là làm Landing page (LDP), một thời điểm trên site có thể có 8 – 10 LDP, mỗi LDP lại chỉ có vài sản phẩm. Việc này làm tốn vị trí banner truyền thông, resource thiết kế, code
‣ After: Hạn chế làm LDP. Tối ưu UX trang ngành hàng và ưu tiên đẩy campaign traffic về trang Ngành hàng vì đây là trang có Best UX cho việc tìm sp (với Filter, Sort by…)
Web Push: dùng chọn lọc, không lạm dụng gây spam. Conversion rate từ kênh Web push tốt gần bằng kênh Direct (là kênh có best CR)
Follow trend: khi thị trường “đỏ lửa” thì mình cũng nhào vô
‣ Before: “Ngày đó là ngày của web XYZ mà, họ quảng cáo mạnh, deal ngon thế thì làm gì đến lượt mình bán. Tránh voi chẳng xấu mặt nào”
‣ After: ngày đó cứ chuẩn bị “đủ súng ống đạn dược” (deal ngon), nước lên thuyền lên, họ tăng số thì mình cũng sẽ tăng số dù ko quảng cáo ầm ĩ.
“Khi thị trường hành động, thì bạn cũng nên hành động, đừng dừng lại!”
Có 3 tỉ lệ chuyển đổi cần quan tâm và tối ưu
Năm qua, Điện máy xanh đã đóng góp lớn nhất vào tổng doanh thu của Thế Giới Di Động với 4.167 tỷ đồng, chiếm tỷ trọng 53%, tăng trưởng 28%. Chọn lựa mô hình kinh doanh O2O đã mang lại giá trị sự tiện lợi cho khách hàng của dienmayxanh.com (về cả thời gian và địa điểm mua hàng), tăng cơ hội bán hàng và nhanh chóng tiêu thụ các mặt hàng upsell, crossell.
Tuy nhiên, tốc độ tăng traffic và tỷ lệ chuyển đổi của Dienmayxanh.com có phải là toàn bộ bí quyết khiến con số x2 doanh thu duy trì mỗi năm? Một quy trình chính thống được Dienmayxanh.com áp dụng rất thành công, bạn có tò mò đứng sau những lý thuyết mọi người có thể dễ dàng tìm đọc trên sách vở là những “công thức” gì không?
Product Manager của Thế Giới Di Động – anh Tùng Jacob sẽ bật mí những thắc mắc còn tồn đọng khi bạn muốn tìm hiểu sâu hơn về mô hình O2O bằng case study Dienmayxanh.com sắp diễn ra tại Hồ Chí Minh vào ngày 24/09/2019 sắp tới!
Nhập code TOPDEVBLOG@2409 ưu đãi 50.000đ dành riêng cho thành viên TopDev tại đây!
Tác giả: Trung Nghia Nguyen
“Build only what you need to build, and do it fast”
Với sự phát triển không ngừng của công nghệ, đâu đâu người ta cũng nhắc tới Cách mạng công nghiệp 4.0. Trong bối cảnh đó, Học máy (Machine Learning) đã trở thành một cái tên không còn xa lạ trong giới công nghiệp. Cùng với nhu cầu ngày càng nhiều của xã hội, một ngành mới được ra đời, Kĩ sư Học máy (Machine Learning Engineers).
Kĩ sư Học máy là người có cả kĩ năng về Học máy và Kĩ thuật phần mềm (Software Engineering). Một Kĩ sư Học máy có thể sử dụng các kĩ năng của mình để tìm ra những mô hình học máy có hiệu suất cao đem vào ứng dụng và cũng là người xử lý các vấn đề từ cơ sở hạ tầng phục vụ huấn luyện cho đến tạo ra mô hình áp dụng thực tế. Có kha khá nguồn tài liệu trên mạng để một Kỹ sư phần mềm hay bất cứ ai học về Học máy. Tuy nhiên, trong thực tế, một đội ngũ làm Học máy sẽ phải đối mặt với vấn đề: Làm sao để có thể quản lý các tiến trình của dự án như các dự án phần mềm truyền thống ? Sau đây là bài viết trả lời cho câu hỏi đó.
Trong bài viết này, chúng mình sẽ cùng tìm hiểu về khái niệm “OODA Loop” của Học máy: ML Engineering Loop, với khái niệm này một Kỹ sư sẽ tuần tự theo các bước
để có thể tìm ra được mô hình học máy hiệu quả một cách nhanh chóng. Đối với mỗi giai đoạn sẽ có những lời khuyên mà tác giả nghĩ có thể hữu ích trong việc tối ưu toàn bộ quá trình.
Một đội ngũ ML thành công khi triển khai được mô hình có hiệu suất cao với những rằng buộc đã cho (ví dụ: đạt độ chính xác cao nhưng vẫn phải đảm bảo về bộ nhớ, thời gian chạy, etc). Hiệu suất (performance) được định nghĩa là đơn vị đo liên quan nhất tới thành công của sản phẩm cuối. Hiệu suất sẽ được dịch sang ngôn ngữ tương ứng của Học máy để quy về các độ đo. Trong ví dụ dưới đây, tác giả sẽ chọn “error rate” là đơn vị đo hiệu suất.
Khi mới bắt đầu, bạn nên định nghĩa ra tiêu chí như nào thì gọi là thành công. Dưới góc nhìn về sản phẩm, theo bạn, hiệu suất như thế nào thì bắt đầu gọi là hữu dụng? Ví dụ như hệ thống của bạn gợi ý ra 5 bài báo liên quan, ít nhất bao nhiêu trong số đó cần phải thực sự liên quan, và thế nào là liên quan ?
ML Engineering Loop sẽ giúp bạn định hình được quá trình phát triển, đơn giản hóa quá trình quyết định để có thể tập trung hơn vào bước tiếp theo. Khi đã quen dần với vòng lặp này, bạn sẽ có thể nhanh chóng luân phiên giữa phân tích và thực thi. Vòng lặp này còn hữu ích kể cả khi bạn đã là chuyên gia, bạn sẽ không bị ngợp hay mông lung khi mô hình không đáp ứng yêu cầu hay đột nhiên mục tiêu của nhóm thay đổi.
Để có thế “kích” vòng lặp, hãy bắt đầu từ một phiên bản đơn giản. Mục đích của việc “kích” này là để có 1 con số cho chúng ta đánh giá, làm cơ sở cho việc đánh giá sau này. Nó sẽ bao gồm các việc sau:
Ví dụ, có thể sử dụng các dữ liệu tương tự có sẵn từ một cuộc thi trên Kaggle cho huấn luyện tập train, dữ liệu thu thập tay cho tập development và test. Về mô hình có thể chọn hồi quy tuyến tính (logistic regression) với dữ liệu các pixel gốc hay chạy một mô hình đã huấn luyện sẵn (pre-trained network). Nên nhớ rằng, mục đích là chỉ cần chạy được, để khởi động cho vòng lặp.
Lời khuyên
Về tập test:
Về tập development và train:
Một khi đã có bản prototype, bạn có thể kiểm tra hiệu suất trên các tập dữ liệu. Đây cũng là bước cuối của vòng lặp. Đo đạc các biến động của khoảng cách giữa hiệu suất test và hiệu suất mong muốn đáp ứng tiêu chí hữu dụng của sản phẩm. Giờ là lúc bắt đầu vào chu trình của chúng mình.
Giai đoạn Phân tích cũng khá giống trong y học: Bạn được trang bị một số phương pháp chẩn đoán và mục tiêu là kết luận được cái gì đã giới hạn hiệu suất của mô hình. Tìm ra những vấn đề dễ dàng thấy được trước, hiểu được tác nhân nào có tác động lớn nhất tới vấn đề đó, bạn không cần phải cố gắng hiểu cũng như giải quyết tất cả các vấn đề, bởi rất nhiều vấn đề nhỏ sẽ thay đổi và thậm chí là biến mất khi mô hình được cải thiện.
Dưới đây là danh sách một số phương pháp cũng với chẩn đoán. Việc chọn ra phương pháp nào cũng là một nghệ thuật, sau khi áp dụng nhuần nhuyễn ML Engineering Loop bạn sẽ có được “trực giác” để biết mình nên thử cái nào.
Điểm bắt đầu của chúng mình có lẽ là để ý tới hiệu suất training, development và testing. Ở mỗi một chu trình, bạn nên thống kê các con số ở bước cuối cùng một cách tự động. Thông thường, training error ⩽⩽ development set error ⩽⩽ test set error
Nếu training set error là nhân tố gây hạn chế hiệu suất, có thể do những vấn đề sau:
Nếu development set error là nhân tố đó, các vấn dề khá tương tự:
Và nếu test set error là nhân tố hạn chế, thì thường lý do là tập development quá nhỏ hay các bạn đã overfitting trên tập development qua nhiều thí nghiệm.
Với bất kỳ lý do nào kể trên, bạn đều có thể phân tích tập những mẫu dữ liệu mà mô hình đã học sai để hiểu bản chất vấn đề (Nhưng tuyệt đối không nên làm với tập test nhé để tránh “huấn luyện” trên những mẫu này).
Một số chẩn đoán nêu trên sẽ có các khắc phục hiển nhiên, ví dụ như thiếu dữ liệu thì sẽ lấy thêm. Tuy nhiên, việc chia tách giai đoạn phân tích và chọn phương pháp sẽ giúp bạn hiểu rõ bản chất, phân tích các lỗi với một tâm thế thoải mái hơn.
Có thể bạn muốn xem:
Sau bước phân tích ở trên thì bạn đã hình dung được mình đang phải đối phó với những loại lỗi nào và tác nhân gây ra chúng rồi. Với một chẩn đoán, có thể sẽ có nhiều giải pháp khác nhau, bước tiếp theo chính là liệt kê và đánh giá độ ưu tiên cho chúng.
Tác giả khuyên rằng các Kĩ sư Học máy nên liệt kê ra càng nhiều ý tưởng càng tốt rồi bám theo những giải pháp đơn giản và nhanh. Nếu đã có sẵn một giải pháp có vẻ ổn thì dùng nó luôn. Có thể các phương pháp tinh vi, phức tạp sẽ cho kết quả tốt hơn, tuy nhiên qua thực tế tác giả thấy rằng sự cải thiện qua nhiều chu trình sẽ cho ra kết quả không tồi, hơn là chỉ chăm chăm sử dụng một giải pháp state-of-the-art, tốn khá nhiều thời gian. Giữa việc dán nhãn 1000 dữ liệu với nghiên cứu một phương pháp học không giám sát (unsupervised learning), mình nghĩ bạn nên thu thập và dán nhãn dữ liệu. Nếu như có một số heuristic đơn giản, bạn cũng nên thử chúng trước.
Lời khuyên
Phụ thuộc và chẩn đoán ma sẽ có một số giải pháp phổ biến như sau
Nếu bạn muốn hiệu chỉnh thuật toán để phù hợp dữ liệu hơn:
Nếu mô hình không thế phù hợp với dữ liệu train:
Nếu mô hình không khái quát được tập development:
Vậy là bạn đã biết mình cần phải thử cái gì, bạn cũng đã làm cho nó đơn giản nhất có thể rồi. Giờ CHỈ cần bắt tay vào implement thôi. Mục tiêu của giai đoạn này là để nhanh chóng thử ý tưởng của bạn để có thể đo đạc, học từ đó và quay lại chu trình nhanh chóng. Do vậy, bạn chỉ nên làm những thử thực sự cần thiết. Tuy là nhanh nhưng bạn vẫn phải đảm bảo code của mình đúng nhé, hãy kiểm tra thường xuyên.
Lời khuyên
Khi thu thập và dán nhãn dữ liệu:
Khi bạn code một mô hình mới. Hãy bắt đầu từ những code tương tự. Có rất nhiều bài báo có mã nguồn mở trên mạng. Việc này sẽ giúp bạn tiết kiệm khối thời gian. Tác giả gợi ý các bước thực thi như sau:
Viết đoạn mã kiểm thử gradients, các giá trị của tensor, dữ liệu đầu vào và nhãn xem đúng quy định chưa. Làm điều này ngay từ đầu sẽ giúp bạn kiểm tra lỗi bất cứ khi nào.
In ra các kết quả cũng như các số liệu để tiện theo dõi.
Nếu hiệu suất tăng, bạn đang đi đúng đường. Bạn có thể làm sạch các thành phần (component) mà bạn đang làm và đảm bảo rằng thí nghiệm có thể thực hiện lại được bởi cách thành viên khác trong đội.
Ngược lại, khi hiệu suất không tăng đáng kể thậm chí có thể tệ hơn, bạn phải quyết định nên tiếp tục hay bỏ ý tưởng hiện tại đi. Bỏ đi là khá dễ nếu như mỗi chu trình trong ML Loop có chi phí rẻ: bạn không tốn quá nhiều công để làm code “hoàn hảo”, và một lần thử nữa cũng không quá lâu.
Lời khuyên
ML Engieering Loop sẽ giúp bạn hình dung rõ về quá trình để có được một mô hình tốt hơn. Đây không phải là một hướng dẫn chi tiết, bạn sẽ phải phát triển khả năng của bản thân để có thể đưa ra sự lựa chọn hợp lý ở mỗi gia đoạn. Bạn cần phải làm quen nhanh chóng với các chu trình này, tìm cách cải tiến vòng lặp về cả chất lượng và tốc độ để có thể tối đa hóa các quá trình ở mỗi chu trình và nhiều chu trình trong thời gian ngắn.
Lời khuyên
Như vậy, bài viết đã đưa ra một cách tiếp cận cho các dự án Học máy. Nếu như bạn cảm thấy mông lung và không biết bắt đầu từ đâu, hãy bắt đầu phân tích các lỗi, lên ý tưởng giải quyết, code chúng và xem nó hoạt động ra sao. Không ngừng tập trung vào chu trình trên một cách liên tục có thể đem đến những kết quả không ngờ trong cả nghiên cứu và ứng dụng đấy.
Tham khảo thêm các vị trí tuyển dụng Machine learning lương cao tại Topdev
TopDev via lego1st.github.io
Với bài viết này, TopDev sẽ cập nhật cho bạn 20 thách thức tuyển dụng nhân sự IT lớn nhất trong năm 2024. Không chỉ thế mà còn cung cấp giải pháp thiết thực nhất giúp công ty bạn giải quyết bất kì khó khăn nào trong tuyển dụng. Nào cùng bắt đầu nhé !
Theo LinkedIn, 75% người tìm việc cho rằng thương hiệu tuyển dụng rất quan trọng trong quyết định nộp CV của họ. Nếu họ không thích, họ sẽ không ứng tuyển hay chấp nhận lời mời làm việc. Nếu công ty có tiếng xấu, 75% ứng viên sẽ không làm kể cả khi họ đang thất nghiệp.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
Một chiến lược đẩy mạnh thương hiệu tuyển dụng hiệu quả.
Theo nghiên cứu của TopDev, có đến 25% ứng viên hài lòng hơn nếu có văn hóa công ty phù hợp. => Kể về những câu chuyện, văn hóa công ty hấp dẫn để khiến ứng viên hào hứng tham gia hơn. |
– Tạo trang web, blog nghề nghiệp thật thu hút, thể hiện thương hiệu tuyển dụng, cho thấy công ty bạn là nơi tuyệt vời để làm việc.
-Thêm hình ảnh nhân viên và văn phòng, chia sẻ về dự án hay ho hay công nghệ mới mà công ty đang thực hiện. |
TopDev có thể giúp chiến lược tuyển dụng của bạn hiệu quả hơn với Employer Branding Digital.
Tại đây, TopDev sẽ đăng các bài viết xây dựng thương hiệu lên Techtalk.vn – chuyên trang tin tức và thông tin công nghệ hàng đầu tại Việt Nam, và Blog TopDev.vn. |
Thiếu hụt nhân tài là thách nhức tuyển dụng nhức nhối nhất hiện nay. Cụ thể, có tới 67,5% Nhân sự/ Nhà tuyển dụng gặp khó khăn trong việc “Tìm kiếm ứng viên có năng lực” cho vị trí họ tìm.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
Không còn gì ngoài việc phải “gia nhập” trận chiến tìm kiếm nhân tài, cạnh tranh các công ty khác để “giựt” lấy nhân tài. | Khi mọi đối thủ đều cho thấy họ là nơi đáng để làm nhất, làm sao để công ty bạn khác biệt?
Hãy nhờ nhân viên giới thiệu – vì ứng viên tin tưởng bạn của họ hơn là nhà tuyển dụng. |
Nếu môi trường tìm kiếm nhân tài quá khốc liệt, bạn có thể sử dụng Job Posting của TopDev.
Vì tất cả CV đều sàng lọc trước khi gửi nhà tuyển dụng, giúp bạn vừa tiết kiệm thời gian vừa gia tăng xác suất tìm được nhân tài! |
Vì sự thiếu hụt các ứng viên chất lượng, nhà tuyển dụng muốn tìm nhân tài phải nhìn “xa hơn” cộng đồng địa phương và mạng xã hội của nhân viên họ. Bằng mọi giá bạn phải tìm cách mở rộng phạm vi ứng viên để tìm ra nhân tố tìm ẩn.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
Mở rộng sự hiện diện với nhiều kênh và nơi chốn nhất có thể.
=>Xây dựng chiến lược tuyển dụng đa kênh. |
Đảm bảo vị trí ứng tuyển được quảng bá rộng khắp các phương tiện và khu vực, gồm website việc làm địa phương và toàn cầu ̣(cả miễn phí và tính phí). Quảng bá trên mạng xã hội, sự kiện, diễn đàn,.. | Vào cuối năm, TopDev có tổ chức Vietnam Web Summit sự kiện công nghệ có quy mô lớn nhất hiện nay. Quy tụ phần lớn người làm công nghệ, từ sinh viên đến chuyên gia, các cấp quản lý trong các công ty công nghệ.
Đây là dịp để bạn quảng bá công ty cũng như tìm kiếm kha khá ứng viên tài năng đấy! Xem thêm về sự kiện năm ngoái Vietnam Web Summit |
Hình ảnh về sự kiện của TopDev
Do tác động của dịch Covid-19, số lượng ứng viên tìm kiếm đến những công việc freelancer ngày càng nhiều. Hơn nữa, nhu cầu tuyển dụng IT cũng tăng trưởng mạnh mẽ từ các quốc gia trên thế giới và xu hướng tuyển các lập trình viên ở nước ngoài trở nên phổ biến. Điều này dẫn đến việc các lập trình viên ở Việt Nam có nhiều cơ hội lựa chọn hơn và phần nào có mong muốn cao hơn về mức lương và phúc lợi của các công ty trong nước.
Theo bài cáo thị trường IT mới nhất của TopDev, gần 75% các lập trình viên đang làm công việc toàn thời gian, thấp hơn con số đó trước năm 2021. Lý do không phải do thất nghiệp, mà bởi xu hướng làm việc từ xa (remote)/ tự do (freelance) gia tăng với nhiều cơ hội hơn từ các nước phát triển.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
Các ứng viên mong muốn sự cân bằng trong công việc và cuộc sống vậy nên hãy tạo sự linh hoạt trong công việc cho họ đồng thời tăng phúc lợi để thu hút ứng viên. Ứng viên sẽ quan tâm đến việc phát triển bản thân nên hãy tạo điều kiện cho nhân viên phát triển hết mức đồng thời hãy tạo một trường làm việc tích cực. Sử dụng công nghệ tiên tiến để tăng tính cạnh tranh và thu hút các ứng viên có kỹ năng chuyên môn cao.
|
Giúp nhân viên linh hoạt trong việc lựa chọn giờ làm việc hoặc nơi làm việc, kết hợp với phần mềm quản lý dự án để giúp nhân viên có thể hoàn thành công việc từ xa. Cung cấp các khóa đào tạo, chương trình học tập để nâng cao kỹ năng của nhân viên. Cho phép nhân viên tham gia các dự án, hoạt động khác nhau để phát triển kỹ năng và năng lực. Sử dụng các công nghệ mới nhất trong việc quản lý dự án, giao tiếp và hợp tác nhóm. Tạo ra một môi trường làm việc công nghệ cao, cho phép nhân viên truy cập vào các công nghệ tiên tiến để hoàn thành công việc từ xa. |
TopDev với nguồn ứng viên khổng lồ luôn sẵn sàng đáp ứng nhu cầu nhân lực của doanh nghiệp. Cùng với đó, ứng dụng công nghệ giúp doanh nghiệp tiết kiệm thời gian và chi phí khi tìm kiếm ứng viên phù hợp. |
Theo Grassdoor, 76% nhà tuyển dụng cho rằng việc thu hút đúng ứng viên là thách thức lớn nhất. Họ mất nhiều thời gian xem hàng ngàn CV mà không phù hợp với vị trí họ cần.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
-Lọc lại quá trình tuyển dụng, đảm bảo thu hút đúng người ngay từ bước đầu.
=>Khiến ứng viên phù hợp ứng tuyển ngay và không khuyến khích các thành phần còn lại ứng tuyển. |
-Đưa ra yêu cầu công việc chính xác và rõ ràng trong mô tả công việc.
-Dùng blog việc làm thể hiện văn hóa công ty cũng như mỗi ngày làm việc tại văn phòng. Những ứng viên tiềm năng có thể tự quyết định tiếp tục ứng tuyển hoặc rút nếu thấy không phù hợp. -Thêm vài câu hỏi điều kiện trong đơn ứng tuyển. Đơn giản nhưng hiệu quả để lượt bỏ trước ứng viên không phù hợp ! |
Nếu đã thử các cách trên nhưng vẫn chưa tìm được đúng nhân tài thì TopDev có dịch vụ Email Marketing do khách hàng cung cấp và TopDev biên tập, được TopDev gửi đến 7.500 đối tượng phù hợp với đối tượng mục tiêu mà khách hàng mong muốn.
Bạn có thể tiết kiệm kha khá thời gian và chi phí đấy ! |
Talent pools là danh sách dữ liệu các ứng viên có hứng thú với công ty bạn. Bằng việc xây dựng Talent pools, bạn có thể lấp các vị trí trống với ít thời gian hơn bởi bạn đã có sẵn ứng viên để chọn. Vấn đề? Làm sao để xây dựng Talen pools chất lượng cao?
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
-Mời ứng viên tiềm năng tham gia vào “mạng lưới nhân tài” của bạn.
=>Họ vừa biết thêm về công ty vừa cập nhật vị trí ứng tuyển. |
-Tạo mẫu đơn ngắn và đơn giản vào “mạng lưới nhân tài”. Bạn có thể thêm “Hãy gia nhập với chúng tôi” với nhiều vị trí khác nhau.
Ví dụ: cuối bài blog, đầu trang web việc làm, bài đăng Facebook, LinkedIn,.. Nhờ vậy, bạn có thể tiếp cận ứng viên tiềm năng và khuyến khích họ tham gia. |
TopDev có thể giúp bạn quảng bá “mạng lưới nhân tài với dịch vụ hiển thị banner cho TechTalk.vn – hơn 1 triệu lượt truy cập/tháng và Blog TopDev.vn – hơn 300.000 lượt truy cập/tháng.
Ngoài ra, TopDev còn tư vấn thiết kế và chọn lọc nội dung hiển thị phù hợp với hàng trăm mẫu giao diện linh hoạt cho từng công ty. |
Ứng viên tài năng vẫn đang ngoài kia. Nếu không có chiến lược tìm nguồn nhân tài hiệu quả, nhà tuyển dụng chỉ phí thời gian và công sức mà không được kết quả gì. Việc tìm ứng viên chất lượng và có thông tin liên hệ của họ thật sự khó khăn!
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
Áp dụng chiến lược tìm kiếm tân tiến và chủ động hơn. | Ngừng phí thời gian vào nguồn cung ứng thủ công
=>Đầu tư vào những công nghệ cung ứng mạnh mẽ. |
Với dịch vụ Job Posting, TopDev có thể giúp bạn tiết kiệm rất nhiều thời gian và chi phí bằng việc tiếp cận đúng đối tượng ứng viên và mọi CV đều được sàng lọc kĩ càng trước khi gửi nhà tuyển dụng. |
Theo Experience Study, có 60% người tìm việc có trải nghiệm không tốt. Dẫn đến một vài kết quả sau:
-63% ứng viên từ chối lời mời công việc. (Nguồn: Software Advice)
-72% ứng viên nói cho người khác biết về trải nghiệm xấu (online và trực tiếp). (Nguồn: CareerArc)
-64% ứng viên ngưng mua sản phẩm/dịch vụ từ công ty đó. (Nguồn: CareerArc)
Tóm lại, nếu không cải thiện trải nghiệm ứng viên, bạn sẽ đánh mất ứng viên tài năng, danh tiếng, khách hàng công ty bạn.
Cần làm gì? |
Làm cách nào? |
-Kiểm tra hiện trạng trải nghiệm của nhân viên.
-Thực hiện các bước cần thiết để cải thiện trải nghiệm ứng viên. |
Liên tục cập nhật thông tin cho ứng viên trong từng giai đoạn của quá trình tuyển dụng.
=>Gia tăng thiện cảm và uy tín trong mắt ứng viên. |
Tham gia với ứng viên liên tục là chìa khóa để tuyển dụng thành công trong 2024. Đây là quá trình giao tiếp liên tục với ứng viên của bạn. Mục tiêu là khiến họ hứng thú làm việc cho công ty và giữ chân họ tới khi có cơ hội làm việc xuất hiện.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
-Tạo ra chiến lược dài hạn hiệu quả để thu hút ứng viên chủ động và bị động.
-Truyền tải đúng thông điệp cho đúng người vào đúng thời điểm. |
-Tham gia với ứng viên chủ động và bị động thông qua tất cả các kênh.
-Trả lời bình luận và tin nhắn qua mạng xã hội, gửi email chiến dịch tuyển dụng và mời họ tham gia. |
Với dịch vụ Đồng tô chức Tech Event, TopDev sẽ giúp bạn tạo môi trường tương tác giữa công ty và ứng viên tài năng ngay tại sự kiện.
Ngoài ra TopDev còn có truyền thông online trước sự kiện, kêu gọi nhiều ứng viên tham gia hơn. |
Đây là vấn đề ưu tiên hàng đầu trong năm 2024. Theo LinkedIn, 78% nhà tuyển dụng cho rằng đa dạng là xu hướng chính ảnh hưởng việc tuyển dụng của họ. 67% ứng viên cho rằng họ sẽ cân nhắc hơn nếu có một nguồn lực phong phú.
Cần làm gì? |
Làm cách nào? |
TopDev có thể giúp bạn thế nào? |
Triển khai chiến lược tuyển dụng tập trung vào tìm kiếm, thu hút và tuyển ứng viên đa dạng. | -Đăng tuyển công việc trên nhiều trang web việc làm đa dạng như Diversity Working. Cho thấy rõ công ty bạn đề cao sự đa dạng.
-Sử dụng trang web việc làm, mạng xã hội để đưa ra các trích dẫn, hình ảnh, video tự sự từ các nhân viên… -Xây dựng mô hình phỏng vấn có cấu trúc để tuyển dụng công bằng, khách quan. |
Với Employer Branding Digital, TopDev giúp bạn xây dựng thương hiệu qua bài viết trên Techtalk.vn và Blog TopDev.vn.
Quan trọng là tên thương hiệu được nhắc đến tự nhiên, khéo léo, không PR lộ liễu. |
Còn tiếp….
Nếu còn gì chưa rõ, ấn vào đây và đội ngũ TopDev sẽ giúp bạn giải đáp mọi thắc mắc !
Đừng bỏ lỡ những bài viết hấp dẫn về:
Xem thêm việc làm Developers hấp dẫn tại TopDev
TopDev via TalentLyft
Startup nổi lên, dự án R&D rôm rả hình thành và sự chiêu mộ của các hãng gọi xe, Fintech khiến cuộc chiến nhân lực IT ở Việt Nam thêm khốc liệt
“Năm ngoái, tỷ lệ nghỉ việc ở công ty chúng tôi khoảng 30%”, ông Nguyễn Công Ái – Phó tổng giám đốc KPMG Việt Nam kể lại. Những nhân tài rời đi, theo ông là được mời về các công ty gọi xe và thương mại điện tử, Fintech… vốn đang đầu tư vào Việt Nam.
Tất nhiên, ở vị thế trong nhóm Big4, công ty cũng thu hút ngược lại nhân tài từ nơi khác về. Nhưng tình hình cạnh tranh nhân sự trong giới công nghệ đang khá cao, dù KPMG vốn không phải công ty công nghệ mà chuyên về kiểm toán, tư vấn.
Do có nhiều khách hàng là công ty công nghệ nên đội ngũ của KPMG dễ dàng được nơi khác ‘mời mọc’. Với những người ở lại, công việc lúc nào cũng nhiều. “Chúng tôi chưa bao giờ bận rộn như năm nay. Nhân viên làm 12 giờ mỗi ngày vẫn không đủ để phục vụ cho khách hàng đến từ Hàn Quốc, Nhật Bản và trong nước”, ông Ái nói.
Ông Nguyễn Hữu Bình – CEO TopDev cho biết, làn sóng khởi nghiệp công nghệ cũng như việc gia tăng thêm các dự án R&D tại các tập đoàn lớn đang khiến cơn khát nhân sự IT lên cao, nhất là nhân sự chất lượng. Kể về lý do ra Quy Nhơn để xây một công viên đổi mới sáng tạo, ông Nguyễn Hữu Lệ – Chủ tịch TMA Solutions nói phải ‘can đảm’ về miền Trung để tìm thêm người.
Nhu cầu tuyển dụng ngành IT năm 2019 tăng mạnh hơn bao giờ hết
Đại diện KPMG nhận định, các tên tuổi điện tử nước ngoài lớn như Samsung, LG, Intel… đều mở rộng đầu tư vào Việt Nam những năm gần đây. Một số ‘đại gia’ khác cũng đang tìm hiểu đầu tư nhưng chưa thể tiết lộ. Ngày càng nhiều dự án đòi hỏi nguồn nhân sự IT chất lượng.
“Nissan đang có 2.000 kỹ sư làm việc tại Hà Nội, chịu trách nhiệm thiết kế phần lớn cho xe Nissan. Từ đây cũng thấy, cuộc cạnh tranh nhân lực là rất cao”, ông Ái nêu ví dụ.
Theo báo cáo gần đây của TopDev, dù các trường đại học có sức đào tạo mạnh, mức lương thị trường cạnh tranh, doanh nghiệp trải thảm đỏ, việc tuyển dụng nhân sự IT vẫn còn gặp nhiều khó khăn.
Mỗi tháng mức lương trung bình đa phần các nhà tuyển dụng sẵn sàng trả cho lập trình viên có kinh nghiệm khoảng hơn 30 triệu đồng, tỷ lệ tăng lương 6 tháng đầu năm 2019 đạt 15-18%. Với các cấp quản lý, con số này không thấp hơn 35 triệu đồng mỗi tháng, với kinh nghiệm trên 5 năm. Tuy nhiên, việc tuyển dụng những vị trí này gặp rất nhiều khó khăn do những đặc thù và yêu cầu gắt gao.
“Chúng ta có nhân tài nhưng đại học không đào tạo đủ chất lượng thì những người trung bình khó chuyển lên thành người giỏi. Chúng ta biết, nhân tài chỉ chiếm 1% và thậm chí thấp hơn”, ông Nguyễn Bá Quỳnh – Tổng giám đốc Global CyberSoft nhận xét.
Ông Bình xác nhận, do thiếu người nên các lập trình viên đều hiểu rõ giá trị bản thân. “Giữ chân nhân sự thực sự làm đau đầu nhiều doanh nghiệp”, ông nói.
Theo ông Ái, với những người giỏi, bổng lộc cao chưa chắc đủ giữ họ. “Họ đánh giá cao môi trường công việc và có nhiều dự án thú vị, chứ không phải lương. Do đó, cuộc cạnh tranh là nơi đâu có nhiều dự án hấp dẫn, nên đôi khi, đối thủ của chúng ta là các startup”, ông Ái bình luận.
Top các yếu tố khiến lập trình viên hài lòng với công việc
Trong mùa tuyển sinh năm 2019, ngành công nghệ thông tin “soán ngôi” đầu khi vượt qua điểm chuẩn các ngành y, dược. Điểm chuẩn cao nhất nước thuộc về ngành Công nghệ thông tin – Khoa học máy tính của Đại học Bách khoa Hà Nội với 27,42 điểm, vượt ngành Y đa khoa (26,75 điểm) của Đại học Y Hà Nội.
Nhiều chuyên gia cho rằng, với xu hướng số hóa doanh nghiệp trong những năm qua, số thí sinh lựa chọn ngành công nghệ thông tin nhiều, kéo theo điểm chuẩn tăng cao là điều không nằm ngoài dự đoán. Nhưng đó chỉ mới là bước đầu, giới công nghệ kỳ vọng, những học sinh giỏi này sẽ được đào tạo thành những chuyên gia giỏi, để sớm “giải khát” nhân tài cho ngành.
“Vai trò của đại học bây giờ cực kỳ quan trọng. Nhưng cuối cùng, người giỏi mình có vẫn không đủ”, ông Nguyễn Quốc Hùng là người đồng sáng lập công ty LogiGear, bình luận.
Có thể bạn quan tâm:
Xem thêm việc làm Developers trên TopDev
JavaScript đã đủ tốt và bạn có thể tự hỏi: Liệu tôi có thực sự cần học TypeScript? Về mặt kỹ thuật, bạn không cần học TypeScript để trở thành một lập trình viên giỏi, hầu hết mọi người đều ổn mà không có nó. Tuy nhiên, làm việc với TypeScript có một số lợi thế sau:
Lợi ích cuối cùng, thực sự là lý do quan trọng nhất với nhiều người để tìm hiểu TypeScript. Angular 2 là một trong những framework khá hot ngay lúc này và mặc dù các lập trình viên có thể sử dụng JavaScript, nhưng phần lớn các bài hướng dẫn và ví dụ được viết bằng TypeScript. Khi cộng đồng của Angular 2 được mở rộng, tự nhiên sẽ ngày càng có nhiều người sử dụng TypeScipt.
Mức độ phổ biến của TypeScript tăng lên trong thời gian gần đây, dữ liệu từ Google Trends
Nếu bạn chưa nắm rõ khái niệm TypeScript, đọc ngay bài viết: TypeScript là gì? Ưu nhược điểm của TS so với JS.
Dưới đây là các kiến thức TypeScript cơ bản mà các lập trình viên nên biết khi mới bắt đầu học lập trình TypeScript.
TypeScript là một dự án mã nguồn mở nhưng được phát triển và duy trì bởi Microsoft và vì vậy nó được hỗ trợ sẵn trong nền tảng Visual Studio của Microsoft.
Hiện nay, rất nhiều text editor và IDE hỗ trợ sẵn hoặc thông qua các plugin để hỗ trợ cú pháp của TypeScript, auto-complete suggestions, bắt lỗi và thậm chí tích hợp sẵn trình biên dịch.
Một tính năng rất đặc biệt của TypeScript là hỗ trợ static typing. Điều này có nghĩa là bạn có thể khai báo kiểu cho biến, và trình biên dịch sẽ đảm bảo rằng chúng không bị gán sai kiểu của các giá trị. Nếu khai báo kiểu bị bỏ qua, chúng sẽ được tự động phát hiện từ code của bạn.
Đây là một ví dụ. Mọi biến, tham số của hàm hoặc giá trị trả lại có thể có các kiểu được định nghĩa khi khởi tạo:
var burger: string = 'hamburger', // String calories: number = 300, // Numeric tasty: boolean = true; // Boolean // Alternatively, you can omit the type declaration: // var burger = 'hamburger'; // The function expects a string and an integer. // It doesn't return anything so the type of the function itself is void. function speak(food: string, energy: number): void { console.log("Our " + food + " has " + energy + " calories."); } speak(burger, calories);
Khi TypeScript được biên dịch thành JavaScript, toàn bộ khai báo kiểu sẽ bị xóa:
// JavaScript code from the above TS example. var burger = 'hamburger', calories = 300, tasty = true; function speak(food, energy) { console.log("Our " + food + " has " + energy + " calories."); } speak(burger, calories);
Nếu chúng ta thử làm một điều gì đó không hợp lệ, khi biên dịch tsc sẽ báo lỗi. Ví dụ:
// The given type is boolean, the provided value is a string. var tasty: boolean = "I haven't tried it yet";
main.ts(1,5): error TS2322: Type 'string' is not assignable to type 'boolean'.
Nó cũng cảnh báo khi chúng ta truyền sai tham số tới một hàm:
function speak(food: string, energy: number): void{ console.log("Our " + food + " has " + energy + " calories."); } // Arguments don't match the function parameters. speak("tripple cheesburger", "a ton of");
main.ts(5,30): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
Đây là một vài kiểu dữ liệu được sử dụng phổ biến nhất:
Để xem danh sách tất cả các kiểu biến, đọc tài liệu hướng dẫn của TypeScript tại đây:
Interfaces được sử dụng để kiểm tra, xem một đối tượng có phù hợp với một cấu trúc nhất định hay không. Bằng cách định nghĩa một interface, chúng ta có thể đặt tên một sự kết hợp đặc biệt của các biến, đảm bảo rằng chúng luôn luôn đi cùng nhau.
Khi chuyển thành JavaScript, interface biến mất – mục đích duy nhất của chúng là trợ giúp trong giai đoạn giai đoạn phát triển.
Trong ví dụ dưới đây chúng ta định nghĩa một interface đơn giản để kiểm tra kiểu các tham số của một hàm:
// Here we define our Food interface, its properties, and their types. interface Food { name: string; calories: number; } // We tell our function to expect an object that fulfills the Food interface. // This way we know that the properties we need will always be available. function speak(food: Food): void{ console.log("Our " + food.name + " has " + food.calories + " calories."); } // We define an object that has all of the properties the Food interface expects. // Notice that types will be inferred automatically. var ice_cream = { name: "ice cream", calories: 200 } speak(ice_cream);
Thứ tự các thuộc tính không quan trọng. Chúng ta chỉ cần đủ số lượng các thuộc tính và đúng kiểu. Nếu một thuộc tính nào đó bị thiếu, hoặc sai kiểu, hoặc sai tên, trình biên dịch sẽ cảnh báo chúng ta.
interface Food { name: string; calories: number; } function speak(food: Food): void{ console.log("Our " + food.name + " has " + food.calories + " grams."); } // We've made a deliberate mistake and name is misspelled as nmae. var ice_cream = { nmae: "ice cream", calories: 200 } speak(ice_cream);
main.ts(16,7): error TS2345: Argument of type '{ nmae: string; calories: number; } is not assignable to parameter of type 'Food'. Property 'name' is missing in type '{ nmae: string; calories: number; }'.
Hướng dẫn này chỉ là bắt đầu, chúng ta sẽ không đi vào chi tiết. Tuy nhiên, còn nhiều thứ so với những gì mà chúng tôi đã đề cập, vì thế chúng tôi khuyến khích đọc thêm tài liệu của TypeScript ở đây.
Khi xây dựng các ứng dụng lớn, phong cách lập trình hướng đối tượng được ưa thích bởi rất nhiều lập trình viên, đặc biệt là trong các ngôn ngữ như Java hoặc C#.
TypeScript cung một hệ thống class rất giống các ngôn ngữ này, bao gồm kế thừa, abstract classes, interface implementations, setter/getters, …
Cũng phải đề cập là từ phiên bản ECMAScript 2015, classes là một tính năng có sẵn trong JS và có thể không cần sử dụng TypeScript. Hai phiên bản khá giống nhau, nhưng chúng vẫn có điểm khác biệt, đó là TypeScript nghiêm ngặt hơn.
Đây là một ví dụ đơn giản về TypeScript:
class Menu { // Our properties: // By default they are public, but can also be private or protected. items: Array<string>; // The items in the menu, an array of strings. pages: number; // How many pages will the menu be, a number. // A straightforward constructor. constructor(item_list: Array<string>, total_pages: number) { // The this keyword is mandatory. this.items = item_list; this.pages = total_pages; } // Methods list(): void { console.log("Our menu for today:"); for(var i=0; i<this.items.length; i++) { console.log(this.items[i]); } } } // Create a new instance of the Menu class. var sundayMenu = new Menu(["pancakes","waffles","orange juice"], 1); // Call the list method. sundayMenu.list();
Bất kỳ ai đã biết một chút về Java hoặc C# sẽ thấy cú pháp này khá quen thuộc. Tương tự cho kế thừa:
class HappyMeal extends Menu { // Properties are inherited // A new constructor has to be defined. constructor(item_list: Array<string>, total_pages: number) { // In this case we want the exact same constructor as the parent class (Menu), // To automatically copy it we can call super() - a reference to the parent's constructor. super(item_list, total_pages); } // Just like the properties, methods are inherited from the parent. // However, we want to override the list() function so we redefine it. list(): void{ console.log("Our special menu for children:"); for(var i=0; i<this.items.length; i++) { console.log(this.items[i]); } } } // Create a new instance of the HappyMeal class. var menu_for_children = new HappyMeal(["candy","drink","toy"], 1); // This time the log message will begin with the special introduction. menu_for_children.list();
Để tìm hiểu sâu hơn về classes trong TS bạn có thể đọc ở đây.
Generics là các mẫu cho phép cùng một hàm có thể chấp nhận các tham số với nhiều kiểu khác nhau. Việc tạo ra các thành phần có thể tái sử dụng với generics tốt hơn sử dụng kiểu any, vì generics bảo tồn kiểu của các biến vào và ra của chúng.
Ví dụ dưới đây nhận một tham số và trả lại một mảng chứa cùng tham số
// The <T> after the function name symbolizes that it's a generic function. // When we call the function, every instance of T will be replaced with the actual provided type. // Receives one argument of type T, // Returns an array of type T. function genericFunc<T>(argument: T): T[] { var arrayOfT: T[] = []; // Create empty array of type T. arrayOfT.push(argument); // Push, now arrayOfT = [argument]. return arrayOfT; } var arrayFromString = genericFunc<string>("beep"); console.log(arrayFromString[0]); // "beep" console.log(typeof arrayFromString[0]) // String var arrayFromNumber = genericFunc(42); console.log(arrayFromNumber[0]); // 42 console.log(typeof arrayFromNumber[0]) // number
Lần đầu tiên gọi hàm chúng ta thiết lập kiểu thành string. Điều này không bắt buộc vì trình biên dịch có thể xem tham số được truyền và tự động quyết định kiểu nào phù hợp nhất, giống như lần gọi hàm thứ 2.
Mặc dù không bắt buộc, luôn luôn cung cấp kiểu được coi là cần thiết vì trình biên dịch có thể đoán sai kiểu trong các kịch bản phức tạp.
Tài liệu hướng dẫn của TypeScript bao gồm một vài ví dụ cao cấp bao gồm generics classes, kết hợp chúng với interfaces, …Bạn có thể tìm thấy chúng ở đây.
Một khái niệm quan trọng, khi làm việc trên một ứng dụng lớn là tính module hóa. Chia code thành nhiều thành phần nhỏ có khả năng tái sử dụng giúp dự án của bạn dễ tổ chức và dễ hiểu, khi so sánh với một file duy nhất có 10000 dòng code.
TypeScript giới thiệu một cú pháp để exporting và importing các module, nhưng không thể xử lý thực sự việc liên kết giữa các file. Để cho phép modules TS dựa trên các thư viện của bên thứ ba: require.js cho các ứng dụng client và CommonJS cho Node.js. Hãy xem một ví dụ đơn giản với require.js:
Chúng ta có 2 file. Một file export một hàm, file còn lại import và gọi nó.
exporter.ts
var sayHi = function(): void { console.log("Hello!"); } export = sayHi;
importer.ts
import sayHi = require('./exporter'); sayHi();
Bây giờ chúng ta cần download require.js và thêm nó trong một thẻ script – xem hướng dẫn ở đây. Bước cuối cùng là biên dịch 2 file .ts. Mộ tham số mở rộng cần được thêm vào để nói với TypeScript chúng ta đang xây dựng các module cho require.js (còn được gọi là AMD):
tsc --module amd *.ts
Modules khá phức tạp và nằm ngoài phạm vi của bài hướng dẫn này. Nếu bạn muốn đọc thêm về chúng, hãy xem trong tài liệu hướng dẫn của TS ở đây.
Trong Javascript, các function được xem như là Object, điều này có nghĩa là bạn có thể thao tác với chúng giống như khi làm việc với Object. Ví dụ, bạn có thể gán một function vào một biến, truyền function vào một function khác, hoặc một function có thể trả về một function khác.
TypeScript đã mô hình hóa tất cả những điều này bằng hệ thống kiểu mà tôi đã trình bày trong phần trước của bài viết.
Ví dụ về một function được định nghĩa trong TypeScript như sau:
function add(x: number, y: number): number {
return x + y;
}
let result: number = add(5, 10); // result sẽ bằng 15
Cũng có thể khai báo hàm kiểu mũi tên (arrow function):
const multiply = (x: number, y: number): number => x * y;
Khi sử dụng một thư viện được thiết kế cho JavaScript, chúng ta cần áp dụng một file khai báo để làm cho thư viện đó tương thích với TypeScript. Một file khai báo có phần mở rộng là .d.ts và chứa nhiều thông tin về thư viện và API của nó.
Các file khai báo của TypeScript thường được viết bằng tay, nhưng nhiều khả năng thư viện bạn cần đã có sẵn một file .d.ts do một ai đó tạo ra. Definitely Typed là repo (kho) lớn nhất, chứa các file khai báo cho hàng nghìn thư viện. Cũng có một module Node.js được sử dụng phổ biến để quản lý các file khai báo TypeScript là Typings.
Nếu bạn vẫn cần phải tự viết một file khai báo, hướng dẫn này sẽ giúp bạn bắt đầu.
TypeScript được viết trong các file .ts (hoặc .tsx cho JSX), nó không thể sử dụng trực tiếp trong trình duyệt và cần biên dịch thành JavaScript. Điều này có thể thực hiện với một số cách:
Đối với Newbie chúng nên bắt đầu từ cách dễ nhất:
Câu lệnh sau sẽ nhận một file TypeScipt là main.ts và chuyển nó thành JavaScipt main.js. Nếu main.js đã tồn tại nó sẽ bị ghi đè:
tsc main.ts
Trong cùng 1 thời điểm, chúng ta có thể biên dịch nhiều file bằng cách liệt kê chúng hoặc áp dụng các wildcard:
# Will result in separate .js files: main.js worker.js. tsc main.ts worker.ts # Compiles all .ts files in the current folder. Does NOT work recursively. tsc *.ts
Chúng ta cũng có thể sử dụng tùy chọn –watch để tự động biên dịch một file TypeScript khi có thay đổi:
# Initializes a watcher process that will keep main.js up to date. tsc main.ts --watch
Một file tsconfig.json chứa nhiều thiết lập đôi khi cũng được viết bởi các TypeScript giàu kinh nghiệm. Các file như thế rất tiện lợi khi làm việc trên các dự án lớn có nhiều file .ts, nó hỗ trợ tự động hóa một phần tiến trình.
Tài liệu tham khảo:
Lượng thông tin trong tài liệu hướng dẫn của TypeScript có thể quá tải khi mới bắt đầu, nhưng lợi ích về lâu dài là rất lớn. Hướng dẫn của chúng tôi được sử dụng như phần giới thiệu, tiếp tục theo dõi TopDev để học thêm về TypeScript mỗi ngày bạn nhé!
Techtalk via techmaster
Xem thêm tuyển dụng TypeScript hấp dẫn tại TopDev!